Reverting changes to legacy polys and generic prims
Due to my less than eagle-like view over these functions I had assumed they were passing in a single buffer input for the changes to make buffer uploading more efficient. They aren't, which is less than ideal. So these particular changes should be reverted. When I have some more time I'll see whether the API for these calls can be changed, because as is the multiple glSubBufferData calls could be causing stalls on some hardware.
This commit is contained in:
parent
2e073ecbea
commit
debda7f411
2 changed files with 16 additions and 48 deletions
|
@ -446,21 +446,8 @@ void RasterizerCanvasBaseGLES2::_draw_polygon(const int *p_indices, int p_index_
|
||||||
|
|
||||||
glBindBuffer(GL_ARRAY_BUFFER, data.polygon_buffer);
|
glBindBuffer(GL_ARRAY_BUFFER, data.polygon_buffer);
|
||||||
|
|
||||||
// precalculate the buffer size ahead of time instead of making multiple glBufferSubData calls
|
|
||||||
uint32_t total_buffer_size = sizeof(Vector2) * p_vertex_count;
|
|
||||||
if (!p_singlecolor && p_colors) {
|
|
||||||
total_buffer_size += sizeof(Color) * p_vertex_count;
|
|
||||||
}
|
|
||||||
if (p_uvs) {
|
|
||||||
total_buffer_size += sizeof(Vector2) * p_vertex_count;
|
|
||||||
}
|
|
||||||
if (p_weights && p_bones) {
|
|
||||||
total_buffer_size += sizeof(float) * 4 * p_vertex_count; // weights
|
|
||||||
total_buffer_size += sizeof(int) * 4 * p_vertex_count; // bones
|
|
||||||
}
|
|
||||||
|
|
||||||
uint32_t buffer_ofs = 0;
|
uint32_t buffer_ofs = 0;
|
||||||
storage->buffer_orphan_and_upload(data.polygon_buffer_size, 0, total_buffer_size, p_vertices);
|
storage->buffer_orphan_and_upload(data.polygon_buffer_size, 0, sizeof(Vector2) * p_vertex_count, p_vertices);
|
||||||
|
|
||||||
glEnableVertexAttribArray(VS::ARRAY_VERTEX);
|
glEnableVertexAttribArray(VS::ARRAY_VERTEX);
|
||||||
glVertexAttribPointer(VS::ARRAY_VERTEX, 2, GL_FLOAT, GL_FALSE, sizeof(Vector2), NULL);
|
glVertexAttribPointer(VS::ARRAY_VERTEX, 2, GL_FLOAT, GL_FALSE, sizeof(Vector2), NULL);
|
||||||
|
@ -474,12 +461,14 @@ void RasterizerCanvasBaseGLES2::_draw_polygon(const int *p_indices, int p_index_
|
||||||
glDisableVertexAttribArray(VS::ARRAY_COLOR);
|
glDisableVertexAttribArray(VS::ARRAY_COLOR);
|
||||||
glVertexAttrib4f(VS::ARRAY_COLOR, 1, 1, 1, 1);
|
glVertexAttrib4f(VS::ARRAY_COLOR, 1, 1, 1, 1);
|
||||||
} else {
|
} else {
|
||||||
|
glBufferSubData(GL_ARRAY_BUFFER, buffer_ofs, sizeof(Color) * p_vertex_count, p_colors);
|
||||||
glEnableVertexAttribArray(VS::ARRAY_COLOR);
|
glEnableVertexAttribArray(VS::ARRAY_COLOR);
|
||||||
glVertexAttribPointer(VS::ARRAY_COLOR, 4, GL_FLOAT, GL_FALSE, sizeof(Color), CAST_INT_TO_UCHAR_PTR(buffer_ofs));
|
glVertexAttribPointer(VS::ARRAY_COLOR, 4, GL_FLOAT, GL_FALSE, sizeof(Color), CAST_INT_TO_UCHAR_PTR(buffer_ofs));
|
||||||
buffer_ofs += sizeof(Color) * p_vertex_count;
|
buffer_ofs += sizeof(Color) * p_vertex_count;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (p_uvs) {
|
if (p_uvs) {
|
||||||
|
glBufferSubData(GL_ARRAY_BUFFER, buffer_ofs, sizeof(Vector2) * p_vertex_count, p_uvs);
|
||||||
glEnableVertexAttribArray(VS::ARRAY_TEX_UV);
|
glEnableVertexAttribArray(VS::ARRAY_TEX_UV);
|
||||||
glVertexAttribPointer(VS::ARRAY_TEX_UV, 2, GL_FLOAT, GL_FALSE, sizeof(Vector2), CAST_INT_TO_UCHAR_PTR(buffer_ofs));
|
glVertexAttribPointer(VS::ARRAY_TEX_UV, 2, GL_FLOAT, GL_FALSE, sizeof(Vector2), CAST_INT_TO_UCHAR_PTR(buffer_ofs));
|
||||||
buffer_ofs += sizeof(Vector2) * p_vertex_count;
|
buffer_ofs += sizeof(Vector2) * p_vertex_count;
|
||||||
|
@ -488,10 +477,12 @@ void RasterizerCanvasBaseGLES2::_draw_polygon(const int *p_indices, int p_index_
|
||||||
}
|
}
|
||||||
|
|
||||||
if (p_weights && p_bones) {
|
if (p_weights && p_bones) {
|
||||||
|
glBufferSubData(GL_ARRAY_BUFFER, buffer_ofs, sizeof(float) * 4 * p_vertex_count, p_weights);
|
||||||
glEnableVertexAttribArray(VS::ARRAY_WEIGHTS);
|
glEnableVertexAttribArray(VS::ARRAY_WEIGHTS);
|
||||||
glVertexAttribPointer(VS::ARRAY_WEIGHTS, 4, GL_FLOAT, GL_FALSE, sizeof(float) * 4, CAST_INT_TO_UCHAR_PTR(buffer_ofs));
|
glVertexAttribPointer(VS::ARRAY_WEIGHTS, 4, GL_FLOAT, GL_FALSE, sizeof(float) * 4, CAST_INT_TO_UCHAR_PTR(buffer_ofs));
|
||||||
buffer_ofs += sizeof(float) * 4 * p_vertex_count;
|
buffer_ofs += sizeof(float) * 4 * p_vertex_count;
|
||||||
|
|
||||||
|
glBufferSubData(GL_ARRAY_BUFFER, buffer_ofs, sizeof(int) * 4 * p_vertex_count, p_bones);
|
||||||
glEnableVertexAttribArray(VS::ARRAY_BONES);
|
glEnableVertexAttribArray(VS::ARRAY_BONES);
|
||||||
glVertexAttribPointer(VS::ARRAY_BONES, 4, GL_UNSIGNED_INT, GL_FALSE, sizeof(int) * 4, CAST_INT_TO_UCHAR_PTR(buffer_ofs));
|
glVertexAttribPointer(VS::ARRAY_BONES, 4, GL_UNSIGNED_INT, GL_FALSE, sizeof(int) * 4, CAST_INT_TO_UCHAR_PTR(buffer_ofs));
|
||||||
buffer_ofs += sizeof(int) * 4 * p_vertex_count;
|
buffer_ofs += sizeof(int) * 4 * p_vertex_count;
|
||||||
|
@ -525,17 +516,8 @@ void RasterizerCanvasBaseGLES2::_draw_generic(GLuint p_primitive, int p_vertex_c
|
||||||
|
|
||||||
glBindBuffer(GL_ARRAY_BUFFER, data.polygon_buffer);
|
glBindBuffer(GL_ARRAY_BUFFER, data.polygon_buffer);
|
||||||
|
|
||||||
// precalculate the buffer size ahead of time instead of making multiple glBufferSubData calls
|
|
||||||
uint32_t total_buffer_size = sizeof(Vector2) * p_vertex_count;
|
|
||||||
if (!p_singlecolor && p_colors) {
|
|
||||||
total_buffer_size += sizeof(Color) * p_vertex_count;
|
|
||||||
}
|
|
||||||
if (p_uvs) {
|
|
||||||
total_buffer_size += sizeof(Vector2) * p_vertex_count;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint32_t buffer_ofs = 0;
|
uint32_t buffer_ofs = 0;
|
||||||
storage->buffer_orphan_and_upload(data.polygon_buffer_size, 0, total_buffer_size, p_vertices);
|
storage->buffer_orphan_and_upload(data.polygon_buffer_size, 0, sizeof(Vector2) * p_vertex_count, p_vertices);
|
||||||
|
|
||||||
glEnableVertexAttribArray(VS::ARRAY_VERTEX);
|
glEnableVertexAttribArray(VS::ARRAY_VERTEX);
|
||||||
glVertexAttribPointer(VS::ARRAY_VERTEX, 2, GL_FLOAT, GL_FALSE, sizeof(Vector2), NULL);
|
glVertexAttribPointer(VS::ARRAY_VERTEX, 2, GL_FLOAT, GL_FALSE, sizeof(Vector2), NULL);
|
||||||
|
@ -549,12 +531,14 @@ void RasterizerCanvasBaseGLES2::_draw_generic(GLuint p_primitive, int p_vertex_c
|
||||||
glDisableVertexAttribArray(VS::ARRAY_COLOR);
|
glDisableVertexAttribArray(VS::ARRAY_COLOR);
|
||||||
glVertexAttrib4f(VS::ARRAY_COLOR, 1, 1, 1, 1);
|
glVertexAttrib4f(VS::ARRAY_COLOR, 1, 1, 1, 1);
|
||||||
} else {
|
} else {
|
||||||
|
glBufferSubData(GL_ARRAY_BUFFER, buffer_ofs, sizeof(Color) * p_vertex_count, p_colors);
|
||||||
glEnableVertexAttribArray(VS::ARRAY_COLOR);
|
glEnableVertexAttribArray(VS::ARRAY_COLOR);
|
||||||
glVertexAttribPointer(VS::ARRAY_COLOR, 4, GL_FLOAT, GL_FALSE, sizeof(Color), CAST_INT_TO_UCHAR_PTR(buffer_ofs));
|
glVertexAttribPointer(VS::ARRAY_COLOR, 4, GL_FLOAT, GL_FALSE, sizeof(Color), CAST_INT_TO_UCHAR_PTR(buffer_ofs));
|
||||||
buffer_ofs += sizeof(Color) * p_vertex_count;
|
buffer_ofs += sizeof(Color) * p_vertex_count;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (p_uvs) {
|
if (p_uvs) {
|
||||||
|
glBufferSubData(GL_ARRAY_BUFFER, buffer_ofs, sizeof(Vector2) * p_vertex_count, p_uvs);
|
||||||
glEnableVertexAttribArray(VS::ARRAY_TEX_UV);
|
glEnableVertexAttribArray(VS::ARRAY_TEX_UV);
|
||||||
glVertexAttribPointer(VS::ARRAY_TEX_UV, 2, GL_FLOAT, GL_FALSE, sizeof(Vector2), CAST_INT_TO_UCHAR_PTR(buffer_ofs));
|
glVertexAttribPointer(VS::ARRAY_TEX_UV, 2, GL_FLOAT, GL_FALSE, sizeof(Vector2), CAST_INT_TO_UCHAR_PTR(buffer_ofs));
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -348,21 +348,8 @@ void RasterizerCanvasBaseGLES3::_draw_polygon(const int *p_indices, int p_index_
|
||||||
glBindVertexArray(data.polygon_buffer_pointer_array);
|
glBindVertexArray(data.polygon_buffer_pointer_array);
|
||||||
glBindBuffer(GL_ARRAY_BUFFER, data.polygon_buffer);
|
glBindBuffer(GL_ARRAY_BUFFER, data.polygon_buffer);
|
||||||
|
|
||||||
// precalculate the buffer size ahead of time instead of making multiple glBufferSubData calls
|
|
||||||
uint32_t total_buffer_size = sizeof(Vector2) * p_vertex_count;
|
|
||||||
if (!p_singlecolor && p_colors) {
|
|
||||||
total_buffer_size += sizeof(Color) * p_vertex_count;
|
|
||||||
}
|
|
||||||
if (p_uvs) {
|
|
||||||
total_buffer_size += sizeof(Vector2) * p_vertex_count;
|
|
||||||
}
|
|
||||||
if (p_weights && p_bones) {
|
|
||||||
total_buffer_size += sizeof(int) * 4 * p_vertex_count; // bones
|
|
||||||
total_buffer_size += sizeof(float) * 4 * p_vertex_count; // weights
|
|
||||||
}
|
|
||||||
|
|
||||||
uint32_t buffer_ofs = 0;
|
uint32_t buffer_ofs = 0;
|
||||||
storage->buffer_orphan_and_upload(data.polygon_buffer_size, buffer_ofs, total_buffer_size, p_vertices);
|
storage->buffer_orphan_and_upload(data.polygon_buffer_size, buffer_ofs, sizeof(Vector2) * p_vertex_count, p_vertices);
|
||||||
|
|
||||||
glEnableVertexAttribArray(VS::ARRAY_VERTEX);
|
glEnableVertexAttribArray(VS::ARRAY_VERTEX);
|
||||||
glVertexAttribPointer(VS::ARRAY_VERTEX, 2, GL_FLOAT, false, sizeof(Vector2), CAST_INT_TO_UCHAR_PTR(buffer_ofs));
|
glVertexAttribPointer(VS::ARRAY_VERTEX, 2, GL_FLOAT, false, sizeof(Vector2), CAST_INT_TO_UCHAR_PTR(buffer_ofs));
|
||||||
|
@ -381,6 +368,7 @@ void RasterizerCanvasBaseGLES3::_draw_polygon(const int *p_indices, int p_index_
|
||||||
glVertexAttrib4f(VS::ARRAY_COLOR, 1, 1, 1, 1);
|
glVertexAttrib4f(VS::ARRAY_COLOR, 1, 1, 1, 1);
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
|
glBufferSubData(GL_ARRAY_BUFFER, buffer_ofs, sizeof(Color) * p_vertex_count, p_colors);
|
||||||
glEnableVertexAttribArray(VS::ARRAY_COLOR);
|
glEnableVertexAttribArray(VS::ARRAY_COLOR);
|
||||||
glVertexAttribPointer(VS::ARRAY_COLOR, 4, GL_FLOAT, false, sizeof(Color), CAST_INT_TO_UCHAR_PTR(buffer_ofs));
|
glVertexAttribPointer(VS::ARRAY_COLOR, 4, GL_FLOAT, false, sizeof(Color), CAST_INT_TO_UCHAR_PTR(buffer_ofs));
|
||||||
buffer_ofs += sizeof(Color) * p_vertex_count;
|
buffer_ofs += sizeof(Color) * p_vertex_count;
|
||||||
|
@ -392,6 +380,7 @@ void RasterizerCanvasBaseGLES3::_draw_polygon(const int *p_indices, int p_index_
|
||||||
|
|
||||||
if (p_uvs) {
|
if (p_uvs) {
|
||||||
|
|
||||||
|
glBufferSubData(GL_ARRAY_BUFFER, buffer_ofs, sizeof(Vector2) * p_vertex_count, p_uvs);
|
||||||
glEnableVertexAttribArray(VS::ARRAY_TEX_UV);
|
glEnableVertexAttribArray(VS::ARRAY_TEX_UV);
|
||||||
glVertexAttribPointer(VS::ARRAY_TEX_UV, 2, GL_FLOAT, false, sizeof(Vector2), CAST_INT_TO_UCHAR_PTR(buffer_ofs));
|
glVertexAttribPointer(VS::ARRAY_TEX_UV, 2, GL_FLOAT, false, sizeof(Vector2), CAST_INT_TO_UCHAR_PTR(buffer_ofs));
|
||||||
buffer_ofs += sizeof(Vector2) * p_vertex_count;
|
buffer_ofs += sizeof(Vector2) * p_vertex_count;
|
||||||
|
@ -406,11 +395,13 @@ void RasterizerCanvasBaseGLES3::_draw_polygon(const int *p_indices, int p_index_
|
||||||
|
|
||||||
if (p_bones && p_weights) {
|
if (p_bones && p_weights) {
|
||||||
|
|
||||||
|
glBufferSubData(GL_ARRAY_BUFFER, buffer_ofs, sizeof(int) * 4 * p_vertex_count, p_bones);
|
||||||
glEnableVertexAttribArray(VS::ARRAY_BONES);
|
glEnableVertexAttribArray(VS::ARRAY_BONES);
|
||||||
//glVertexAttribPointer(VS::ARRAY_BONES, 4, GL_UNSIGNED_INT, false, sizeof(int) * 4, ((uint8_t *)0) + buffer_ofs);
|
//glVertexAttribPointer(VS::ARRAY_BONES, 4, GL_UNSIGNED_INT, false, sizeof(int) * 4, ((uint8_t *)0) + buffer_ofs);
|
||||||
glVertexAttribIPointer(VS::ARRAY_BONES, 4, GL_UNSIGNED_INT, sizeof(int) * 4, CAST_INT_TO_UCHAR_PTR(buffer_ofs));
|
glVertexAttribIPointer(VS::ARRAY_BONES, 4, GL_UNSIGNED_INT, sizeof(int) * 4, CAST_INT_TO_UCHAR_PTR(buffer_ofs));
|
||||||
buffer_ofs += sizeof(int) * 4 * p_vertex_count;
|
buffer_ofs += sizeof(int) * 4 * p_vertex_count;
|
||||||
|
|
||||||
|
glBufferSubData(GL_ARRAY_BUFFER, buffer_ofs, sizeof(float) * 4 * p_vertex_count, p_weights);
|
||||||
glEnableVertexAttribArray(VS::ARRAY_WEIGHTS);
|
glEnableVertexAttribArray(VS::ARRAY_WEIGHTS);
|
||||||
glVertexAttribPointer(VS::ARRAY_WEIGHTS, 4, GL_FLOAT, false, sizeof(float) * 4, CAST_INT_TO_UCHAR_PTR(buffer_ofs));
|
glVertexAttribPointer(VS::ARRAY_WEIGHTS, 4, GL_FLOAT, false, sizeof(float) * 4, CAST_INT_TO_UCHAR_PTR(buffer_ofs));
|
||||||
buffer_ofs += sizeof(float) * 4 * p_vertex_count;
|
buffer_ofs += sizeof(float) * 4 * p_vertex_count;
|
||||||
|
@ -448,18 +439,9 @@ void RasterizerCanvasBaseGLES3::_draw_generic(GLuint p_primitive, int p_vertex_c
|
||||||
glBindVertexArray(data.polygon_buffer_pointer_array);
|
glBindVertexArray(data.polygon_buffer_pointer_array);
|
||||||
glBindBuffer(GL_ARRAY_BUFFER, data.polygon_buffer);
|
glBindBuffer(GL_ARRAY_BUFFER, data.polygon_buffer);
|
||||||
|
|
||||||
// precalculate the buffer size ahead of time instead of making multiple glBufferSubData calls
|
|
||||||
uint32_t total_buffer_size = sizeof(Vector2) * p_vertex_count;
|
|
||||||
if (!p_singlecolor && p_colors) {
|
|
||||||
total_buffer_size += sizeof(Color) * p_vertex_count;
|
|
||||||
}
|
|
||||||
if (p_uvs) {
|
|
||||||
total_buffer_size += sizeof(Vector2) * p_vertex_count;
|
|
||||||
}
|
|
||||||
|
|
||||||
//vertex
|
//vertex
|
||||||
uint32_t buffer_ofs = 0;
|
uint32_t buffer_ofs = 0;
|
||||||
storage->buffer_orphan_and_upload(data.polygon_buffer_size, buffer_ofs, total_buffer_size, p_vertices);
|
storage->buffer_orphan_and_upload(data.polygon_buffer_size, buffer_ofs, sizeof(Vector2) * p_vertex_count, p_vertices);
|
||||||
|
|
||||||
glEnableVertexAttribArray(VS::ARRAY_VERTEX);
|
glEnableVertexAttribArray(VS::ARRAY_VERTEX);
|
||||||
glVertexAttribPointer(VS::ARRAY_VERTEX, 2, GL_FLOAT, false, sizeof(Vector2), CAST_INT_TO_UCHAR_PTR(buffer_ofs));
|
glVertexAttribPointer(VS::ARRAY_VERTEX, 2, GL_FLOAT, false, sizeof(Vector2), CAST_INT_TO_UCHAR_PTR(buffer_ofs));
|
||||||
|
@ -475,6 +457,7 @@ void RasterizerCanvasBaseGLES3::_draw_generic(GLuint p_primitive, int p_vertex_c
|
||||||
glVertexAttrib4f(VS::ARRAY_COLOR, 1, 1, 1, 1);
|
glVertexAttrib4f(VS::ARRAY_COLOR, 1, 1, 1, 1);
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
|
glBufferSubData(GL_ARRAY_BUFFER, buffer_ofs, sizeof(Color) * p_vertex_count, p_colors);
|
||||||
glEnableVertexAttribArray(VS::ARRAY_COLOR);
|
glEnableVertexAttribArray(VS::ARRAY_COLOR);
|
||||||
glVertexAttribPointer(VS::ARRAY_COLOR, 4, GL_FLOAT, false, sizeof(Color), CAST_INT_TO_UCHAR_PTR(buffer_ofs));
|
glVertexAttribPointer(VS::ARRAY_COLOR, 4, GL_FLOAT, false, sizeof(Color), CAST_INT_TO_UCHAR_PTR(buffer_ofs));
|
||||||
buffer_ofs += sizeof(Color) * p_vertex_count;
|
buffer_ofs += sizeof(Color) * p_vertex_count;
|
||||||
|
@ -482,6 +465,7 @@ void RasterizerCanvasBaseGLES3::_draw_generic(GLuint p_primitive, int p_vertex_c
|
||||||
|
|
||||||
if (p_uvs) {
|
if (p_uvs) {
|
||||||
|
|
||||||
|
glBufferSubData(GL_ARRAY_BUFFER, buffer_ofs, sizeof(Vector2) * p_vertex_count, p_uvs);
|
||||||
glEnableVertexAttribArray(VS::ARRAY_TEX_UV);
|
glEnableVertexAttribArray(VS::ARRAY_TEX_UV);
|
||||||
glVertexAttribPointer(VS::ARRAY_TEX_UV, 2, GL_FLOAT, false, sizeof(Vector2), CAST_INT_TO_UCHAR_PTR(buffer_ofs));
|
glVertexAttribPointer(VS::ARRAY_TEX_UV, 2, GL_FLOAT, false, sizeof(Vector2), CAST_INT_TO_UCHAR_PTR(buffer_ofs));
|
||||||
buffer_ofs += sizeof(Vector2) * p_vertex_count;
|
buffer_ofs += sizeof(Vector2) * p_vertex_count;
|
||||||
|
|
Loading…
Reference in a new issue