From 18482c6fed239147b1f8065359b4990f4cc5888a Mon Sep 17 00:00:00 2001
From: Sylvain <[EMAIL REDACTED]>
Date: Fri, 24 Sep 2021 09:42:04 +0200
Subject: [PATCH] OpenGLES2: LINES and POINTS successive commands are combined
into a single draw call (using the same case for DRAW_GEOMETRY)
---
src/render/opengles2/SDL_render_gles2.c | 26 +++++++++----------------
1 file changed, 9 insertions(+), 17 deletions(-)
diff --git a/src/render/opengles2/SDL_render_gles2.c b/src/render/opengles2/SDL_render_gles2.c
index 54f8fd945f..aa3d5f8e9b 100644
--- a/src/render/opengles2/SDL_render_gles2.c
+++ b/src/render/opengles2/SDL_render_gles2.c
@@ -1120,22 +1120,6 @@ GLES2_RunCommandQueue(SDL_Renderer * renderer, SDL_RenderCommand *cmd, void *ver
break;
}
- case SDL_RENDERCMD_DRAW_POINTS: {
- if (SetDrawState(data, cmd, GLES2_IMAGESOURCE_SOLID) == 0) {
- data->glDrawArrays(GL_POINTS, 0, (GLsizei) cmd->data.draw.count);
- }
- break;
- }
-
- case SDL_RENDERCMD_DRAW_LINES: {
- const size_t count = cmd->data.draw.count;
- SDL_assert(count >= 2);
- if (SetDrawState(data, cmd, GLES2_IMAGESOURCE_SOLID) == 0) {
- data->glDrawArrays(GL_LINE_STRIP, 0, (GLsizei) count);
- }
- break;
- }
-
case SDL_RENDERCMD_FILL_RECTS: /* unused */
break;
@@ -1145,6 +1129,8 @@ GLES2_RunCommandQueue(SDL_Renderer * renderer, SDL_RenderCommand *cmd, void *ver
case SDL_RENDERCMD_COPY_EX: /* unused */
break;
+ case SDL_RENDERCMD_DRAW_POINTS:
+ case SDL_RENDERCMD_DRAW_LINES:
case SDL_RENDERCMD_GEOMETRY: {
/* as long as we have the same copy command in a row, with the
same texture, we can combine them all into a single draw call. */
@@ -1178,7 +1164,13 @@ GLES2_RunCommandQueue(SDL_Renderer * renderer, SDL_RenderCommand *cmd, void *ver
}
if (ret == 0) {
- data->glDrawArrays(GL_TRIANGLES, 0, (GLsizei) count);
+ int op = GL_TRIANGLES; /* SDL_RENDERCMD_GEOMETRY */
+ if (thiscmdtype == SDL_RENDERCMD_DRAW_POINTS) {
+ op = GL_POINTS;
+ } else if (thiscmdtype == SDL_RENDERCMD_DRAW_LINES) {
+ op = GL_LINE_STRIP;
+ }
+ data->glDrawArrays(op, 0, (GLsizei) count);
}
cmd = finalcmd; /* skip any copy commands we just combined in here. */