Added clear texture API. (#3836)

This commit is contained in:
Branimir Karadžić
2026-07-16 05:41:58 +00:00
committed by GitHub
parent 759bdeb936
commit 435627021d
28 changed files with 707 additions and 6 deletions
+51
View File
@@ -3722,6 +3722,31 @@ namespace bgfx
}
break;
case CommandBuffer::ClearTexture:
{
BGFX_PROFILER_SCOPE("ClearTexture", kColorResource);
TextureHandle handle;
_cmdbuf.read(handle);
uint8_t mip;
_cmdbuf.read(mip);
uint8_t numMips;
_cmdbuf.read(numMips);
uint16_t layer;
_cmdbuf.read(layer);
uint16_t numLayers;
_cmdbuf.read(numLayers);
flushTextureUpdateBatch(_cmdbuf);
m_renderCtx->clearTexture(handle, mip, numMips, layer, numLayers);
}
break;
case CommandBuffer::ReadTexture:
{
BGFX_PROFILER_SCOPE("ReadTexture", kColorResource);
@@ -5838,6 +5863,32 @@ namespace bgfx
return s_ctx->readTexture(_handle, _data, _layer, _mip);
}
void clear(TextureHandle _handle, uint8_t _mip, uint8_t _numMips, uint16_t _layer, uint16_t _numLayers)
{
BGFX_CHECK_HANDLE("clearTexture", s_ctx->m_textureHandle, _handle);
const TextureRef& ref = s_ctx->m_textureRef[_handle.idx];
BX_ASSERT(!ref.isDepth()
, "Texture (handle %d, '%S') has a depth/stencil format and can't be cleared; use a view depth clear instead."
, _handle.idx
, &ref.m_name
);
BX_ASSERT(!bimg::isCompressed(bimg::TextureFormat::Enum(ref.m_format) )
, "Texture (handle %d, '%S', %s) is compressed and can't be cleared."
, _handle.idx
, &ref.m_name
, bimg::getName(bimg::TextureFormat::Enum(ref.m_format) )
);
BX_ASSERT( (ref.m_flags & BGFX_TEXTURE_RT_MSAA_MASK) <= BGFX_TEXTURE_RT
, "Texture (handle %d, '%S') is multisampled and can't be cleared; use a view clear instead."
, _handle.idx
, &ref.m_name
);
s_ctx->clearTexture(_handle, _mip, _numMips, _layer, _numLayers);
}
FrameBufferHandle createFrameBuffer(uint16_t _width, uint16_t _height, TextureFormat::Enum _format, uint64_t _textureFlags)
{
_textureFlags |= _textureFlags&BGFX_TEXTURE_RT_MSAA_MASK ? 0 : BGFX_TEXTURE_RT;