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
This commit is contained in:
parent
e1e9af7e0e
commit
de6930e985
2 changed files with 26 additions and 10 deletions
|
@ -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)
|
||||||
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)
|
||||||
{
|
{
|
||||||
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)
|
||||||
{
|
{
|
||||||
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)
|
||||||
{
|
{
|
||||||
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,
|
||||||
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,
|
||||||
}
|
}
|
||||||
|
|
||||||
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)
|
||||||
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)
|
||||||
{
|
{
|
||||||
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)
|
||||||
{
|
{
|
||||||
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)
|
||||||
{
|
{
|
||||||
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,
|
||||||
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:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue