Skip to content
This repository has been archived by the owner on Feb 11, 2021. It is now read-only.

Commit

Permalink
Fixed SDL_BLENDMODE_MASK for GL and GLES renderers, now blending work…
Browse files Browse the repository at this point in the history
…s like in software renderer.
  • Loading branch information
llmike committed Oct 13, 2009
1 parent aac2b8f commit 8b2e6a9
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 10 deletions.
18 changes: 13 additions & 5 deletions src/video/SDL_renderer_gl.c
Expand Up @@ -1038,7 +1038,7 @@ GL_DirtyTexture(SDL_Renderer * renderer, SDL_Texture * texture, int numrects,
}

static void
GL_SetBlendMode(GL_RenderData * data, int blendMode)
GL_SetBlendMode(GL_RenderData * data, int blendMode, int isprimitive)
{
if (blendMode != data->blendMode) {
switch (blendMode) {
Expand All @@ -1047,6 +1047,14 @@ GL_SetBlendMode(GL_RenderData * data, int blendMode)
data->glDisable(GL_BLEND);
break;
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:
data->glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
data->glEnable(GL_BLEND);
Expand All @@ -1072,7 +1080,7 @@ GL_RenderPoint(SDL_Renderer * renderer, int x, int y)
{
GL_RenderData *data = (GL_RenderData *) renderer->driverdata;

GL_SetBlendMode(data, renderer->blendMode);
GL_SetBlendMode(data, renderer->blendMode, 1);

data->glColor4f((GLfloat) renderer->r * inv255f,
(GLfloat) renderer->g * inv255f,
Expand All @@ -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_SetBlendMode(data, renderer->blendMode);
GL_SetBlendMode(data, renderer->blendMode, 1);

data->glColor4f((GLfloat) renderer->r * inv255f,
(GLfloat) renderer->g * inv255f,
Expand All @@ -1111,7 +1119,7 @@ GL_RenderFill(SDL_Renderer * renderer, const SDL_Rect * rect)
{
GL_RenderData *data = (GL_RenderData *) renderer->driverdata;

GL_SetBlendMode(data, renderer->blendMode);
GL_SetBlendMode(data, renderer->blendMode, 1);

data->glColor4f((GLfloat) renderer->r * inv255f,
(GLfloat) renderer->g * inv255f,
Expand Down Expand Up @@ -1180,7 +1188,7 @@ GL_RenderCopy(SDL_Renderer * renderer, SDL_Texture * texture,
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) {
switch (texture->scaleMode) {
Expand Down
18 changes: 13 additions & 5 deletions src/video/SDL_renderer_gles.c
Expand Up @@ -611,7 +611,7 @@ GLES_DirtyTexture(SDL_Renderer * renderer, SDL_Texture * texture,
}

static void
GLES_SetBlendMode(GLES_RenderData * data, int blendMode)
GLES_SetBlendMode(GLES_RenderData * data, int blendMode, int isprimitive)
{
if (blendMode != data->blendMode) {
switch (blendMode) {
Expand All @@ -620,6 +620,14 @@ GLES_SetBlendMode(GLES_RenderData * data, int blendMode)
data->glDisable(GL_BLEND);
break;
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:
data->glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
data->glEnable(GL_BLEND);
Expand All @@ -645,7 +653,7 @@ GLES_RenderPoint(SDL_Renderer * renderer, int x, int y)
{
GLES_RenderData *data = (GLES_RenderData *) renderer->driverdata;

GLES_SetBlendMode(data, renderer->blendMode);
GLES_SetBlendMode(data, renderer->blendMode, 1);

data->glColor4f((GLfloat) renderer->r * inv255f,
(GLfloat) renderer->g * inv255f,
Expand All @@ -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_SetBlendMode(data, renderer->blendMode);
GLES_SetBlendMode(data, renderer->blendMode, 1);

data->glColor4f((GLfloat) renderer->r * inv255f,
(GLfloat) renderer->g * inv255f,
Expand All @@ -695,7 +703,7 @@ GLES_RenderFill(SDL_Renderer * renderer, const SDL_Rect * rect)
{
GLES_RenderData *data = (GLES_RenderData *) renderer->driverdata;

GLES_SetBlendMode(data, renderer->blendMode);
GLES_SetBlendMode(data, renderer->blendMode, 1);

data->glColor4f((GLfloat) renderer->r * inv255f,
(GLfloat) renderer->g * inv255f,
Expand Down Expand Up @@ -789,7 +797,7 @@ GLES_RenderCopy(SDL_Renderer * renderer, SDL_Texture * texture,
data->glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
}

GLES_SetBlendMode(data, texture->blendMode);
GLES_SetBlendMode(data, texture->blendMode, 0);

switch (texture->scaleMode) {
case SDL_TEXTURESCALEMODE_NONE:
Expand Down

0 comments on commit 8b2e6a9

Please sign in to comment.