The scale mode is per texture, not per texture unit.
This commit is contained in:
parent
75dcb27882
commit
b547542f70
3 changed files with 20 additions and 48 deletions
|
@ -91,7 +91,6 @@ typedef struct
|
||||||
GL_Shader shader;
|
GL_Shader shader;
|
||||||
Uint32 color;
|
Uint32 color;
|
||||||
int blendMode;
|
int blendMode;
|
||||||
GLenum scaleMode;
|
|
||||||
} current;
|
} current;
|
||||||
|
|
||||||
/* OpenGL functions */
|
/* OpenGL functions */
|
||||||
|
@ -119,7 +118,6 @@ typedef struct
|
||||||
GLenum formattype;
|
GLenum formattype;
|
||||||
void *pixels;
|
void *pixels;
|
||||||
int pitch;
|
int pitch;
|
||||||
int scaleMode;
|
|
||||||
SDL_Rect locked_rect;
|
SDL_Rect locked_rect;
|
||||||
|
|
||||||
/* YV12 texture support */
|
/* YV12 texture support */
|
||||||
|
@ -220,7 +218,6 @@ GL_ResetState(SDL_Renderer *renderer)
|
||||||
data->current.shader = SHADER_NONE;
|
data->current.shader = SHADER_NONE;
|
||||||
data->current.color = 0;
|
data->current.color = 0;
|
||||||
data->current.blendMode = -1;
|
data->current.blendMode = -1;
|
||||||
data->current.scaleMode = 0;
|
|
||||||
|
|
||||||
data->glDisable(GL_DEPTH_TEST);
|
data->glDisable(GL_DEPTH_TEST);
|
||||||
data->glDisable(GL_CULL_FACE);
|
data->glDisable(GL_CULL_FACE);
|
||||||
|
@ -413,6 +410,7 @@ GL_CreateTexture(SDL_Renderer * renderer, SDL_Texture * texture)
|
||||||
GLint internalFormat;
|
GLint internalFormat;
|
||||||
GLenum format, type;
|
GLenum format, type;
|
||||||
int texture_w, texture_h;
|
int texture_w, texture_h;
|
||||||
|
GLenum scaleMode;
|
||||||
GLenum result;
|
GLenum result;
|
||||||
|
|
||||||
GL_ActivateRenderer(renderer);
|
GL_ActivateRenderer(renderer);
|
||||||
|
@ -467,9 +465,11 @@ GL_CreateTexture(SDL_Renderer * renderer, SDL_Texture * texture)
|
||||||
|
|
||||||
data->format = format;
|
data->format = format;
|
||||||
data->formattype = type;
|
data->formattype = type;
|
||||||
data->scaleMode = GetScaleQuality();
|
scaleMode = GetScaleQuality();
|
||||||
renderdata->glEnable(data->type);
|
renderdata->glEnable(data->type);
|
||||||
renderdata->glBindTexture(data->type, data->texture);
|
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,
|
renderdata->glTexParameteri(data->type, GL_TEXTURE_WRAP_S,
|
||||||
GL_CLAMP_TO_EDGE);
|
GL_CLAMP_TO_EDGE);
|
||||||
renderdata->glTexParameteri(data->type, GL_TEXTURE_WRAP_T,
|
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->glEnable(data->type);
|
||||||
|
|
||||||
renderdata->glBindTexture(data->type, data->utexture);
|
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,
|
renderdata->glTexParameteri(data->type, GL_TEXTURE_WRAP_S,
|
||||||
GL_CLAMP_TO_EDGE);
|
GL_CLAMP_TO_EDGE);
|
||||||
renderdata->glTexParameteri(data->type, GL_TEXTURE_WRAP_T,
|
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);
|
texture_h/2, 0, format, type, NULL);
|
||||||
|
|
||||||
renderdata->glBindTexture(data->type, data->vtexture);
|
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,
|
renderdata->glTexParameteri(data->type, GL_TEXTURE_WRAP_S,
|
||||||
GL_CLAMP_TO_EDGE);
|
GL_CLAMP_TO_EDGE);
|
||||||
renderdata->glTexParameteri(data->type, GL_TEXTURE_WRAP_T,
|
renderdata->glTexParameteri(data->type, GL_TEXTURE_WRAP_T,
|
||||||
|
@ -855,34 +863,14 @@ GL_RenderCopy(SDL_Renderer * renderer, SDL_Texture * texture,
|
||||||
if (texturedata->yuv) {
|
if (texturedata->yuv) {
|
||||||
data->glActiveTextureARB(GL_TEXTURE2_ARB);
|
data->glActiveTextureARB(GL_TEXTURE2_ARB);
|
||||||
data->glBindTexture(texturedata->type, texturedata->vtexture);
|
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->glActiveTextureARB(GL_TEXTURE1_ARB);
|
||||||
data->glBindTexture(texturedata->type, texturedata->utexture);
|
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->glActiveTextureARB(GL_TEXTURE0_ARB);
|
||||||
}
|
}
|
||||||
data->glBindTexture(texturedata->type, texturedata->texture);
|
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) {
|
if (texture->modMode) {
|
||||||
GL_SetColor(data, texture->r, texture->g, texture->b, texture->a);
|
GL_SetColor(data, texture->r, texture->g, texture->b, texture->a);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -88,7 +88,6 @@ typedef struct
|
||||||
struct {
|
struct {
|
||||||
Uint32 color;
|
Uint32 color;
|
||||||
int blendMode;
|
int blendMode;
|
||||||
GLenum scaleMode;
|
|
||||||
SDL_bool tex_coords;
|
SDL_bool tex_coords;
|
||||||
} current;
|
} current;
|
||||||
|
|
||||||
|
@ -106,7 +105,6 @@ typedef struct
|
||||||
GLenum formattype;
|
GLenum formattype;
|
||||||
void *pixels;
|
void *pixels;
|
||||||
int pitch;
|
int pitch;
|
||||||
GLenum scaleMode;
|
|
||||||
} GLES_TextureData;
|
} GLES_TextureData;
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -175,7 +173,6 @@ GLES_ResetState(SDL_Renderer *renderer)
|
||||||
|
|
||||||
data->current.color = 0;
|
data->current.color = 0;
|
||||||
data->current.blendMode = -1;
|
data->current.blendMode = -1;
|
||||||
data->current.scaleMode = 0;
|
|
||||||
data->current.tex_coords = SDL_FALSE;
|
data->current.tex_coords = SDL_FALSE;
|
||||||
|
|
||||||
glDisable(GL_DEPTH_TEST);
|
glDisable(GL_DEPTH_TEST);
|
||||||
|
@ -312,6 +309,7 @@ GLES_CreateTexture(SDL_Renderer * renderer, SDL_Texture * texture)
|
||||||
GLint internalFormat;
|
GLint internalFormat;
|
||||||
GLenum format, type;
|
GLenum format, type;
|
||||||
int texture_w, texture_h;
|
int texture_w, texture_h;
|
||||||
|
GLenum scaleMode;
|
||||||
GLenum result;
|
GLenum result;
|
||||||
|
|
||||||
GLES_ActivateRenderer(renderer);
|
GLES_ActivateRenderer(renderer);
|
||||||
|
@ -358,8 +356,10 @@ GLES_CreateTexture(SDL_Renderer * renderer, SDL_Texture * texture)
|
||||||
|
|
||||||
data->format = format;
|
data->format = format;
|
||||||
data->formattype = type;
|
data->formattype = type;
|
||||||
data->scaleMode = GetScaleQuality();
|
scaleMode = GetScaleQuality();
|
||||||
glBindTexture(data->type, data->texture);
|
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_S, GL_CLAMP_TO_EDGE);
|
||||||
glTexParameteri(data->type, GL_TEXTURE_WRAP_T, 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);
|
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) {
|
if (texture->modMode) {
|
||||||
GLES_SetColor(data, texture->r, texture->g, texture->b, texture->a);
|
GLES_SetColor(data, texture->r, texture->g, texture->b, texture->a);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -59,7 +59,6 @@ typedef struct GLES2_TextureData
|
||||||
GLenum pixel_type;
|
GLenum pixel_type;
|
||||||
void *pixel_data;
|
void *pixel_data;
|
||||||
size_t pitch;
|
size_t pitch;
|
||||||
GLenum scaleMode;
|
|
||||||
} GLES2_TextureData;
|
} GLES2_TextureData;
|
||||||
|
|
||||||
typedef struct GLES2_ShaderCacheEntry
|
typedef struct GLES2_ShaderCacheEntry
|
||||||
|
@ -122,7 +121,6 @@ typedef struct GLES2_DriverContext
|
||||||
SDL_GLContext *context;
|
SDL_GLContext *context;
|
||||||
struct {
|
struct {
|
||||||
int blendMode;
|
int blendMode;
|
||||||
GLenum scaleMode;
|
|
||||||
SDL_bool tex_coords;
|
SDL_bool tex_coords;
|
||||||
} current;
|
} current;
|
||||||
|
|
||||||
|
@ -253,6 +251,7 @@ GLES2_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture)
|
||||||
GLES2_TextureData *tdata;
|
GLES2_TextureData *tdata;
|
||||||
GLenum format;
|
GLenum format;
|
||||||
GLenum type;
|
GLenum type;
|
||||||
|
GLenum scaleMode;
|
||||||
|
|
||||||
GLES2_ActivateRenderer(renderer);
|
GLES2_ActivateRenderer(renderer);
|
||||||
|
|
||||||
|
@ -279,7 +278,7 @@ GLES2_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture)
|
||||||
tdata->texture_type = GL_TEXTURE_2D;
|
tdata->texture_type = GL_TEXTURE_2D;
|
||||||
tdata->pixel_format = format;
|
tdata->pixel_format = format;
|
||||||
tdata->pixel_type = type;
|
tdata->pixel_type = type;
|
||||||
tdata->scaleMode = GetScaleQuality();
|
scaleMode = GetScaleQuality();
|
||||||
|
|
||||||
/* Allocate a blob for image data */
|
/* Allocate a blob for image data */
|
||||||
if (texture->access == SDL_TEXTUREACCESS_STREAMING)
|
if (texture->access == SDL_TEXTUREACCESS_STREAMING)
|
||||||
|
@ -299,6 +298,8 @@ GLES2_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture)
|
||||||
glGenTextures(1, &tdata->texture);
|
glGenTextures(1, &tdata->texture);
|
||||||
glActiveTexture(GL_TEXTURE0);
|
glActiveTexture(GL_TEXTURE0);
|
||||||
glBindTexture(tdata->texture_type, tdata->texture);
|
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_S, GL_CLAMP_TO_EDGE);
|
||||||
glTexParameteri(tdata->texture_type, GL_TEXTURE_WRAP_T, 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);
|
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);
|
glBindTexture(tdata->texture_type, tdata->texture);
|
||||||
glUniform1i(locTexture, 0);
|
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 */
|
/* Configure color modulation */
|
||||||
locModulation = rdata->current_program->uniform_locations[GLES2_UNIFORM_MODULATION];
|
locModulation = rdata->current_program->uniform_locations[GLES2_UNIFORM_MODULATION];
|
||||||
glUniform4f(locModulation,
|
glUniform4f(locModulation,
|
||||||
|
@ -1083,7 +1076,6 @@ GLES2_ResetState(SDL_Renderer *renderer)
|
||||||
}
|
}
|
||||||
|
|
||||||
rdata->current.blendMode = -1;
|
rdata->current.blendMode = -1;
|
||||||
rdata->current.scaleMode = 0;
|
|
||||||
rdata->current.tex_coords = SDL_FALSE;
|
rdata->current.tex_coords = SDL_FALSE;
|
||||||
|
|
||||||
glEnableVertexAttribArray(GLES2_ATTRIBUTE_POSITION);
|
glEnableVertexAttribArray(GLES2_ATTRIBUTE_POSITION);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue