From 509755ae08374acbd082c46aba4ea208be0db808 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=91=D1=80=D0=B0=D0=BD=D0=B8=D0=BC=D0=B8=D1=80=20=D0=9A?= =?UTF-8?q?=D0=B0=D1=80=D0=B0=D1=9F=D0=B8=D1=9B?= Date: Sat, 28 Feb 2026 16:24:17 -0800 Subject: [PATCH] Updated docs. --- bgfx.html | 4556 +++++++++++++++++++++--------------------------- genindex.html | 196 +-- index.html | 12 +- license.html | 2 +- objects.inv | Bin 29308 -> 27362 bytes searchindex.js | 2 +- 6 files changed, 2047 insertions(+), 2721 deletions(-) diff --git a/bgfx.html b/bgfx.html index e4aabf136..d4098e93f 100644 --- a/bgfx.html +++ b/bgfx.html @@ -49,9 +49,6 @@
  • API Reference
  • Views
  • Encoder
  • Resources

  • _rgba – [in] Sets blend factor used by BGFX_STATE_BLEND_FACTOR and BGFX_STATE_BLEND_INV_FACTOR blend modes.

  • @@ -3342,8 +2805,12 @@ In graphics debugger view name will appear as:
    uint16_t setScissor(uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height)
    -

    Set scissor for draw primitive. To scissor for all primitives in view see bgfx::setViewScissor.

    -

    +

    Set scissor for draw primitive.

    +

    +

    Remark

    +

    To scissor for all primitives in view see bgfx::setViewScissor.

    +
    +
    Attention

    C99’s equivalent binding is bgfx_encoder_set_scissor.

    @@ -3351,10 +2818,10 @@ In graphics debugger view name will appear as:
    Parameters:
      -
    • _x – [in] Position x from the left side of the window.

    • -
    • _y – [in] Position y from the top of the window.

    • -
    • _width – [in] Width of scissor region.

    • -
    • _height – [in] Height of scissor region.

    • +
    • _x – [in] Position x from the left corner of the window.

    • +
    • _y – [in] Position y from the top corner of the window.

    • +
    • _width – [in] Width of view scissor region.

    • +
    • _height – [in] Height of view scissor region.

    Returns:
    @@ -3367,14 +2834,18 @@ In graphics debugger view name will appear as:
    void setScissor(uint16_t _cache = UINT16_MAX)

    Set scissor from cache for draw primitive.

    -

    +

    +

    Remark

    +

    To scissor for all primitives in view see bgfx::setViewScissor.

    +
    +
    Attention

    C99’s equivalent binding is bgfx_encoder_set_scissor_cached.

    Parameters:
    -

    _cache – [in] Index in scissor cache. Pass UINT16_MAX to have primitive use view scissor instead.

    +

    _cache – [in] Index in scissor cache.

    @@ -3382,7 +2853,7 @@ In graphics debugger view name will appear as:
    uint32_t setTransform(const void *_mtx, uint16_t _num = 1)
    -

    Set model matrix for draw primitive. If it is not called, model will be rendered with identity model matrix.

    +

    Set model matrix for draw primitive. If it is not called, the model will be rendered with an identity model matrix.

    Attention

    C99’s equivalent binding is bgfx_encoder_set_transform.

    @@ -3392,7 +2863,7 @@ In graphics debugger view name will appear as:
    Parameters:
    • _mtx – [in] Pointer to first matrix in array.

    • -
    • _num – [in] Number of matrices in array.

    • +
    • _num – [in] Number of matrices in array.

    Returns:
    @@ -3401,30 +2872,6 @@ In graphics debugger view name will appear as:
    -
    -uint32_t allocTransform(Transform *_transform, uint16_t _num)
    -

    Reserve _num matrices in internal matrix cache.

    -

    -
    Attention

    Pointer returned can be modified until bgfx::frame is called.

    -
    -
    Attention

    C99’s equivalent binding is bgfx_encoder_alloc_transform.

    -
    -
    -

    -
    -
    Parameters:
    -
      -
    • _transform – [in] Pointer to Transform structure.

    • -
    • _num – [in] Number of matrices.

    • -
    -
    -
    Returns:
    -

    Index into matrix cache.

    -
    -
    -
    -
    void setTransform(uint32_t _cache, uint16_t _num = 1)
    @@ -3444,6 +2891,30 @@ In graphics debugger view name will appear as:
    +
    +uint32_t allocTransform(Transform *_transform, uint16_t _num)
    +

    Reserve matrices in internal matrix cache.

    +

    +
    Attention

    Pointer returned can be modified until bgfx::frame is called.

    +
    +
    Attention

    C99’s equivalent binding is bgfx_encoder_alloc_transform.

    +
    +
    +

    +
    +
    Parameters:
    +
      +
    • _transform – [out] Pointer to Transform structure.

    • +
    • _num – [in] Number of matrices.

    • +
    +
    +
    Returns:
    +

    Index in matrix cache.

    +
    +
    +
    +
    void setUniform(UniformHandle _handle, const void *_value, uint16_t _num = 1)
    @@ -3468,14 +2939,9 @@ In graphics debugger view name will appear as:
    void setIndexBuffer(IndexBufferHandle _handle)

    Set index buffer for draw primitive.

    -

    -
    Attention

    C99’s equivalent binding is bgfx_encoder_set_index_buffer.

    -
    -
    -

    Parameters:
    -

    _handle – [in] Index buffer.

    +

    _handle – [in] Index buffer.

    @@ -3504,14 +2970,9 @@ In graphics debugger view name will appear as:
    void setIndexBuffer(DynamicIndexBufferHandle _handle)

    Set index buffer for draw primitive.

    -

    -
    Attention

    C99’s equivalent binding is bgfx_encoder_set_dynamic_index_buffer.

    -
    -
    -

    Parameters:
    -

    _handle – [in] Dynamic index buffer.

    +

    _handle – [in] Dynamic index buffer.

    @@ -3540,14 +3001,9 @@ In graphics debugger view name will appear as:
    void setIndexBuffer(const TransientIndexBuffer *_tib)

    Set index buffer for draw primitive.

    -

    -
    Attention

    C99’s equivalent binding is bgfx_encoder_set_transient_index_buffer.

    -
    -
    -

    Parameters:
    -

    _tib – [in] Transient index buffer.

    +

    _tib – [in] Transient index buffer.

    @@ -3576,16 +3032,11 @@ In graphics debugger view name will appear as:
    void setVertexBuffer(uint8_t _stream, VertexBufferHandle _handle)

    Set vertex buffer for draw primitive.

    -

    -
    Attention

    C99’s equivalent binding is bgfx_encoder_set_vertex_buffer.

    -
    -
    -

    Parameters:
    • _stream – [in] Vertex stream.

    • -
    • _handle – [in] Vertex buffer.

    • +
    • _handle – [in] Vertex buffer.

    @@ -3596,7 +3047,7 @@ In graphics debugger view name will appear as:
    void setVertexBuffer(uint8_t _stream, VertexBufferHandle _handle, uint32_t _startVertex, uint32_t _numVertices, VertexLayoutHandle _layoutHandle = BGFX_INVALID_HANDLE)

    Set vertex buffer for draw primitive.

    -
    Attention

    C99’s equivalent binding is bgfx_encoder_set_vertex_buffer.

    +
    Attention

    C99’s equivalent bindings are bgfx_encoder_set_vertex_buffer_with_layout, bgfx_encoder_set_vertex_buffer.

    @@ -3617,16 +3068,11 @@ In graphics debugger view name will appear as:
    void setVertexBuffer(uint8_t _stream, DynamicVertexBufferHandle _handle)

    Set vertex buffer for draw primitive.

    -

    -
    Attention

    C99’s equivalent binding is bgfx_encoder_set_dynamic_vertex_buffer.

    -
    -
    -

    Parameters:
    • _stream – [in] Vertex stream.

    • -
    • _handle – [in] Dynamic vertex buffer.

    • +
    • _handle – [in] Dynamic vertex buffer.

    @@ -3637,7 +3083,7 @@ In graphics debugger view name will appear as:
    void setVertexBuffer(uint8_t _stream, DynamicVertexBufferHandle _handle, uint32_t _startVertex, uint32_t _numVertices, VertexLayoutHandle _layoutHandle = BGFX_INVALID_HANDLE)

    Set vertex buffer for draw primitive.

    -
    Attention

    C99’s equivalent binding is bgfx_encoder_set_dynamic_vertex_buffer.

    +
    Attention

    C99’s equivalent bindings are bgfx_encoder_set_dynamic_vertex_buffer_with_layout, bgfx_encoder_set_dynamic_vertex_buffer.

    @@ -3658,16 +3104,11 @@ In graphics debugger view name will appear as:
    void setVertexBuffer(uint8_t _stream, const TransientVertexBuffer *_tvb)

    Set vertex buffer for draw primitive.

    -

    -
    Attention

    C99’s equivalent binding is bgfx_encoder_set_transient_vertex_buffer.

    -
    -
    -

    Parameters:
    • _stream – [in] Vertex stream.

    • -
    • _tvb – [in] Transient vertex buffer.

    • +
    • _tvb – [in] Transient vertex buffer.

    @@ -3678,7 +3119,7 @@ In graphics debugger view name will appear as:
    void setVertexBuffer(uint8_t _stream, const TransientVertexBuffer *_tvb, uint32_t _startVertex, uint32_t _numVertices, VertexLayoutHandle _layoutHandle = BGFX_INVALID_HANDLE)

    Set vertex buffer for draw primitive.

    -
    Attention

    C99’s equivalent binding is bgfx_encoder_set_transient_vertex_buffer.

    +
    Attention

    C99’s equivalent bindings are bgfx_encoder_set_transient_vertex_buffer_with_layout, bgfx_encoder_set_transient_vertex_buffer.

    @@ -3700,7 +3141,7 @@ In graphics debugger view name will appear as:
    void setVertexCount(uint32_t _numVertices)

    Set number of vertices for auto generated vertices use in conjunction with gl_VertexID.

    -
    Attention

    Availability depends on: BGFX_CAPS_VERTEX_ID.

    +
    Attention

    Availability depends on: BGFX_CAPS_VERTEX_ID.

    Attention

    C99’s equivalent binding is bgfx_encoder_set_vertex_count.

    @@ -3717,14 +3158,9 @@ In graphics debugger view name will appear as:
    void setInstanceDataBuffer(const InstanceDataBuffer *_idb)

    Set instance data buffer for draw primitive.

    -

    -
    Attention

    C99’s equivalent binding is bgfx_encoder_set_instance_data_buffer.

    -
    -
    -

    Parameters:
    -

    _idb – [in] Transient instance data buffer.

    +

    _idb – [in] Transient instance data buffer.

    @@ -3751,7 +3187,7 @@ In graphics debugger view name will appear as:
    -void setInstanceDataBuffer(VertexBufferHandle _handle, uint32_t _start, uint32_t _num)
    +void setInstanceDataBuffer(VertexBufferHandle _handle, uint32_t _startVertex, uint32_t _num)

    Set instance data buffer for draw primitive.

    Attention

    C99’s equivalent binding is bgfx_encoder_set_instance_data_from_vertex_buffer.

    @@ -3762,7 +3198,7 @@ In graphics debugger view name will appear as:
    Parameters:
    • _handle – [in] Vertex buffer.

    • -
    • _start – [in] First instance data.

    • +
    • _startVertex – [in] First instance data.

    • _num – [in] Number of data instances.

    @@ -3771,7 +3207,7 @@ In graphics debugger view name will appear as:
    -void setInstanceDataBuffer(DynamicVertexBufferHandle _handle, uint32_t _start, uint32_t _num)
    +void setInstanceDataBuffer(DynamicVertexBufferHandle _handle, uint32_t _startVertex, uint32_t _num)

    Set instance data buffer for draw primitive.

    Attention

    C99’s equivalent binding is bgfx_encoder_set_instance_data_from_dynamic_vertex_buffer.

    @@ -3781,8 +3217,8 @@ In graphics debugger view name will appear as:
    Parameters:
      -
    • _handle – [in] Vertex buffer.

    • -
    • _start – [in] First instance data.

    • +
    • _handle – [in] Dynamic vertex buffer.

    • +
    • _startVertex – [in] First instance data.

    • _num – [in] Number of data instances.

    @@ -3794,7 +3230,7 @@ In graphics debugger view name will appear as:
    void setInstanceCount(uint32_t _numInstances)

    Set number of instances for auto generated instances use in conjunction with gl_InstanceID.

    -
    Attention

    Availability depends on: BGFX_CAPS_VERTEX_ID.

    +
    Attention

    Availability depends on: BGFX_CAPS_VERTEX_ID.

    Attention

    C99’s equivalent binding is bgfx_encoder_set_instance_count.

    @@ -3836,8 +3272,11 @@ In graphics debugger view name will appear as:
    void touch(ViewId _id)

    Submit an empty primitive for rendering. Uniforms and draw state will be applied but no geometry will be submitted. Useful in cases when no other draw/compute primitive is submitted to view, but it’s desired to execute clear view.

    +

    +

    Remark

    These empty draw calls will sort before ordinary draw calls.

    -

    +
    +
    Attention

    C99’s equivalent binding is bgfx_encoder_touch.

    @@ -3897,7 +3336,7 @@ In graphics debugger view name will appear as:
    void submit(ViewId _id, ProgramHandle _program, IndirectBufferHandle _indirectHandle, uint32_t _start = 0, uint32_t _num = 1, uint32_t _depth = 0, uint8_t _flags = BGFX_DISCARD_ALL)

    Submit primitive for rendering with index and instance data info from indirect buffer.

    -
    Attention

    Availability depends on: BGFX_CAPS_DRAW_INDIRECT.

    +
    Attention

    Availability depends on: BGFX_CAPS_DRAW_INDIRECT.

    Attention

    C99’s equivalent binding is bgfx_encoder_submit_indirect.

    @@ -3923,7 +3362,7 @@ In graphics debugger view name will appear as:
    void submit(ViewId _id, ProgramHandle _program, IndirectBufferHandle _indirectHandle, uint32_t _start, IndexBufferHandle _numHandle, uint32_t _numIndex = 0, uint32_t _numMax = UINT32_MAX, uint32_t _depth = 0, uint8_t _flags = BGFX_DISCARD_ALL)

    Submit primitive for rendering with index and instance data info and draw count from indirect buffers.

    -
    Attention

    Availability depends on: BGFX_CAPS_DRAW_INDIRECT_COUNT.

    +
    Attention

    Availability depends on: BGFX_CAPS_DRAW_INDIRECT_COUNT.

    Attention

    C99’s equivalent binding is bgfx_encoder_submit_indirect_count.

    @@ -4058,10 +3497,10 @@ In graphics debugger view name will appear as:
    Parameters:
      -
    • _stage – [in] Texture unit.

    • +
    • _stage – [in] Compute stage.

    • _handle – [in] Texture handle.

    • _mip – [in] Mip level.

    • -
    • _access – [in] Texture access. See Access::Enum.

    • +
    • _access – [in] Image access. See Access::Enum.

    • _format – [in] Texture format. See: TextureFormat::Enum.

    @@ -4070,7 +3509,7 @@ In graphics debugger view name will appear as:
    -void dispatch(ViewId _id, ProgramHandle _handle, uint32_t _numX = 1, uint32_t _numY = 1, uint32_t _numZ = 1, uint8_t _flags = BGFX_DISCARD_ALL)
    +void dispatch(ViewId _id, ProgramHandle _program, uint32_t _numX = 1, uint32_t _numY = 1, uint32_t _numZ = 1, uint8_t _flags = BGFX_DISCARD_ALL)

    Dispatch compute.

    Attention

    C99’s equivalent binding is bgfx_encoder_dispatch.

    @@ -4081,7 +3520,7 @@ In graphics debugger view name will appear as:
    Parameters:
    • _id – [in] View id.

    • -
    • _handle – [in] Compute program.

    • +
    • _program – [in] Compute program.

    • _numX – [in] Number of groups X.

    • _numY – [in] Number of groups Y.

    • _numZ – [in] Number of groups Z.

    • @@ -4093,7 +3532,7 @@ In graphics debugger view name will appear as:
      -void dispatch(ViewId _id, ProgramHandle _handle, IndirectBufferHandle _indirectHandle, uint32_t _start = 0, uint32_t _num = 1, uint8_t _flags = BGFX_DISCARD_ALL)
      +void dispatch(ViewId _id, ProgramHandle _program, IndirectBufferHandle _indirectHandle, uint32_t _start = 0, uint32_t _num = 1, uint8_t _flags = BGFX_DISCARD_ALL)

      Dispatch compute indirect.

      Attention

      C99’s equivalent binding is bgfx_encoder_dispatch_indirect.

      @@ -4104,7 +3543,7 @@ In graphics debugger view name will appear as:
      Parameters:
      • _id – [in] View id.

      • -
      • _handle – [in] Compute program.

      • +
      • _program – [in] Compute program.

      • _indirectHandle – [in] Indirect buffer.

      • _start – [in] First element in indirect buffer.

      • _num – [in] Number of dispatches.

      • @@ -4117,7 +3556,7 @@ In graphics debugger view name will appear as:
        void discard(uint8_t _flags = BGFX_DISCARD_ALL)
        -

        Discard all previously set state for draw or compute call.

        +

        Discard previously set state for draw or compute call.

        Attention

        C99’s equivalent binding is bgfx_encoder_discard.

        @@ -4125,7 +3564,7 @@ In graphics debugger view name will appear as:
        Parameters:
        -

        _flags – [in] Draw/compute states to discard.

        +

        _flags – [in] Discard or preserve states. See BGFX_DISCARD_*.

      @@ -4133,14 +3572,12 @@ In graphics debugger view name will appear as:
      void blit(ViewId _id, TextureHandle _dst, uint16_t _dstX, uint16_t _dstY, TextureHandle _src, uint16_t _srcX = 0, uint16_t _srcY = 0, uint16_t _width = UINT16_MAX, uint16_t _height = UINT16_MAX)
      -

      Blit texture 2D region between two 2D textures.

      +

      Blit 2D texture region between two 2D textures.

      -
      Attention

      Destination texture must be created with BGFX_TEXTURE_BLIT_DST flag.

      +
      Attention

      Destination texture must be created with BGFX_TEXTURE_BLIT_DST flag.

      Attention

      Availability depends on: BGFX_CAPS_TEXTURE_BLIT.

      -
      Attention

      C99’s equivalent binding is bgfx_encoder_blit.

      -

      @@ -4163,11 +3600,11 @@ In graphics debugger view name will appear as:
      void blit(ViewId _id, TextureHandle _dst, uint8_t _dstMip, uint16_t _dstX, uint16_t _dstY, uint16_t _dstZ, TextureHandle _src, uint8_t _srcMip = 0, uint16_t _srcX = 0, uint16_t _srcY = 0, uint16_t _srcZ = 0, uint16_t _width = UINT16_MAX, uint16_t _height = UINT16_MAX, uint16_t _depth = UINT16_MAX)
      -

      Blit texture region between two textures.

      +

      Blit 2D texture region between two 2D textures.

      -
      Attention

      Destination texture must be created with BGFX_TEXTURE_BLIT_DST flag.

      +
      Attention

      Destination texture must be created with BGFX_TEXTURE_BLIT_DST flag.

      -
      Attention

      Availability depends on: BGFX_CAPS_TEXTURE_BLIT.

      +
      Attention

      Availability depends on: BGFX_CAPS_TEXTURE_BLIT.

      Attention

      C99’s equivalent binding is bgfx_encoder_blit.

      @@ -4198,35 +3635,49 @@ In graphics debugger view name will appear as:
      -

      Draw

      -

      Draw state is not preserved between two draw calls. -All state is cleared after calling bgfx::submit.

      -
      -

      State

      -
      -
      -

      Debug

      -
      -void bgfx::setMarker(const char *_name, int32_t _len = INT32_MAX)
      -

      Sets a debug marker. This allows you to group graphics calls together for easy browsing in graphics debugging tools.

      +
      +Encoder *bgfx::begin(bool _forThread = false)
      +

      Begin submitting draw calls from thread.

      -
      Attention

      C99’s equivalent binding is bgfx_set_marker.

      +
      Attention

      C99’s equivalent binding is bgfx_encoder_begin.

      Parameters:
      -
        -
      • _name – [in] Marker name.

      • -
      • _len – [in] Marker name length (if length is INT32_MAX, it’s expected that _name is zero terminated string.

      • -
      +

      _forThread – [in] Explicitly request an encoder for a worker thread.

      +
      +
      Returns:
      +

      Encoder.

      +
      +
      +void bgfx::end(Encoder *_encoder)
      +

      End submitting draw calls from thread.

      +

      +
      Attention

      C99’s equivalent binding is bgfx_encoder_end.

      +
      +
      +

      +
      +
      Parameters:
      +

      _encoder – [in] Encoder.

      +
      +
      +
      + +
      +
      +

      Draw

      +

      Draw state is not preserved between two draw calls. +All state is cleared after calling bgfx::submit.

      +
      +

      Debug

      +

      Debug markers for grouping draw calls in graphics debugging tools.

      void bgfx::setName(ShaderHandle _handle, const char *_name, int32_t _len = INT32_MAX)
      @@ -4241,7 +3692,7 @@ All state is cleared after calling bgfx::submit.

      • _handle – [in] Shader handle.

      • _name – [in] Shader name.

      • -
      • _len – [in] Shader name length (if length is INT32_MAX, it’s expected that _name is zero terminated string.

      • +
      • _len – [in] Shader name length (if length is INT32_MAX, it’s expected that _name is zero terminated string).

      @@ -4267,9 +3718,29 @@ All state is cleared after calling bgfx::submit.

      +
      +
      +void bgfx::setMarker(const char *_name, int32_t _len = INT32_MAX)
      +

      Sets a debug marker. This allows you to group graphics calls together for easy browsing in graphics debugging tools.

      +

      +
      Attention

      C99’s equivalent binding is bgfx_set_marker.

      +
      +
      +

      +
      +
      Parameters:
      +
        +
      • _name – [in] Marker name.

      • +
      • _len – [in] Marker name length (if length is INT32_MAX, it’s expected that _name is zero terminated string.

      • +
      +
      +
      +
      + -
      -

      State

      +
      +

      State

      +

      Configure render state for draw calls.

      void bgfx::setState(uint64_t _state, uint32_t _rgba = 0)
      @@ -4277,7 +3748,7 @@ All state is cleared after calling bgfx::submit.

      Remark

        -
      1. To set up more complex states use: BGFX_STATE_ALPHA_REF(_ref), BGFX_STATE_POINT_SIZE(_size), BGFX_STATE_BLEND_FUNC(_src, _dst), BGFX_STATE_BLEND_FUNC_SEPARATE(_srcRGB, _dstRGB, _srcA, _dstA) BGFX_STATE_BLEND_EQUATION(_equation) BGFX_STATE_BLEND_EQUATION_SEPARATE(_equationRGB, _equationA)

      2. +
      3. To set up more complex states use: BGFX_STATE_ALPHA_REF(_ref), BGFX_STATE_POINT_SIZE(_size), BGFX_STATE_BLEND_FUNC(_src, _dst), BGFX_STATE_BLEND_FUNC_SEPARATE(_srcRGB, _dstRGB, _srcA, _dstA), BGFX_STATE_BLEND_EQUATION(_equation), BGFX_STATE_BLEND_EQUATION_SEPARATE(_equationRGB, _equationA)

      4. BGFX_STATE_BLEND_EQUATION_ADD is set when no other blend equation is specified.

      @@ -4296,8 +3767,8 @@ All state is cleared after calling bgfx::submit.

    • BGFX_STATE_BLEND_EQUATION_* - See remark 2.

    • BGFX_STATE_CULL_* - Backface culling mode.

    • BGFX_STATE_WRITE_* - Enable R, G, B, A or Z write.

    • -
    • BGFX_STATE_MSAA - Enable MSAA.

    • -
    • BGFX_STATE_PT_[TRISTRIP/LINES/POINTS] - Primitive type.

    • +
    • BGFX_STATE_MSAA - Enable hardware multisample antialiasing.

    • +
    • BGFX_STATE_PT_[TRISTRIP/LINES/POINTS] - Primitive type.

  • _rgba – [in] Sets blend factor used by BGFX_STATE_BLEND_FACTOR and BGFX_STATE_BLEND_INV_FACTOR blend modes.

  • @@ -4309,6 +3780,7 @@ All state is cleared after calling bgfx::submit.

    State Flags

    +

    Render state flags for depth test, blending, culling, etc.

    Write

    @@ -4329,11 +3801,6 @@ All state is cleared after calling bgfx::submit.

    Enable B write.

    -
    -
    -BGFX_STATE_WRITE_RGB
    -
    -
    BGFX_STATE_WRITE_A
    @@ -4346,6 +3813,17 @@ All state is cleared after calling bgfx::submit.

    Enable depth write. Enable RGB write.

    +
    +
    +BGFX_STATE_WRITE_RGB
    +
    + +
    +
    +BGFX_STATE_WRITE_MASK
    +

    Write all channels mask.

    +
    +

    Depth Test

    @@ -4548,18 +4026,6 @@ All state is cleared after calling bgfx::submit.

    Misc

    -
    -
    -BGFX_STATE_BLEND_INDEPENDENT
    -

    Enable blend independent.

    -
    - -
    -
    -BGFX_STATE_BLEND_ALPHA_TO_COVERAGE
    -

    Enable alpha to coverage. Default state is write to RGB, alpha, and depth with depth test less enabled, with clockwise culling and MSAA (when writing into MSAA frame buffer, otherwise this flag is ignored).

    -
    -
    BGFX_STATE_MSAA
    @@ -4573,9 +4039,45 @@ All state is cleared after calling bgfx::submit.

    Enable line AA rasterization.

    +
    +
    +BGFX_STATE_CONSERVATIVE_RASTER
    +

    Enable conservative rasterization.

    +
    + +
    +
    +BGFX_STATE_NONE
    +

    No state.

    +
    + +
    +
    +BGFX_STATE_FRONT_CCW
    +

    Front counter-clockwise (default is clockwise).

    +
    + +
    +
    +BGFX_STATE_BLEND_INDEPENDENT
    +

    Enable blend independent.

    +
    + +
    +
    +BGFX_STATE_BLEND_ALPHA_TO_COVERAGE
    +

    Enable alpha to coverage. Default state is write to RGB, alpha, and depth with depth test less enabled, with clockwise culling and MSAA (when writing into MSAA frame buffer, otherwise this flag is ignored).

    +
    + +
    +
    +BGFX_STATE_DEFAULT
    +
    +

    Stencil

    +

    Configure stencil test for draw calls.

    void bgfx::setStencil(uint32_t _fstencil, uint32_t _bstencil = BGFX_STENCIL_NONE)
    @@ -4598,23 +4100,70 @@ All state is cleared after calling bgfx::submit.

    Stencil Flags

    +

    Stencil test configuration flags.

    BGFX_STENCIL_TEST_LESS

    Enable stencil test, less.

    +
    +
    +BGFX_STENCIL_TEST_LEQUAL
    +

    Enable stencil test, less or equal.

    +
    + +
    +
    +BGFX_STENCIL_TEST_EQUAL
    +

    Enable stencil test, equal.

    +
    + +
    +
    +BGFX_STENCIL_TEST_GEQUAL
    +

    Enable stencil test, greater or equal.

    +
    + +
    +
    +BGFX_STENCIL_TEST_GREATER
    +

    Enable stencil test, greater.

    +
    + +
    +
    +BGFX_STENCIL_TEST_NOTEQUAL
    +

    Enable stencil test, not equal.

    +
    + +
    +
    +BGFX_STENCIL_TEST_NEVER
    +

    Enable stencil test, never.

    +
    + +
    +
    +BGFX_STENCIL_TEST_ALWAYS
    +

    Enable stencil test, always.

    +
    +

    Scissor

    If the Scissor rectangle needs to be changed for -every draw call in a View, use bgfx::setScissor. -Otherwise, use bgfx::setViewScissor.

    +every draw call in a View, use bgfx::setScissor. +Otherwise, use bgfx::setViewScissor.

    uint16_t bgfx::setScissor(uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height)
    -

    Set scissor for draw primitive. For scissor for all primitives in view see bgfx::setViewScissor.

    -

    +

    Set scissor for draw primitive.

    +

    +

    Remark

    +

    To scissor for all primitives in view see bgfx::setViewScissor.

    +
    +
    Attention

    C99’s equivalent binding is bgfx_set_scissor.

    @@ -4624,8 +4173,8 @@ Otherwise, use bgfx::setViewScissor.

    • _x – [in] Position x from the left corner of the window.

    • _y – [in] Position y from the top corner of the window.

    • -
    • _width – [in] Width of scissor region.

    • -
    • _height – [in] Height of scissor region.

    • +
    • _width – [in] Width of view scissor region.

    • +
    • _height – [in] Height of view scissor region.

    Returns:
    @@ -4638,14 +4187,18 @@ Otherwise, use bgfx::setViewScissor.

    void bgfx::setScissor(uint16_t _cache = UINT16_MAX)

    Set scissor from cache for draw primitive.

    -

    +

    +

    Remark

    +

    To scissor for all primitives in view see bgfx::setViewScissor.

    +
    +
    Attention

    C99’s equivalent binding is bgfx_set_scissor_cached.

    Parameters:
    -

    _cache – [in] Index in scissor cache. Passing UINT16_MAX unset primitive scissor and primitive will use view scissor instead.

    +

    _cache – [in] Index in scissor cache.

    @@ -4653,30 +4206,7 @@ Otherwise, use bgfx::setViewScissor.

    Transform

    -
    -
    -uint32_t bgfx::allocTransform(Transform *_transform, uint16_t _num)
    -

    Reserve _num matrices in internal matrix cache.

    -

    -
    Attention

    Pointer returned can be modified until bgfx::frame is called.

    -
    -
    Attention

    C99’s equivalent binding is bgfx_alloc_transform.

    -
    -
    -

    -
    -
    Parameters:
    -
      -
    • _transform – [in] Pointer to Transform structure.

    • -
    • _num – [in] Number of matrices.

    • -
    -
    -
    Returns:
    -

    index into matrix cache.

    -
    -
    -
    - +

    Set model transform matrices for draw calls.

    uint32_t bgfx::setTransform(const void *_mtx, uint16_t _num = 1)
    @@ -4690,11 +4220,11 @@ Otherwise, use bgfx::setViewScissor.

    Parameters:
    • _mtx – [in] Pointer to first matrix in array.

    • -
    • _num – [in] Number of matrices in array.

    • +
    • _num – [in] Number of matrices in array.

    Returns:
    -

    index into matrix cache in case the same model matrix has to be used for other draw primitive call.

    +

    Index into matrix cache in case the same model matrix has to be used for other draw primitive call.

    @@ -4718,9 +4248,34 @@ Otherwise, use bgfx::setViewScissor.

    +
    +
    +uint32_t bgfx::allocTransform(Transform *_transform, uint16_t _num)
    +

    Reserve matrices in internal matrix cache.

    +

    +
    Attention

    Pointer returned can be modified until bgfx::frame is called.

    +
    +
    Attention

    C99’s equivalent binding is bgfx_alloc_transform.

    +
    +
    +

    +
    +
    Parameters:
    +
      +
    • _transform – [out] Pointer to Transform structure.

    • +
    • _num – [in] Number of matrices.

    • +
    +
    +
    Returns:
    +

    Index in matrix cache.

    +
    +
    +
    +

    Conditional Rendering

    +

    Conditionally render based on occlusion query results.

    void bgfx::setCondition(OcclusionQueryHandle _handle, bool _visible)
    @@ -4743,78 +4298,7 @@ Otherwise, use bgfx::setViewScissor.

    Buffers

    -
    -
    -void bgfx::setIndexBuffer(IndexBufferHandle _handle)
    -

    Set index buffer for draw primitive.

    -

    -
    Attention

    C99’s equivalent binding is bgfx_set_index_buffer.

    -
    -
    -

    -
    -
    Parameters:
    -

    _handle – [in] Index buffer.

    -
    -
    -
    - -
    -
    -void bgfx::setIndexBuffer(IndexBufferHandle _handle, uint32_t _firstIndex, uint32_t _numIndices)
    -

    Set index buffer for draw primitive.

    -

    -
    Attention

    C99’s equivalent binding is bgfx_set_index_buffer.

    -
    -
    -

    -
    -
    Parameters:
    -
      -
    • _handle – [in] Index buffer.

    • -
    • _firstIndex – [in] First index to render.

    • -
    • _numIndices – [in] Number of indices to render.

    • -
    -
    -
    -
    - -
    -
    -void bgfx::setIndexBuffer(DynamicIndexBufferHandle _handle)
    -

    Set index buffer for draw primitive.

    -

    -
    Attention

    C99’s equivalent binding is bgfx_set_dynamic_index_buffer.

    -
    -
    -

    -
    -
    Parameters:
    -

    _handle – [in] Dynamic index buffer.

    -
    -
    -
    - -
    -
    -void bgfx::setIndexBuffer(DynamicIndexBufferHandle _handle, uint32_t _firstIndex, uint32_t _numIndices)
    -

    Set index buffer for draw primitive.

    -

    -
    Attention

    C99’s equivalent binding is bgfx_set_dynamic_index_buffer.

    -
    -
    -

    -
    -
    Parameters:
    -
      -
    • _handle – [in] Dynamic index buffer.

    • -
    • _firstIndex – [in] First index to render.

    • -
    • _numIndices – [in] Number of indices to render.

    • -
    -
    -
    -
    - +

    Set vertex, index, and instance data buffers for draw calls.

    struct TransientIndexBuffer
    @@ -4859,124 +4343,6 @@ Otherwise, use bgfx::setViewScissor.

    -
    -
    -void bgfx::setIndexBuffer(const TransientIndexBuffer *_tib)
    -

    Set index buffer for draw primitive.

    -

    -
    Attention

    C99’s equivalent binding is bgfx_set_transient_index_buffer.

    -
    -
    -

    -
    -
    Parameters:
    -

    _tib – [in] Transient index buffer.

    -
    -
    -
    - -
    -
    -void bgfx::setIndexBuffer(const TransientIndexBuffer *_tib, uint32_t _firstIndex, uint32_t _numIndices)
    -

    Set index buffer for draw primitive.

    -

    -
    Attention

    C99’s equivalent binding is bgfx_set_transient_index_buffer.

    -
    -
    -

    -
    -
    Parameters:
    -
      -
    • _tib – [in] Transient index buffer.

    • -
    • _firstIndex – [in] First index to render.

    • -
    • _numIndices – [in] Number of indices to render.

    • -
    -
    -
    -
    - -
    -
    -void bgfx::setVertexBuffer(uint8_t _stream, VertexBufferHandle _handle)
    -

    Set vertex buffer for draw primitive.

    -

    -
    Attention

    C99’s equivalent binding is bgfx_set_vertex_buffer.

    -
    -
    -

    -
    -
    Parameters:
    -
      -
    • _stream – [in] Vertex stream.

    • -
    • _handle – [in] Vertex buffer.

    • -
    -
    -
    -
    - -
    -
    -void bgfx::setVertexBuffer(uint8_t _stream, VertexBufferHandle _handle, uint32_t _startVertex, uint32_t _numVertices, VertexLayoutHandle _layoutHandle = BGFX_INVALID_HANDLE)
    -

    Set vertex buffer for draw primitive.

    -

    -
    Attention

    C99’s equivalent binding is bgfx_set_vertex_buffer.

    -
    -
    -

    -
    -
    Parameters:
    -
      -
    • _stream – [in] Vertex stream.

    • -
    • _handle – [in] Vertex buffer.

    • -
    • _startVertex – [in] First vertex to render.

    • -
    • _numVertices – [in] Number of vertices to render.

    • -
    • _layoutHandle – [in] Vertex layout for aliasing vertex buffer. If invalid handle is used, vertex layout used for creation of vertex buffer will be used.

    • -
    -
    -
    -
    - -
    -
    -void bgfx::setVertexBuffer(uint8_t _stream, DynamicVertexBufferHandle _handle)
    -

    Set vertex buffer for draw primitive.

    -

    -
    Attention

    C99’s equivalent binding is bgfx_set_dynamic_vertex_buffer.

    -
    -
    -

    -
    -
    Parameters:
    -
      -
    • _stream – [in] Vertex stream.

    • -
    • _handle – [in] Dynamic vertex buffer.

    • -
    -
    -
    -
    - -
    -
    -void bgfx::setVertexBuffer(uint8_t _stream, DynamicVertexBufferHandle _handle, uint32_t _startVertex, uint32_t _numVertices, VertexLayoutHandle _layoutHandle = BGFX_INVALID_HANDLE)
    -

    Set vertex buffer for draw primitive.

    -

    -
    Attention

    C99’s equivalent binding is bgfx_set_dynamic_vertex_buffer.

    -
    -
    -

    -
    -
    Parameters:
    -
      -
    • _stream – [in] Vertex stream.

    • -
    • _handle – [in] Dynamic vertex buffer.

    • -
    • _startVertex – [in] First vertex to render.

    • -
    • _numVertices – [in] Number of vertices to render.

    • -
    • _layoutHandle – [in] Vertex layout for aliasing vertex buffer. If invalid handle is used, vertex layout used for creation of vertex buffer will be used.

    • -
    -
    -
    -
    -
    struct TransientVertexBuffer
    @@ -5027,65 +4393,6 @@ Otherwise, use bgfx::setViewScissor.

    -
    -
    -void bgfx::setVertexBuffer(uint8_t _stream, const TransientVertexBuffer *_tvb)
    -

    Set vertex buffer for draw primitive.

    -

    -
    Attention

    C99’s equivalent binding is bgfx_set_transient_vertex_buffer.

    -
    -
    -

    -
    -
    Parameters:
    -
      -
    • _stream – [in] Vertex stream.

    • -
    • _tvb – [in] Transient vertex buffer.

    • -
    -
    -
    -
    - -
    -
    -void bgfx::setVertexBuffer(uint8_t _stream, const TransientVertexBuffer *_tvb, uint32_t _startVertex, uint32_t _numVertices, VertexLayoutHandle _layoutHandle = BGFX_INVALID_HANDLE)
    -

    Set vertex buffer for draw primitive.

    -

    -
    Attention

    C99’s equivalent binding is bgfx_set_transient_vertex_buffer.

    -
    -
    -

    -
    -
    Parameters:
    -
      -
    • _stream – [in] Vertex stream.

    • -
    • _tvb – [in] Transient vertex buffer.

    • -
    • _startVertex – [in] First vertex to render.

    • -
    • _numVertices – [in] Number of vertices to render.

    • -
    • _layoutHandle – [in] Vertex layout for aliasing vertex buffer. If invalid handle is used, vertex layout used for creation of vertex buffer will be used.

    • -
    -
    -
    -
    - -
    -
    -void bgfx::setVertexCount(uint32_t _numVertices)
    -

    Set number of vertices for auto generated vertices use in conjunction with gl_VertexID.

    -

    -
    Attention

    Availability depends on: BGFX_CAPS_VERTEX_ID.

    -
    -
    Attention

    C99’s equivalent binding is bgfx_set_vertex_count.

    -
    -
    -

    -
    -
    Parameters:
    -

    _numVertices – [in] Number of vertices.

    -
    -
    -
    -
    struct InstanceDataBuffer
    @@ -5137,17 +4444,189 @@ Otherwise, use bgfx::setViewScissor.

    -
    -void bgfx::setInstanceDataBuffer(const InstanceDataBuffer *_idb)
    -

    Set instance data buffer for draw primitive.

    +
    +void bgfx::setIndexBuffer(IndexBufferHandle _handle)
    +

    Set index buffer for draw primitive.

    +
    +
    Parameters:
    +

    _handle – [in] Index buffer.

    +
    +
    +
    + +
    +
    +void bgfx::setIndexBuffer(IndexBufferHandle _handle, uint32_t _firstIndex, uint32_t _numIndices)
    +

    Set index buffer for draw primitive.

    -
    Attention

    C99’s equivalent binding is bgfx_set_instance_data_buffer.

    +
    Attention

    C99’s equivalent binding is bgfx_set_index_buffer.

    Parameters:
    -

    _idb – [in] Transient instance data buffer.

    +
      +
    • _handle – [in] Index buffer.

    • +
    • _firstIndex – [in] First index to render.

    • +
    • _numIndices – [in] Number of indices to render.

    • +
    +
    +
    +
    + +
    +
    +void bgfx::setIndexBuffer(DynamicIndexBufferHandle _handle)
    +

    Set index buffer for draw primitive.

    +
    +
    Parameters:
    +

    _handle – [in] Dynamic index buffer.

    +
    +
    +
    + +
    +
    +void bgfx::setIndexBuffer(DynamicIndexBufferHandle _handle, uint32_t _firstIndex, uint32_t _numIndices)
    +

    Set index buffer for draw primitive.

    +

    +
    Attention

    C99’s equivalent binding is bgfx_set_dynamic_index_buffer.

    +
    +
    +

    +
    +
    Parameters:
    +
      +
    • _handle – [in] Dynamic index buffer.

    • +
    • _firstIndex – [in] First index to render.

    • +
    • _numIndices – [in] Number of indices to render.

    • +
    +
    +
    +
    + +
    +
    +void bgfx::setIndexBuffer(const TransientIndexBuffer *_tib)
    +

    Set index buffer for draw primitive.

    +
    +
    Parameters:
    +

    _tib – [in] Transient index buffer.

    +
    +
    +
    + +
    +
    +void bgfx::setIndexBuffer(const TransientIndexBuffer *_tib, uint32_t _firstIndex, uint32_t _numIndices)
    +

    Set index buffer for draw primitive.

    +

    +
    Attention

    C99’s equivalent binding is bgfx_set_transient_index_buffer.

    +
    +
    +

    +
    +
    Parameters:
    +
      +
    • _tib – [in] Transient index buffer.

    • +
    • _firstIndex – [in] First index to render.

    • +
    • _numIndices – [in] Number of indices to render.

    • +
    +
    +
    +
    + +
    +
    +void bgfx::setVertexBuffer(uint8_t _stream, VertexBufferHandle _handle, uint32_t _startVertex, uint32_t _numVertices, VertexLayoutHandle _layoutHandle = BGFX_INVALID_HANDLE)
    +

    Set vertex buffer for draw primitive.

    +

    +
    Attention

    C99’s equivalent bindings are bgfx_set_vertex_buffer_with_layout, bgfx_set_vertex_buffer.

    +
    +
    +

    +
    +
    Parameters:
    +
      +
    • _stream – [in] Vertex stream.

    • +
    • _handle – [in] Vertex buffer.

    • +
    • _startVertex – [in] First vertex to render.

    • +
    • _numVertices – [in] Number of vertices to render.

    • +
    • _layoutHandle – [in] Vertex layout for aliasing vertex buffer. If invalid handle is used, vertex layout used for creation of vertex buffer will be used.

    • +
    +
    +
    +
    + +
    +
    +void bgfx::setVertexBuffer(uint8_t _stream, DynamicVertexBufferHandle _handle, uint32_t _startVertex, uint32_t _numVertices, VertexLayoutHandle _layoutHandle = BGFX_INVALID_HANDLE)
    +

    Set vertex buffer for draw primitive.

    +

    +
    Attention

    C99’s equivalent bindings are bgfx_set_dynamic_vertex_buffer_with_layout, bgfx_set_dynamic_vertex_buffer.

    +
    +
    +

    +
    +
    Parameters:
    +
      +
    • _stream – [in] Vertex stream.

    • +
    • _handle – [in] Dynamic vertex buffer.

    • +
    • _startVertex – [in] First vertex to render.

    • +
    • _numVertices – [in] Number of vertices to render.

    • +
    • _layoutHandle – [in] Vertex layout for aliasing vertex buffer. If invalid handle is used, vertex layout used for creation of vertex buffer will be used.

    • +
    +
    +
    +
    + +
    +
    +void bgfx::setVertexBuffer(uint8_t _stream, const TransientVertexBuffer *_tvb, uint32_t _startVertex, uint32_t _numVertices, VertexLayoutHandle _layoutHandle = BGFX_INVALID_HANDLE)
    +

    Set vertex buffer for draw primitive.

    +

    +
    Attention

    C99’s equivalent bindings are bgfx_set_transient_vertex_buffer_with_layout, bgfx_set_transient_vertex_buffer.

    +
    +
    +

    +
    +
    Parameters:
    +
      +
    • _stream – [in] Vertex stream.

    • +
    • _tvb – [in] Transient vertex buffer.

    • +
    • _startVertex – [in] First vertex to render.

    • +
    • _numVertices – [in] Number of vertices to render.

    • +
    • _layoutHandle – [in] Vertex layout for aliasing vertex buffer. If invalid handle is used, vertex layout used for creation of vertex buffer will be used.

    • +
    +
    +
    +
    + +
    +
    +void bgfx::setVertexCount(uint32_t _numVertices)
    +

    Set number of vertices for auto generated vertices use in conjunction with gl_VertexID.

    +

    +
    Attention

    Availability depends on: BGFX_CAPS_VERTEX_ID.

    +
    +
    Attention

    C99’s equivalent binding is bgfx_set_vertex_count.

    +
    +
    +

    +
    +
    Parameters:
    +

    _numVertices – [in] Number of vertices.

    +
    +
    +
    + +
    +
    +void bgfx::setInstanceDataBuffer(const InstanceDataBuffer *_idb)
    +

    Set instance data buffer for draw primitive.

    +
    +
    Parameters:
    +

    _idb – [in] Transient instance data buffer.

    @@ -5174,7 +4653,7 @@ Otherwise, use bgfx::setViewScissor.

    -void bgfx::setInstanceDataBuffer(VertexBufferHandle _handle, uint32_t _start, uint32_t _num)
    +void bgfx::setInstanceDataBuffer(VertexBufferHandle _handle, uint32_t _startVertex, uint32_t _num)

    Set instance data buffer for draw primitive.

    Attention

    C99’s equivalent binding is bgfx_set_instance_data_from_vertex_buffer.

    @@ -5185,7 +4664,7 @@ Otherwise, use bgfx::setViewScissor.

    Parameters:
    • _handle – [in] Vertex buffer.

    • -
    • _start – [in] First instance data.

    • +
    • _startVertex – [in] First instance data.

    • _num – [in] Number of data instances.

    @@ -5194,7 +4673,7 @@ Otherwise, use bgfx::setViewScissor.

    -void bgfx::setInstanceDataBuffer(DynamicVertexBufferHandle _handle, uint32_t _start, uint32_t _num)
    +void bgfx::setInstanceDataBuffer(DynamicVertexBufferHandle _handle, uint32_t _startVertex, uint32_t _num)

    Set instance data buffer for draw primitive.

    Attention

    C99’s equivalent binding is bgfx_set_instance_data_from_dynamic_vertex_buffer.

    @@ -5204,8 +4683,8 @@ Otherwise, use bgfx::setViewScissor.

    Parameters:
      -
    • _handle – [in] Vertex buffer.

    • -
    • _start – [in] First instance data.

    • +
    • _handle – [in] Dynamic vertex buffer.

    • +
    • _startVertex – [in] First instance data.

    • _num – [in] Number of data instances.

    @@ -5217,7 +4696,7 @@ Otherwise, use bgfx::setViewScissor.

    void bgfx::setInstanceCount(uint32_t _numInstances)

    Set number of instances for auto generated instances use in conjunction with gl_InstanceID.

    -
    Attention

    Availability depends on: BGFX_CAPS_VERTEX_ID.

    +
    Attention

    Availability depends on: BGFX_CAPS_VERTEX_ID.

    Attention

    C99’s equivalent binding is bgfx_set_instance_count.

    @@ -5233,6 +4712,7 @@ Otherwise, use bgfx::setViewScissor.

    Textures

    +

    Bind textures to texture stages for draw calls.

    void bgfx::setTexture(uint8_t _stage, UniformHandle _sampler, TextureHandle _handle, uint32_t _flags = UINT32_MAX)
    @@ -5261,32 +4741,13 @@ Otherwise, use bgfx::setViewScissor.

    Uniforms

    -
    -
    -void bgfx::setUniform(UniformHandle _handle, const void *_value, uint16_t _num = 1)
    -

    Set shader uniform parameter for draw primitive.

    -

    -
    Attention

    C99’s equivalent binding is bgfx_set_uniform.

    -
    -
    -

    -
    -
    Parameters:
    -
      -
    • _handle – [in] Uniform.

    • -
    • _value – [in] Pointer to uniform data.

    • -
    • _num – [in] Number of elements. Passing UINT16_MAX will use the _num passed on uniform creation.

    • -
    -
    -
    -
    - +

    Set shader uniform parameters for draw calls.

    void bgfx::setViewUniform(ViewId _id, UniformHandle _handle, const void *_value, uint16_t _num = 1)

    Set shader uniform parameter for view.

    -
    Attention

    Uniform must be created with bgfx::UniformFreq::View argument.

    +
    Attention

    Uniform must be created with bgfx::UniformFreq::View argument.

    Attention

    C99’s equivalent binding is bgfx_set_view_uniform.

    @@ -5309,7 +4770,7 @@ Otherwise, use bgfx::setViewScissor.

    void bgfx::setFrameUniform(UniformHandle _handle, const void *_value, uint16_t _num = 1)

    Set shader uniform parameter for frame.

    -
    Attention

    Uniform must be created with bgfx::UniformFreq::View argument.

    +
    Attention

    Uniform must be created with bgfx::UniformFreq::View argument.

    Attention

    C99’s equivalent binding is bgfx_set_frame_uniform.

    @@ -5326,6 +4787,26 @@ Otherwise, use bgfx::setViewScissor.

    +
    +
    +void bgfx::setUniform(UniformHandle _handle, const void *_value, uint16_t _num = 1)
    +

    Set shader uniform parameter for draw primitive.

    +

    +
    Attention

    C99’s equivalent binding is bgfx_set_uniform.

    +
    +
    +

    +
    +
    Parameters:
    +
      +
    • _handle – [in] Uniform.

    • +
    • _value – [in] Pointer to uniform data.

    • +
    • _num – [in] Number of elements. Passing UINT16_MAX will use the _num passed on uniform creation.

    • +
    +
    +
    +
    +

    Submit

    @@ -5345,7 +4826,7 @@ Otherwise, use bgfx::setViewScissor.

  • _id – [in] View id.

  • _program – [in] Program.

  • _depth – [in] Depth for sorting.

  • -
  • _flags – [in] Discard or preserve states. See BGFX_DISCARD_*.

  • +
  • _flags – [in] Which states to discard for next draw. See BGFX_DISCARD_*.

  • @@ -5367,7 +4848,7 @@ Otherwise, use bgfx::setViewScissor.

  • _program – [in] Program.

  • _occlusionQuery – [in] Occlusion query.

  • _depth – [in] Depth for sorting.

  • -
  • _flags – [in] Discard or preserve states. See BGFX_DISCARD_*.

  • +
  • _flags – [in] Which states to discard for next draw. See BGFX_DISCARD_*.

  • @@ -5378,7 +4859,7 @@ Otherwise, use bgfx::setViewScissor.

    void bgfx::submit(ViewId _id, ProgramHandle _program, IndirectBufferHandle _indirectHandle, uint32_t _start = 0, uint32_t _num = 1, uint32_t _depth = 0, uint8_t _flags = BGFX_DISCARD_ALL)

    Submit primitive for rendering with index and instance data info from indirect buffer.

    -
    Attention

    Availability depends on: BGFX_CAPS_DRAW_INDIRECT.

    +
    Attention

    Availability depends on: BGFX_CAPS_DRAW_INDIRECT.

    Attention

    C99’s equivalent binding is bgfx_submit_indirect.

    @@ -5393,7 +4874,7 @@ Otherwise, use bgfx::setViewScissor.

  • _start – [in] First element in indirect buffer.

  • _num – [in] Number of draws.

  • _depth – [in] Depth for sorting.

  • -
  • _flags – [in] Discard or preserve states. See BGFX_DISCARD_*.

  • +
  • _flags – [in] Which states to discard for next draw. See BGFX_DISCARD_*.

  • @@ -5404,7 +4885,7 @@ Otherwise, use bgfx::setViewScissor.

    void bgfx::submit(ViewId _id, ProgramHandle _program, IndirectBufferHandle _indirectHandle, uint32_t _start, IndexBufferHandle _numHandle, uint32_t _numIndex = 0, uint32_t _numMax = UINT32_MAX, uint32_t _depth = 0, uint8_t _flags = BGFX_DISCARD_ALL)

    Submit primitive for rendering with index and instance data info and draw count from indirect buffers.

    -
    Attention

    Availability depends on:BGFX_CAPS_DRAW_INDIRECT_COUNT.

    +
    Attention

    Availability depends on: BGFX_CAPS_DRAW_INDIRECT_COUNT.

    Attention

    C99’s equivalent binding is bgfx_submit_indirect_count.

    @@ -5421,7 +4902,7 @@ Otherwise, use bgfx::setViewScissor.

  • _numIndex – [in] Element in number buffer.

  • _numMax – [in] Max number of draws.

  • _depth – [in] Depth for sorting.

  • -
  • _flags – [in] Discard or preserve states. See BGFX_DISCARD_*.

  • +
  • _flags – [in] Which states to discard for next draw. See BGFX_DISCARD_*.

  • @@ -5431,9 +4912,10 @@ Otherwise, use bgfx::setViewScissor.

    Compute

    -

    Compute state is not preserved between compute dispatches; all state is cleared after calling bgfx::dispatch.

    -
    -

    Buffers

    +

    Compute state is not preserved between compute dispatches; all state is cleared after calling bgfx::dispatch.

    +
    +

    Buffers

    +

    Bind buffers to compute stages.

    struct Access
    @@ -5581,6 +5063,7 @@ Otherwise, use bgfx::setViewScissor.

    Images

    +

    Bind texture images to compute stages.

    void bgfx::setImage(uint8_t _stage, TextureHandle _handle, uint8_t _mip, Access::Enum _access, TextureFormat::Enum _format = TextureFormat::Count)
    @@ -5593,10 +5076,10 @@ Otherwise, use bgfx::setViewScissor.

    Parameters:
      -
    • _stage – [in] Texture unit.

    • +
    • _stage – [in] Compute stage.

    • _handle – [in] Texture handle.

    • _mip – [in] Mip level.

    • -
    • _access – [in] Texture access. See Access::Enum.

    • +
    • _access – [in] Image access. See Access::Enum.

    • _format – [in] Texture format. See: TextureFormat::Enum.

    @@ -5609,7 +5092,7 @@ Otherwise, use bgfx::setViewScissor.

    In Views, all draw commands are executed after blit and compute commands.

    -void bgfx::dispatch(ViewId _id, ProgramHandle _handle, uint32_t _numX = 1, uint32_t _numY = 1, uint32_t _numZ = 1, uint8_t _flags = BGFX_DISCARD_ALL)
    +void bgfx::dispatch(ViewId _id, ProgramHandle _program, uint32_t _numX = 1, uint32_t _numY = 1, uint32_t _numZ = 1, uint8_t _flags = BGFX_DISCARD_ALL)

    Dispatch compute.

    Attention

    C99’s equivalent binding is bgfx_dispatch.

    @@ -5620,7 +5103,7 @@ Otherwise, use bgfx::setViewScissor.

    Parameters:
    • _id – [in] View id.

    • -
    • _handle – [in] Compute program.

    • +
    • _program – [in] Compute program.

    • _numX – [in] Number of groups X.

    • _numY – [in] Number of groups Y.

    • _numZ – [in] Number of groups Z.

    • @@ -5632,7 +5115,7 @@ Otherwise, use bgfx::setViewScissor.

      -void bgfx::dispatch(ViewId _id, ProgramHandle _handle, IndirectBufferHandle _indirectHandle, uint32_t _start = 0, uint32_t _num = 1, uint8_t _flags = BGFX_DISCARD_ALL)
      +void bgfx::dispatch(ViewId _id, ProgramHandle _program, IndirectBufferHandle _indirectHandle, uint32_t _start = 0, uint32_t _num = 1, uint8_t _flags = BGFX_DISCARD_ALL)

      Dispatch compute indirect.

      Attention

      C99’s equivalent binding is bgfx_dispatch_indirect.

      @@ -5643,7 +5126,7 @@ Otherwise, use bgfx::setViewScissor.

      Parameters:
      • _id – [in] View id.

      • -
      • _handle – [in] Compute program.

      • +
      • _program – [in] Compute program.

      • _indirectHandle – [in] Indirect buffer.

      • _start – [in] First element in indirect buffer.

      • _num – [in] Number of dispatches.

      • @@ -5663,12 +5146,10 @@ Otherwise, use bgfx::setViewScissor.

        void bgfx::blit(ViewId _id, TextureHandle _dst, uint16_t _dstX, uint16_t _dstY, TextureHandle _src, uint16_t _srcX = 0, uint16_t _srcY = 0, uint16_t _width = UINT16_MAX, uint16_t _height = UINT16_MAX)

        Blit 2D texture region between two 2D textures.

        -
        Attention

        Destination texture must be created with BGFX_TEXTURE_BLIT_DST flag.

        +
        Attention

        Destination texture must be created with BGFX_TEXTURE_BLIT_DST flag.

        Attention

        Availability depends on: BGFX_CAPS_TEXTURE_BLIT.

        -
        Attention

        C99’s equivalent binding is bgfx_blit.

        -

        @@ -5691,11 +5172,11 @@ Otherwise, use bgfx::setViewScissor.

        void bgfx::blit(ViewId _id, TextureHandle _dst, uint8_t _dstMip, uint16_t _dstX, uint16_t _dstY, uint16_t _dstZ, TextureHandle _src, uint8_t _srcMip = 0, uint16_t _srcX = 0, uint16_t _srcY = 0, uint16_t _srcZ = 0, uint16_t _width = UINT16_MAX, uint16_t _height = UINT16_MAX, uint16_t _depth = UINT16_MAX)
        -

        Blit texture region between two textures.

        +

        Blit 2D texture region between two 2D textures.

        -
        Attention

        Destination texture must be created with BGFX_TEXTURE_BLIT_DST flag.

        +
        Attention

        Destination texture must be created with BGFX_TEXTURE_BLIT_DST flag.

        -
        Attention

        Availability depends on: BGFX_CAPS_TEXTURE_BLIT.

        +
        Attention

        Availability depends on: BGFX_CAPS_TEXTURE_BLIT.

        Attention

        C99’s equivalent binding is bgfx_blit.

        @@ -5727,101 +5208,15 @@ Otherwise, use bgfx::setViewScissor.

    Resources

    -
    -
    -struct Memory
    -

    Memory must be obtained by calling bgfx::alloc, bgfx::copy, or bgfx::makeRef.

    -

    -
    Attention

    It is illegal to create this structure on stack and pass it to any bgfx API.

    -
    -
    Attention

    C99’s equivalent binding is bgfx_memory_t.

    -
    -
    -

    -
    -

    Public Members

    -
    -
    -uint8_t *data
    -

    Pointer to data.

    -
    - -
    -
    -uint32_t size
    -

    Data size.

    -
    - -
    -
    - -
    -
    -const Memory *bgfx::alloc(uint32_t _size)
    -

    Allocate buffer to pass to bgfx calls. Data will be freed inside bgfx.

    -

    -
    Attention

    C99’s equivalent binding is bgfx_alloc.

    -
    -
    -

    -
    -
    Parameters:
    -

    _size – [in] Size to allocate.

    -
    -
    -
    - -
    -
    -const Memory *bgfx::copy(const void *_data, uint32_t _size)
    -

    Allocate buffer and copy data into it. Data will be freed inside bgfx.

    -

    -
    Attention

    C99’s equivalent binding is bgfx_copy.

    -
    -
    -

    -
    -
    Parameters:
    -
      -
    • _data – [in] Pointer to data to be copied.

    • -
    • _size – [in] Size of data to be copied.

    • -
    -
    -
    -
    - -
    -
    -const Memory *bgfx::makeRef(const void *_data, uint32_t _size, ReleaseFn _releaseFn = NULL, void *_userData = NULL)
    -

    Make reference to data to pass to bgfx. Unlike bgfx::alloc, this call doesn’t allocate memory for data. It just copies the _data pointer. You can pass ReleaseFn function pointer to release this memory after it’s consumed, otherwise you must make sure _data is available for at least 2 bgfx::frame calls. ReleaseFn function must be able to be called from any thread.

    -

    -
    Attention

    Data passed must be available for at least 2 bgfx::frame calls.

    -
    -
    Attention

    C99’s equivalent bindings are bgfx_make_ref, bgfx_make_ref_release.

    -
    -
    -

    -
    -
    Parameters:
    -
      -
    • _data – [in] Pointer to data.

    • -
    • _size – [in] Size of data.

    • -
    • _releaseFn – [in] Callback function to release memory after use.

    • -
    • _userData – [in] User data to be passed to callback function.

    • -
    -
    -
    -
    -

    Shaders and Programs

    Note

    -

    Shaders must be compiled with offline command line too shaderc.

    +

    Shaders must be compiled with offline command line tool shaderc.

    -ShaderHandle bgfx::createShader(const Memory *_mem)
    +ShaderHandle bgfx::createShader(const Memory *_mem)

    Create shader from memory buffer.

    Remark

    @@ -5833,8 +5228,11 @@ Otherwise, use bgfx::setViewScissor.

    -
    Returns:
    -

    Shader handle.

    +
    Parameters:
    +

    _mem – [in] Shader binary.

    +
    +
    Returns:
    +

    Shader handle.

    @@ -5856,8 +5254,8 @@ Otherwise, use bgfx::setViewScissor.

    Parameters:
    • _handle – [in] Shader handle.

    • -
    • _uniforms – [in] UniformHandle array where data will be stored.

    • -
    • _max – [in] Maximum capacity of array.

    • +
    • _uniforms – [out] UniformHandle array where data will be stored.

    • +
    • _max – [in] Maximum capacity of array.

    Returns:
    @@ -5869,8 +5267,12 @@ Otherwise, use bgfx::setViewScissor.

    void bgfx::destroy(ShaderHandle _handle)
    -

    Destroy shader. Once a shader program is created with _handle, it is safe to destroy that shader.

    -

    +

    Destroy shader.

    +

    +

    Remark

    +

    Once a shader program is created with _handle, it is safe to destroy that shader.

    +
    +
    Attention

    C99’s equivalent binding is bgfx_destroy_shader.

    @@ -5896,7 +5298,7 @@ Otherwise, use bgfx::setViewScissor.

    • _vsh – [in] Vertex shader.

    • _fsh – [in] Fragment shader.

    • -
    • _destroyShaders – [in] If true, shaders will be destroyed when program is destroyed.

    • +
    • _destroyShaders – [in] If true, shaders will be destroyed when program is destroyed.

    Returns:
    @@ -5907,7 +5309,7 @@ Otherwise, use bgfx::setViewScissor.

    -ProgramHandle bgfx::createProgram(ShaderHandle _csh, bool _destroyShader = false)
    +ProgramHandle bgfx::createProgram(ShaderHandle _csh, bool _destroyShaders = false)

    Create program with compute shader.

    Attention

    C99’s equivalent binding is bgfx_create_compute_program.

    @@ -5918,7 +5320,7 @@ Otherwise, use bgfx::setViewScissor.

    Parameters:
    • _csh – [in] Compute shader.

    • -
    • _destroyShader – [in] If true, shader will be destroyed when program is destroyed.

    • +
    • _destroyShaders – [in] If true, shaders will be destroyed when program is destroyed.

    Returns:
    @@ -5944,8 +5346,8 @@ Otherwise, use bgfx::setViewScissor.

    -
    -

    Uniforms

    +
    +

    Uniforms

    struct UniformType
    @@ -6002,62 +5404,12 @@ Otherwise, use bgfx::setViewScissor.

    -
    -
    -UniformHandle bgfx::createUniform(const char *_name, UniformType::Enum _type, uint16_t _num = 1)
    -

    Create shader uniform parameter.

    -

      -
    • u_modelViewProj mat4 - concatenated model view projection matrix.

        -
      • u_alphaRef float - alpha reference value for alpha test.

      • -
      -

    • -
    -
    -

    Remark

    -

      -
    1. Uniform names are unique. It’s valid to call bgfx::createUniform multiple times with the same uniform name. The library will always return the same handle, but the handle reference count will be incremented. This means that the same number of bgfx::destroyUniform must be called to properly destroy the uniform.

    2. -
    3. Predefined uniforms (declared in bgfx_shader.sh):

        -
      • u_viewRect vec4(x, y, width, height) - view rectangle for current view, in pixels.

      • -
      • u_viewTexel vec4(1.0/width, 1.0/height, undef, undef) - inverse width and height

      • -
      • u_view mat4 - view matrix

      • -
      • u_invView mat4 - inverted view matrix

      • -
      • u_proj mat4 - projection matrix

      • -
      • u_invProj mat4 - inverted projection matrix

      • -
      • u_viewProj mat4 - concatenated view projection matrix

      • -
      • u_invViewProj mat4 - concatenated inverted view projection matrix

      • -
      • u_model mat4[BGFX_CONFIG_MAX_BONES] - array of model matrices.

      • -
      • u_modelView mat4 - concatenated model view matrix, only first model matrix from array is used.

      • -
      -

    4. -
    -

    -
    -

    -

    -
    Attention

    C99’s equivalent binding is bgfx_create_uniform.

    -
    -
    -

    -
    -
    Parameters:
    -
      -
    • _name – [in] Uniform name in shader.

    • -
    • _type – [in] Type of uniform (See: bgfx::UniformType).

    • -
    • _num – [in] Number of elements in array.

    • -
    -
    -
    Returns:
    -

    Handle to uniform object.

    -
    -
    -
    -
    struct UniformFreq

    Uniform frequency enum.

    -
    Attention

    C99’s equivalent binding is bgfx_bgfx_uniform_freq_t.

    +
    Attention

    C99’s equivalent binding is bgfx_uniform_freq_t.

    @@ -6096,6 +5448,84 @@ Otherwise, use bgfx::setViewScissor.

    +
    +
    +struct UniformInfo
    +

    Uniform info.

    +

    +
    Attention

    C99’s equivalent binding is bgfx_uniform_info_t.

    +
    +
    +

    +
    +

    Public Members

    +
    +
    +char name[256]
    +

    Uniform name.

    +
    + +
    +
    +UniformType::Enum type
    +

    Uniform type.

    +
    + +
    +
    +uint16_t num
    +

    Number of elements in array.

    +
    + +
    +
    + +
    +
    +UniformHandle bgfx::createUniform(const char *_name, UniformType::Enum _type, uint16_t _num = 1)
    +

    Create shader uniform parameter.

    +

    +

    Remark

    +

      +
    1. Uniform names are unique. It’s valid to call bgfx::createUniform multiple times with the same uniform name. The library will always return the same handle, but the handle reference count will be incremented. This means that the same number of bgfx::destroyUniform must be called to properly destroy the uniform.

    2. +
    3. Predefined uniforms (declared in bgfx_shader.sh):

        +
      • u_viewRect vec4(x, y, width, height) - view rectangle for current view, in pixels.

      • +
      • u_viewTexel vec4(1.0/width, 1.0/height, undef, undef) - inverse width and height

      • +
      • u_view mat4 - view matrix

      • +
      • u_invView mat4 - inverted view matrix

      • +
      • u_proj mat4 - projection matrix

      • +
      • u_invProj mat4 - inverted projection matrix

      • +
      • u_viewProj mat4 - concatenated view projection matrix

      • +
      • u_invViewProj mat4 - concatenated inverted view projection matrix

      • +
      • u_model mat4[BGFX_CONFIG_MAX_BONES] - array of model matrices.

      • +
      • u_modelView mat4 - concatenated model view matrix, only first model matrix from array is used.

      • +
      • u_invModelView mat4 - inverted concatenated model view matrix.

      • +
      • u_modelViewProj mat4 - concatenated model view projection matrix.

      • +
      • u_alphaRef float - alpha reference value for alpha test.

      • +
      +

    4. +
    +

    +
    +
    +
    Attention

    C99’s equivalent binding is bgfx_create_uniform.

    +
    +
    +

    +
    +
    Parameters:
    +
      +
    • _name – [in] Uniform name in shader.

    • +
    • _type – [in] Type of uniform (See: bgfx::UniformType).

    • +
    • _num – [in] Number of elements in array.

    • +
    +
    +
    Returns:
    +

    Handle to uniform object.

    +
    +
    +
    +
    UniformHandle bgfx::createUniform(const char *_name, UniformFreq::Enum _freq, UniformType::Enum _type, uint16_t _num = 1)
    @@ -6143,38 +5573,6 @@ Otherwise, use bgfx::setViewScissor.

    -
    -
    -struct UniformInfo
    -

    Uniform info.

    -

    -
    Attention

    C99’s equivalent binding is bgfx_uniform_info_t.

    -
    -
    -

    -
    -

    Public Members

    -
    -
    -char name[256]
    -

    Uniform name.

    -
    - -
    -
    -UniformType::Enum type
    -

    Uniform type.

    -
    - -
    -
    -uint16_t num
    -

    Number of elements in array.

    -
    - -
    -
    -
    void bgfx::getUniformInfo(UniformHandle _handle, UniformInfo &_info)
    @@ -6213,280 +5611,6 @@ Otherwise, use bgfx::setViewScissor.

    Vertex Buffers

    -
    -
    -VertexLayoutHandle bgfx::createVertexLayout(const VertexLayout &_layout)
    -

    Create vertex layout.

    -

    -
    Attention

    C99’s equivalent binding is bgfx_create_vertex_layout.

    -
    -
    -

    -
    - -
    -
    -void bgfx::destroy(VertexLayoutHandle _handle)
    -

    Destroy vertex layout.

    -

    -
    Attention

    C99’s equivalent binding is bgfx_destroy_vertex_layout.

    -
    -
    -

    -
    - -
    -
    -VertexBufferHandle bgfx::createVertexBuffer(const Memory *_mem, const VertexLayout &_layout, uint16_t _flags = BGFX_BUFFER_NONE)
    -

    Create static vertex buffer.

    -

    -
    Attention

    C99’s equivalent binding is bgfx_create_vertex_buffer.

    -
    -
    -

    -
    -
    Parameters:
    -
      -
    • _mem – [in] Vertex buffer data.

    • -
    • _layout – [in] Vertex layout.

    • -
    • _flags – [in] Buffer creation flags.

        -
      • BGFX_BUFFER_NONE - No flags.

      • -
      • BGFX_BUFFER_COMPUTE_READ - Buffer will be read from by compute shader.

      • -
      • BGFX_BUFFER_COMPUTE_WRITE - Buffer will be written into by compute shader. When buffer is created with BGFX_BUFFER_COMPUTE_WRITE flag it cannot be updated from CPU.

      • -
      • BGFX_BUFFER_COMPUTE_READ_WRITE - Buffer will be used for read/write by compute shader.

      • -
      • BGFX_BUFFER_ALLOW_RESIZE - Buffer will resize on buffer update if a different amount of data is passed. If this flag is not specified, and more data is passed on update, the buffer will be trimmed to fit the existing buffer size. This flag has effect only on dynamic buffers.

      • -
      • BGFX_BUFFER_INDEX32 - Buffer is using 32-bit indices. This flag has effect only on index buffers.

      • -
      -

    • -
    -
    -
    Returns:
    -

    Static vertex buffer handle.

    -
    -
    -
    - -
    -
    -void bgfx::setName(VertexBufferHandle _handle, const char *_name, int32_t _len = INT32_MAX)
    -

    Set static vertex buffer debug name.

    -

    -
    Attention

    C99’s equivalent binding is bgfx_set_vertex_buffer_name.

    -
    -
    -

    -
    -
    Parameters:
    -
      -
    • _handle – [in] Static vertex buffer handle.

    • -
    • _name – [in] Static vertex buffer name.

    • -
    • _len – [in] Static vertex buffer name length (if length is INT32_MAX, it’s expected that _name is zero terminated string.

    • -
    -
    -
    -
    - -
    -
    -void bgfx::destroy(VertexBufferHandle _handle)
    -

    Destroy static vertex buffer.

    -

    -
    Attention

    C99’s equivalent binding is bgfx_destroy_vertex_buffer.

    -
    -
    -

    -
    -
    Parameters:
    -

    _handle – [in] Static vertex buffer handle.

    -
    -
    -
    - -
    -
    -struct VertexLayout
    -

    Vertex layout.

    -

    -
    Attention

    C99’s equivalent binding is bgfx_vertex_layout_t.

    -
    -
    -

    -
    -

    Public Functions

    -
    -
    -VertexLayout &begin(RendererType::Enum _renderer = RendererType::Noop)
    -

    Start VertexLayout.

    -

    -
    Attention

    C99’s equivalent binding is bgfx_vertex_layout_begin.

    -
    -
    -

    -
    -
    Parameters:
    -

    _renderer – [in] Renderer backend type. See: bgfx::RendererType

    -
    -
    Returns:
    -

    Returns itself.

    -
    -
    -
    - -
    -
    -void end()
    -

    End VertexLayout.

    -

    -
    Attention

    C99’s equivalent binding is bgfx_vertex_layout_end.

    -
    -
    -

    -
    - -
    -
    -VertexLayout &add(Attrib::Enum _attrib, uint8_t _num, AttribType::Enum _type, bool _normalized = false, bool _asInt = false)
    -

    Add attribute to VertexLayout.

    -

    -

    Remark

    -

    Must be called between begin/end.

    -
    -
    -
    Attention

    C99’s equivalent binding is bgfx_vertex_layout_add.

    -
    -
    -

    -
    -
    Parameters:
    -
      -
    • _attrib – [in] Attribute semantics. See: bgfx::Attrib

    • -
    • _num – [in] Number of elements 1, 2, 3 or 4.

    • -
    • _type – [in] Element type.

    • -
    • _normalized – [in] When using fixed point AttribType (f.e. Uint8) value will be normalized for vertex shader usage. When normalized is set to true, AttribType::Uint8 value in range 0-255 will be in range 0.0-1.0 in vertex shader.

    • -
    • _asInt – [in] Packaging rule for vertexPack, vertexUnpack, and vertexConvert for AttribType::Uint8 and AttribType::Int16. Unpacking code must be implemented inside vertex shader.

    • -
    -
    -
    Returns:
    -

    Returns itself.

    -
    -
    -
    - -
    -
    -VertexLayout &skip(uint8_t _num)
    -

    Skip _num bytes in vertex stream.

    -

    -
    Attention

    C99’s equivalent binding is bgfx_vertex_layout_skip.

    -
    -
    -

    -
    -
    Returns:
    -

    Returns itself.

    -
    -
    -
    - -
    -
    -void decode(Attrib::Enum _attrib, uint8_t &_num, AttribType::Enum &_type, bool &_normalized, bool &_asInt) const
    -

    Decode attribute.

    -

    -
    Attention

    C99’s equivalent binding is bgfx_vertex_layout_decode.

    -
    -
    -

    -
    - -
    -
    -inline bool has(Attrib::Enum _attrib) const
    -

    Returns true if VertexLayout contains attribute.

    -

    -
    Attention

    C99’s equivalent binding is bgfx_vertex_layout_has.

    -
    -
    -

    -
    -
    Parameters:
    -

    _attrib – [in] Attribute semantics. See: bgfx::Attrib

    -
    -
    Returns:
    -

    True if VertexLayout contains attribute.

    -
    -
    -
    - -
    -
    -inline uint16_t getOffset(Attrib::Enum _attrib) const
    -

    Returns relative attribute offset from the vertex.

    -
    -
    Parameters:
    -

    _attrib – [in] Attribute semantics. See: bgfx::Attrib

    -
    -
    Returns:
    -

    Relative attribute offset from the vertex.

    -
    -
    -
    - -
    -
    -inline uint16_t getStride() const
    -

    Returns vertex stride.

    -
    -
    Returns:
    -

    Vertex stride.

    -
    -
    -
    - -
    -
    -inline uint32_t getSize(uint32_t _num) const
    -

    Returns size of vertex buffer for number of vertices.

    -
    -
    Parameters:
    -

    _num – [in] Number of vertices.

    -
    -
    Returns:
    -

    Size of vertex buffer for number of vertices.

    -
    -
    -
    - -
    -
    -

    Public Members

    -
    -
    -uint32_t m_hash
    -

    Hash.

    -
    - -
    -
    -uint16_t m_stride
    -

    Stride.

    -
    - -
    -
    -uint16_t m_offset[Attrib::Count]
    -

    Attribute offsets.

    -
    - -
    -
    -uint16_t m_attributes[Attrib::Count]
    -

    Used attributes.

    -
    - -
    -
    -
    struct Attrib
    @@ -6677,6 +5801,299 @@ Otherwise, use bgfx::setViewScissor.

    +
    +
    +struct VertexLayout
    +

    Vertex layout.

    +

    +
    Attention

    C99’s equivalent binding is bgfx_vertex_layout_t.

    +
    +
    +

    +
    +

    Public Functions

    +
    +
    +VertexLayout &begin(RendererType::Enum _rendererType = RendererType::Noop)
    +

    Start VertexLayout.

    +

    +
    Attention

    C99’s equivalent binding is bgfx_vertex_layout_begin.

    +
    +
    +

    +
    +
    Parameters:
    +

    _rendererType – [in] Renderer backend type. See: bgfx::RendererType

    +
    +
    Returns:
    +

    Returns itself.

    +
    +
    +
    + +
    +
    +VertexLayout &add(Attrib::Enum _attrib, uint8_t _num, AttribType::Enum _type, bool _normalized = false, bool _asInt = false)
    +

    Add attribute to VertexLayout.

    +

    +

    Remark

    +

    Must be called between begin/end.

    +
    +
    +
    Attention

    C99’s equivalent binding is bgfx_vertex_layout_add.

    +
    +
    +

    +
    +
    Parameters:
    +
      +
    • _attrib – [in] Attribute semantics. See: bgfx::Attrib

    • +
    • _num – [in] Number of elements 1, 2, 3 or 4.

    • +
    • _type – [in] Element type.

    • +
    • _normalized – [in] When using fixed point AttribType (f.e. Uint8) value will be normalized for vertex shader usage. When normalized is set to true, AttribType::Uint8 value in range 0-255 will be in range 0.0-1.0 in vertex shader.

    • +
    • _asInt – [in] Packaging rule for vertexPack, vertexUnpack, and vertexConvert for AttribType::Uint8 and AttribType::Int16. Unpacking code must be implemented inside vertex shader.

    • +
    +
    +
    Returns:
    +

    Returns itself.

    +
    +
    +
    + +
    +
    +void decode(Attrib::Enum _attrib, uint8_t &_num, AttribType::Enum &_type, bool &_normalized, bool &_asInt) const
    +

    Decode attribute.

    +

    +
    Attention

    C99’s equivalent binding is bgfx_vertex_layout_decode.

    +
    +
    +

    +
    +
    Parameters:
    +
      +
    • _attrib – [in] Attribute semantics. See: bgfx::Attrib

    • +
    • _num – [out] Number of elements.

    • +
    • _type – [out] Element type.

    • +
    • _normalized – [out] Attribute is normalized.

    • +
    • _asInt – [out] Attribute is packed as int.

    • +
    +
    +
    +
    + +
    +
    +inline bool has(Attrib::Enum _attrib) const
    +

    Returns true if VertexLayout contains attribute.

    +
    +
    Parameters:
    +

    _attrib – [in] Attribute semantics. See: bgfx::Attrib

    +
    +
    Returns:
    +

    True if VertexLayout contains attribute.

    +
    +
    +
    + +
    +
    +VertexLayout &skip(uint8_t _num)
    +

    Skip _num bytes in vertex stream.

    +

    +
    Attention

    C99’s equivalent binding is bgfx_vertex_layout_skip.

    +
    +
    +

    +
    +
    Parameters:
    +

    _num – [in] Number of bytes to skip.

    +
    +
    Returns:
    +

    Returns itself.

    +
    +
    +
    + +
    +
    +void end()
    +

    End VertexLayout.

    +

    +
    Attention

    C99’s equivalent binding is bgfx_vertex_layout_end.

    +
    +
    +

    +
    + +
    +
    +inline uint16_t getOffset(Attrib::Enum _attrib) const
    +

    Returns relative attribute offset from the vertex.

    +
    +
    Parameters:
    +

    _attrib – [in] Attribute semantics. See: bgfx::Attrib

    +
    +
    Returns:
    +

    Relative attribute offset from the vertex.

    +
    +
    +
    + +
    +
    +inline uint16_t getStride() const
    +

    Returns vertex stride.

    +
    +
    Returns:
    +

    Vertex stride.

    +
    +
    +
    + +
    +
    +inline uint32_t getSize(uint32_t _num) const
    +

    Returns size of vertex buffer for number of vertices.

    +
    +
    Parameters:
    +

    _num – [in] Number of vertices.

    +
    +
    Returns:
    +

    Size of vertex buffer for number of vertices.

    +
    +
    +
    + +
    +
    +

    Public Members

    +
    +
    +uint32_t m_hash
    +

    Hash.

    +
    + +
    +
    +uint16_t m_stride
    +

    Stride.

    +
    + +
    +
    +uint16_t m_offset[Attrib::Count]
    +

    Attribute offsets.

    +
    + +
    +
    +uint16_t m_attributes[Attrib::Count]
    +

    Used attributes.

    +
    + +
    +
    + +
    +
    +VertexLayoutHandle bgfx::createVertexLayout(const VertexLayout &_layout)
    +

    Create vertex layout. Vertex layouts are used to describe the format of vertex data.

    +

    +
    Attention

    C99’s equivalent binding is bgfx_create_vertex_layout.

    +
    +
    +

    +
    +
    Parameters:
    +

    _layout – [in] Vertex layout.

    +
    +
    +
    + +
    +
    +void bgfx::destroy(VertexLayoutHandle _layoutHandle)
    +

    Destroy vertex layout.

    +

    +
    Attention

    C99’s equivalent binding is bgfx_destroy_vertex_layout.

    +
    +
    +

    +
    +
    Parameters:
    +

    _layoutHandle – [in] Vertex layout handle.

    +
    +
    +
    + +
    +
    +VertexBufferHandle bgfx::createVertexBuffer(const Memory *_mem, const VertexLayout &_layout, uint16_t _flags = BGFX_BUFFER_NONE)
    +

    Create static vertex buffer.

    +

    +
    Attention

    C99’s equivalent binding is bgfx_create_vertex_buffer.

    +
    +
    +

    +
    +
    Parameters:
    +
      +
    • _mem – [in] Vertex buffer data.

    • +
    • _layout – [in] Vertex layout.

    • +
    • _flags – [in] Buffer creation flags.

        +
      • BGFX_BUFFER_NONE - No flags.

      • +
      • BGFX_BUFFER_COMPUTE_READ - Buffer will be read from by compute shader.

      • +
      • BGFX_BUFFER_COMPUTE_WRITE - Buffer will be written into by compute shader. When buffer is created with BGFX_BUFFER_COMPUTE_WRITE flag it cannot be updated from CPU.

      • +
      • BGFX_BUFFER_COMPUTE_READ_WRITE - Buffer will be used for read/write by compute shader.

      • +
      • BGFX_BUFFER_ALLOW_RESIZE - Buffer will resize on buffer update if a different amount of data is passed. If this flag is not specified, and more data is passed on update, the buffer will be trimmed to fit the existing buffer size. This flag has effect only on dynamic buffers.

      • +
      • BGFX_BUFFER_INDEX32 - Buffer is using 32-bit indices. This flag has effect only on index buffers.

      • +
      +

    • +
    +
    +
    Returns:
    +

    Static vertex buffer handle.

    +
    +
    +
    + +
    +
    +void bgfx::setName(VertexBufferHandle _handle, const char *_name, int32_t _len = INT32_MAX)
    +

    Set static vertex buffer debug name.

    +

    +
    Attention

    C99’s equivalent binding is bgfx_set_vertex_buffer_name.

    +
    +
    +

    +
    +
    Parameters:
    +
      +
    • _handle – [in] Static vertex buffer handle.

    • +
    • _name – [in] Static vertex buffer name.

    • +
    • _len – [in] Static vertex buffer name length (if length is INT32_MAX, it’s expected that _name is zero terminated string.

    • +
    +
    +
    +
    + +
    +
    +void bgfx::destroy(VertexBufferHandle _handle)
    +

    Destroy static vertex buffer.

    +

    +
    Attention

    C99’s equivalent binding is bgfx_destroy_vertex_buffer.

    +
    +
    +

    +
    +
    Parameters:
    +

    _handle – [in] Static vertex buffer handle.

    +
    +
    +
    +
    DynamicVertexBufferHandle bgfx::createDynamicVertexBuffer(uint32_t _num, const VertexLayout &_layout, uint16_t _flags = BGFX_BUFFER_NONE)
    @@ -6697,7 +6114,7 @@ Otherwise, use bgfx::setViewScissor.

  • BGFX_BUFFER_COMPUTE_WRITE - Buffer will be written into by compute shader. When buffer is created with BGFX_BUFFER_COMPUTE_WRITE flag it cannot be updated from CPU.

  • BGFX_BUFFER_COMPUTE_READ_WRITE - Buffer will be used for read/write by compute shader.

  • BGFX_BUFFER_ALLOW_RESIZE - Buffer will resize on buffer update if a different amount of data is passed. If this flag is not specified, and more data is passed on update, the buffer will be trimmed to fit the existing buffer size. This flag has effect only on dynamic buffers.

  • -
  • BGFX_BUFFER_INDEX32 - Buffer is using 32-bit indices. This flag has effect only on index buffers.

  • +
  • BGFX_BUFFER_INDEX32 - Buffer is using 32-bit indices. This flag has effect only on index buffers.

  • @@ -6710,7 +6127,7 @@ Otherwise, use bgfx::setViewScissor.

    -DynamicVertexBufferHandle bgfx::createDynamicVertexBuffer(const Memory *_mem, const VertexLayout &_layout, uint16_t _flags = BGFX_BUFFER_NONE)
    +DynamicVertexBufferHandle bgfx::createDynamicVertexBuffer(const Memory *_mem, const VertexLayout &_layout, uint16_t _flags = BGFX_BUFFER_NONE)

    Create dynamic vertex buffer and initialize it.

    Attention

    C99’s equivalent binding is bgfx_create_dynamic_vertex_buffer_mem.

    @@ -6728,7 +6145,7 @@ Otherwise, use bgfx::setViewScissor.

  • BGFX_BUFFER_COMPUTE_WRITE - Buffer will be written into by compute shader. When buffer is created with BGFX_BUFFER_COMPUTE_WRITE flag it cannot be updated from CPU.

  • BGFX_BUFFER_COMPUTE_READ_WRITE - Buffer will be used for read/write by compute shader.

  • BGFX_BUFFER_ALLOW_RESIZE - Buffer will resize on buffer update if a different amount of data is passed. If this flag is not specified, and more data is passed on update, the buffer will be trimmed to fit the existing buffer size. This flag has effect only on dynamic buffers.

  • -
  • BGFX_BUFFER_INDEX32 - Buffer is using 32-bit indices. This flag has effect only on index buffers.

  • +
  • BGFX_BUFFER_INDEX32 - Buffer is using 32-bit indices. This flag has effect only on index buffers.

  • @@ -6741,7 +6158,7 @@ Otherwise, use bgfx::setViewScissor.

    -void bgfx::update(DynamicVertexBufferHandle _handle, uint32_t _startVertex, const Memory *_mem)
    +void bgfx::update(DynamicVertexBufferHandle _handle, uint32_t _startVertex, const Memory *_mem)

    Update dynamic vertex buffer.

    Attention

    C99’s equivalent binding is bgfx_update_dynamic_vertex_buffer.

    @@ -6791,6 +6208,9 @@ Otherwise, use bgfx::setViewScissor.

  • _layout – [in] Vertex layout.

  • +
    Returns:
    +

    Number of requested or maximum available vertices.

    +
    @@ -6819,7 +6239,7 @@ Otherwise, use bgfx::setViewScissor.

    Index Buffers

    -IndexBufferHandle bgfx::createIndexBuffer(const Memory *_mem, uint16_t _flags = BGFX_BUFFER_NONE)
    +IndexBufferHandle bgfx::createIndexBuffer(const Memory *_mem, uint16_t _flags = BGFX_BUFFER_NONE)

    Create static index buffer.

    Attention

    C99’s equivalent binding is bgfx_create_index_buffer.

    @@ -6899,7 +6319,7 @@ Otherwise, use bgfx::setViewScissor.

  • BGFX_BUFFER_COMPUTE_WRITE - Buffer will be written into by compute shader. When buffer is created with BGFX_BUFFER_COMPUTE_WRITE flag it cannot be updated from CPU.

  • BGFX_BUFFER_COMPUTE_READ_WRITE - Buffer will be used for read/write by compute shader.

  • BGFX_BUFFER_ALLOW_RESIZE - Buffer will resize on buffer update if a different amount of data is passed. If this flag is not specified, and more data is passed on update, the buffer will be trimmed to fit the existing buffer size. This flag has effect only on dynamic buffers.

  • -
  • BGFX_BUFFER_INDEX32 - Buffer is using 32-bit indices. This flag has effect only on index buffers.

  • +
  • BGFX_BUFFER_INDEX32 - Buffer is using 32-bit indices. This flag has effect only on index buffers.

  • @@ -6912,7 +6332,7 @@ Otherwise, use bgfx::setViewScissor.

    -DynamicIndexBufferHandle bgfx::createDynamicIndexBuffer(const Memory *_mem, uint16_t _flags = BGFX_BUFFER_NONE)
    +DynamicIndexBufferHandle bgfx::createDynamicIndexBuffer(const Memory *_mem, uint16_t _flags = BGFX_BUFFER_NONE)

    Create a dynamic index buffer and initialize it.

    Attention

    C99’s equivalent binding is bgfx_create_dynamic_index_buffer_mem.

    @@ -6929,7 +6349,7 @@ Otherwise, use bgfx::setViewScissor.

  • BGFX_BUFFER_COMPUTE_WRITE - Buffer will be written into by compute shader. When buffer is created with BGFX_BUFFER_COMPUTE_WRITE flag it cannot be updated from CPU.

  • BGFX_BUFFER_COMPUTE_READ_WRITE - Buffer will be used for read/write by compute shader.

  • BGFX_BUFFER_ALLOW_RESIZE - Buffer will resize on buffer update if a different amount of data is passed. If this flag is not specified, and more data is passed on update, the buffer will be trimmed to fit the existing buffer size. This flag has effect only on dynamic buffers.

  • -
  • BGFX_BUFFER_INDEX32 - Buffer is using 32-bit indices. This flag has effect only on index buffers.

  • +
  • BGFX_BUFFER_INDEX32 - Buffer is using 32-bit indices. This flag has effect only on index buffers.

  • @@ -6942,7 +6362,7 @@ Otherwise, use bgfx::setViewScissor.

    -void bgfx::update(DynamicIndexBufferHandle _handle, uint32_t _startIndex, const Memory *_mem)
    +void bgfx::update(DynamicIndexBufferHandle _handle, uint32_t _startIndex, const Memory *_mem)

    Update dynamic index buffer.

    Attention

    C99’s equivalent binding is bgfx_update_dynamic_index_buffer.

    @@ -6992,6 +6412,9 @@ Otherwise, use bgfx::setViewScissor.

  • _index32 – [in] Set to true if input indices will be 32-bit.

  • +
    Returns:
    +

    Number of requested or maximum available indices.

    +
    @@ -7016,8 +6439,61 @@ Otherwise, use bgfx::setViewScissor.

    -
    -

    Textures

    +
    +

    Textures

    +
    +
    +BGFX_TEXTURE_NONE
    +
    + +
    +
    +BGFX_TEXTURE_MSAA_SAMPLE
    +

    Texture will be used for MSAA sampling.

    +
    + +
    +
    +BGFX_TEXTURE_RT
    +

    Render target no MSAA.

    +
    + +
    +
    +BGFX_TEXTURE_COMPUTE_WRITE
    +

    Texture will be used for compute write.

    +
    + +
    +
    +BGFX_TEXTURE_SRGB
    +

    Sample texture as sRGB.

    +
    + +
    +
    +BGFX_TEXTURE_BLIT_DST
    +

    Texture will be used as blit destination.

    +
    + +
    +
    +BGFX_TEXTURE_READ_BACK
    +

    Texture will be used for read back from GPU.

    +
    + +
    +
    +BGFX_TEXTURE_EXTERNAL_SHARED
    +

    Texture is shared with other device or other process.

    +
    + +
    +
    +BGFX_TEXTURE_RT_WRITE_ONLY
    +

    Render target will be used for writing.

    +
    +
    struct TextureFormat
    @@ -7034,7 +6510,7 @@ Otherwise, use bgfx::setViewScissor.

    -
    Attention

    Availability depends on Caps (see: formats).

    +
    Attention

    Availability depends on Caps (see: formats).

    Attention

    C99’s equivalent binding is bgfx_texture_format_t.

    @@ -7278,7 +6754,8 @@ Otherwise, use bgfx::setViewScissor.

    enumerator Unknown
    -
    +

    Compressed formats above.

    +
    @@ -7543,7 +7020,8 @@ Otherwise, use bgfx::setViewScissor.

    enumerator UnknownDepth
    -
    +

    Depth formats below.

    +
    @@ -7595,98 +7073,6 @@ Otherwise, use bgfx::setViewScissor.

    -

    Texture Flags

    -
    -
    -BGFX_TEXTURE_MSAA_SAMPLE
    -

    Texture will be used for MSAA sampling.

    -
    - -
    -
    -BGFX_TEXTURE_RT
    -

    Render target no MSAA.

    -
    - -
    -
    -BGFX_TEXTURE_COMPUTE_WRITE
    -

    Texture will be used for compute write.

    -
    - -
    -
    -BGFX_TEXTURE_SRGB
    -

    Sample texture as sRGB.

    -
    - -
    -
    -BGFX_TEXTURE_BLIT_DST
    -

    Texture will be used as blit destination.

    -
    - -
    -
    -BGFX_TEXTURE_READ_BACK
    -

    Texture will be used for read back from GPU.

    -
    - -
    -
    -BGFX_TEXTURE_RT_MSAA_X2
    -

    Render target MSAAx2 mode.

    -
    - -
    -
    -BGFX_TEXTURE_RT_MSAA_X4
    -

    Render target MSAAx4 mode.

    -
    - -
    -
    -BGFX_TEXTURE_RT_MSAA_X8
    -

    Render target MSAAx8 mode.

    -
    - -
    -
    -BGFX_TEXTURE_RT_MSAA_X16
    -

    Render target MSAAx16 mode.

    -
    - -
    -
    -BGFX_TEXTURE_RT_WRITE_ONLY
    -

    Render target will be used for writing.

    -
    - -
    -
    -bool bgfx::isTextureValid(uint16_t _depth, bool _cubeMap, uint16_t _numLayers, TextureFormat::Enum _format, uint64_t _flags)
    -

    Validate texture parameters.

    -

    -
    Attention

    C99’s equivalent binding is bgfx_is_texture_valid.

    -
    -
    -

    -
    -
    Parameters:
    -
      -
    • _depth – [in] Depth dimension of volume texture.

    • -
    • _cubeMap – [in] Indicates that texture contains cubemap.

    • -
    • _numLayers – [in] Number of layers in texture array.

    • -
    • _format – [in] Texture format. See: TextureFormat::Enum.

    • -
    • _flags – [in] Texture flags. See BGFX_TEXTURE_*.

    • -
    -
    -
    Returns:
    -

    True if a texture with the same parameters can be created.

    -
    -
    -
    -
    struct TextureInfo
    @@ -7755,6 +7141,31 @@ Otherwise, use bgfx::setViewScissor.

    +
    +
    +bool bgfx::isTextureValid(uint16_t _depth, bool _cubeMap, uint16_t _numLayers, TextureFormat::Enum _format, uint64_t _flags)
    +

    Validate texture parameters.

    +

    +
    Attention

    C99’s equivalent binding is bgfx_is_texture_valid.

    +
    +
    +

    +
    +
    Parameters:
    +
      +
    • _depth – [in] Depth dimension of volume texture.

    • +
    • _cubeMap – [in] Indicates that texture contains cubemap.

    • +
    • _numLayers – [in] Number of layers in texture array.

    • +
    • _format – [in] Texture format. See: TextureFormat::Enum.

    • +
    • _flags – [in] Texture flags. See BGFX_TEXTURE_*.

    • +
    +
    +
    Returns:
    +

    True if a texture with the same parameters can be created.

    +
    +
    +
    +
    void bgfx::calcTextureSize(TextureInfo &_info, uint16_t _width, uint16_t _height, uint16_t _depth, bool _cubeMap, bool _hasMips, uint16_t _numLayers, TextureFormat::Enum _format)
    @@ -7782,7 +7193,7 @@ Otherwise, use bgfx::setViewScissor.

    -TextureHandle bgfx::createTexture(const Memory *_mem, uint64_t _flags = BGFX_TEXTURE_NONE | BGFX_SAMPLER_NONE, uint8_t _skip = 0, TextureInfo *_info = NULL)
    +TextureHandle bgfx::createTexture(const Memory *_mem, uint64_t _flags = BGFX_TEXTURE_NONE | BGFX_SAMPLER_NONE, uint8_t _skip = 0, TextureInfo *_info = NULL)

    Create texture from memory buffer.

    Attention

    C99’s equivalent binding is bgfx_create_texture.

    @@ -7792,14 +7203,14 @@ Otherwise, use bgfx::setViewScissor.

    Parameters:
      -
    • _mem – [in] DDS, KTX or PVR texture data.

    • +
    • _mem – [in] DDS, KTX or PVR texture binary data.

    • _flags – [in] Texture creation (see BGFX_TEXTURE_*.), and sampler (see BGFX_SAMPLER_*) flags. Default texture sampling mode is linear, and wrap mode is repeat.

      • 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.

      • +
      • BGFX_SAMPLER_[MIN/MAG/MIP]_[POINT/ANISOTROPIC] - Point or anisotropic sampling.

    • _skip – [in] Skip top level mips when parsing texture.

    • -
    • _info – [out] When non-NULL is specified it returns parsed texture information.

    • +
    • _info – [out] When non-NULL is specified it returns parsed texture information.

    Returns:
    @@ -7809,8 +7220,8 @@ Otherwise, use bgfx::setViewScissor.

    -
    -TextureHandle bgfx::createTexture2D(uint16_t _width, uint16_t _height, bool _hasMips, uint16_t _numLayers, TextureFormat::Enum _format, uint64_t _flags = BGFX_TEXTURE_NONE | BGFX_SAMPLER_NONE, const Memory *_mem = NULL)
    +
    +TextureHandle bgfx::createTexture2D(uint16_t _width, uint16_t _height, bool _hasMips, uint16_t _numLayers, TextureFormat::Enum _format, uint64_t _flags = BGFX_TEXTURE_NONE | BGFX_SAMPLER_NONE, const Memory *_mem = NULL, uint64_t _external = 0)

    Create 2D texture.

    Attention

    C99’s equivalent binding is bgfx_create_texture_2d.

    @@ -7827,12 +7238,16 @@ Otherwise, use bgfx::setViewScissor.

  • _format – [in] Texture format. See: TextureFormat::Enum.

  • _flags – [in] Texture creation (see BGFX_TEXTURE_*.), and sampler (see BGFX_SAMPLER_*) flags. Default texture sampling mode is linear, and wrap mode is repeat.

    • 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.

    • +
    • BGFX_SAMPLER_[MIN/MAG/MIP]_[POINT/ANISOTROPIC] - Point or anisotropic sampling.

  • -
  • _mem – [in] Texture data. If _mem is non-NULL, created texture will be immutable. If _mem is NULL content of the texture is uninitialized. When _numLayers is more than 1, expected memory layout is texture and all mips together for each array element.

  • +
  • _mem – [in] Texture data. If _mem is non-NULL, created texture will be immutable. If _mem is NULL content of the texture is uninitialized. When _numLayers is more than 1, expected memory layout is texture and all mips together for each array element.

  • +
  • _external – [in] Native API pointer to texture.

  • +
    Returns:
    +

    Texture handle.

    +
    @@ -7848,7 +7263,7 @@ Otherwise, use bgfx::setViewScissor.

    Parameters:
      -
    • _ratio – [in] Frame buffer size in respect to back-buffer size. See: BackbufferRatio::Enum.

    • +
    • _ratio – [in] Texture size in respect to back-buffer size. See: BackbufferRatio::Enum.

    • _hasMips – [in] Indicates that texture contains full mip-map chain.

    • _numLayers – [in] Number of layers in texture array. Must be 1 if caps BGFX_CAPS_TEXTURE_2D_ARRAY flag is not set.

    • _format – [in] Texture format. See: TextureFormat::Enum.

    • @@ -7859,40 +7274,15 @@ Otherwise, use bgfx::setViewScissor.

    -
    -
    - -
    -
    -void bgfx::updateTexture2D(TextureHandle _handle, uint16_t _layer, uint8_t _mip, uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height, const Memory *_mem, uint16_t _pitch = UINT16_MAX)
    -

    Update 2D texture.

    -

    -
    Attention

    It’s valid to update only mutable texture. See bgfx::createTexture2D for more info.

    -
    -
    Attention

    C99’s equivalent binding is bgfx_update_texture_2d.

    -
    -
    -

    -
    -
    Parameters:
    -
      -
    • _handle – [in] Texture handle.

    • -
    • _layer – [in] Layers in texture array.

    • -
    • _mip – [in] Mip level.

    • -
    • _x – [in] X offset in texture.

    • -
    • _y – [in] Y offset in texture.

    • -
    • _width – [in] Width of texture block.

    • -
    • _height – [in] Height of texture block.

    • -
    • _mem – [in] Texture update data.

    • -
    • _pitch – [in] Pitch of input image (bytes). When _pitch is set to UINT16_MAX, it will be calculated internally based on _width.

    • -
    +
    Returns:
    +

    Texture handle.

    -
    -TextureHandle bgfx::createTexture3D(uint16_t _width, uint16_t _height, uint16_t _depth, bool _hasMips, TextureFormat::Enum _format, uint64_t _flags = BGFX_TEXTURE_NONE | BGFX_SAMPLER_NONE, const Memory *_mem = NULL)
    +
    +TextureHandle bgfx::createTexture3D(uint16_t _width, uint16_t _height, uint16_t _depth, bool _hasMips, TextureFormat::Enum _format, uint64_t _flags = BGFX_TEXTURE_NONE | BGFX_SAMPLER_NONE, const Memory *_mem = NULL, uint64_t _external = 0)

    Create 3D texture.

    Attention

    C99’s equivalent binding is bgfx_create_texture_3d.

    @@ -7909,10 +7299,73 @@ Otherwise, use bgfx::setViewScissor.

  • _format – [in] Texture format. See: TextureFormat::Enum.

  • _flags – [in] Texture creation (see BGFX_TEXTURE_*.), and sampler (see BGFX_SAMPLER_*) flags. Default texture sampling mode is linear, and wrap mode is repeat.

    • 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.

    • +
    • BGFX_SAMPLER_[MIN/MAG/MIP]_[POINT/ANISOTROPIC] - Point or anisotropic sampling.

  • -
  • _mem – [in] Texture data. If _mem is non-NULL, created texture will be immutable. If _mem is NULL content of the texture is uninitialized.

  • +
  • _mem – [in] Texture data. If _mem is non-NULL, created texture will be immutable. If _mem is NULL content of the texture is uninitialized. When _numLayers is more than 1, expected memory layout is texture and all mips together for each array element.

  • +
  • _external – [in] Native API pointer to texture.

  • + +
    +
    Returns:
    +

    Texture handle.

    +
    +
    +
    + +
    +
    +TextureHandle bgfx::createTextureCube(uint16_t _size, bool _hasMips, uint16_t _numLayers, TextureFormat::Enum _format, uint64_t _flags = BGFX_TEXTURE_NONE | BGFX_SAMPLER_NONE, const Memory *_mem = NULL, uint64_t _external = 0)
    +

    Create Cube texture.

    +

    +
    Attention

    C99’s equivalent binding is bgfx_create_texture_cube.

    +
    +
    +

    +
    +
    Parameters:
    +
      +
    • _size – [in] Cube side size.

    • +
    • _hasMips – [in] Indicates that texture contains full mip-map chain.

    • +
    • _numLayers – [in] Number of layers in texture array. Must be 1 if caps BGFX_CAPS_TEXTURE_2D_ARRAY flag is not set.

    • +
    • _format – [in] Texture format. See: TextureFormat::Enum.

    • +
    • _flags – [in] Texture creation (see BGFX_TEXTURE_*.), and sampler (see BGFX_SAMPLER_*) flags. Default texture sampling mode is linear, and wrap mode is repeat.

        +
      • 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.

      • +
      +

    • +
    • _mem – [in] Texture data. If _mem is non-NULL, created texture will be immutable. If _mem is NULL content of the texture is uninitialized. When _numLayers is more than

    • +
    • _external – [in] Native API pointer to texture.

    • +
    +
    +
    Returns:
    +

    Texture handle.

    +
    +
    +
    + +
    +
    +void bgfx::updateTexture2D(TextureHandle _handle, uint16_t _layer, uint8_t _mip, uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height, const Memory *_mem, uint16_t _pitch = UINT16_MAX)
    +

    Update 2D texture.

    +

    +
    Attention

    It’s valid to update only mutable texture. See bgfx::createTexture2D for more info.

    +
    +
    Attention

    C99’s equivalent binding is bgfx_update_texture_2d.

    +
    +
    +

    +
    +
    Parameters:
    +
      +
    • _handle – [in] Texture handle.

    • +
    • _layer – [in] Layer in texture array.

    • +
    • _mip – [in] Mip level.

    • +
    • _x – [in] X offset in texture.

    • +
    • _y – [in] Y offset in texture.

    • +
    • _width – [in] Width of texture block.

    • +
    • _height – [in] Height of texture block.

    • +
    • _mem – [in] Texture update data.

    • +
    • _pitch – [in] Pitch of input image (bytes). When _pitch is set to UINT16_MAX, it will be calculated internally based on _width.

    @@ -7920,10 +7373,10 @@ Otherwise, use bgfx::setViewScissor.

    -void bgfx::updateTexture3D(TextureHandle _handle, uint8_t _mip, uint16_t _x, uint16_t _y, uint16_t _z, uint16_t _width, uint16_t _height, uint16_t _depth, const Memory *_mem)
    +void bgfx::updateTexture3D(TextureHandle _handle, uint8_t _mip, uint16_t _x, uint16_t _y, uint16_t _z, uint16_t _width, uint16_t _height, uint16_t _depth, const Memory *_mem)

    Update 3D texture.

    -
    Attention

    It’s valid to update only mutable texture. See bgfx::createTexture3D for more info.

    +
    Attention

    It’s valid to update only mutable texture. See bgfx::createTexture3D for more info.

    Attention

    C99’s equivalent binding is bgfx_update_texture_3d.

    @@ -7946,39 +7399,12 @@ Otherwise, use bgfx::setViewScissor.

    -
    -
    -TextureHandle bgfx::createTextureCube(uint16_t _size, bool _hasMips, uint16_t _numLayers, TextureFormat::Enum _format, uint64_t _flags = BGFX_TEXTURE_NONE | BGFX_SAMPLER_NONE, const Memory *_mem = NULL)
    -

    Create Cube texture.

    -

    -
    Attention

    C99’s equivalent binding is bgfx_create_texture_cube.

    -
    -
    -

    -
    -
    Parameters:
    -
      -
    • _size – [in] Cube side size.

    • -
    • _hasMips – [in] Indicates that texture contains full mip-map chain.

    • -
    • _numLayers – [in] Number of layers in texture array. Must be 1 if caps BGFX_CAPS_TEXTURE_CUBE_ARRAY flag is not set.

    • -
    • _format – [in] Texture format. See: TextureFormat::Enum.

    • -
    • _flags – [in] Texture creation (see BGFX_TEXTURE_*.), and sampler (see BGFX_SAMPLER_*) flags. Default texture sampling mode is linear, and wrap mode is repeat.

        -
      • 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.

      • -
      -

    • -
    • _mem – [in] Texture data. If _mem is non-NULL, created texture will be immutable. If _mem is NULL content of the texture is uninitialized. When _numLayers is more than 1, expected memory layout is texture and all mips together for each array element.

    • -
    -
    -
    -
    -
    -void bgfx::updateTextureCube(TextureHandle _handle, uint16_t _layer, uint8_t _side, uint8_t _mip, uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height, const Memory *_mem, uint16_t _pitch = UINT16_MAX)
    +void bgfx::updateTextureCube(TextureHandle _handle, uint16_t _layer, uint8_t _side, uint8_t _mip, uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height, const Memory *_mem, uint16_t _pitch = UINT16_MAX)

    Update Cube texture.

    -
    Attention

    It’s valid to update only mutable texture. See bgfx::createTextureCube for more info.

    +
    Attention

    It’s valid to update only mutable texture. See bgfx::createTextureCube for more info.

    Attention

    C99’s equivalent binding is bgfx_update_texture_cube.

    @@ -7988,26 +7414,8 @@ Otherwise, use bgfx::setViewScissor.

    Parameters:
    • _handle – [in] Texture handle.

    • -
    • _layer – [in] Layers in texture array.

    • -
    • _side – [in] Cubemap side BGFX_CUBE_MAP_<POSITIVE or NEGATIVE>_<X, Y or Z>, where 0 is +X, 1 is -X, 2 is +Y, 3 is -Y, 4 is +Z, and 5 is -Z.

                 +----------+
      -           |-z       2|
      -           | ^  +y    |
      -           | |        |    Unfolded cube:
      -           | +---->+x |
      -+----------+----------+----------+----------+
      -|+y       1|+y       4|+y       0|+y       5|
      -| ^  -x    | ^  +z    | ^  +x    | ^  -z    |
      -| |        | |        | |        | |        |
      -| +---->+z | +---->+x | +---->-z | +---->-x |
      -+----------+----------+----------+----------+
      -           |+z       3|
      -           | ^  -y    |
      -           | |        |
      -           | +---->+x |
      -           +----------+
      -
      -
      -

    • +
    • _layer – [in] Layer in texture array.

    • +
    • _side – [in] Cubemap side BGFX_CUBE_MAP_<POSITIVE or NEGATIVE>_<X, Y or Z>, where 0 is +X, 1 is -X, 2 is +Y, 3 is -Y, 4 is +Z, and 5 is -Z. +——-&#8212;+ |-z 2| | ^ +y | | | | Unfolded cube: | +-&#8212;>+x | +——-&#8212;+——-&#8212;+——-&#8212;+——-&#8212;+ |+y 1|+y 4|+y 0|+y 5| | ^ -x | ^ +z | ^ +x | ^ -z | | | | | | | | | | | +-&#8212;>+z | +-&#8212;>+x | +-&#8212;>-z | +-&#8212;>-x | +——-&#8212;+——-&#8212;+——-&#8212;+——-&#8212;+ |+z 3| | ^ -y | | | | | +-&#8212;>+x | +——-&#8212;+

    • _mip – [in] Mip level.

    • _x – [in] X offset in texture.

    • _y – [in] Y offset in texture.

    • @@ -8025,9 +7433,9 @@ Otherwise, use bgfx::setViewScissor.

      uint32_t bgfx::readTexture(TextureHandle _handle, void *_data, uint8_t _mip = 0)

      Read back texture content.

      -
      Attention

      Texture must be created with BGFX_TEXTURE_READ_BACK flag.

      +
      Attention

      Texture must be created with BGFX_TEXTURE_READ_BACK flag.

      -
      Attention

      Availability depends on: BGFX_CAPS_TEXTURE_READ_BACK.

      +
      Attention

      Availability depends on: BGFX_CAPS_TEXTURE_READ_BACK.

      Attention

      C99’s equivalent binding is bgfx_read_texture.

      @@ -8042,7 +7450,7 @@ Otherwise, use bgfx::setViewScissor.

    Returns:
    -

    Frame number when the result will be available. See: bgfx::frame.

    +

    Frame number when the result will be available. See: bgfx::frame.

    @@ -8102,6 +7510,11 @@ Otherwise, use bgfx::setViewScissor.

    void init(TextureHandle _handle, Access::Enum _access = Access::Write, uint16_t _layer = 0, uint16_t _numLayers = 1, uint16_t _mip = 0, uint8_t _resolve = BGFX_RESOLVE_AUTO_GEN_MIPS)

    Init attachment.

    +

    +
    Attention

    C99’s equivalent binding is bgfx_attachment_init.

    +
    +
    +

    Parameters:
      @@ -8162,6 +7575,11 @@ Otherwise, use bgfx::setViewScissor.

      bool bgfx::isFrameBufferValid(uint8_t _num, const Attachment *_attachment)

      Validate frame buffer parameters.

      +

      +
      Attention

      C99’s equivalent binding is bgfx_is_frame_buffer_valid.

      +
      +
      +

      Parameters:
        @@ -8170,7 +7588,7 @@ Otherwise, use bgfx::setViewScissor.

      Returns:
      -

      True if a frame buffer with the same parameters can be created.

      +

      True if a frame buffer with the same parameters can be created.

    @@ -8198,7 +7616,7 @@ Otherwise, use bgfx::setViewScissor.

    Returns:
    -

    Handle to frame buffer object.

    +

    Frame buffer handle.

    @@ -8225,14 +7643,14 @@ Otherwise, use bgfx::setViewScissor.

    Returns:
    -

    Handle to frame buffer object.

    +

    Frame buffer handle.

    -FrameBufferHandle bgfx::createFrameBuffer(uint8_t _num, const TextureHandle *_handles, bool _destroyTextures = false)
    +FrameBufferHandle bgfx::createFrameBuffer(uint8_t _num, const TextureHandle *_handles, bool _destroyTexture = false)

    Create MRT frame buffer from texture handles (simple).

    Attention

    C99’s equivalent binding is bgfx_create_frame_buffer_from_handles.

    @@ -8242,13 +7660,36 @@ Otherwise, use bgfx::setViewScissor.

    Parameters:
      -
    • _num – [in] Number of texture attachments.

    • +
    • _num – [in] Number of texture handles.

    • _handles – [in] Texture attachments.

    • -
    • _destroyTextures – [in] If true, textures will be destroyed when frame buffer is destroyed.

    • +
    • _destroyTexture – [in] If true, textures will be destroyed when frame buffer is destroyed.

    Returns:
    -

    Handle to frame buffer object.

    +

    Frame buffer handle.

    +
    +
    +
    + +
    +
    +FrameBufferHandle bgfx::createFrameBuffer(uint8_t _num, const Attachment *_attachment, bool _destroyTexture = false)
    +

    Create MRT frame buffer from texture handles with specific layer and mip level.

    +

    +
    Attention

    C99’s equivalent binding is bgfx_create_frame_buffer_from_attachment.

    +
    +
    +

    +
    +
    Parameters:
    +
      +
    • _num – [in] Number of attachments.

    • +
    • _attachment – [in] Attachment texture info. See: bgfx::Attachment.

    • +
    • _destroyTexture – [in] If true, textures will be destroyed when frame buffer is destroyed.

    • +
    +
    +
    Returns:
    +

    Frame buffer handle.

    @@ -8262,6 +7703,8 @@ Otherwise, use bgfx::setViewScissor.

    Frame buffer cannot be used for sampling.

    +
    Attention

    Availability depends on: BGFX_CAPS_SWAP_CHAIN.

    +
    Attention

    C99’s equivalent binding is bgfx_create_frame_buffer_from_nwh.

    @@ -8277,31 +7720,28 @@ Otherwise, use bgfx::setViewScissor.

    Returns:
    -

    Handle to frame buffer object.

    +

    Frame buffer handle.

    -
    -FrameBufferHandle bgfx::createFrameBuffer(uint8_t _num, const Attachment *_attachment, bool _destroyTextures = false)
    -

    Create MRT frame buffer from texture handles with specific layer and mip level.

    +
    +void bgfx::setName(FrameBufferHandle _handle, const char *_name, int32_t _len = INT32_MAX)
    +

    Set frame buffer debug name.

    -
    Attention

    C99’s equivalent binding is bgfx_create_frame_buffer_from_attachment.

    +
    Attention

    C99’s equivalent binding is bgfx_set_frame_buffer_name.

    Parameters:
      -
    • _num – [in] Number of texture attachments.

    • -
    • _attachment – [in] Attachment texture info. See: bgfx::Attachment.

    • -
    • _destroyTextures – [in] If true, textures will be destroyed when frame buffer is destroyed.

    • +
    • _handle – [in] Frame buffer handle.

    • +
    • _name – [in] Frame buffer name.

    • +
    • _len – [in] Frame buffer name length (if length is INT32_MAX, it’s expected that _name is zero terminated string.

    -
    Returns:
    -

    Handle to frame buffer object.

    -
    @@ -8318,30 +7758,7 @@ Otherwise, use bgfx::setViewScissor.

    Parameters:
    -
    -
    Returns:
    -

    Returns invalid texture handle if attachment index is not correct, or frame buffer is created with native window handle.

    -
    - - - -
    -
    -void bgfx::setName(FrameBufferHandle _handle, const char *_name, int32_t _len = INT32_MAX)
    -

    Set frame buffer debug name.

    -

    -
    Attention

    C99’s equivalent binding is bgfx_set_frame_buffer_name.

    -
    -
    -

    -
    -
    Parameters:
    -
      -
    • _handle – [in] frame buffer handle.

    • -
    • _name – [in] frame buffer name.

    • -
    • _len – [in] frame buffer name length (if length is INT32_MAX, it’s expected that _name is zero terminated string.

    • +
    • _attachment –

    @@ -8382,6 +7799,9 @@ Otherwise, use bgfx::setViewScissor.

  • _stride – [in] Stride per instance.

  • +
    Returns:
    +

    Number of requested or maximum available instance buffer slots.

    +
    @@ -8397,7 +7817,7 @@ Otherwise, use bgfx::setViewScissor.

    Parameters:
      -
    • _idb – [out] InstanceDataBuffer structure will be filled, and will be valid for the duration of frame, and can be reused for multiple draw calls.

    • +
    • _idb – [out] InstanceDataBuffer structure will be filled, and will be valid for duration of frame, and can be reused for multiple draw calls.

    • _num – [in] Number of instances.

    • _stride – [in] Instance stride. Must be multiple of 16.

    @@ -8419,7 +7839,7 @@ Otherwise, use bgfx::setViewScissor.

    Parameters:
    -

    _num – [in] Number of indirect calls.

    +

    _num – [in] Number of indirect calls.

    Returns:

    Indirect buffer handle.

    @@ -8446,22 +7866,6 @@ Otherwise, use bgfx::setViewScissor.

    Occlusion Query

    -
    -
    -OcclusionQueryHandle bgfx::createOcclusionQuery()
    -

    Create occlusion query.

    -

    -
    Attention

    C99’s equivalent binding is bgfx_create_occlusion_query.

    -
    -
    -

    -
    -
    Returns:
    -

    Handle to occlusion query object.

    -
    -
    -
    -
    struct OcclusionQueryResult
    @@ -8506,6 +7910,22 @@ Otherwise, use bgfx::setViewScissor.

    +
    +
    +OcclusionQueryHandle bgfx::createOcclusionQuery()
    +

    Create occlusion query. Occlusion queries allow the GPU to determine if any pixels passed the depth test.

    +

    +
    Attention

    C99’s equivalent binding is bgfx_create_occlusion_query.

    +
    +
    +

    +
    +
    Returns:
    +

    Handle to occlusion query object.

    +
    +
    +
    +
    OcclusionQueryResult::Enum bgfx::getResult(OcclusionQueryHandle _handle, int32_t *_result = NULL)
    @@ -8519,7 +7939,7 @@ Otherwise, use bgfx::setViewScissor.

    Parameters:
    • _handle – [in] Handle to occlusion query object.

    • -
    • _result – [out] Number of pixels that passed test. This argument can be NULL if result of occlusion query is not needed.

    • +
    • _result – [out] Number of pixels that passed test. This argument can be NULL if result of occlusion query is not needed.

    Returns:
    diff --git a/genindex.html b/genindex.html index 1b214b2ce..6771ab8f8 100644 --- a/genindex.html +++ b/genindex.html @@ -93,8 +93,6 @@
  • bgfx::Access::Enum::ReadWrite (C++ enumerator)
  • bgfx::Access::Enum::Write (C++ enumerator) -
  • -
  • bgfx::alloc (C++ function)
  • bgfx::allocInstanceDataBuffer (C++ function)
  • @@ -183,114 +181,6 @@
  • bgfx::blit (C++ function), [1]
  • bgfx::calcTextureSize (C++ function) -
  • -
  • bgfx::CallbackI (C++ struct) -
  • -
  • bgfx::CallbackI::cacheRead (C++ function) -
  • -
  • bgfx::CallbackI::cacheReadSize (C++ function) -
  • -
  • bgfx::CallbackI::cacheWrite (C++ function) -
  • -
  • bgfx::CallbackI::captureBegin (C++ function) -
  • -
  • bgfx::CallbackI::captureEnd (C++ function) -
  • -
  • bgfx::CallbackI::captureFrame (C++ function) -
  • -
  • bgfx::CallbackI::fatal (C++ function) -
  • -
  • bgfx::CallbackI::profilerBegin (C++ function) -
  • -
  • bgfx::CallbackI::profilerBeginLiteral (C++ function) -
  • -
  • bgfx::CallbackI::profilerEnd (C++ function) -
  • -
  • bgfx::CallbackI::screenShot (C++ function) -
  • -
  • bgfx::CallbackI::traceVargs (C++ function) -
  • -
  • bgfx::Caps (C++ struct) -
  • -
  • bgfx::Caps::deviceId (C++ member) -
  • -
  • bgfx::Caps::formats (C++ member) -
  • -
  • bgfx::Caps::gpu (C++ member) -
  • -
  • bgfx::Caps::GPU (C++ struct) -
  • -
  • bgfx::Caps::GPU::deviceId (C++ member) -
  • -
  • bgfx::Caps::GPU::vendorId (C++ member) -
  • -
  • bgfx::Caps::homogeneousDepth (C++ member) -
  • -
  • bgfx::Caps::limits (C++ member) -
  • -
  • bgfx::Caps::Limits (C++ struct) -
  • -
  • bgfx::Caps::Limits::maxBlits (C++ member) -
  • -
  • bgfx::Caps::Limits::maxComputeBindings (C++ member) -
  • -
  • bgfx::Caps::Limits::maxDrawCalls (C++ member) -
  • -
  • bgfx::Caps::Limits::maxDynamicIndexBuffers (C++ member) -
  • -
  • bgfx::Caps::Limits::maxDynamicVertexBuffers (C++ member) -
  • -
  • bgfx::Caps::Limits::maxEncoders (C++ member) -
  • -
  • bgfx::Caps::Limits::maxFBAttachments (C++ member) -
  • -
  • bgfx::Caps::Limits::maxFrameBuffers (C++ member) -
  • -
  • bgfx::Caps::Limits::maxIndexBuffers (C++ member) -
  • -
  • bgfx::Caps::Limits::maxOcclusionQueries (C++ member) -
  • -
  • bgfx::Caps::Limits::maxPrograms (C++ member) -
  • -
  • bgfx::Caps::Limits::maxShaders (C++ member) -
  • -
  • bgfx::Caps::Limits::maxTextureLayers (C++ member) -
  • -
  • bgfx::Caps::Limits::maxTextures (C++ member) -
  • -
  • bgfx::Caps::Limits::maxTextureSamplers (C++ member) -
  • -
  • bgfx::Caps::Limits::maxTextureSize (C++ member) -
  • -
  • bgfx::Caps::Limits::maxTransientIbSize (C++ member) -
  • -
  • bgfx::Caps::Limits::maxTransientVbSize (C++ member) -
  • -
  • bgfx::Caps::Limits::maxUniforms (C++ member) -
  • -
  • bgfx::Caps::Limits::maxVertexBuffers (C++ member) -
  • -
  • bgfx::Caps::Limits::maxVertexLayouts (C++ member) -
  • -
  • bgfx::Caps::Limits::maxVertexStreams (C++ member) -
  • -
  • bgfx::Caps::Limits::maxViews (C++ member) -
  • -
  • bgfx::Caps::Limits::minResourceCbSize (C++ member) -
  • -
  • bgfx::Caps::Limits::minUniformBufferSize (C++ member) -
  • -
  • bgfx::Caps::numGPUs (C++ member) -
  • -
  • bgfx::Caps::originBottomLeft (C++ member) -
  • -
  • bgfx::Caps::rendererType (C++ member) -
  • -
  • bgfx::Caps::supported (C++ member) -
  • -
  • bgfx::Caps::vendorId (C++ member) -
  • -
  • bgfx::copy (C++ function)
  • bgfx::createDynamicIndexBuffer (C++ function), [1]
  • @@ -310,11 +200,11 @@
  • bgfx::createTexture (C++ function)
  • -
  • bgfx::createTexture2D (C++ function), [1] +
  • bgfx::createTexture2D (C++ function), [1]
  • -
  • bgfx::createTexture3D (C++ function) +
  • bgfx::createTexture3D (C++ function)
  • -
  • bgfx::createTextureCube (C++ function) +
  • bgfx::createTextureCube (C++ function)
  • bgfx::createUniform (C++ function), [1]
  • @@ -388,15 +278,13 @@
  • bgfx::end (C++ function)
  • -
  • bgfx::frame (C++ function) +
  • bgfx::frame (C++ function)
  • bgfx::getAvailInstanceDataBuffer (C++ function)
  • bgfx::getAvailTransientIndexBuffer (C++ function)
  • bgfx::getAvailTransientVertexBuffer (C++ function) -
  • -
  • bgfx::getCaps (C++ function)
  • bgfx::getDirectAccessPtr (C++ function)
  • @@ -479,14 +367,6 @@
  • bgfx::isFrameBufferValid (C++ function)
  • bgfx::isTextureValid (C++ function) -
  • -
  • bgfx::makeRef (C++ function) -
  • -
  • bgfx::Memory (C++ struct) -
  • -
  • bgfx::Memory::data (C++ member) -
  • -
  • bgfx::Memory::size (C++ member)
  • bgfx::OcclusionQueryResult (C++ struct)
  • @@ -513,6 +393,8 @@
  • bgfx::PlatformData::ndt (C++ member)
  • bgfx::PlatformData::nwh (C++ member) +
  • +
  • bgfx::PlatformData::queue (C++ member)
  • bgfx::PlatformData::type (C++ member)
  • @@ -610,7 +492,7 @@
  • bgfx::setUniform (C++ function)
  • -
  • bgfx::setVertexBuffer (C++ function), [1], [2], [3], [4], [5] +
  • bgfx::setVertexBuffer (C++ function), [1], [2]
  • bgfx::setVertexCount (C++ function)
  • @@ -732,8 +614,6 @@
  • bgfx::Stats::viewStats (C++ member)
  • - - +
  • Views @@ -227,15 +227,11 @@ licensed under permissive BSD-2 clause open source license.

  • Resources
      -
    • bgfx::Memory
    • -
    • alloc()
    • -
    • copy()
    • -
    • makeRef()
    • Shaders and Programs
    • -
    • Uniforms
    • +
    • Uniforms
    • Vertex Buffers
    • Index Buffers
    • -
    • Textures
    • +
    • Textures
    • Frame Buffers
    • Instance Buffer
    • Indirect Buffer
    • diff --git a/license.html b/license.html index fbfb7d5b7..64613c25b 100644 --- a/license.html +++ b/license.html @@ -83,7 +83,7 @@

      License

      License (BSD 2-clause)

      -
      Copyright 2010-2025 Branimir Karadzic
      +
      Copyright 2010-2026 Branimir Karadzic
       
       Redistribution and use in source and binary forms, with or without modification,
       are permitted provided that the following conditions are met:
      diff --git a/objects.inv b/objects.inv
      index 24ee3ffa28a07045442ecf4765772b7636a3681f..7c457346366aa51c2ce90a984edcf9dfc3e55d6f 100644
      GIT binary patch
      literal 27362
      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