Move vertices and indicies buffers to vertices.
This commit is contained in:
parent
a91a852887
commit
66980e6ea9
@ -351,6 +351,8 @@ rk_vertices_t rk_create_vertices(
|
|||||||
memcpy(vertices->vertices, _vertices, nvertices * vertex_size);
|
memcpy(vertices->vertices, _vertices, nvertices * vertex_size);
|
||||||
vertices->indices = new rk_ushort[nindices];
|
vertices->indices = new rk_ushort[nindices];
|
||||||
memcpy(vertices->indices, indices, nindices * sizeof(rk_ushort));
|
memcpy(vertices->indices, indices, nindices * sizeof(rk_ushort));
|
||||||
|
vertices->vertices_buffer = 0;
|
||||||
|
vertices->indices_buffer = 0;
|
||||||
return reinterpret_cast<rk_vertices_t>(vertices);
|
return reinterpret_cast<rk_vertices_t>(vertices);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -490,7 +492,7 @@ rk_batch_t rk_create_batch(
|
|||||||
rk_uint max_size,
|
rk_uint max_size,
|
||||||
rk_uint max_meshes,
|
rk_uint max_meshes,
|
||||||
rk_param_format const * params_format) {
|
rk_param_format const * params_format) {
|
||||||
rk_vertices const * const vertices = reinterpret_cast<rk_vertices const *>(_vertices);
|
rk_vertices * const vertices = reinterpret_cast<rk_vertices *>(_vertices);
|
||||||
if (!vertices || !max_size || max_size > RK_BATCH_MAX_SIZE) {
|
if (!vertices || !max_size || max_size > RK_BATCH_MAX_SIZE) {
|
||||||
rk_printf("rk_create_batch(): invalid params.");
|
rk_printf("rk_create_batch(): invalid params.");
|
||||||
return RK_INVALID_HANDLE;
|
return RK_INVALID_HANDLE;
|
||||||
@ -555,13 +557,19 @@ rk_batch_t rk_create_batch(
|
|||||||
}
|
}
|
||||||
glGenVertexArrays(1, &batch->vertex_array);
|
glGenVertexArrays(1, &batch->vertex_array);
|
||||||
glBindVertexArray(batch->vertex_array);
|
glBindVertexArray(batch->vertex_array);
|
||||||
glGenBuffers(1, &batch->vertices_buffer);
|
if (!vertices->vertices_buffer) {
|
||||||
glBindBuffer(GL_ARRAY_BUFFER, batch->vertices_buffer);
|
glGenBuffers(1, &vertices->vertices_buffer);
|
||||||
glBufferData(GL_ARRAY_BUFFER, vertices->nvertices * vertex_size, vertices->vertices, GL_STATIC_DRAW);
|
glBindBuffer(GL_ARRAY_BUFFER, vertices->vertices_buffer);
|
||||||
glBindBuffer(GL_ARRAY_BUFFER, 0);
|
glBufferData(GL_ARRAY_BUFFER, vertices->nvertices * vertex_size, vertices->vertices, GL_STATIC_DRAW);
|
||||||
glGenBuffers(1, &batch->indices_buffer);
|
glBindBuffer(GL_ARRAY_BUFFER, 0);
|
||||||
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, batch->indices_buffer);
|
}
|
||||||
glBufferData(GL_ELEMENT_ARRAY_BUFFER, vertices->nindices * sizeof(rk_ushort), vertices->indices, GL_STATIC_DRAW);
|
if (vertices->indices_buffer) {
|
||||||
|
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vertices->indices_buffer);
|
||||||
|
} else {
|
||||||
|
glGenBuffers(1, &vertices->indices_buffer);
|
||||||
|
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vertices->indices_buffer);
|
||||||
|
glBufferData(GL_ELEMENT_ARRAY_BUFFER, vertices->nindices * sizeof(rk_ushort), vertices->indices, GL_STATIC_DRAW);
|
||||||
|
}
|
||||||
if (rk_MultiDrawElementsIndirect) {
|
if (rk_MultiDrawElementsIndirect) {
|
||||||
glGenBuffers(1, &batch->commands_buffer);
|
glGenBuffers(1, &batch->commands_buffer);
|
||||||
glBindBuffer(GL_DRAW_INDIRECT_BUFFER, batch->commands_buffer);
|
glBindBuffer(GL_DRAW_INDIRECT_BUFFER, batch->commands_buffer);
|
||||||
@ -577,7 +585,7 @@ rk_batch_t rk_create_batch(
|
|||||||
unsigned binding = 0;
|
unsigned binding = 0;
|
||||||
unsigned attrib = 0;
|
unsigned attrib = 0;
|
||||||
unsigned offset = 0;
|
unsigned offset = 0;
|
||||||
glBindVertexBuffer(binding, batch->vertices_buffer, 0, vertex_size);
|
glBindVertexBuffer(binding, vertices->vertices_buffer, 0, vertex_size);
|
||||||
for (rk_vertex_format const * f = vertices->format; *f; ++f) {
|
for (rk_vertex_format const * f = vertices->format; *f; ++f) {
|
||||||
GLboolean const norm = (*f & RK_VERTEX_FORMAT_NORMALIZE) != 0;
|
GLboolean const norm = (*f & RK_VERTEX_FORMAT_NORMALIZE) != 0;
|
||||||
switch (*f & RK_VERTEX_FORMAT_MASK) {
|
switch (*f & RK_VERTEX_FORMAT_MASK) {
|
||||||
@ -1029,8 +1037,6 @@ void rk_destroy_batch(
|
|||||||
delete[] batch->params;
|
delete[] batch->params;
|
||||||
glDeleteBuffers(1, &batch->params_buffer);
|
glDeleteBuffers(1, &batch->params_buffer);
|
||||||
}
|
}
|
||||||
glDeleteBuffers(1, &batch->indices_buffer);
|
|
||||||
glDeleteBuffers(1, &batch->vertices_buffer);
|
|
||||||
glDeleteVertexArrays(1, &batch->vertex_array);
|
glDeleteVertexArrays(1, &batch->vertex_array);
|
||||||
delete batch;
|
delete batch;
|
||||||
}
|
}
|
||||||
@ -1053,6 +1059,12 @@ void rk_destroy_vertices(
|
|||||||
delete[] vertices->format;
|
delete[] vertices->format;
|
||||||
delete[] vertices->vertices;
|
delete[] vertices->vertices;
|
||||||
delete[] vertices->indices;
|
delete[] vertices->indices;
|
||||||
|
if (vertices->vertices_buffer) {
|
||||||
|
glDeleteBuffers(1, &vertices->vertices_buffer);
|
||||||
|
}
|
||||||
|
if (vertices->indices_buffer) {
|
||||||
|
glDeleteBuffers(1, &vertices->indices_buffer);
|
||||||
|
}
|
||||||
delete vertices;
|
delete vertices;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -44,6 +44,8 @@ struct rk_vertices {
|
|||||||
rk_vertex_format * format;
|
rk_vertex_format * format;
|
||||||
rk_ubyte * vertices;
|
rk_ubyte * vertices;
|
||||||
rk_ushort * indices;
|
rk_ushort * indices;
|
||||||
|
GLuint vertices_buffer;
|
||||||
|
GLuint indices_buffer;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct rk_command {
|
struct rk_command {
|
||||||
@ -119,8 +121,6 @@ struct rk_batch {
|
|||||||
rk_command * commands;
|
rk_command * commands;
|
||||||
rk_parameter * params;
|
rk_parameter * params;
|
||||||
GLuint vertex_array;
|
GLuint vertex_array;
|
||||||
GLuint vertices_buffer;
|
|
||||||
GLuint indices_buffer;
|
|
||||||
GLuint commands_buffer;
|
GLuint commands_buffer;
|
||||||
GLuint params_buffer;
|
GLuint params_buffer;
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user