mirror of
				https://github.com/libsdl-org/SDL.git
				synced 2025-11-04 01:34:38 +00:00 
			
		
		
		
	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()
This commit is contained in:
		@@ -898,7 +898,6 @@ SetDrawState(GLES2_RenderData *data, const SDL_RenderCommand *cmd, const GLES2_I
 | 
			
		||||
        data->drawstate.cliprect_dirty = SDL_FALSE;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (texture != data->drawstate.texture) {
 | 
			
		||||
    if ((texture != NULL) != data->drawstate.texturing) {
 | 
			
		||||
        if (texture == NULL) {
 | 
			
		||||
            data->glDisableVertexAttribArray((GLenum) GLES2_ATTRIBUTE_TEXCOORD);
 | 
			
		||||
@@ -909,30 +908,6 @@ SetDrawState(GLES2_RenderData *data, const SDL_RenderCommand *cmd, const GLES2_I
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
        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) {
 | 
			
		||||
        stride = sizeof(SDL_Vertex);
 | 
			
		||||
    } else {
 | 
			
		||||
@@ -988,6 +963,7 @@ SetCopyState(SDL_Renderer *renderer, const SDL_RenderCommand *cmd, void *vertice
 | 
			
		||||
    GLES2_RenderData *data = (GLES2_RenderData *) renderer->driverdata;
 | 
			
		||||
    GLES2_ImageSource sourceType = GLES2_IMAGESOURCE_TEXTURE_ABGR;
 | 
			
		||||
    SDL_Texture *texture = cmd->data.draw.texture;
 | 
			
		||||
    int ret;
 | 
			
		||||
 | 
			
		||||
    /* Pick an appropriate shader */
 | 
			
		||||
    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
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user