GLES2: disable texcoord when not using it (see bug #5235)

similar to opengl backend code:
- glDisableVertexAttribArray doesn't need to depend on 'drawstate.texture' value
- move binding code to SetCopyState()
main
Sylvain 2022-01-28 15:31:56 +01:00 committed by Sylvain Becker
parent 096fe37bb2
commit f5911bdc59
1 changed files with 33 additions and 33 deletions

View File

@ -898,39 +898,14 @@ SetDrawState(GLES2_RenderData *data, const SDL_RenderCommand *cmd, const GLES2_I
data->drawstate.cliprect_dirty = SDL_FALSE; data->drawstate.cliprect_dirty = SDL_FALSE;
} }
if (texture != data->drawstate.texture) { if ((texture != NULL) != data->drawstate.texturing) {
if ((texture != NULL) != data->drawstate.texturing) { if (texture == NULL) {
if (texture == NULL) { data->glDisableVertexAttribArray((GLenum) GLES2_ATTRIBUTE_TEXCOORD);
data->glDisableVertexAttribArray((GLenum) GLES2_ATTRIBUTE_TEXCOORD); data->drawstate.texturing = SDL_FALSE;
data->drawstate.texturing = SDL_FALSE; } else {
} else { data->glEnableVertexAttribArray((GLenum) GLES2_ATTRIBUTE_TEXCOORD);
data->glEnableVertexAttribArray((GLenum) GLES2_ATTRIBUTE_TEXCOORD); data->drawstate.texturing = SDL_TRUE;
data->drawstate.texturing = SDL_TRUE;
}
} }
if (texture) {
GLES2_TextureData *tdata = (GLES2_TextureData *) texture->driverdata;
#if SDL_HAVE_YUV
if (tdata->yuv) {
data->glActiveTexture(GL_TEXTURE2);
data->glBindTexture(tdata->texture_type, tdata->texture_v);
data->glActiveTexture(GL_TEXTURE1);
data->glBindTexture(tdata->texture_type, tdata->texture_u);
data->glActiveTexture(GL_TEXTURE0);
} else if (tdata->nv12) {
data->glActiveTexture(GL_TEXTURE1);
data->glBindTexture(tdata->texture_type, tdata->texture_u);
data->glActiveTexture(GL_TEXTURE0);
}
#endif
data->glBindTexture(tdata->texture_type, tdata->texture);
}
data->drawstate.texture = texture;
} }
if (texture) { if (texture) {
@ -988,6 +963,7 @@ SetCopyState(SDL_Renderer *renderer, const SDL_RenderCommand *cmd, void *vertice
GLES2_RenderData *data = (GLES2_RenderData *) renderer->driverdata; GLES2_RenderData *data = (GLES2_RenderData *) renderer->driverdata;
GLES2_ImageSource sourceType = GLES2_IMAGESOURCE_TEXTURE_ABGR; GLES2_ImageSource sourceType = GLES2_IMAGESOURCE_TEXTURE_ABGR;
SDL_Texture *texture = cmd->data.draw.texture; SDL_Texture *texture = cmd->data.draw.texture;
int ret;
/* Pick an appropriate shader */ /* Pick an appropriate shader */
if (renderer->target) { if (renderer->target) {
@ -1093,7 +1069,31 @@ SetCopyState(SDL_Renderer *renderer, const SDL_RenderCommand *cmd, void *vertice
} }
} }
return SetDrawState(data, cmd, sourceType, vertices); ret = SetDrawState(data, cmd, sourceType, vertices);
if (texture != data->drawstate.texture) {
GLES2_TextureData *tdata = (GLES2_TextureData *) texture->driverdata;
#if SDL_HAVE_YUV
if (tdata->yuv) {
data->glActiveTexture(GL_TEXTURE2);
data->glBindTexture(tdata->texture_type, tdata->texture_v);
data->glActiveTexture(GL_TEXTURE1);
data->glBindTexture(tdata->texture_type, tdata->texture_u);
data->glActiveTexture(GL_TEXTURE0);
} else if (tdata->nv12) {
data->glActiveTexture(GL_TEXTURE1);
data->glBindTexture(tdata->texture_type, tdata->texture_u);
data->glActiveTexture(GL_TEXTURE0);
}
#endif
data->glBindTexture(tdata->texture_type, tdata->texture);
data->drawstate.texture = texture;
}
return ret;
} }
static int static int