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.
This commit is contained in:
parent
5712c4ad63
commit
4afe7f4b11
1 changed files with 4 additions and 5 deletions
|
@ -255,7 +255,6 @@ BOOL Backend_Init(SDL_Window *p_window)
|
||||||
// Set up Vertex Buffer Object
|
// Set up Vertex Buffer Object
|
||||||
glGenBuffers(1, &vertex_buffer_id);
|
glGenBuffers(1, &vertex_buffer_id);
|
||||||
glBindBuffer(GL_ARRAY_BUFFER, 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
|
// Set up the vertex attributes
|
||||||
glEnableVertexAttribArray(1);
|
glEnableVertexAttribArray(1);
|
||||||
|
@ -348,7 +347,7 @@ void Backend_DrawScreen(void)
|
||||||
vertex_buffer.vertexes[3].x = -1.0f;
|
vertex_buffer.vertexes[3].x = -1.0f;
|
||||||
vertex_buffer.vertexes[3].y = 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);
|
glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
|
||||||
|
|
||||||
SDL_GL_SwapWindow(window);
|
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].x = vertex_left;
|
||||||
vertex_buffer.vertexes[3].y = vertex_bottom;
|
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);
|
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].x = vertex_left;
|
||||||
vertex_buffer.vertexes[3].y = vertex_bottom;
|
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);
|
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].x = vertex_left;
|
||||||
vertex_buffer.vertexes[3].y = vertex_bottom;
|
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)
|
if (glyph->pixel_mode == FONT_PIXEL_MODE_LCD)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Reference in a new issue