From f2ff6d36c937e105da33ada4fb18b21e7c599367 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Mon, 21 Mar 2011 17:15:49 -0700 Subject: [PATCH] The scale mode is per texture, not per texture unit. --- src/render/opengl/SDL_render_gl.c | 36 +++++++++---------------- src/render/opengles/SDL_render_gles.c | 16 +++-------- src/render/opengles2/SDL_render_gles2.c | 16 +++-------- 3 files changed, 20 insertions(+), 48 deletions(-) diff --git a/src/render/opengl/SDL_render_gl.c b/src/render/opengl/SDL_render_gl.c index 07fc44dee..25e2a316c 100644 --- a/src/render/opengl/SDL_render_gl.c +++ b/src/render/opengl/SDL_render_gl.c @@ -91,7 +91,6 @@ typedef struct GL_Shader shader; Uint32 color; int blendMode; - GLenum scaleMode; } current; /* OpenGL functions */ @@ -119,7 +118,6 @@ typedef struct GLenum formattype; void *pixels; int pitch; - int scaleMode; SDL_Rect locked_rect; /* YV12 texture support */ @@ -220,7 +218,6 @@ GL_ResetState(SDL_Renderer *renderer) data->current.shader = SHADER_NONE; data->current.color = 0; data->current.blendMode = -1; - data->current.scaleMode = 0; data->glDisable(GL_DEPTH_TEST); data->glDisable(GL_CULL_FACE); @@ -413,6 +410,7 @@ GL_CreateTexture(SDL_Renderer * renderer, SDL_Texture * texture) GLint internalFormat; GLenum format, type; int texture_w, texture_h; + GLenum scaleMode; GLenum result; GL_ActivateRenderer(renderer); @@ -467,9 +465,11 @@ GL_CreateTexture(SDL_Renderer * renderer, SDL_Texture * texture) data->format = format; data->formattype = type; - data->scaleMode = GetScaleQuality(); + scaleMode = GetScaleQuality(); renderdata->glEnable(data->type); renderdata->glBindTexture(data->type, data->texture); + renderdata->glTexParameteri(data->type, GL_TEXTURE_MIN_FILTER, scaleMode); + renderdata->glTexParameteri(data->type, GL_TEXTURE_MAG_FILTER, scaleMode); renderdata->glTexParameteri(data->type, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); renderdata->glTexParameteri(data->type, GL_TEXTURE_WRAP_T, @@ -524,6 +524,10 @@ GL_CreateTexture(SDL_Renderer * renderer, SDL_Texture * texture) renderdata->glEnable(data->type); renderdata->glBindTexture(data->type, data->utexture); + renderdata->glTexParameteri(data->type, GL_TEXTURE_MIN_FILTER, + scaleMode); + renderdata->glTexParameteri(data->type, GL_TEXTURE_MAG_FILTER, + scaleMode); renderdata->glTexParameteri(data->type, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); renderdata->glTexParameteri(data->type, GL_TEXTURE_WRAP_T, @@ -532,6 +536,10 @@ GL_CreateTexture(SDL_Renderer * renderer, SDL_Texture * texture) texture_h/2, 0, format, type, NULL); renderdata->glBindTexture(data->type, data->vtexture); + renderdata->glTexParameteri(data->type, GL_TEXTURE_MIN_FILTER, + scaleMode); + renderdata->glTexParameteri(data->type, GL_TEXTURE_MAG_FILTER, + scaleMode); renderdata->glTexParameteri(data->type, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); renderdata->glTexParameteri(data->type, GL_TEXTURE_WRAP_T, @@ -855,34 +863,14 @@ GL_RenderCopy(SDL_Renderer * renderer, SDL_Texture * texture, if (texturedata->yuv) { data->glActiveTextureARB(GL_TEXTURE2_ARB); data->glBindTexture(texturedata->type, texturedata->vtexture); - if (texturedata->scaleMode != data->current.scaleMode) { - data->glTexParameteri(texturedata->type, GL_TEXTURE_MIN_FILTER, - texturedata->scaleMode); - data->glTexParameteri(texturedata->type, GL_TEXTURE_MAG_FILTER, - texturedata->scaleMode); - } data->glActiveTextureARB(GL_TEXTURE1_ARB); data->glBindTexture(texturedata->type, texturedata->utexture); - if (texturedata->scaleMode != data->current.scaleMode) { - data->glTexParameteri(texturedata->type, GL_TEXTURE_MIN_FILTER, - texturedata->scaleMode); - data->glTexParameteri(texturedata->type, GL_TEXTURE_MAG_FILTER, - texturedata->scaleMode); - } data->glActiveTextureARB(GL_TEXTURE0_ARB); } data->glBindTexture(texturedata->type, texturedata->texture); - if (texturedata->scaleMode != data->current.scaleMode) { - data->glTexParameteri(texturedata->type, GL_TEXTURE_MIN_FILTER, - texturedata->scaleMode); - data->glTexParameteri(texturedata->type, GL_TEXTURE_MAG_FILTER, - texturedata->scaleMode); - data->current.scaleMode = texturedata->scaleMode; - } - if (texture->modMode) { GL_SetColor(data, texture->r, texture->g, texture->b, texture->a); } else { diff --git a/src/render/opengles/SDL_render_gles.c b/src/render/opengles/SDL_render_gles.c index e936d2522..f6ce40cfc 100644 --- a/src/render/opengles/SDL_render_gles.c +++ b/src/render/opengles/SDL_render_gles.c @@ -88,7 +88,6 @@ typedef struct struct { Uint32 color; int blendMode; - GLenum scaleMode; SDL_bool tex_coords; } current; @@ -106,7 +105,6 @@ typedef struct GLenum formattype; void *pixels; int pitch; - GLenum scaleMode; } GLES_TextureData; static void @@ -175,7 +173,6 @@ GLES_ResetState(SDL_Renderer *renderer) data->current.color = 0; data->current.blendMode = -1; - data->current.scaleMode = 0; data->current.tex_coords = SDL_FALSE; glDisable(GL_DEPTH_TEST); @@ -312,6 +309,7 @@ GLES_CreateTexture(SDL_Renderer * renderer, SDL_Texture * texture) GLint internalFormat; GLenum format, type; int texture_w, texture_h; + GLenum scaleMode; GLenum result; GLES_ActivateRenderer(renderer); @@ -358,8 +356,10 @@ GLES_CreateTexture(SDL_Renderer * renderer, SDL_Texture * texture) data->format = format; data->formattype = type; - data->scaleMode = GetScaleQuality(); + scaleMode = GetScaleQuality(); glBindTexture(data->type, data->texture); + glTexParameteri(data->type, GL_TEXTURE_MIN_FILTER, scaleMode); + glTexParameteri(data->type, GL_TEXTURE_MAG_FILTER, scaleMode); glTexParameteri(data->type, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(data->type, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); @@ -674,14 +674,6 @@ GLES_RenderCopy(SDL_Renderer * renderer, SDL_Texture * texture, glBindTexture(texturedata->type, texturedata->texture); - if (texturedata->scaleMode != data->current.scaleMode) { - glTexParameteri(texturedata->type, GL_TEXTURE_MIN_FILTER, - texturedata->scaleMode); - glTexParameteri(texturedata->type, GL_TEXTURE_MAG_FILTER, - texturedata->scaleMode); - data->current.scaleMode = texturedata->scaleMode; - } - if (texture->modMode) { GLES_SetColor(data, texture->r, texture->g, texture->b, texture->a); } else { diff --git a/src/render/opengles2/SDL_render_gles2.c b/src/render/opengles2/SDL_render_gles2.c index a5660c28f..7de5b12dd 100644 --- a/src/render/opengles2/SDL_render_gles2.c +++ b/src/render/opengles2/SDL_render_gles2.c @@ -59,7 +59,6 @@ typedef struct GLES2_TextureData GLenum pixel_type; void *pixel_data; size_t pitch; - GLenum scaleMode; } GLES2_TextureData; typedef struct GLES2_ShaderCacheEntry @@ -122,7 +121,6 @@ typedef struct GLES2_DriverContext SDL_GLContext *context; struct { int blendMode; - GLenum scaleMode; SDL_bool tex_coords; } current; @@ -253,6 +251,7 @@ GLES2_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture) GLES2_TextureData *tdata; GLenum format; GLenum type; + GLenum scaleMode; GLES2_ActivateRenderer(renderer); @@ -279,7 +278,7 @@ GLES2_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture) tdata->texture_type = GL_TEXTURE_2D; tdata->pixel_format = format; tdata->pixel_type = type; - tdata->scaleMode = GetScaleQuality(); + scaleMode = GetScaleQuality(); /* Allocate a blob for image data */ if (texture->access == SDL_TEXTUREACCESS_STREAMING) @@ -299,6 +298,8 @@ GLES2_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture) glGenTextures(1, &tdata->texture); glActiveTexture(GL_TEXTURE0); glBindTexture(tdata->texture_type, tdata->texture); + glTexParameteri(tdata->texture_type, GL_TEXTURE_MIN_FILTER, scaleMode); + glTexParameteri(tdata->texture_type, GL_TEXTURE_MAG_FILTER, scaleMode); glTexParameteri(tdata->texture_type, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(tdata->texture_type, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); glTexImage2D(tdata->texture_type, 0, format, texture->w, texture->h, 0, format, type, NULL); @@ -1007,14 +1008,6 @@ GLES2_RenderCopy(SDL_Renderer *renderer, SDL_Texture *texture, const SDL_Rect *s glBindTexture(tdata->texture_type, tdata->texture); glUniform1i(locTexture, 0); - if (tdata->scaleMode != rdata->current.scaleMode) { - glTexParameteri(tdata->texture_type, GL_TEXTURE_MIN_FILTER, - tdata->scaleMode); - glTexParameteri(tdata->texture_type, GL_TEXTURE_MAG_FILTER, - tdata->scaleMode); - rdata->current.scaleMode = tdata->scaleMode; - } - /* Configure color modulation */ locModulation = rdata->current_program->uniform_locations[GLES2_UNIFORM_MODULATION]; glUniform4f(locModulation, @@ -1083,7 +1076,6 @@ GLES2_ResetState(SDL_Renderer *renderer) } rdata->current.blendMode = -1; - rdata->current.scaleMode = 0; rdata->current.tex_coords = SDL_FALSE; glEnableVertexAttribArray(GLES2_ATTRIBUTE_POSITION);