Commit de6930e9 authored by Mike Gorchak's avatar Mike Gorchak

Fixed SDL_BLENDMODE_MASK for GL and GLES renderers, now blending works like in software renderer.

--HG--
extra : convert_revision : svn%3Ac70aab31-4412-0410-b14c-859654838e24/trunk%404074
parent e1e9af7e
...@@ -1038,7 +1038,7 @@ GL_DirtyTexture(SDL_Renderer * renderer, SDL_Texture * texture, int numrects, ...@@ -1038,7 +1038,7 @@ GL_DirtyTexture(SDL_Renderer * renderer, SDL_Texture * texture, int numrects,
} }
static void static void
GL_SetBlendMode(GL_RenderData * data, int blendMode) GL_SetBlendMode(GL_RenderData * data, int blendMode, int isprimitive)
{ {
if (blendMode != data->blendMode) { if (blendMode != data->blendMode) {
switch (blendMode) { switch (blendMode) {
...@@ -1047,6 +1047,14 @@ GL_SetBlendMode(GL_RenderData * data, int blendMode) ...@@ -1047,6 +1047,14 @@ GL_SetBlendMode(GL_RenderData * data, int blendMode)
data->glDisable(GL_BLEND); data->glDisable(GL_BLEND);
break; break;
case SDL_BLENDMODE_MASK: case SDL_BLENDMODE_MASK:
if (isprimitive) {
data->glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
data->glDisable(GL_BLEND);
/* The same as SDL_BLENDMODE_NONE */
blendMode = SDL_BLENDMODE_NONE;
break;
}
/* fall through */
case SDL_BLENDMODE_BLEND: case SDL_BLENDMODE_BLEND:
data->glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); data->glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
data->glEnable(GL_BLEND); data->glEnable(GL_BLEND);
...@@ -1072,7 +1080,7 @@ GL_RenderPoint(SDL_Renderer * renderer, int x, int y) ...@@ -1072,7 +1080,7 @@ GL_RenderPoint(SDL_Renderer * renderer, int x, int y)
{ {
GL_RenderData *data = (GL_RenderData *) renderer->driverdata; GL_RenderData *data = (GL_RenderData *) renderer->driverdata;
GL_SetBlendMode(data, renderer->blendMode); GL_SetBlendMode(data, renderer->blendMode, 1);
data->glColor4f((GLfloat) renderer->r * inv255f, data->glColor4f((GLfloat) renderer->r * inv255f,
(GLfloat) renderer->g * inv255f, (GLfloat) renderer->g * inv255f,
...@@ -1091,7 +1099,7 @@ GL_RenderLine(SDL_Renderer * renderer, int x1, int y1, int x2, int y2) ...@@ -1091,7 +1099,7 @@ GL_RenderLine(SDL_Renderer * renderer, int x1, int y1, int x2, int y2)
{ {
GL_RenderData *data = (GL_RenderData *) renderer->driverdata; GL_RenderData *data = (GL_RenderData *) renderer->driverdata;
GL_SetBlendMode(data, renderer->blendMode); GL_SetBlendMode(data, renderer->blendMode, 1);
data->glColor4f((GLfloat) renderer->r * inv255f, data->glColor4f((GLfloat) renderer->r * inv255f,
(GLfloat) renderer->g * inv255f, (GLfloat) renderer->g * inv255f,
...@@ -1111,7 +1119,7 @@ GL_RenderFill(SDL_Renderer * renderer, const SDL_Rect * rect) ...@@ -1111,7 +1119,7 @@ GL_RenderFill(SDL_Renderer * renderer, const SDL_Rect * rect)
{ {
GL_RenderData *data = (GL_RenderData *) renderer->driverdata; GL_RenderData *data = (GL_RenderData *) renderer->driverdata;
GL_SetBlendMode(data, renderer->blendMode); GL_SetBlendMode(data, renderer->blendMode, 1);
data->glColor4f((GLfloat) renderer->r * inv255f, data->glColor4f((GLfloat) renderer->r * inv255f,
(GLfloat) renderer->g * inv255f, (GLfloat) renderer->g * inv255f,
...@@ -1180,7 +1188,7 @@ GL_RenderCopy(SDL_Renderer * renderer, SDL_Texture * texture, ...@@ -1180,7 +1188,7 @@ GL_RenderCopy(SDL_Renderer * renderer, SDL_Texture * texture,
data->glColor4f(1.0f, 1.0f, 1.0f, 1.0f); data->glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
} }
GL_SetBlendMode(data, texture->blendMode); GL_SetBlendMode(data, texture->blendMode, 0);
if (texture->scaleMode != data->scaleMode) { if (texture->scaleMode != data->scaleMode) {
switch (texture->scaleMode) { switch (texture->scaleMode) {
......
...@@ -611,7 +611,7 @@ GLES_DirtyTexture(SDL_Renderer * renderer, SDL_Texture * texture, ...@@ -611,7 +611,7 @@ GLES_DirtyTexture(SDL_Renderer * renderer, SDL_Texture * texture,
} }
static void static void
GLES_SetBlendMode(GLES_RenderData * data, int blendMode) GLES_SetBlendMode(GLES_RenderData * data, int blendMode, int isprimitive)
{ {
if (blendMode != data->blendMode) { if (blendMode != data->blendMode) {
switch (blendMode) { switch (blendMode) {
...@@ -620,6 +620,14 @@ GLES_SetBlendMode(GLES_RenderData * data, int blendMode) ...@@ -620,6 +620,14 @@ GLES_SetBlendMode(GLES_RenderData * data, int blendMode)
data->glDisable(GL_BLEND); data->glDisable(GL_BLEND);
break; break;
case SDL_BLENDMODE_MASK: case SDL_BLENDMODE_MASK:
if (isprimitive) {
data->glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
data->glDisable(GL_BLEND);
/* The same as SDL_BLENDMODE_NONE */
blendMode = SDL_BLENDMODE_NONE;
break;
}
/* fall through */
case SDL_BLENDMODE_BLEND: case SDL_BLENDMODE_BLEND:
data->glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); data->glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
data->glEnable(GL_BLEND); data->glEnable(GL_BLEND);
...@@ -645,7 +653,7 @@ GLES_RenderPoint(SDL_Renderer * renderer, int x, int y) ...@@ -645,7 +653,7 @@ GLES_RenderPoint(SDL_Renderer * renderer, int x, int y)
{ {
GLES_RenderData *data = (GLES_RenderData *) renderer->driverdata; GLES_RenderData *data = (GLES_RenderData *) renderer->driverdata;
GLES_SetBlendMode(data, renderer->blendMode); GLES_SetBlendMode(data, renderer->blendMode, 1);
data->glColor4f((GLfloat) renderer->r * inv255f, data->glColor4f((GLfloat) renderer->r * inv255f,
(GLfloat) renderer->g * inv255f, (GLfloat) renderer->g * inv255f,
...@@ -669,7 +677,7 @@ GLES_RenderLine(SDL_Renderer * renderer, int x1, int y1, int x2, int y2) ...@@ -669,7 +677,7 @@ GLES_RenderLine(SDL_Renderer * renderer, int x1, int y1, int x2, int y2)
{ {
GLES_RenderData *data = (GLES_RenderData *) renderer->driverdata; GLES_RenderData *data = (GLES_RenderData *) renderer->driverdata;
GLES_SetBlendMode(data, renderer->blendMode); GLES_SetBlendMode(data, renderer->blendMode, 1);
data->glColor4f((GLfloat) renderer->r * inv255f, data->glColor4f((GLfloat) renderer->r * inv255f,
(GLfloat) renderer->g * inv255f, (GLfloat) renderer->g * inv255f,
...@@ -695,7 +703,7 @@ GLES_RenderFill(SDL_Renderer * renderer, const SDL_Rect * rect) ...@@ -695,7 +703,7 @@ GLES_RenderFill(SDL_Renderer * renderer, const SDL_Rect * rect)
{ {
GLES_RenderData *data = (GLES_RenderData *) renderer->driverdata; GLES_RenderData *data = (GLES_RenderData *) renderer->driverdata;
GLES_SetBlendMode(data, renderer->blendMode); GLES_SetBlendMode(data, renderer->blendMode, 1);
data->glColor4f((GLfloat) renderer->r * inv255f, data->glColor4f((GLfloat) renderer->r * inv255f,
(GLfloat) renderer->g * inv255f, (GLfloat) renderer->g * inv255f,
...@@ -789,7 +797,7 @@ GLES_RenderCopy(SDL_Renderer * renderer, SDL_Texture * texture, ...@@ -789,7 +797,7 @@ GLES_RenderCopy(SDL_Renderer * renderer, SDL_Texture * texture,
data->glColor4f(1.0f, 1.0f, 1.0f, 1.0f); data->glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
} }
GLES_SetBlendMode(data, texture->blendMode); GLES_SetBlendMode(data, texture->blendMode, 0);
switch (texture->scaleMode) { switch (texture->scaleMode) {
case SDL_TEXTURESCALEMODE_NONE: case SDL_TEXTURESCALEMODE_NONE:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment