summaryrefslogtreecommitdiff
path: root/Source/Core/VideoBackends/OGL/VertexManager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Core/VideoBackends/OGL/VertexManager.cpp')
-rw-r--r--Source/Core/VideoBackends/OGL/VertexManager.cpp76
1 files changed, 23 insertions, 53 deletions
diff --git a/Source/Core/VideoBackends/OGL/VertexManager.cpp b/Source/Core/VideoBackends/OGL/VertexManager.cpp
index f10618e7f3..fdd1fbee34 100644
--- a/Source/Core/VideoBackends/OGL/VertexManager.cpp
+++ b/Source/Core/VideoBackends/OGL/VertexManager.cpp
@@ -44,7 +44,7 @@ const u32 MAX_VBUFFER_SIZE = 16*1024*1024;
static StreamBuffer *s_vertexBuffer;
static StreamBuffer *s_indexBuffer;
static size_t s_baseVertex;
-static size_t s_offset[3];
+static size_t s_index_offset;
VertexManager::VertexManager()
{
@@ -83,74 +83,44 @@ void VertexManager::DestroyDeviceObjects()
void VertexManager::PrepareDrawBuffers(u32 stride)
{
u32 vertex_data_size = IndexGenerator::GetNumVerts() * stride;
- u32 triangle_index_size = IndexGenerator::GetTriangleindexLen();
- u32 line_index_size = IndexGenerator::GetLineindexLen();
- u32 point_index_size = IndexGenerator::GetPointindexLen();
- u32 index_size = (triangle_index_size+line_index_size+point_index_size) * sizeof(u16);
+ u32 index_data_size = IndexGenerator::GetIndexLen() * sizeof(u16);
s_vertexBuffer->Alloc(vertex_data_size, stride);
size_t offset = s_vertexBuffer->Upload(GetVertexBuffer(), vertex_data_size);
s_baseVertex = offset / stride;
- s_indexBuffer->Alloc(index_size);
- if(triangle_index_size)
- {
- s_offset[0] = s_indexBuffer->Upload((u8*)GetTriangleIndexBuffer(), triangle_index_size * sizeof(u16));
- }
- if(line_index_size)
- {
- s_offset[1] = s_indexBuffer->Upload((u8*)GetLineIndexBuffer(), line_index_size * sizeof(u16));
- }
- if(point_index_size)
- {
- s_offset[2] = s_indexBuffer->Upload((u8*)GetPointIndexBuffer(), point_index_size * sizeof(u16));
- }
+ s_indexBuffer->Alloc(index_data_size);
+ s_index_offset = s_indexBuffer->Upload((u8*)GetIndexBuffer(), index_data_size);
ADDSTAT(stats.thisFrame.bytesVertexStreamed, vertex_data_size);
- ADDSTAT(stats.thisFrame.bytesIndexStreamed, index_size);
+ ADDSTAT(stats.thisFrame.bytesIndexStreamed, index_data_size);
}
void VertexManager::Draw(u32 stride)
{
- u32 triangle_index_size = IndexGenerator::GetTriangleindexLen();
- u32 line_index_size = IndexGenerator::GetLineindexLen();
- u32 point_index_size = IndexGenerator::GetPointindexLen();
+ u32 index_size = IndexGenerator::GetIndexLen();
u32 max_index = IndexGenerator::GetNumVerts();
- GLenum triangle_mode = g_ActiveConfig.backend_info.bSupportsPrimitiveRestart?GL_TRIANGLE_STRIP:GL_TRIANGLES;
+ GLenum primitive_mode = 0;
+
+ switch(current_primitive_type)
+ {
+ case PRIMITIVE_POINTS:
+ primitive_mode = GL_POINTS;
+ break;
+ case PRIMITIVE_LINES:
+ primitive_mode = GL_LINES;
+ break;
+ case PRIMITIVE_TRIANGLES:
+ primitive_mode = g_ActiveConfig.backend_info.bSupportsPrimitiveRestart ? GL_TRIANGLE_STRIP : GL_TRIANGLES;
+ break;
+ }
if(g_ogl_config.bSupportsGLBaseVertex) {
- if (triangle_index_size > 0)
- {
- glDrawRangeElementsBaseVertex(triangle_mode, 0, max_index, triangle_index_size, GL_UNSIGNED_SHORT, (u8*)NULL+s_offset[0], (GLint)s_baseVertex);
- INCSTAT(stats.thisFrame.numIndexedDrawCalls);
- }
- if (line_index_size > 0)
- {
- glDrawRangeElementsBaseVertex(GL_LINES, 0, max_index, line_index_size, GL_UNSIGNED_SHORT, (u8*)NULL+s_offset[1], (GLint)s_baseVertex);
- INCSTAT(stats.thisFrame.numIndexedDrawCalls);
- }
- if (point_index_size > 0)
- {
- glDrawRangeElementsBaseVertex(GL_POINTS, 0, max_index, point_index_size, GL_UNSIGNED_SHORT, (u8*)NULL+s_offset[2], (GLint)s_baseVertex);
- INCSTAT(stats.thisFrame.numIndexedDrawCalls);
- }
+ glDrawRangeElementsBaseVertex(primitive_mode, 0, max_index, index_size, GL_UNSIGNED_SHORT, (u8*)NULL+s_index_offset, (GLint)s_baseVertex);
} else {
- if (triangle_index_size > 0)
- {
- glDrawRangeElements(triangle_mode, 0, max_index, triangle_index_size, GL_UNSIGNED_SHORT, (u8*)NULL+s_offset[0]);
- INCSTAT(stats.thisFrame.numIndexedDrawCalls);
- }
- if (line_index_size > 0)
- {
- glDrawRangeElements(GL_LINES, 0, max_index, line_index_size, GL_UNSIGNED_SHORT, (u8*)NULL+s_offset[1]);
- INCSTAT(stats.thisFrame.numIndexedDrawCalls);
- }
- if (point_index_size > 0)
- {
- glDrawRangeElements(GL_POINTS, 0, max_index, point_index_size, GL_UNSIGNED_SHORT, (u8*)NULL+s_offset[2]);
- INCSTAT(stats.thisFrame.numIndexedDrawCalls);
- }
+ glDrawRangeElements(primitive_mode, 0, max_index, index_size, GL_UNSIGNED_SHORT, (u8*)NULL+s_index_offset);
}
+ INCSTAT(stats.thisFrame.numIndexedDrawCalls);
}
void VertexManager::vFlush()