Added _layer parameter to bgfx::readTexture for texture array/cubemap readback. Closes #3235. (#3737)

This commit is contained in:
Branimir Karadžić
2026-06-07 09:22:37 -07:00
committed by GitHub
parent 944ccff1e4
commit e92490c3f7
21 changed files with 155 additions and 64 deletions

View File

@@ -3681,10 +3681,11 @@ public static class bgfx
///
/// <param name="_handle">Texture handle.</param>
/// <param name="_data">Destination buffer.</param>
/// <param name="_layer">Texture layer.</param>
/// <param name="_mip">Mip level.</param>
///
[LinkName("bgfx_read_texture")]
public static extern uint32 read_texture(TextureHandle _handle, void* _data, uint8 _mip);
public static extern uint32 read_texture(TextureHandle _handle, void* _data, uint16 _layer, uint8 _mip);
/// <summary>
/// Set texture debug name.

View File

@@ -2601,8 +2601,9 @@ extern fn void update_texture_cube(TextureHandle _handle, ushort _layer, char _s
//
// _handle : `Texture handle.`
// _data : `Destination buffer.`
// _layer : `Texture layer.`
// _mip : `Mip level.`
extern fn uint read_texture(TextureHandle _handle, void* _data, char _mip) @cname("bgfx_read_texture");
extern fn uint read_texture(TextureHandle _handle, void* _data, ushort _layer, char _mip) @cname("bgfx_read_texture");
// Set texture debug name.
// _handle : `Texture handle.`
@@ -3146,7 +3147,7 @@ extern fn void encoder_set_texture(Encoder* _this, char _stage, UniformHandle _s
// _firstMip : `First (most detailed) mip level.`
// _numMips : `Number of mip levels.`
// _flags : `Texture sampling mode. Default value UINT32_MAX uses texture sampling settings from the texture. - `BGFX_SAMPLER_[U/V/W]_[MIRROR/CLAMP]` - Mirror or clamp to edge wrap mode. - `BGFX_SAMPLER_[MIN/MAG/MIP]_[POINT/ANISOTROPIC]` - Point or anisotropic sampling.`
extern fn void encoder_set_texture_view(Encoder* _this, char _stage, UniformHandle _sampler, TextureHandle _handle, ushort _firstLayer, ushort _numLayers, char _firstMip, char _numMips, uint _flags) @extern("bgfx_encoder_set_texture_view");
extern fn void encoder_set_texture_view(Encoder* _this, char _stage, UniformHandle _sampler, TextureHandle _handle, ushort _firstLayer, ushort _numLayers, char _firstMip, char _numMips, uint _flags) @cname("bgfx_encoder_set_texture_view");
// Submit an empty primitive for rendering. Uniforms and draw state
// will be applied but no geometry will be submitted. Useful in cases
@@ -3575,7 +3576,7 @@ extern fn void set_texture(char _stage, UniformHandle _sampler, TextureHandle _h
// _firstMip : `First (most detailed) mip level.`
// _numMips : `Number of mip levels.`
// _flags : `Texture sampling mode. Default value UINT32_MAX uses texture sampling settings from the texture. - `BGFX_SAMPLER_[U/V/W]_[MIRROR/CLAMP]` - Mirror or clamp to edge wrap mode. - `BGFX_SAMPLER_[MIN/MAG/MIP]_[POINT/ANISOTROPIC]` - Point or anisotropic sampling.`
extern fn void set_texture_view(char _stage, UniformHandle _sampler, TextureHandle _handle, ushort _firstLayer, ushort _numLayers, char _firstMip, char _numMips, uint _flags) @extern("bgfx_set_texture_view");
extern fn void set_texture_view(char _stage, UniformHandle _sampler, TextureHandle _handle, ushort _firstLayer, ushort _numLayers, char _firstMip, char _numMips, uint _flags) @cname("bgfx_set_texture_view");
// Submit an empty primitive for rendering. Uniforms and draw state
// will be applied but no geometry will be submitted.

View File

@@ -3634,10 +3634,11 @@ public static partial class bgfx
///
/// <param name="_handle">Texture handle.</param>
/// <param name="_data">Destination buffer.</param>
/// <param name="_layer">Texture layer.</param>
/// <param name="_mip">Mip level.</param>
///
[DllImport(DllName, EntryPoint="bgfx_read_texture", CallingConvention = CallingConvention.Cdecl)]
public static extern unsafe uint read_texture(TextureHandle _handle, void* _data, byte _mip);
public static extern unsafe uint read_texture(TextureHandle _handle, void* _data, ushort _layer, byte _mip);
/// <summary>
/// Set texture debug name.

View File

@@ -9,7 +9,7 @@ import bindbc.common.types: c_int64, c_uint64, va_list;
import bindbc.bgfx.config;
static import bgfx.impl;
enum uint apiVersion = 144;
enum uint apiVersion = 145;
alias ViewID = ushort;
@@ -2832,9 +2832,10 @@ mixin(joinFnBinds((){
Params:
handle = Texture handle.
data = Destination buffer.
layer = Texture layer.
mip = Mip level.
*/
{q{uint}, q{readTexture}, q{TextureHandle handle, void* data, ubyte mip=0}, ext: `C++, "bgfx"`},
{q{uint}, q{readTexture}, q{TextureHandle handle, void* data, ushort layer=0, ubyte mip=0}, ext: `C++, "bgfx"`},
/**
* Set texture debug name.

View File

@@ -2901,11 +2901,12 @@ extern fn bgfx_update_texture_cube(_handle: TextureHandle, _layer: u16, _side: u
///
/// <param name="_handle">Texture handle.</param>
/// <param name="_data">Destination buffer.</param>
/// <param name="_layer">Texture layer.</param>
/// <param name="_mip">Mip level.</param>
pub inline fn readTexture(_handle: TextureHandle, _data: ?*anyopaque, _mip: u8) u32 {
return bgfx_read_texture(_handle, _data, _mip);
pub inline fn readTexture(_handle: TextureHandle, _data: ?*anyopaque, _layer: u16, _mip: u8) u32 {
return bgfx_read_texture(_handle, _data, _layer, _mip);
}
extern fn bgfx_read_texture(_handle: TextureHandle, _data: ?*anyopaque, _mip: u8) u32;
extern fn bgfx_read_texture(_handle: TextureHandle, _data: ?*anyopaque, _layer: u16, _mip: u8) u32;
/// Set texture debug name.
/// <param name="_handle">Texture handle.</param>