From a7f8fa594a8bb43fbc0e773e9bed431ae638243a Mon Sep 17 00:00:00 2001 From: Harrand Date: Sat, 29 Oct 2022 18:38:26 +0100 Subject: [PATCH] + Added new overload RendererInfoType::ref_resource(RendererHandle, ResourceHandle) --- src/tz/gl/api/renderer.hpp | 16 +++++++++------- src/tz/gl/impl/frontend/common/renderer.cpp | 6 ++++++ src/tz/gl/impl/frontend/common/renderer.hpp | 1 + test/gl/tz_renderer_test.cpp | 4 ++-- 4 files changed, 18 insertions(+), 9 deletions(-) diff --git a/src/tz/gl/api/renderer.hpp b/src/tz/gl/api/renderer.hpp index 9f8ed2cba2..b71c4fc788 100644 --- a/src/tz/gl/api/renderer.hpp +++ b/src/tz/gl/api/renderer.hpp @@ -18,6 +18,13 @@ namespace tz::gl { struct RendererTag{}; } + + /** + * @ingroup tz_gl2_renderer + * Represents a handle for a renderer owned by an existing device. + */ + using RendererHandle = tz::Handle; + /** * @ingroup tz_gl2_renderer * Specifies options to enable extra functionality within Renderers. @@ -48,7 +55,7 @@ namespace tz::gl using RendererOptions = tz::EnumField; template - concept RendererInfoType = requires(T t, ResourceHandle r, const IResource& resource, IComponent* component, IOutput& output, RendererOptions options, tz::Vec4 vec4, tz::Vec3ui vec3ui, std::string str) + concept RendererInfoType = requires(T t, RendererHandle ren, ResourceHandle r, const IResource& resource, IComponent* component, IOutput& output, RendererOptions options, tz::Vec4 vec4, tz::Vec3ui vec3ui, std::string str) { {t.resource_count()} -> std::convertible_to; {t.get_resource(r)} -> std::convertible_to; @@ -56,6 +63,7 @@ namespace tz::gl {t.add_resource(resource)} -> std::same_as; {t.ref_resource(component)} -> std::same_as; + {t.ref_resource(ren, r)} -> std::same_as; {t.set_output(output)} -> std::same_as; {t.get_output()} -> std::convertible_to; @@ -140,12 +148,6 @@ namespace tz::gl */ using RendererEditRequest = std::vector; - /** - * @ingroup tz_gl2_renderer - * Represents a handle for a renderer owned by an existing device. - */ - using RendererHandle = tz::Handle; - /** * @ingroup tz_gl2_renderer * Named requirement for a Renderer. diff --git a/src/tz/gl/impl/frontend/common/renderer.cpp b/src/tz/gl/impl/frontend/common/renderer.cpp index 41c5204ea9..fc6550abf3 100644 --- a/src/tz/gl/impl/frontend/common/renderer.cpp +++ b/src/tz/gl/impl/frontend/common/renderer.cpp @@ -1,4 +1,5 @@ #include "tz/gl/impl/frontend/common/renderer.hpp" +#include "tz/gl/device.hpp" namespace tz::gl { @@ -93,6 +94,11 @@ namespace tz::gl return static_cast(this->real_resource_count() - 1); } + ResourceHandle RendererInfoCommon::ref_resource(RendererHandle ren, ResourceHandle res) + { + return this->ref_resource(tz::gl::device().get_renderer(ren).get_component(res)); + } + void RendererInfoCommon::set_output(const IOutput& output) { this->output = output.unique_clone(); diff --git a/src/tz/gl/impl/frontend/common/renderer.hpp b/src/tz/gl/impl/frontend/common/renderer.hpp index b4343056ec..eb53006cf5 100644 --- a/src/tz/gl/impl/frontend/common/renderer.hpp +++ b/src/tz/gl/impl/frontend/common/renderer.hpp @@ -84,6 +84,7 @@ namespace tz::gl */ ResourceHandle add_resource(const IResource& resource); ResourceHandle ref_resource(IComponent* component); + ResourceHandle ref_resource(RendererHandle ren, ResourceHandle res); /** * Renderers always render into something. By default, it renders to the window (only one window is supported so no confusion there). You can however set it to render into something else, such as a @ref TextureOutput if you want to render into the resource of another Renderer. */ diff --git a/test/gl/tz_renderer_test.cpp b/test/gl/tz_renderer_test.cpp index 26d7d1a02d..f21a490c69 100644 --- a/test/gl/tz_renderer_test.cpp +++ b/test/gl/tz_renderer_test.cpp @@ -62,7 +62,7 @@ TESTFUNC_BEGIN(renderer_resource_reference_buffer) tz::gl::RendererInfo rinfo2; rinfo2.shader().set_shader(tz::gl::ShaderStage::Vertex, ImportedShaderSource(empty, vertex)); rinfo2.shader().set_shader(tz::gl::ShaderStage::Fragment, ImportedShaderSource(empty, fragment)); - tz::gl::ResourceHandle r2bh = rinfo2.ref_resource(tz::gl::device().get_renderer(r1h).get_component(r1bh)); + tz::gl::ResourceHandle r2bh = rinfo2.ref_resource(r1h, r1bh); tz::gl::RendererHandle r2h = tz::gl::device().create_renderer(rinfo2); @@ -104,7 +104,7 @@ TESTFUNC_BEGIN(renderer_resource_reference_image) tz::gl::RendererInfo rinfo2; rinfo2.shader().set_shader(tz::gl::ShaderStage::Vertex, ImportedShaderSource(empty, vertex)); rinfo2.shader().set_shader(tz::gl::ShaderStage::Fragment, ImportedShaderSource(empty, fragment)); - tz::gl::ResourceHandle r2ih = rinfo2.ref_resource(tz::gl::device().get_renderer(r1h).get_component(r1ih)); + tz::gl::ResourceHandle r2ih = rinfo2.ref_resource(r1h, r1ih); tz::gl::RendererHandle r2h = tz::gl::device().create_renderer(rinfo2);