From 4afe7f4b119ae70ed902e0bad830ce7be91d275e Mon Sep 17 00:00:00 2001 From: Clownacy Date: Fri, 9 Aug 2019 16:25:36 +0100 Subject: [PATCH] Use orphaning to slightly speed up rendering GPU-side For some reason CPU usage is still double that of the SDLTexture backend (SDL2 uses OpenGL 2.1, with glEnable/glDisable-style immediate mode). If I downgrade to OpenGL 2.1, and use VBO-less glDrawArrays, I get great performance. I just wish I knew what the AMD driver is doing that's so much faster. --- src/Backends/Rendering/OpenGL3.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/Backends/Rendering/OpenGL3.cpp b/src/Backends/Rendering/OpenGL3.cpp index ad2fca05..d0d3abfd 100644 --- a/src/Backends/Rendering/OpenGL3.cpp +++ b/src/Backends/Rendering/OpenGL3.cpp @@ -255,7 +255,6 @@ BOOL Backend_Init(SDL_Window *p_window) // Set up Vertex Buffer Object glGenBuffers(1, &vertex_buffer_id); glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer_id); - glBufferData(GL_ARRAY_BUFFER, sizeof(vertex_buffer), NULL, GL_STREAM_DRAW); // Set up the vertex attributes glEnableVertexAttribArray(1); @@ -348,7 +347,7 @@ void Backend_DrawScreen(void) vertex_buffer.vertexes[3].x = -1.0f; vertex_buffer.vertexes[3].y = 1.0f; - glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(vertex_buffer), &vertex_buffer); + glBufferData(GL_ARRAY_BUFFER, sizeof(vertex_buffer), &vertex_buffer, GL_STREAM_DRAW); glDrawArrays(GL_TRIANGLE_FAN, 0, 4); SDL_GL_SwapWindow(window); @@ -462,7 +461,7 @@ static void BlitCommon(Backend_Surface *source_surface, const RECT *rect, Backen vertex_buffer.vertexes[3].x = vertex_left; vertex_buffer.vertexes[3].y = vertex_bottom; - glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(vertex_buffer), &vertex_buffer); + glBufferData(GL_ARRAY_BUFFER, sizeof(vertex_buffer), &vertex_buffer, GL_STREAM_DRAW); glDrawArrays(GL_TRIANGLE_FAN, 0, 4); } @@ -511,7 +510,7 @@ static void ColourFillCommon(Backend_Surface *surface, const RECT *rect, unsigne vertex_buffer.vertexes[3].x = vertex_left; vertex_buffer.vertexes[3].y = vertex_bottom; - glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(vertex_buffer.vertexes), &vertex_buffer); + glBufferData(GL_ARRAY_BUFFER, sizeof(vertex_buffer), &vertex_buffer, GL_STREAM_DRAW); glDrawArrays(GL_TRIANGLE_FAN, 0, 4); } @@ -641,7 +640,7 @@ static void DrawGlyphCommon(Backend_Surface *surface, Backend_Glyph *glyph, long vertex_buffer.vertexes[3].x = vertex_left; vertex_buffer.vertexes[3].y = vertex_bottom; - glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(vertex_buffer), &vertex_buffer); + glBufferData(GL_ARRAY_BUFFER, sizeof(vertex_buffer), &vertex_buffer, GL_STREAM_DRAW); if (glyph->pixel_mode == FONT_PIXEL_MODE_LCD) {