diff --git a/src/rhi/gl3_core/gl3_core_rhi.cpp b/src/rhi/gl3_core/gl3_core_rhi.cpp index 151c7ff59..7fd4daa7d 100644 --- a/src/rhi/gl3_core/gl3_core_rhi.cpp +++ b/src/rhi/gl3_core/gl3_core_rhi.cpp @@ -844,6 +844,7 @@ rhi::Handle GlCoreRhi::create_renderbuffer(const rhi::Renderb GlCoreRenderbuffer rb; rb.renderbuffer = name; + rb.desc = desc; return renderbuffer_slab_.insert(std::move(rb)); } @@ -1735,6 +1736,33 @@ void GlCoreRhi::read_pixels(Handle ctx, const Rect& rect, Pixel gl_->ReadPixels(rect.x, rect.y, rect.w, rect.h, layout, type, out.data()); } +TextureDetails GlCoreRhi::get_texture_details(Handle texture) +{ + SRB2_ASSERT(texture_slab_.is_valid(texture)); + auto& t = texture_slab_[texture]; + + TextureDetails ret {}; + ret.format = t.desc.format; + ret.width = t.desc.width; + ret.height = t.desc.height; + + return ret; +} + +Rect GlCoreRhi::get_renderbuffer_size(Handle renderbuffer) +{ + SRB2_ASSERT(renderbuffer_slab_.is_valid(renderbuffer)); + auto& rb = renderbuffer_slab_[renderbuffer]; + + Rect ret {}; + ret.x = 0; + ret.y = 0; + ret.w = rb.desc.width; + ret.h = rb.desc.height; + + return ret; +} + void GlCoreRhi::finish() { SRB2_ASSERT(graphics_context_active_ == false); diff --git a/src/rhi/gl3_core/gl3_core_rhi.hpp b/src/rhi/gl3_core/gl3_core_rhi.hpp index b431c3771..db39a324c 100644 --- a/src/rhi/gl3_core/gl3_core_rhi.hpp +++ b/src/rhi/gl3_core/gl3_core_rhi.hpp @@ -94,6 +94,7 @@ struct GlCoreRenderPass : public rhi::RenderPass struct GlCoreRenderbuffer : public rhi::Renderbuffer { uint32_t renderbuffer; + rhi::RenderbufferDesc desc; }; struct GlCoreUniformSet : public rhi::UniformSet @@ -181,6 +182,9 @@ public: virtual Handle create_renderbuffer(const RenderbufferDesc& desc) override; virtual void destroy_renderbuffer(Handle handle) override; + virtual TextureDetails get_texture_details(Handle texture) override; + virtual Rect get_renderbuffer_size(Handle renderbuffer) override; + virtual Handle begin_transfer() override; virtual void end_transfer(Handle handle) override; diff --git a/src/rhi/rhi.hpp b/src/rhi/rhi.hpp index 7933f6065..3fb405119 100644 --- a/src/rhi/rhi.hpp +++ b/src/rhi/rhi.hpp @@ -559,6 +559,13 @@ struct GraphicsContext { }; +struct TextureDetails +{ + uint32_t width; + uint32_t height; + TextureFormat format; +}; + /// @brief The unpack alignment of a row span when uploading pixels to the device. constexpr const std::size_t kPixelRowUnpackAlignment = 4; @@ -579,6 +586,9 @@ struct Rhi virtual Handle create_renderbuffer(const RenderbufferDesc& desc) = 0; virtual void destroy_renderbuffer(Handle handle) = 0; + virtual TextureDetails get_texture_details(Handle texture) = 0; + virtual Rect get_renderbuffer_size(Handle renderbuffer) = 0; + virtual Handle begin_transfer() = 0; virtual void end_transfer(Handle handle) = 0;