14auto get_loggers() -> std::map<std::string, std::function<void(
const std::string&,
const char*, uint16_t)>>&
16 static std::map<std::string, std::function<void(
const std::string&,
const char*, uint16_t)>> loggers;
33 constexpr std::uint16_t dim = 4;
34 std::array<std::uint8_t, dim * dim * 4>
pixels{};
35 for(std::size_t i = 0;
i < dim * dim; ++
i)
43 return create_texture_2d(dim, dim,
false, 1, texture_format::RGBA8, BGFX_TEXTURE_NONE | BGFX_SAMPLER_NONE, mem);
48void set_trace_logger(
const std::function<
void(
const std::string&,
const char*, uint16_t)>& logger)
50 get_loggers()[
"trace"] = logger;
53void set_debug_logger(
const std::function<
void(
const std::string&,
const char*, uint16_t)>& logger)
55 get_loggers()[
"debug"] = logger;
58void set_info_logger(
const std::function<
void(
const std::string&,
const char*, uint16_t)>& logger)
60 get_loggers()[
"info"] = logger;
62void set_warning_logger(
const std::function<
void(
const std::string&,
const char*, uint16_t)>& logger)
64 get_loggers()[
"warning"] = logger;
66void set_error_logger(
const std::function<
void(
const std::string&,
const char*, uint16_t)>& logger)
68 get_loggers()[
"error"] = logger;
71void log(
const std::string& category,
const std::string& log_msg,
const char* _filePath, uint16_t _line)
73 if(get_loggers()[category])
75 get_loggers()[category](log_msg, _filePath, _line);
81struct profiler_hook_state
88auto profiler_hooks() -> profiler_hook_state&
90 static profiler_hook_state
s{};
100 void traceVargs(
const char* _filePath, uint16_t _line,
const char* _format, va_list _argList)
final
104 int32_t len = vsnprintf(out,
sizeof(temp), _format, _argList);
105 if((int32_t)
sizeof(temp) < len)
107 out = (
char*)alloca(len + 1);
108 len = vsnprintf(out, len, _format, _argList);
112 bx::StringView out_view(out, len);
114 if (bx::strCmp(out_view,
"WARN ") == 0)
116 log(
"warning", out_view.getPtr() + 5, _filePath, _line);
120 log(
"debug", out, _filePath, _line);
124 void profilerBegin(
const char* _name, uint32_t _abgr,
const char* _filePath, uint16_t _line)
final
126 if(
const auto& fn = profiler_hooks().
on_begin)
128 fn(_name, _abgr, _filePath, _line);
136 fn(_name, _abgr, _filePath, _line);
142 if(
const auto& fn = profiler_hooks().
on_end)
147 void fatal(
const char* _filePath, uint16_t _line, bgfx::Fatal::Enum _code,
const char* _str)
final
151 case bgfx::Fatal::InvalidShader:
153 std::string error_msg =
"[Invalid Shader] " + std::string(_str);
154 log(
"error", error_msg, _filePath, _line);
157 case bgfx::Fatal::UnableToInitialize:
159 std::string error_msg =
"[Unable To Initialize] " + std::string(_str);
160 log(
"error", error_msg, _filePath, _line);
163 case bgfx::Fatal::UnableToCreateTexture:
165 std::string error_msg =
"[Unable To Create Texture] " + std::string(_str);
166 log(
"error", error_msg, _filePath, _line);
169 case bgfx::Fatal::DeviceLost:
171 std::string error_msg =
"[Device Lost] " + std::string(_str);
172 log(
"error", error_msg, _filePath, _line);
175 case bgfx::Fatal::DebugCheck:
177 std::string error_msg =
"[Debug Check] " + std::string(_str);
178 log(
"error", error_msg, _filePath, _line);
183 log(
"error", _str, _filePath, _line);
205 const char* _filePath
209 , bgfx::TextureFormat::Enum _format
212 ,
bool _yflip)
override
214 const std::string full_path = std::string(_filePath) +
".png";
216 bx::FileWriter writer;
217 if (bx::open(&writer, full_path.c_str()))
221 bimg::imageWritePng(&writer,
226 static_cast<bimg::TextureFormat::Enum
>(_format),
260 auto& h = profiler_hooks();
263 h.on_end = std::move(
on_end);
268 auto& h = profiler_hooks();
270 h.on_begin_literal = {};
276 bgfx::setPlatformData(_data);
282 if(s_context.initted)
285 if(bgfx::isValid(s_context.fallback_texture))
288 s_context.fallback_texture = {bgfx::kInvalidHandle};
291 bgfx::destroy(s_context.u_world);
299 s_context.allocation_policy = policy;
304 return s_context.allocation_policy;
309 return s_context.fallback_texture;
314 if(init_data.callback ==
nullptr)
317 init_data.callback = &callback;
320 s_context.initted = bgfx::init(init_data);
328 log(
"info",
"GPU resource eviction enabled.", __FILE__, __LINE__);
331 log(
"info",
"GPU resource eviction disabled: backend does not need eviction.", __FILE__, __LINE__);
335 "GPU resource eviction disabled: backend does not report a GPU memory budget.",
340 log(
"warning",
"GPU resource eviction failed to initialize.", __FILE__, __LINE__);
343 if(s_context.initted)
345 s_context.fallback_texture = create_fallback_texture();
346 if(bgfx::isValid(s_context.fallback_texture))
348 set_name(s_context.fallback_texture,
"gfx-fallback");
351 return s_context.initted;
355 bool _inputNormalized,
361 bgfx::vertexPack(_input, _inputNormalized, _attr, _decl, _data, _index);
366 bgfx::vertexUnpack(_output, _attr, _decl, _data, _index);
372 const void* _srcData,
375 bgfx::vertexConvert(_destDecl, _destData, _srcDecl, _srcData, _num);
381 const void* _indices,
382 uint32_t _numIndices,
385 return bgfx::topologyConvert(_conversion, _dst, _dstSize, _indices, _numIndices, _index32);
393 const void* _vertices,
395 const void* _indices,
396 uint32_t _numIndices,
399 bgfx::topologySortTriList(_sort, _dst, _dstSize, _dir, _pos, _vertices, _stride, _indices, _numIndices, _index32);
404 return bgfx::createEmbeddedShader(_es, _type, _name);
409 return bgfx::getSupportedRenderers(_max, _enum);
414 return bgfx::getRendererName(_type);
417void reset(uint32_t _width, uint32_t _height, uint32_t _flags)
419 bgfx::reset(_width, _height, _flags);
424 return bgfx::begin();
434 s_context.frame = bgfx::frame(_flags);
437 return s_context.frame;
442 return bgfx::getRendererType();
447 return bgfx::getCaps();
452 return bgfx::getStats();
457 return bgfx::alloc(_size);
462 return bgfx::copy(_data, _size);
467 return bgfx::makeRef(_data, _size, _releaseFn, _userData);
472 bgfx::setDebug(_debug);
477 bgfx::dbgTextClear(_attr, _small);
482 bgfx::dbgTextPrintf(_x, _y, _attr, _format);
485void dbg_text_vprintf(uint16_t _x, uint16_t _y, uint8_t _attr,
const char* _format, va_list _argList)
487 bgfx::dbgTextPrintfVargs(_x, _y, _attr, _format, _argList);
490void dbg_text_image(uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height,
const void* _data, uint16_t _pitch)
492 bgfx::dbgTextImage(_x, _y, _width, _height, _data, _pitch);
497 return bgfx::createIndexBuffer(_mem, _flags);
502 bgfx::setName(_handle, _name, _len);
507 bgfx::destroy(_handle);
512 return bgfx::createVertexBuffer(_mem, _decl, _flags);
517 bgfx::destroy(_handle);
522 bgfx::setName(_handle, _name, _len);
527 return bgfx::createDynamicIndexBuffer(_num, _flags);
532 return bgfx::createDynamicIndexBuffer(_mem, _flags);
537 bgfx::update(_handle, _startIndex, _mem);
542 bgfx::destroy(_handle);
547 return bgfx::createDynamicVertexBuffer(_num, _decl, _flags);
554 return bgfx::createDynamicVertexBuffer(_mem, _decl, _flags);
559 bgfx::update(_handle, _startVertex, _mem);
564 bgfx::destroy(_handle);
569 return bgfx::getAvailTransientIndexBuffer(_num, _index32);
574 return bgfx::getAvailTransientVertexBuffer(_num, _decl);
579 return bgfx::getAvailInstanceDataBuffer(_num, _stride);
584 bgfx::allocTransientIndexBuffer(_tib, _num, _index32);
589 bgfx::allocTransientVertexBuffer(_tvb, _num, _decl);
594 uint32_t _numVertices,
596 uint32_t _numIndices)
598 return bgfx::allocTransientBuffers(_tvb, _decl, _numVertices, _tib, _numIndices);
603 bgfx::allocInstanceDataBuffer(_idb, _num, _stride);
608 return bgfx::createIndirectBuffer(_num);
613 bgfx::destroy(_handle);
618 return bgfx::createShader(_mem);
623 return bgfx::getShaderUniforms(_handle, _uniforms, _max);
628 bgfx::getUniformInfo(_handle, _info);
633 bgfx::setName(_handle, _name, _len);
638 bgfx::destroy(_handle);
643 return bgfx::createProgram(_vsh, _fsh, _destroyShaders);
648 return bgfx::createProgram(_csh, _destroyShaders);
653 bgfx::destroy(_handle);
658 return bgfx::isTextureValid(_depth, _cubeMap, _numLayers, _format, _flags);
670 bgfx::calcTextureSize(_info, _width, _height, _depth, _cubeMap, _hasMips, _numLayers, _format);
675 return bgfx::createTexture(_mem, _flags, _skip, _info);
686 return bgfx::createTexture2D(_width, _height, _hasMips, _numLayers, _format, _flags, _mem);
695 return bgfx::createTexture2D(_ratio, _hasMips, _numLayers, _format, _flags);
706 return bgfx::createTexture3D(_width, _height, _depth, _hasMips, _format, _flags, _mem);
716 return bgfx::createTextureCube(_size, _hasMips, _numLayers, _format, _flags, _mem);
729 bgfx::updateTexture2D(_handle, _layer, _mip, _x, _y, _width, _height, _mem, _pitch);
742 bgfx::updateTexture3D(_handle, _mip, _x, _y, _z, _width, _height, _depth, _mem);
756 bgfx::updateTextureCube(_handle, _layer, _side, _mip, _x, _y, _width, _height, _mem, _pitch);
761 return bgfx::readTexture(_handle, _data, _layer, _mip);
766 bgfx::setName(_handle, _name, _len);
771 bgfx::destroy(_handle);
777 uint64_t _textureFlags)
779 return bgfx::createFrameBuffer(_width, _height, _format, _textureFlags);
784 return bgfx::createFrameBuffer(_ratio, _format, _textureFlags);
789 return bgfx::createFrameBuffer(_num, _handles, _destroyTextures);
794 return bgfx::createFrameBuffer(_num, _attachment, _destroyTextures);
803 return bgfx::createFrameBuffer(_nwh, _width, _height, _format, _depthFormat);
808 return bgfx::getTexture(_handle, _attachment);
813 bgfx::setName(_handle, _name, _len);
818 bgfx::destroy(_handle);
823 return bgfx::createUniform(_name, _type, _num);
828 bgfx::destroy(_handle);
833 return bgfx::createOcclusionQuery();
838 return bgfx::getResult(_handle, _result);
843 bgfx::destroy(_handle);
848 bgfx::setPaletteColor(_index, _rgba);
853 bgfx::setPaletteColor(_index, _rgba);
858 bgfx::setPaletteColor(_index, _r, _g, _b, _a);
863 bgfx::setViewName(_id, _name);
868 bgfx::setViewRect(_id, _x, _y, _width, _height);
873 bgfx::setViewRect(_id, _x, _y, _ratio);
878 bgfx::setViewScissor(_id, _x, _y, _width, _height);
883 bgfx::setViewClear(_id, _flags, _rgba, _depth, _stencil);
899 bgfx::setViewClear(_id, _flags, _depth, _stencil, _0, _1, _2, _3, _4, _5, _6, _7);
904 bgfx::setViewMode(_id, _mode);
909 bgfx::setViewFrameBuffer(_id, _handle);
914 bgfx::setViewTransform(_id, _view, _proj);
919 bgfx::setViewOrder(_id, _num, _order);
924 bgfx::setViewShadingRate(_id, _shadingRate);
929 bgfx::resetView(_id);
934 bgfx::setMarker(_marker);
939 bgfx::setState(_state, _rgba);
944 bgfx::setCondition(_handle, _visible);
949 bgfx::setStencil(_fstencil, _bstencil);
952uint16_t
set_scissor(uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height)
954 return bgfx::setScissor(_x, _y, _width, _height);
959 bgfx::setScissor(_cache);
964 return bgfx::setTransform(_mtx, _num);
969 return bgfx::allocTransform(_transform, _num);
974 bgfx::setTransform(_cache, _num);
979 bgfx::setUniform(_handle, _value, _num);
984 bgfx::setViewUniform(_id, _handle, _value, _num);
989 bgfx::setFrameUniform(_handle, _value, _num);
994 bgfx::setIndexBuffer(_handle);
999 bgfx::setIndexBuffer(_handle, _firstIndex, _numIndices);
1004 bgfx::setIndexBuffer(_handle);
1009 bgfx::setIndexBuffer(_handle, _firstIndex, _numIndices);
1014 bgfx::setIndexBuffer(_tib);
1019 bgfx::setIndexBuffer(_tib, _firstIndex, _numIndices);
1024 bgfx::setVertexBuffer(_stream, _handle);
1029 bgfx::setVertexBuffer(_stream, _handle, _startVertex, _numVertices);
1034 bgfx::setVertexBuffer(_stream, _handle);
1039 uint32_t _startVertex,
1040 uint32_t _numVertices)
1042 bgfx::setVertexBuffer(_stream, _handle, _startVertex, _numVertices);
1047 bgfx::setVertexBuffer(_stream, _tvb);
1052 uint32_t _startVertex,
1053 uint32_t _numVertices)
1055 bgfx::setVertexBuffer(_stream, _tvb, _startVertex, _numVertices);
1060 bgfx::setVertexCount(_numVertices);
1065 bgfx::setInstanceDataBuffer(_idb, _start, _num);
1070 bgfx::setInstanceDataBuffer(_handle, _startVertex, _num);
1075 bgfx::setInstanceDataBuffer(_handle, _startVertex, _num);
1080 bgfx::setTexture(_stage, _sampler, _handle, _flags);
1090 bgfx::submit(_id, _handle, _depth, _preserveState ? BGFX_DISCARD_NONE : BGFX_DISCARD_ALL);
1097 bool _preserveState)
1099 bgfx::submit(_id, _program, _occlusionQuery, _depth, _preserveState ? BGFX_DISCARD_NONE : BGFX_DISCARD_ALL);
1108 bool _preserveState)
1110 bgfx::submit(_id, _handle, _indirectHandle, _start, _num, _depth, _preserveState ? BGFX_DISCARD_NONE : BGFX_DISCARD_ALL);
1115 bgfx::setImage(_stage, _handle, _mip, _access, _format);
1120 bgfx::setBuffer(_stage, _handle, _access);
1125 bgfx::setBuffer(_stage, _handle, _access);
1130 bgfx::setBuffer(_stage, _handle, _access);
1135 bgfx::setBuffer(_stage, _handle, _access);
1140 bgfx::setBuffer(_stage, _handle, _access);
1145 bgfx::dispatch(_id, _handle, _numX, _numY, _numZ);
1154 bgfx::dispatch(_id, _handle, _indirectHandle, _start, _num);
1172 bgfx::blit(_id, _dst, _dstX, _dstY, _src, _srcX, _srcY, _width, _height);
1190 bgfx::blit(_id, _dst, _dstMip, _dstX, _dstY, _dstZ, _src, _srcMip, _srcX, _srcY, _srcZ, _width, _height, _depth);
1195 bgfx::requestScreenShot(_handle, _filePath);
1200 for(
int i = 0; i < _count; ++i)
1204 s_context.frame = bgfx::frame(_flags);
1221 const float minx = -
width;
1222 const float maxx =
width;
1223 const float miny = 0.0f;
1224 const float maxy =
height * 2.0f;
1226 const float texel_half_w = texture_half / dest_width;
1227 const float texel_half_h = texture_half / dest_height;
1228 const float minu = -1.0f + texel_half_w;
1229 const float maxu = 1.0f + texel_half_h;
1231 const float zz = depth;
1233 float minv = texel_half_h;
1234 float maxv = 2.0f + texel_half_h;
1236 if(origin_bottom_left)
1264 bgfx::setVertexBuffer(0, &vb);
1283 const float minx = -
width;
1284 const float maxx =
width;
1285 const float miny = -
height;
1286 const float maxy =
height;
1288 const float minu = 0.0f;
1289 const float maxu = 1.0f;
1291 const float zz = depth;
1296 if(origin_bottom_left)
1313 vertex[1].u = minu + 2.0f * (maxu - minu);
1320 vertex[2].v = minv + 2.0f * (maxv - minv);
1322 bgfx::setVertexBuffer(0, &vb);
1324 return BGFX_STATE_PT_TRISTRIP;
1338 const float minx = -
width;
1339 const float maxx =
width;
1340 const float miny = -
height;
1341 const float maxy =
height;
1345 const float minu = 0.0f;
1346 const float maxu = 1.0f;
1348 const float zz = depth;
1353 if(origin_bottom_left)
1383 bgfx::setVertexBuffer(0, &vb);
1386 return BGFX_STATE_PT_TRISTRIP;
1408 const float minu = 0.0f;
1409 const float maxu = 1.0f;
1411 const float zz = def.
depth;
1441 for(
int i = 0; i < 4; i++)
1445 if(origin_bottom_left)
1451 bgfx::setVertexBuffer(0, &vb);
1454 return BGFX_STATE_PT_TRISTRIP;
1459 auto stats = bgfx::getStats();
1460 _width =
stats->width;
1461 _height =
stats->height;
1464 case backbuffer_ratio::Half:
1468 case backbuffer_ratio::Quarter:
1472 case backbuffer_ratio::Eighth:
1476 case backbuffer_ratio::Sixteenth:
1480 case backbuffer_ratio::Double:
1489 _width = std::max<uint16_t>(1, _width);
1490 _height = std::max<uint16_t>(1, _height);
1495 static const std::map<renderer_type, std::string> types = {{renderer_type::Direct3D11,
".dxbc"},
1496 {renderer_type::Direct3D12,
".dxil"},
1497 {renderer_type::Gnm,
".pssl"},
1498 {renderer_type::Metal,
".metal"},
1499 {renderer_type::Nvn,
".nvn"},
1501 {renderer_type::OpenGL,
".gl"},
1502 {renderer_type::OpenGLES,
".essl"},
1503 {renderer_type::Vulkan,
".spirv"}};
1505 const auto it = types.find(_type);
1506 if(it != types.cend())
1510 static std::string unknown =
".unknown";
1523#if BX_PLATFORM_WINDOWS
1538 for(
int i = renderer_type::Noop; i < renderer_type::Count; ++i)
1560 return get_caps()->originBottomLeft;
1570 float half_texel = 0.0f;
1577 bool supported = 0 != (
caps->supported &
flag);
1583 uint32_t _numIndices,
1586 return _numVertices == bgfx::getAvailTransientVertexBuffer(_numVertices, _layout) &&
1587 (0 == _numIndices || _numIndices == bgfx::getAvailTransientIndexBuffer(_numIndices, _index32));
1592 return s_context.frame;
1597 bgfx::setUniform(s_context.u_world, _mtx, _num);
1603constexpr uint64_t k_gpu_row_pitch_alignment = 256;
1605constexpr uint64_t k_gpu_min_image_allocation = 4096;
1607auto align_up_u64(uint64_t value, uint64_t alignment) -> uint64_t
1613 return (value + alignment - 1) & ~(alignment - 1);
1617auto estimate_row_pitch_layout_size(
const texture_info& info) -> uint64_t
1619 const auto format =
static_cast<bimg::TextureFormat::Enum
>(info.format);
1620 if(info.bitsPerPixel == 0 || bimg::isCompressed(
format) || bimg::isDepth(
format))
1622 return info.storageSize;
1625 const uint64_t bytes_per_pixel = (
static_cast<uint64_t
>(info.bitsPerPixel) + 7) / 8;
1626 const uint32_t faces =
static_cast<uint32_t
>(info.numLayers) * (info.cubeMap ? 6u : 1u);
1628 uint32_t
width = info.width;
1629 uint32_t
height = info.height;
1630 uint32_t depth = info.depth > 0 ? info.depth : 1u;
1633 for(uint32_t mip = 0; mip < info.numMips; ++mip)
1635 const uint32_t mip_w = bx::max<uint32_t>(1u,
width);
1636 const uint32_t mip_h = bx::max<uint32_t>(1u,
height);
1637 const uint32_t mip_d = bx::max<uint32_t>(1u, depth);
1639 const uint64_t row_bytes =
static_cast<uint64_t
>(mip_w) * bytes_per_pixel;
1640 const uint64_t pitch = align_up_u64(row_bytes, k_gpu_row_pitch_alignment);
1641 total += pitch * mip_h * mip_d * faces;
1645 depth = bx::max<uint32_t>(1u, depth >> 1);
1658 uint64_t
size = std::max<uint64_t>(_info.storageSize, estimate_row_pitch_layout_size(_info));
1661 const uint64_t msaa_field = (_flags & BGFX_TEXTURE_RT_MSAA_MASK) >> BGFX_TEXTURE_RT_MSAA_SHIFT;
1664 size *= (uint64_t(1) << (msaa_field - 1));
1669 if(
size > 0 &&
size < k_gpu_min_image_allocation)
1671 size = k_gpu_min_image_allocation;
gfx::texture_format format
texture_handle fallback_texture
allocation_failure_policy allocation_policy
gfx_profiler_begin_hook on_begin
gfx_profiler_begin_literal_hook on_begin_literal
gfx_profiler_end_hook on_end
std::vector< uint8_t > pixels
void clear_queued_allocations()
auto init(const config &cfg) -> init_status
@ failed
Initialization failed (graphics not ready).
@ ok
Initialized and active.
@ unsupported
Backend does not report a GPU memory budget; eviction is disabled.
@ unnecessary
Eviction is not needed for this backend (driver manages residency).
void set_frame(std::uint64_t frame)
Set the global frame counter (call once per presented frame).
void alloc_transient_index_buffer(transient_index_buffer *_tib, uint32_t _num, bool _index32)
bgfx::ReleaseFn release_fn
uint32_t read_texture(texture_handle _handle, void *_data, uint16_t _layer, uint8_t _mip)
void get_uniform_info(uniform_handle _handle, uniform_info &_info)
bgfx::FrameBufferHandle frame_buffer_handle
void dispatch(view_id _id, program_handle _handle, uint32_t _numX, uint32_t _numY, uint32_t _numZ)
void alloc_instance_data_buffer(instance_data_buffer *_idb, uint32_t _num, uint16_t _stride)
void submit(view_id _id, program_handle _handle, int32_t _depth, bool _preserveState)
void set_marker(const char *_marker)
const memory_view * alloc(uint32_t _size)
void set_frame_uniform(uniform_handle _handle, const void *_value, uint16_t _num)
uint64_t clip_quad_ex(const clip_quad_def &def)
void alloc_transient_vertex_buffer(transient_vertex_buffer *_tvb, uint32_t _num, const vertex_layout &_decl)
void set_view_scissor(view_id _id, uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height)
void vertex_convert(const vertex_layout &_destDecl, void *_destData, const vertex_layout &_srcDecl, const void *_srcData, uint32_t _num)
bgfx::VertexLayout vertex_layout
void set_view_uniform(view_id _id, uniform_handle _handle, const void *_value, uint16_t _num)
void set_view_mode(view_id _id, view_mode _mode)
void set_name(index_buffer_handle _handle, const char *_name, int32_t _len)
void frames(int _count, int32_t _flags)
renderer_type get_renderer_type()
std::function< void()> gfx_profiler_end_hook
uint32_t alloc_transform(transform *_transform, uint16_t _num)
void clear_profiler_hooks()
bgfx::TopologyConvert::Enum topology_conversion
void set_view_clear(view_id _id, uint16_t _flags, uint32_t _rgba, float _depth, uint8_t _stencil)
texture_handle create_texture(const memory_view *_mem, uint64_t _flags, uint8_t _skip, texture_info *_info)
uint16_t set_scissor(uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height)
void reset_view(view_id _id)
bgfx::TextureFormat::Enum texture_format
uint32_t get_avail_transient_index_buffer(uint32_t _num, bool _index32)
void set_state(uint64_t _state, uint32_t _rgba)
void update_texture_2d(texture_handle _handle, uint16_t _layer, uint8_t _mip, uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height, const memory_view *_mem, uint16_t _pitch)
bgfx::BackbufferRatio::Enum backbuffer_ratio
uint32_t topology_convert(topology_conversion _conversion, void *_dst, uint32_t _dstSize, const void *_indices, uint32_t _numIndices, bool _index32)
bgfx::Attrib::Enum attribute
bgfx::DynamicVertexBufferHandle dynamic_vertex_buffer_handle
void set_view_frame_buffer(view_id _id, frame_buffer_handle _handle)
void set_debug(uint32_t _debug)
bool alloc_transient_buffers(transient_vertex_buffer *_tvb, const vertex_layout &_decl, uint32_t _numVertices, transient_index_buffer *_tib, uint32_t _numIndices)
texture_handle create_texture_cube(uint16_t _size, bool _hasMips, uint16_t _numLayers, texture_format _format, uint64_t _flags, const memory_view *_mem)
texture_handle create_texture_3d(uint16_t _width, uint16_t _height, uint16_t _depth, bool _hasMips, texture_format _format, uint64_t _flags, const memory_view *_mem)
bgfx::Attachment attachment
void set_view_rect(view_id _id, uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height)
bool init(init_type init_data)
bgfx::ShaderHandle shader_handle
void update_texture_3d(texture_handle _handle, uint8_t _mip, uint16_t _x, uint16_t _y, uint16_t _z, uint16_t _width, uint16_t _height, uint16_t _depth, const memory_view *_mem)
indirect_buffer_handle create_indirect_buffer(uint32_t _num)
void set_view_name(view_id _id, const char *_name)
const memory_view * make_ref(const void *_data, uint32_t _size, release_fn _releaseFn, void *_userData)
uniform_handle create_uniform(const char *_name, uniform_type _type, uint16_t _num)
bgfx::Access::Enum access
bgfx::TransientVertexBuffer transient_vertex_buffer
void set_view_order(view_id _id, uint16_t _num, const view_id *_order)
void set_stencil(uint32_t _fstencil, uint32_t _bstencil)
bool is_texture_valid(uint16_t _depth, bool _cubeMap, uint16_t _numLayers, texture_format _format, uint64_t _flags)
void topology_sort_tri_list(topology_sort _sort, void *_dst, uint32_t _dstSize, const float _dir[], const float _pos[], const void *_vertices, uint32_t _stride, const void *_indices, uint32_t _numIndices, bool _index32)
void set_view_shading_rate(view_id _id, shading_rate _shadingRate)
void set_info_logger(const std::function< void(const std::string &, const char *, uint16_t)> &logger)
shader_handle create_embedded_shader(const embedded_shader *_es, renderer_type _type, const char *_name)
auto is_supported(uint64_t flag) -> bool
void vertex_pack(const float _input[4], bool _inputNormalized, attribute _attr, const vertex_layout &_decl, void *_data, uint32_t _index)
uint8_t get_supported_renderers(uint8_t _max, renderer_type *_enum)
bgfx::UniformHandle uniform_handle
shader_handle create_shader(const memory_view *_mem)
void set_world_transform(const void *_mtx, uint16_t _num)
bgfx::TransientIndexBuffer transient_index_buffer
void set_debug_logger(const std::function< void(const std::string &, const char *, uint16_t)> &logger)
uint32_t set_transform(const void *_mtx, uint16_t _num)
auto clip_fullscreen_triangle(float depth, float width, float height) -> uint64_t
const stats * get_stats()
program_handle create_program(shader_handle _vsh, shader_handle _fsh, bool _destroyShaders)
bgfx::TopologySort::Enum topology_sort
bgfx::UniformInfo uniform_info
void set_buffer(uint8_t _stage, index_buffer_handle _handle, access _access)
void get_size_from_ratio(backbuffer_ratio _ratio, uint16_t &_width, uint16_t &_height)
void log(const std::string &category, const std::string &log_msg, const char *_filePath, uint16_t _line)
bgfx::TextureHandle texture_handle
bgfx::InstanceDataBuffer instance_data_buffer
void dbg_text_vprintf(uint16_t _x, uint16_t _y, uint8_t _attr, const char *_format, va_list _argList)
void dbg_text_image(uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height, const void *_data, uint16_t _pitch)
auto screen_quad(float dest_width, float dest_height, float depth, float width, float height) -> uint64_t
auto get_allocation_failure_policy() -> allocation_failure_policy
occlusion_query_handle create_occlusion_query()
void set_instance_data_buffer(const instance_data_buffer *_idb, uint32_t _start, uint32_t _num)
void set_view_transform(view_id _id, const void *_view, const void *_proj)
void set_vertex_buffer(uint8_t _stream, vertex_buffer_handle _handle)
bgfx::OcclusionQueryResult::Enum occlusion_query_result
uint32_t get_avail_instance_data_buffer(uint32_t _num, uint16_t _stride)
const char * get_renderer_name(renderer_type _type)
static const uint16_t invalid_handle
uint16_t get_shader_uniforms(shader_handle _handle, uniform_handle *_uniforms, uint16_t _max)
bgfx::UniformType::Enum uniform_type
void blit(view_id _id, texture_handle _dst, uint16_t _dstX, uint16_t _dstY, texture_handle _src, uint16_t _srcX, uint16_t _srcY, uint16_t _width, uint16_t _height)
void reset(uint32_t _width, uint32_t _height, uint32_t _flags)
void calc_texture_size(texture_info &_info, uint16_t _width, uint16_t _height, uint16_t _depth, bool _cubeMap, bool _hasMips, uint16_t _numLayers, texture_format _format)
auto get_half_texel() -> float
auto get_renderer_platform_supported_filename_extensions() -> const std::set< std::string > &
void request_screen_shot(frame_buffer_handle _handle, const char *_filePath)
bgfx::OcclusionQueryHandle occlusion_query_handle
std::function< void(const char *name, uint32_t abgr, const char *file_path, uint16_t line)> gfx_profiler_begin_hook
auto get_renderer_based_on_filename_extension(const std::string &_type) -> renderer_type
texture_handle create_texture_2d(uint16_t _width, uint16_t _height, bool _hasMips, uint16_t _numLayers, texture_format _format, uint64_t _flags, const memory_view *_mem)
texture_handle get_texture(frame_buffer_handle _handle, uint8_t _attachment)
auto get_renderer_filename_extension(renderer_type _type) -> const std::string &
void discard(uint8_t _flags)
void dbg_text_printf(uint16_t _x, uint16_t _y, uint8_t _attr, const char *_format)
void set_warning_logger(const std::function< void(const std::string &, const char *, uint16_t)> &logger)
void destroy(index_buffer_handle _handle)
auto fallback_texture() -> texture_handle
void set_trace_logger(const std::function< void(const std::string &, const char *, uint16_t)> &logger)
bgfx::IndirectBufferHandle indirect_buffer_handle
dynamic_vertex_buffer_handle create_dynamic_vertex_buffer(uint32_t _num, const vertex_layout &_decl, uint16_t _flags)
const memory_view * copy(const void *_data, uint32_t _size)
void set_profiler_hooks(gfx_profiler_begin_hook on_begin, gfx_profiler_begin_literal_hook on_begin_literal, gfx_profiler_end_hook on_end)
auto get_max_blend_transforms() -> uint32_t
void update_texture_cube(texture_handle _handle, uint16_t _layer, uint8_t _side, uint8_t _mip, uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height, const memory_view *_mem, uint16_t _pitch)
bgfx::RendererType::Enum renderer_type
bgfx::EmbeddedShader embedded_shader
void set_palette_color(uint8_t _index, uint32_t _rgba)
void set_image(uint8_t _stage, texture_handle _handle, uint8_t _mip, access _access, texture_format _format)
void set_platform_data(const platform_data &_data)
bgfx::DynamicIndexBufferHandle dynamic_index_buffer_handle
vertex_buffer_handle create_vertex_buffer(const memory_view *_mem, const vertex_layout &_decl, uint16_t _flags)
void deinit_uniform_cache()
auto get_current_renderer_filename_extension() -> const std::string &
gfx_profiler_begin_hook gfx_profiler_begin_literal_hook
bgfx::ShadingRate::Enum shading_rate
void set_uniform(uniform_handle _handle, const void *_value, uint16_t _num)
bgfx::IndexBufferHandle index_buffer_handle
bgfx::ProgramHandle program_handle
void update(dynamic_index_buffer_handle _handle, uint32_t _startIndex, const memory_view *_mem)
void set_allocation_failure_policy(allocation_failure_policy policy)
bgfx::TextureInfo texture_info
void dbg_text_clear(uint8_t _attr, bool _small)
bgfx::VertexBufferHandle vertex_buffer_handle
void set_vertex_count(uint32_t _numVertices)
dynamic_index_buffer_handle create_dynamic_index_buffer(uint32_t _num, uint16_t _flags)
auto is_homogeneous_depth() -> bool
void set_error_logger(const std::function< void(const std::string &, const char *, uint16_t)> &logger)
bool check_avail_transient_buffers(uint32_t _numVertices, const vertex_layout &_layout, uint32_t _numIndices, bool _index32)
bgfx::ViewMode::Enum view_mode
void set_index_buffer(index_buffer_handle _handle)
bgfx::Transform transform
auto is_origin_bottom_left() -> bool
uint64_t estimate_texture_gpu_size(const texture_info &_info, uint64_t _flags)
index_buffer_handle create_index_buffer(const memory_view *_mem, uint16_t _flags)
bgfx::PlatformData platform_data
frame_buffer_handle create_frame_buffer(uint16_t _width, uint16_t _height, texture_format _format, uint64_t _textureFlags)
uint32_t get_avail_transient_vertex_buffer(uint32_t _num, const vertex_layout &_decl)
occlusion_query_result get_result(occlusion_query_handle _handle, int32_t *_result)
allocation_failure_policy
@ skip_with_fallback
Skip the allocation; texture::native_handle binds the fallback texture.
uint32_t get_render_frame()
auto clip_quad(float depth, float width, float height) -> uint64_t
void set_texture(uint8_t _stage, uniform_handle _sampler, texture_handle _handle, uint32_t _flags)
void set_condition(occlusion_query_handle _handle, bool _visible)
void vertex_unpack(float _output[4], attribute _attr, const vertex_layout &_decl, const void *_data, uint32_t _index)
void end(encoder *_encoder)
virtual void screenShot(const char *_filePath, uint32_t _width, uint32_t _height, uint32_t _pitch, bgfx::TextureFormat::Enum _format, const void *_data, uint32_t _size, bool _yflip) override
void profilerBegin(const char *_name, uint32_t _abgr, const char *_filePath, uint16_t _line) final
void traceVargs(const char *_filePath, uint16_t _line, const char *_format, va_list _argList) final
bool cacheRead(uint64_t, void *, uint32_t) final
void fatal(const char *_filePath, uint16_t _line, bgfx::Fatal::Enum _code, const char *_str) final
void profilerBeginLiteral(const char *_name, uint32_t _abgr, const char *_filePath, uint16_t _line) final
void captureBegin(uint32_t, uint32_t, uint32_t, texture_format, bool) final
uint32_t cacheReadSize(uint64_t) final
void captureFrame(const void *, uint32_t) final
void cacheWrite(uint64_t, const void *, uint32_t) final
static auto get_layout() -> const vertex_layout &