|
@@ -348,21 +348,8 @@ void RasterizerCanvasBaseGLES3::_draw_polygon(const int *p_indices, int p_index_
|
|
|
glBindVertexArray(data.polygon_buffer_pointer_array);
|
|
|
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;
|
|
|
- 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);
|
|
|
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);
|
|
|
} else {
|
|
|
|
|
|
+ glBufferSubData(GL_ARRAY_BUFFER, buffer_ofs, sizeof(Color) * p_vertex_count, p_colors);
|
|
|
glEnableVertexAttribArray(VS::ARRAY_COLOR);
|
|
|
glVertexAttribPointer(VS::ARRAY_COLOR, 4, GL_FLOAT, false, sizeof(Color), CAST_INT_TO_UCHAR_PTR(buffer_ofs));
|
|
|
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) {
|
|
|
|
|
|
+ glBufferSubData(GL_ARRAY_BUFFER, buffer_ofs, sizeof(Vector2) * p_vertex_count, p_uvs);
|
|
|
glEnableVertexAttribArray(VS::ARRAY_TEX_UV);
|
|
|
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;
|
|
@@ -406,11 +395,13 @@ void RasterizerCanvasBaseGLES3::_draw_polygon(const int *p_indices, int p_index_
|
|
|
|
|
|
if (p_bones && p_weights) {
|
|
|
|
|
|
+ glBufferSubData(GL_ARRAY_BUFFER, buffer_ofs, sizeof(int) * 4 * p_vertex_count, p_bones);
|
|
|
glEnableVertexAttribArray(VS::ARRAY_BONES);
|
|
|
//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));
|
|
|
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);
|
|
|
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;
|
|
@@ -448,18 +439,9 @@ void RasterizerCanvasBaseGLES3::_draw_generic(GLuint p_primitive, int p_vertex_c
|
|
|
glBindVertexArray(data.polygon_buffer_pointer_array);
|
|
|
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
|
|
|
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);
|
|
|
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);
|
|
|
} else {
|
|
|
|
|
|
+ glBufferSubData(GL_ARRAY_BUFFER, buffer_ofs, sizeof(Color) * p_vertex_count, p_colors);
|
|
|
glEnableVertexAttribArray(VS::ARRAY_COLOR);
|
|
|
glVertexAttribPointer(VS::ARRAY_COLOR, 4, GL_FLOAT, false, sizeof(Color), CAST_INT_TO_UCHAR_PTR(buffer_ofs));
|
|
|
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) {
|
|
|
|
|
|
+ glBufferSubData(GL_ARRAY_BUFFER, buffer_ofs, sizeof(Vector2) * p_vertex_count, p_uvs);
|
|
|
glEnableVertexAttribArray(VS::ARRAY_TEX_UV);
|
|
|
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;
|