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;
rb.renderbuffer = name;
rb.desc = desc;
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());
}
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()
{
SRB2_ASSERT(graphics_context_active_ == false);

View file

@ -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<Renderbuffer> create_renderbuffer(const RenderbufferDesc& desc) 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 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.
constexpr const std::size_t kPixelRowUnpackAlignment = 4;
@ -579,6 +586,9 @@ struct Rhi
virtual Handle<Renderbuffer> create_renderbuffer(const RenderbufferDesc& desc) = 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 void end_transfer(Handle<TransferContext> handle) = 0;