rhi: Add get_texture_details, get_renderbuffer_size

This commit is contained in:
Eidolon 2023-04-01 15:19:08 -05:00
parent c193930b4e
commit 171a285caa
3 changed files with 42 additions and 0 deletions

View file

@ -844,6 +844,7 @@ rhi::Handle<rhi::Renderbuffer> GlCoreRhi::create_renderbuffer(const rhi::Renderb
GlCoreRenderbuffer rb; GlCoreRenderbuffer rb;
rb.renderbuffer = name; rb.renderbuffer = name;
rb.desc = desc;
return renderbuffer_slab_.insert(std::move(rb)); return renderbuffer_slab_.insert(std::move(rb));
} }
@ -1735,6 +1736,33 @@ void GlCoreRhi::read_pixels(Handle<GraphicsContext> ctx, const Rect& rect, Pixel
gl_->ReadPixels(rect.x, rect.y, rect.w, rect.h, layout, type, out.data()); gl_->ReadPixels(rect.x, rect.y, rect.w, rect.h, layout, type, out.data());
} }
TextureDetails GlCoreRhi::get_texture_details(Handle<Texture> 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> 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() void GlCoreRhi::finish()
{ {
SRB2_ASSERT(graphics_context_active_ == false); SRB2_ASSERT(graphics_context_active_ == false);

View file

@ -94,6 +94,7 @@ struct GlCoreRenderPass : public rhi::RenderPass
struct GlCoreRenderbuffer : public rhi::Renderbuffer struct GlCoreRenderbuffer : public rhi::Renderbuffer
{ {
uint32_t renderbuffer; uint32_t renderbuffer;
rhi::RenderbufferDesc desc;
}; };
struct GlCoreUniformSet : public rhi::UniformSet struct GlCoreUniformSet : public rhi::UniformSet
@ -181,6 +182,9 @@ public:
virtual Handle<Renderbuffer> create_renderbuffer(const RenderbufferDesc& desc) override; virtual Handle<Renderbuffer> create_renderbuffer(const RenderbufferDesc& desc) override;
virtual void destroy_renderbuffer(Handle<Renderbuffer> handle) override; virtual void destroy_renderbuffer(Handle<Renderbuffer> handle) override;
virtual TextureDetails get_texture_details(Handle<Texture> texture) override;
virtual Rect get_renderbuffer_size(Handle<Renderbuffer> renderbuffer) override;
virtual Handle<TransferContext> begin_transfer() override; virtual Handle<TransferContext> begin_transfer() override;
virtual void end_transfer(Handle<TransferContext> handle) override; virtual void end_transfer(Handle<TransferContext> handle) override;

View file

@ -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. /// @brief The unpack alignment of a row span when uploading pixels to the device.
constexpr const std::size_t kPixelRowUnpackAlignment = 4; constexpr const std::size_t kPixelRowUnpackAlignment = 4;
@ -579,6 +586,9 @@ struct Rhi
virtual Handle<Renderbuffer> create_renderbuffer(const RenderbufferDesc& desc) = 0; virtual Handle<Renderbuffer> create_renderbuffer(const RenderbufferDesc& desc) = 0;
virtual void destroy_renderbuffer(Handle<Renderbuffer> handle) = 0; virtual void destroy_renderbuffer(Handle<Renderbuffer> handle) = 0;
virtual TextureDetails get_texture_details(Handle<Texture> texture) = 0;
virtual Rect get_renderbuffer_size(Handle<Renderbuffer> renderbuffer) = 0;
virtual Handle<TransferContext> begin_transfer() = 0; virtual Handle<TransferContext> begin_transfer() = 0;
virtual void end_transfer(Handle<TransferContext> handle) = 0; virtual void end_transfer(Handle<TransferContext> handle) = 0;