Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ability to bind vertex buffer using offset #3262

Draft
wants to merge 6 commits into
base: master
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
211 changes: 211 additions & 0 deletions include/bgfx/bgfx.h
Original file line number Diff line number Diff line change
Expand Up @@ -1299,6 +1299,27 @@ namespace bgfx
, VertexLayoutHandle _layoutHandle = BGFX_INVALID_HANDLE
);


/// Set vertex buffer for draw primitive.
///
/// @param[in] _stream Vertex stream.
/// @param[in] _handle Vertex buffer.
/// @param[in] _offset Offset of first vertex to render.
/// @param[in] _numVertices Number of vertices to render.
/// @param[in] _layoutHandle Vertex layout for aliasing vertex buffer. If invalid handle is
/// used, vertex layout used for creation of vertex buffer will be used.
/// @param[in] _offset Offset of data in buffer.
///
/// @attention C99's equivalent binding is `bgfx_encoder_set_vertex_buffer_with_offset`.
///
void setVertexBufferWithOffset(
uint8_t _stream
, VertexBufferHandle _handle
, uint32_t _offset
, uint32_t _numVertices
, VertexLayoutHandle _layoutHandle = BGFX_INVALID_HANDLE
);

/// Set vertex buffer for draw primitive.
///
/// @param[in] _stream Vertex stream.
Expand Down Expand Up @@ -1330,6 +1351,25 @@ namespace bgfx
, VertexLayoutHandle _layoutHandle = BGFX_INVALID_HANDLE
);

/// Set vertex buffer for draw primitive.
///
/// @param[in] _stream Vertex stream.
/// @param[in] _handle Dynamic vertex buffer.
/// @param[in] _offset Offset of first vertex to render.
/// @param[in] _numVertices Number of vertices to render.
/// @param[in] _layoutHandle Vertex layout for aliasing vertex buffer. If invalid handle is
/// used, vertex layout used for creation of vertex buffer will be used.
///
/// @attention C99's equivalent binding is `bgfx_encoder_set_dynamic_vertex_buffer_with_offset`.
///
void setVertexBufferWithOffset(
uint8_t _stream
, DynamicVertexBufferHandle _handle
, uint32_t _offset
, uint32_t _numVertices
, VertexLayoutHandle _layoutHandle = BGFX_INVALID_HANDLE
);

/// Set vertex buffer for draw primitive.
///
/// @param[in] _stream Vertex stream.
Expand Down Expand Up @@ -1407,6 +1447,23 @@ namespace bgfx
, uint32_t _num
);

/// Set instance data buffer for draw primitive.
///
/// @param[in] _handle Vertex buffer.
/// @param[in] _offset Offset of first instance data.
/// @param[in] _num Number of data instances.
/// @param[in] _stride Instance stride. Must be multiple of 16.
///
/// @attention C99's equivalent binding is `bgfx_encoder_set_instance_data_from_vertex_buffer_with_offset`.
///
void setInstanceDataBufferWithOffset(
VertexBufferHandle _handle
, uint32_t _offset
, uint32_t _num
, uint16_t _stride
);


/// Set instance data buffer for draw primitive.
///
/// @param[in] _handle Vertex buffer.
Expand All @@ -1421,6 +1478,22 @@ namespace bgfx
, uint32_t _num
);

/// Set instance data buffer for draw primitive.
///
/// @param[in] _handle Vertex buffer.
/// @param[in] _offset Offset of first instance data.
/// @param[in] _num Number of data instances.
/// @param[in] _stride Instance stride. Must be multiple of 16.
///
/// @attention C99's equivalent binding is `bgfx_encoder_set_instance_data_from_dynamic_vertex_buffer_with_offset`.
///
void setInstanceDataBufferWithOffset(
DynamicVertexBufferHandle _handle
, uint32_t _offset
, uint32_t _num
, uint16_t _stride
);

/// Set number of instances for auto generated instances use in conjunction
/// with gl_InstanceID.
///
Expand Down Expand Up @@ -2469,6 +2542,32 @@ namespace bgfx
, uint16_t _flags = BGFX_BUFFER_NONE
);

/// Create empty dynamic vertex buffer.
///
/// @param[in] _size Size of buffer.
/// @param[in] _layout Vertex layout.
/// @param[in] _flags 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 Dynamic vertex buffer handle.
///
/// @attention C99's equivalent binding is `bgfx_create_dynamic_vertex_buffer_with_size`.
///
DynamicVertexBufferHandle createDynamicVertexBufferWithSize(
uint32_t _size
, const VertexLayout& _layout
, uint16_t _flags = BGFX_BUFFER_NONE
);

/// Update dynamic vertex buffer.
///
/// @param[in] _handle Dynamic vertex buffer handle.
Expand All @@ -2483,6 +2582,20 @@ namespace bgfx
, const Memory* _mem
);

/// Update dynamic vertex buffer.
///
/// @param[in] _handle Dynamic vertex buffer handle.
/// @param[in] _offset Offset of data.
/// @param[in] _mem Vertex buffer data.
///
/// @attention C99's equivalent binding is `bgfx_update_dynamic_vertex_buffer_with_offset`.
///
void updateWithOffset(
DynamicVertexBufferHandle _handle
, uint32_t _offset
, const Memory* _mem
);

/// Destroy dynamic vertex buffer.
///
/// @param[in] _handle Dynamic vertex buffer handle.
Expand Down Expand Up @@ -2527,6 +2640,19 @@ namespace bgfx
, uint16_t _stride
);

/// Returns number of requested or maximum available instance buffer bytes.
///
/// @param[in] _size Size of required instance buffer.
/// @param[in] _stride Stride per instance.
///
/// @attention C99's equivalent binding is `bgfx_get_avail_instance_data_buffer_size`.
///
uint32_t getAvailInstanceDataBufferSize(
uint32_t _size
, uint16_t _stride
);


/// Allocate transient index buffer.
///
/// @param[out] _tib TransientIndexBuffer structure will be filled, and will be valid
Expand Down Expand Up @@ -2596,6 +2722,21 @@ namespace bgfx
, uint16_t _stride
);

/// Allocate instance data buffer.
///
/// @param[out] _idb InstanceDataBuffer structure will be filled, and will be valid
/// for the duration of frame, and can be reused for multiple draw calls.
/// @param[in] _size Buffer size.
/// @param[in] _stride Instance stride. Must be multiple of 16.
///
/// @attention C99's equivalent binding is `bgfx_alloc_instance_data_buffer_with_size`.
///
void allocInstanceDataBufferWithSize(
InstanceDataBuffer* _idb
, uint32_t _size
, uint16_t _stride
);

/// Create draw indirect buffer.
///
/// @param[in] _num Number of indirect calls.
Expand Down Expand Up @@ -3778,6 +3919,25 @@ namespace bgfx
, VertexLayoutHandle _layoutHandle = BGFX_INVALID_HANDLE
);

/// Set vertex buffer for draw primitive.
///
/// @param[in] _stream Vertex stream.
/// @param[in] _handle Vertex buffer.
/// @param[in] _offset Offset of first vertex to render.
/// @param[in] _numVertices Number of vertices to render.
/// @param[in] _layoutHandle Vertex layout for aliasing vertex buffer. If invalid handle is
/// used, vertex layout used for creation of vertex buffer will be used.
///
/// @attention C99's equivalent binding is `bgfx_set_vertex_buffer_with_offset`.
///
void setVertexBufferWithOffset(
uint8_t _stream
, VertexBufferHandle _handle
, uint32_t _offset
, uint32_t _numVertices
, VertexLayoutHandle _layoutHandle = BGFX_INVALID_HANDLE
);

/// Set vertex buffer for draw primitive.
///
/// @param[in] _stream Vertex stream.
Expand Down Expand Up @@ -3809,6 +3969,25 @@ namespace bgfx
, VertexLayoutHandle _layoutHandle = BGFX_INVALID_HANDLE
);

/// Set vertex buffer for draw primitive.
///
/// @param[in] _stream Vertex stream.
/// @param[in] _handle Dynamic vertex buffer.
/// @param[in] _offset Offset of first vertex to render.
/// @param[in] _numVertices Number of vertices to render.
/// @param[in] _layoutHandle Vertex layout for aliasing vertex buffer. If invalid handle is
/// used, vertex layout used for creation of vertex buffer will be used.
///
/// @attention C99's equivalent binding is `bgfx_set_dynamic_vertex_buffer_with_offset`.
///
void setVertexBufferWithOffset(
uint8_t _stream
, DynamicVertexBufferHandle _handle
, uint32_t _offset
, uint32_t _numVertices
, VertexLayoutHandle _layoutHandle = BGFX_INVALID_HANDLE
);

/// Set vertex buffer for draw primitive.
///
/// @param[in] _stream Vertex stream.
Expand Down Expand Up @@ -3886,6 +4065,22 @@ namespace bgfx
, uint32_t _num
);

/// Set instance data buffer for draw primitive.
///
/// @param[in] _handle Vertex buffer.
/// @param[in] _offset Offset of first instance data.
/// @param[in] _num Number of data instances.
/// @param[in] _stride Instance stride. Must be multiple of 16.
///
/// @attention C99's equivalent binding is `bgfx_set_instance_data_from_vertex_buffer_with_offset`.
///
void setInstanceDataBufferWithOffset(
VertexBufferHandle _handle
, uint32_t _offset
, uint32_t _num
, uint16_t _stride
);

/// Set instance data buffer for draw primitive.
///
/// @param[in] _handle Vertex buffer.
Expand All @@ -3900,6 +4095,22 @@ namespace bgfx
, uint32_t _num
);

/// Set instance data buffer for draw primitive.
///
/// @param[in] _handle Vertex buffer.
/// @param[in] _offset Offset of first instance data.
/// @param[in] _num Number of data instances.
/// @param[in] _stride Instance stride. Must be multiple of 16.
///
/// @attention C99's equivalent binding is `bgfx_set_instance_data_from_dynamic_vertex_buffer_with_offset`.
///
void setInstanceDataBufferWithOffset(
DynamicVertexBufferHandle _handle
, uint32_t _offset
, uint32_t _num
, uint16_t _stride
);

/// Set number of instances for auto generated instances use in conjunction
/// with gl_InstanceID.
///
Expand Down
Loading