libobs: Add vertex/index buffer "direct" flush functions
(Note: This commit also modifies libobs-d3d11 and libobs-opengl) Allows the ability to flush data directly without having to use the buffer's internal data. Allows the caller to manage his/her own vertex/index buffer data if desired, working around the design flaw of having to rely on a vertex/index buffer's internal data.
This commit is contained in:
@@ -141,10 +141,12 @@ bool load_graphics_imports(struct gs_exports *exports, void *module,
|
||||
|
||||
GRAPHICS_IMPORT(gs_vertexbuffer_destroy);
|
||||
GRAPHICS_IMPORT(gs_vertexbuffer_flush);
|
||||
GRAPHICS_IMPORT(gs_vertexbuffer_flush_direct);
|
||||
GRAPHICS_IMPORT(gs_vertexbuffer_get_data);
|
||||
|
||||
GRAPHICS_IMPORT(gs_indexbuffer_destroy);
|
||||
GRAPHICS_IMPORT(gs_indexbuffer_flush);
|
||||
GRAPHICS_IMPORT(gs_indexbuffer_flush_direct);
|
||||
GRAPHICS_IMPORT(gs_indexbuffer_get_data);
|
||||
GRAPHICS_IMPORT(gs_indexbuffer_get_num_indices);
|
||||
GRAPHICS_IMPORT(gs_indexbuffer_get_type);
|
||||
|
@@ -189,11 +189,15 @@ struct gs_exports {
|
||||
|
||||
void (*gs_vertexbuffer_destroy)(gs_vertbuffer_t *vertbuffer);
|
||||
void (*gs_vertexbuffer_flush)(gs_vertbuffer_t *vertbuffer);
|
||||
void (*gs_vertexbuffer_flush_direct)(gs_vertbuffer_t *vertbuffer,
|
||||
const struct gs_vb_data *data);
|
||||
struct gs_vb_data *(*gs_vertexbuffer_get_data)(
|
||||
const gs_vertbuffer_t *vertbuffer);
|
||||
|
||||
void (*gs_indexbuffer_destroy)(gs_indexbuffer_t *indexbuffer);
|
||||
void (*gs_indexbuffer_flush)(gs_indexbuffer_t *indexbuffer);
|
||||
void (*gs_indexbuffer_flush_direct)(gs_indexbuffer_t *indexbuffer,
|
||||
const void *data);
|
||||
void *(*gs_indexbuffer_get_data)(const gs_indexbuffer_t *indexbuffer);
|
||||
size_t (*gs_indexbuffer_get_num_indices)(
|
||||
const gs_indexbuffer_t *indexbuffer);
|
||||
|
@@ -2477,6 +2477,16 @@ void gs_vertexbuffer_flush(gs_vertbuffer_t *vertbuffer)
|
||||
thread_graphics->exports.gs_vertexbuffer_flush(vertbuffer);
|
||||
}
|
||||
|
||||
void gs_vertexbuffer_flush_direct(gs_vertbuffer_t *vertbuffer,
|
||||
const struct gs_vb_data *data)
|
||||
{
|
||||
if (!gs_valid_p2("gs_vertexbuffer_flush_direct", vertbuffer, data))
|
||||
return;
|
||||
|
||||
thread_graphics->exports.gs_vertexbuffer_flush_direct(vertbuffer,
|
||||
data);
|
||||
}
|
||||
|
||||
struct gs_vb_data *gs_vertexbuffer_get_data(const gs_vertbuffer_t *vertbuffer)
|
||||
{
|
||||
if (!gs_valid_p("gs_vertexbuffer_get_data", vertbuffer))
|
||||
@@ -2505,6 +2515,15 @@ void gs_indexbuffer_flush(gs_indexbuffer_t *indexbuffer)
|
||||
thread_graphics->exports.gs_indexbuffer_flush(indexbuffer);
|
||||
}
|
||||
|
||||
void gs_indexbuffer_flush_direct(gs_indexbuffer_t *indexbuffer,
|
||||
const void *data)
|
||||
{
|
||||
if (!gs_valid_p2("gs_indexbuffer_flush_direct", indexbuffer, data))
|
||||
return;
|
||||
|
||||
thread_graphics->exports.gs_indexbuffer_flush_direct(indexbuffer, data);
|
||||
}
|
||||
|
||||
void *gs_indexbuffer_get_data(const gs_indexbuffer_t *indexbuffer)
|
||||
{
|
||||
if (!gs_valid_p("gs_indexbuffer_get_data", indexbuffer))
|
||||
|
@@ -718,11 +718,15 @@ EXPORT void gs_samplerstate_destroy(gs_samplerstate_t *samplerstate);
|
||||
|
||||
EXPORT void gs_vertexbuffer_destroy(gs_vertbuffer_t *vertbuffer);
|
||||
EXPORT void gs_vertexbuffer_flush(gs_vertbuffer_t *vertbuffer);
|
||||
EXPORT void gs_vertexbuffer_flush_direct(gs_vertbuffer_t *vertbuffer,
|
||||
const struct gs_vb_data *data);
|
||||
EXPORT struct gs_vb_data *gs_vertexbuffer_get_data(
|
||||
const gs_vertbuffer_t *vertbuffer);
|
||||
|
||||
EXPORT void gs_indexbuffer_destroy(gs_indexbuffer_t *indexbuffer);
|
||||
EXPORT void gs_indexbuffer_flush(gs_indexbuffer_t *indexbuffer);
|
||||
EXPORT void gs_indexbuffer_flush_direct(gs_indexbuffer_t *indexbuffer,
|
||||
const void *data);
|
||||
EXPORT void *gs_indexbuffer_get_data(const gs_indexbuffer_t *indexbuffer);
|
||||
EXPORT size_t gs_indexbuffer_get_num_indices(
|
||||
const gs_indexbuffer_t *indexbuffer);
|
||||
|
Reference in New Issue
Block a user