Updated blend semantics so blending uses the following formula:
dstRGB = (srcRGB * srcA) + (dstRGB * (1-srcA)) dstA = srcA + (dstA * (1-srcA)) This allows proper compositing semantics without requiring premultiplied alpha. Needs full unit test coverage and bug fixes!
This commit is contained in:
parent
a99edf3519
commit
32188834b5
17 changed files with 362 additions and 1001 deletions
|
@ -39,10 +39,17 @@ extern "C" {
|
||||||
*/
|
*/
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
SDL_BLENDMODE_NONE = 0x00000000, /**< No blending */
|
SDL_BLENDMODE_NONE = 0x00000000, /**< no blending
|
||||||
SDL_BLENDMODE_BLEND = 0x00000001, /**< dst = (src * A) + (dst * (1-A)) */
|
dstRGBA = srcRGBA */
|
||||||
SDL_BLENDMODE_ADD = 0x00000002, /**< dst = (src * A) + dst */
|
SDL_BLENDMODE_BLEND = 0x00000001, /**< alpha blending
|
||||||
SDL_BLENDMODE_MOD = 0x00000004 /**< dst = src * dst */
|
dstRGB = (srcRGB * srcA) + (dstRGB * (1-srcA))
|
||||||
|
dstA = srcA + (dstA * (1-srcA)) */
|
||||||
|
SDL_BLENDMODE_ADD = 0x00000002, /**< additive blending
|
||||||
|
dstRGB = (srcRGB * srcA) + dstRGB
|
||||||
|
dstA = dstA */
|
||||||
|
SDL_BLENDMODE_MOD = 0x00000004 /**< color modulate
|
||||||
|
dstRGB = srcRGB * dstRGB
|
||||||
|
dstA = dstA */
|
||||||
} SDL_BlendMode;
|
} SDL_BlendMode;
|
||||||
|
|
||||||
/* Ends C function definitions when using C++ */
|
/* Ends C function definitions when using C++ */
|
||||||
|
|
|
@ -399,44 +399,42 @@ extern DECLSPEC int SDLCALL SDL_FillRects
|
||||||
*
|
*
|
||||||
* The blit function should not be called on a locked surface.
|
* The blit function should not be called on a locked surface.
|
||||||
*
|
*
|
||||||
* The blit semantics for surfaces with and without alpha and colorkey
|
* The blit semantics for surfaces with and without blending and colorkey
|
||||||
* are defined as follows:
|
* are defined as follows:
|
||||||
* \verbatim
|
* \verbatim
|
||||||
RGBA->RGB:
|
RGBA->RGB:
|
||||||
SDL_SRCALPHA set:
|
Source surface blend mode set to SDL_BLENDMODE_BLEND:
|
||||||
alpha-blend (using alpha-channel).
|
alpha-blend (using the source alpha-channel and per-surface alpha)
|
||||||
SDL_SRCCOLORKEY ignored.
|
SDL_SRCCOLORKEY ignored.
|
||||||
SDL_SRCALPHA not set:
|
Source surface blend mode set to SDL_BLENDMODE_NONE:
|
||||||
copy RGB.
|
copy RGB.
|
||||||
if SDL_SRCCOLORKEY set, only copy the pixels matching the
|
if SDL_SRCCOLORKEY set, only copy the pixels matching the
|
||||||
RGB values of the source color key, ignoring alpha in the
|
RGB values of the source color key, ignoring alpha in the
|
||||||
comparison.
|
comparison.
|
||||||
|
|
||||||
RGB->RGBA:
|
RGB->RGBA:
|
||||||
SDL_SRCALPHA set:
|
Source surface blend mode set to SDL_BLENDMODE_BLEND:
|
||||||
alpha-blend (using the source per-surface alpha value);
|
alpha-blend (using the source per-surface alpha)
|
||||||
set destination alpha to opaque.
|
Source surface blend mode set to SDL_BLENDMODE_NONE:
|
||||||
SDL_SRCALPHA not set:
|
|
||||||
copy RGB, set destination alpha to source per-surface alpha value.
|
copy RGB, set destination alpha to source per-surface alpha value.
|
||||||
both:
|
both:
|
||||||
if SDL_SRCCOLORKEY set, only copy the pixels matching the
|
if SDL_SRCCOLORKEY set, only copy the pixels matching the
|
||||||
source color key.
|
source color key.
|
||||||
|
|
||||||
RGBA->RGBA:
|
RGBA->RGBA:
|
||||||
SDL_SRCALPHA set:
|
Source surface blend mode set to SDL_BLENDMODE_BLEND:
|
||||||
alpha-blend (using the source alpha channel) the RGB values;
|
alpha-blend (using the source alpha-channel and per-surface alpha)
|
||||||
leave destination alpha untouched. [Note: is this correct?]
|
|
||||||
SDL_SRCCOLORKEY ignored.
|
SDL_SRCCOLORKEY ignored.
|
||||||
SDL_SRCALPHA not set:
|
Source surface blend mode set to SDL_BLENDMODE_NONE:
|
||||||
copy all of RGBA to the destination.
|
copy all of RGBA to the destination.
|
||||||
if SDL_SRCCOLORKEY set, only copy the pixels matching the
|
if SDL_SRCCOLORKEY set, only copy the pixels matching the
|
||||||
RGB values of the source color key, ignoring alpha in the
|
RGB values of the source color key, ignoring alpha in the
|
||||||
comparison.
|
comparison.
|
||||||
|
|
||||||
RGB->RGB:
|
RGB->RGB:
|
||||||
SDL_SRCALPHA set:
|
Source surface blend mode set to SDL_BLENDMODE_BLEND:
|
||||||
alpha-blend (using the source per-surface alpha value).
|
alpha-blend (using the source per-surface alpha)
|
||||||
SDL_SRCALPHA not set:
|
Source surface blend mode set to SDL_BLENDMODE_NONE:
|
||||||
copy RGB.
|
copy RGB.
|
||||||
both:
|
both:
|
||||||
if SDL_SRCCOLORKEY set, only copy the pixels matching the
|
if SDL_SRCCOLORKEY set, only copy the pixels matching the
|
||||||
|
|
|
@ -227,6 +227,7 @@ typedef struct
|
||||||
D3DPRESENT_PARAMETERS pparams;
|
D3DPRESENT_PARAMETERS pparams;
|
||||||
SDL_bool updateSize;
|
SDL_bool updateSize;
|
||||||
SDL_bool beginScene;
|
SDL_bool beginScene;
|
||||||
|
SDL_bool enableSeparateAlphaBlend;
|
||||||
D3DTEXTUREFILTERTYPE scaleMode;
|
D3DTEXTUREFILTERTYPE scaleMode;
|
||||||
IDirect3DSurface9 *defaultRenderTarget;
|
IDirect3DSurface9 *defaultRenderTarget;
|
||||||
IDirect3DSurface9 *currentRenderTarget;
|
IDirect3DSurface9 *currentRenderTarget;
|
||||||
|
@ -615,6 +616,10 @@ D3D_CreateRenderer(SDL_Window * window, Uint32 flags)
|
||||||
renderer->info.flags |= SDL_RENDERER_TARGETTEXTURE;
|
renderer->info.flags |= SDL_RENDERER_TARGETTEXTURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (caps.PrimitiveMiscCaps & D3DPMISCCAPS_SEPARATEALPHABLEND) {
|
||||||
|
data->enableSeparateAlphaBlend = SDL_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
/* Set up parameters for rendering */
|
/* Set up parameters for rendering */
|
||||||
IDirect3DDevice9_SetVertexShader(data->device, NULL);
|
IDirect3DDevice9_SetVertexShader(data->device, NULL);
|
||||||
IDirect3DDevice9_SetFVF(data->device,
|
IDirect3DDevice9_SetFVF(data->device,
|
||||||
|
@ -637,6 +642,10 @@ D3D_CreateRenderer(SDL_Window * window, Uint32 flags)
|
||||||
D3DTA_TEXTURE);
|
D3DTA_TEXTURE);
|
||||||
IDirect3DDevice9_SetTextureStageState(data->device, 0, D3DTSS_ALPHAARG2,
|
IDirect3DDevice9_SetTextureStageState(data->device, 0, D3DTSS_ALPHAARG2,
|
||||||
D3DTA_DIFFUSE);
|
D3DTA_DIFFUSE);
|
||||||
|
/* Enable separate alpha blend function, if possible */
|
||||||
|
if (data->enableSeparateAlphaBlend) {
|
||||||
|
IDirect3DDevice9_SetRenderState(data->device, D3DRS_SEPARATEALPHABLENDENABLE, TRUE);
|
||||||
|
}
|
||||||
/* Disable second texture stage, since we're done */
|
/* Disable second texture stage, since we're done */
|
||||||
IDirect3DDevice9_SetTextureStageState(data->device, 1, D3DTSS_COLOROP,
|
IDirect3DDevice9_SetTextureStageState(data->device, 1, D3DTSS_COLOROP,
|
||||||
D3DTOP_DISABLE);
|
D3DTOP_DISABLE);
|
||||||
|
@ -979,6 +988,12 @@ D3D_SetBlendMode(D3D_RenderData * data, int blendMode)
|
||||||
D3DBLEND_SRCALPHA);
|
D3DBLEND_SRCALPHA);
|
||||||
IDirect3DDevice9_SetRenderState(data->device, D3DRS_DESTBLEND,
|
IDirect3DDevice9_SetRenderState(data->device, D3DRS_DESTBLEND,
|
||||||
D3DBLEND_INVSRCALPHA);
|
D3DBLEND_INVSRCALPHA);
|
||||||
|
if (data->enableSeparateAlphaBlend) {
|
||||||
|
IDirect3DDevice9_SetRenderState(data->device, D3DRS_SRCBLENDALPHA,
|
||||||
|
D3DBLEND_ONE);
|
||||||
|
IDirect3DDevice9_SetRenderState(data->device, D3DRS_DESTBLENDALPHA,
|
||||||
|
D3DBLEND_INVSRCALPHA);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case SDL_BLENDMODE_ADD:
|
case SDL_BLENDMODE_ADD:
|
||||||
IDirect3DDevice9_SetRenderState(data->device, D3DRS_ALPHABLENDENABLE,
|
IDirect3DDevice9_SetRenderState(data->device, D3DRS_ALPHABLENDENABLE,
|
||||||
|
@ -987,6 +1002,12 @@ D3D_SetBlendMode(D3D_RenderData * data, int blendMode)
|
||||||
D3DBLEND_SRCALPHA);
|
D3DBLEND_SRCALPHA);
|
||||||
IDirect3DDevice9_SetRenderState(data->device, D3DRS_DESTBLEND,
|
IDirect3DDevice9_SetRenderState(data->device, D3DRS_DESTBLEND,
|
||||||
D3DBLEND_ONE);
|
D3DBLEND_ONE);
|
||||||
|
if (data->enableSeparateAlphaBlend) {
|
||||||
|
IDirect3DDevice9_SetRenderState(data->device, D3DRS_SRCBLENDALPHA,
|
||||||
|
D3DBLEND_ZERO);
|
||||||
|
IDirect3DDevice9_SetRenderState(data->device, D3DRS_DESTBLENDALPHA,
|
||||||
|
D3DBLEND_ONE);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case SDL_BLENDMODE_MOD:
|
case SDL_BLENDMODE_MOD:
|
||||||
IDirect3DDevice9_SetRenderState(data->device, D3DRS_ALPHABLENDENABLE,
|
IDirect3DDevice9_SetRenderState(data->device, D3DRS_ALPHABLENDENABLE,
|
||||||
|
@ -995,6 +1016,12 @@ D3D_SetBlendMode(D3D_RenderData * data, int blendMode)
|
||||||
D3DBLEND_ZERO);
|
D3DBLEND_ZERO);
|
||||||
IDirect3DDevice9_SetRenderState(data->device, D3DRS_DESTBLEND,
|
IDirect3DDevice9_SetRenderState(data->device, D3DRS_DESTBLEND,
|
||||||
D3DBLEND_SRCCOLOR);
|
D3DBLEND_SRCCOLOR);
|
||||||
|
if (data->enableSeparateAlphaBlend) {
|
||||||
|
IDirect3DDevice9_SetRenderState(data->device, D3DRS_SRCBLENDALPHA,
|
||||||
|
D3DBLEND_ZERO);
|
||||||
|
IDirect3DDevice9_SetRenderState(data->device, D3DRS_DESTBLENDALPHA,
|
||||||
|
D3DBLEND_ONE);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,6 +15,7 @@ SDL_PROC_UNUSED(void, glBitmap,
|
||||||
(GLsizei, GLsizei, GLfloat, GLfloat, GLfloat, GLfloat,
|
(GLsizei, GLsizei, GLfloat, GLfloat, GLfloat, GLfloat,
|
||||||
const GLubyte *))
|
const GLubyte *))
|
||||||
SDL_PROC(void, glBlendFunc, (GLenum, GLenum))
|
SDL_PROC(void, glBlendFunc, (GLenum, GLenum))
|
||||||
|
SDL_PROC(void, glBlendFuncSeparate, (GLenum, GLenum, GLenum, GLenum))
|
||||||
SDL_PROC_UNUSED(void, glCallList, (GLuint))
|
SDL_PROC_UNUSED(void, glCallList, (GLuint))
|
||||||
SDL_PROC_UNUSED(void, glCallLists, (GLsizei, GLenum, const GLvoid *))
|
SDL_PROC_UNUSED(void, glCallLists, (GLsizei, GLenum, const GLvoid *))
|
||||||
SDL_PROC(void, glClear, (GLbitfield))
|
SDL_PROC(void, glClear, (GLbitfield))
|
||||||
|
|
|
@ -924,17 +924,17 @@ GL_SetBlendMode(GL_RenderData * data, int blendMode)
|
||||||
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);
|
||||||
data->glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
data->glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
|
||||||
break;
|
break;
|
||||||
case SDL_BLENDMODE_ADD:
|
case SDL_BLENDMODE_ADD:
|
||||||
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);
|
||||||
data->glBlendFunc(GL_SRC_ALPHA, GL_ONE);
|
data->glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE, GL_ZERO, GL_ONE);
|
||||||
break;
|
break;
|
||||||
case SDL_BLENDMODE_MOD:
|
case SDL_BLENDMODE_MOD:
|
||||||
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);
|
||||||
data->glBlendFunc(GL_ZERO, GL_SRC_COLOR);
|
data->glBlendFuncSeparate(GL_ZERO, GL_SRC_COLOR, GL_ZERO, GL_ONE);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
data->current.blendMode = blendMode;
|
data->current.blendMode = blendMode;
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
SDL_PROC(void, glBindTexture, (GLenum, GLuint))
|
SDL_PROC(void, glBindTexture, (GLenum, GLuint))
|
||||||
SDL_PROC(void, glBlendFunc, (GLenum, GLenum))
|
SDL_PROC(void, glBlendFunc, (GLenum, GLenum))
|
||||||
|
SDL_PROC(void, glBlendFuncSeparateOES, (GLenum, GLenum, GLenum, GLenum))
|
||||||
SDL_PROC(void, glClear, (GLbitfield))
|
SDL_PROC(void, glClear, (GLbitfield))
|
||||||
SDL_PROC(void, glClearColor, (GLclampf, GLclampf, GLclampf, GLclampf))
|
SDL_PROC(void, glClearColor, (GLclampf, GLclampf, GLclampf, GLclampf))
|
||||||
SDL_PROC(void, glColor4f, (GLfloat, GLfloat, GLfloat, GLfloat))
|
SDL_PROC(void, glColor4f, (GLfloat, GLfloat, GLfloat, GLfloat))
|
||||||
|
|
|
@ -121,6 +121,7 @@ typedef struct
|
||||||
|
|
||||||
SDL_bool useDrawTexture;
|
SDL_bool useDrawTexture;
|
||||||
SDL_bool GL_OES_draw_texture_supported;
|
SDL_bool GL_OES_draw_texture_supported;
|
||||||
|
SDL_bool GL_OES_blend_func_separate_supported;
|
||||||
} GLES_RenderData;
|
} GLES_RenderData;
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
|
@ -376,6 +377,10 @@ GLES_CreateRenderer(SDL_Window * window, Uint32 flags)
|
||||||
}
|
}
|
||||||
data->framebuffers = NULL;
|
data->framebuffers = NULL;
|
||||||
|
|
||||||
|
if (SDL_GL_ExtensionSupported("GL_OES_blend_func_separate")) {
|
||||||
|
data->GL_OES_blend_func_separate_supported = SDL_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
/* Set up parameters for rendering */
|
/* Set up parameters for rendering */
|
||||||
GLES_ResetState(renderer);
|
GLES_ResetState(renderer);
|
||||||
|
|
||||||
|
@ -680,17 +685,29 @@ GLES_SetBlendMode(GLES_RenderData * data, int blendMode)
|
||||||
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);
|
||||||
data->glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
if (data->GL_OES_blend_func_separate_supported) {
|
||||||
|
data->glBlendFuncSeparateOES(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
|
||||||
|
} else {
|
||||||
|
data->glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case SDL_BLENDMODE_ADD:
|
case SDL_BLENDMODE_ADD:
|
||||||
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);
|
||||||
data->glBlendFunc(GL_SRC_ALPHA, GL_ONE);
|
if (data->GL_OES_blend_func_separate_supported) {
|
||||||
|
data->glBlendFuncSeparateOES(GL_SRC_ALPHA, GL_ONE, GL_ZERO, GL_ONE);
|
||||||
|
} else {
|
||||||
|
data->glBlendFunc(GL_SRC_ALPHA, GL_ONE);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case SDL_BLENDMODE_MOD:
|
case SDL_BLENDMODE_MOD:
|
||||||
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);
|
||||||
data->glBlendFunc(GL_ZERO, GL_SRC_COLOR);
|
if (data->GL_OES_blend_func_separate_supported) {
|
||||||
|
data->glBlendFuncSeparateOES(GL_ZERO, GL_SRC_COLOR, GL_ZERO, GL_ONE);
|
||||||
|
} else {
|
||||||
|
data->glBlendFunc(GL_ZERO, GL_SRC_COLOR);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
data->current.blendMode = blendMode;
|
data->current.blendMode = blendMode;
|
||||||
|
|
|
@ -2,7 +2,7 @@ SDL_PROC(void, glActiveTexture, (GLenum))
|
||||||
SDL_PROC(void, glAttachShader, (GLuint, GLuint))
|
SDL_PROC(void, glAttachShader, (GLuint, GLuint))
|
||||||
SDL_PROC(void, glBindAttribLocation, (GLuint, GLuint, const char *))
|
SDL_PROC(void, glBindAttribLocation, (GLuint, GLuint, const char *))
|
||||||
SDL_PROC(void, glBindTexture, (GLenum, GLuint))
|
SDL_PROC(void, glBindTexture, (GLenum, GLuint))
|
||||||
SDL_PROC(void, glBlendFunc, (GLenum, GLenum))
|
SDL_PROC(void, glBlendFuncSeparate, (GLenum, GLenum, GLenum, GLenum))
|
||||||
SDL_PROC(void, glClear, (GLbitfield))
|
SDL_PROC(void, glClear, (GLbitfield))
|
||||||
SDL_PROC(void, glClearColor, (GLclampf, GLclampf, GLclampf, GLclampf))
|
SDL_PROC(void, glClearColor, (GLclampf, GLclampf, GLclampf, GLclampf))
|
||||||
SDL_PROC(void, glCompileShader, (GLuint))
|
SDL_PROC(void, glCompileShader, (GLuint))
|
||||||
|
|
|
@ -994,15 +994,15 @@ GLES2_SetBlendMode(GLES2_DriverContext *rdata, int blendMode)
|
||||||
break;
|
break;
|
||||||
case SDL_BLENDMODE_BLEND:
|
case SDL_BLENDMODE_BLEND:
|
||||||
rdata->glEnable(GL_BLEND);
|
rdata->glEnable(GL_BLEND);
|
||||||
rdata->glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
rdata->glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
|
||||||
break;
|
break;
|
||||||
case SDL_BLENDMODE_ADD:
|
case SDL_BLENDMODE_ADD:
|
||||||
rdata->glEnable(GL_BLEND);
|
rdata->glEnable(GL_BLEND);
|
||||||
rdata->glBlendFunc(GL_SRC_ALPHA, GL_ONE);
|
rdata->glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE, GL_ZERO, GL_ONE);
|
||||||
break;
|
break;
|
||||||
case SDL_BLENDMODE_MOD:
|
case SDL_BLENDMODE_MOD:
|
||||||
rdata->glEnable(GL_BLEND);
|
rdata->glEnable(GL_BLEND);
|
||||||
rdata->glBlendFunc(GL_ZERO, GL_SRC_COLOR);
|
rdata->glBlendFuncSeparate(GL_ZERO, GL_SRC_COLOR, GL_ZERO, GL_ONE);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
rdata->current.blendMode = blendMode;
|
rdata->current.blendMode = blendMode;
|
||||||
|
|
|
@ -440,12 +440,22 @@ do { \
|
||||||
} \
|
} \
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Blend the RGB values of two Pixels based on a source alpha value */
|
/* Blend the RGB values of two pixels with an alpha value */
|
||||||
#define ALPHA_BLEND(sR, sG, sB, A, dR, dG, dB) \
|
#define ALPHA_BLEND_RGB(sR, sG, sB, A, dR, dG, dB) \
|
||||||
do { \
|
do { \
|
||||||
dR = ((((int)(sR-dR)*(int)A)/255)+dR); \
|
dR = ((((unsigned)(sR-dR)*(unsigned)A)/255)+dR); \
|
||||||
dG = ((((int)(sG-dG)*(int)A)/255)+dG); \
|
dG = ((((unsigned)(sG-dG)*(unsigned)A)/255)+dG); \
|
||||||
dB = ((((int)(sB-dB)*(int)A)/255)+dB); \
|
dB = ((((unsigned)(sB-dB)*(unsigned)A)/255)+dB); \
|
||||||
|
} while(0)
|
||||||
|
|
||||||
|
|
||||||
|
/* Blend the RGBA values of two pixels */
|
||||||
|
#define ALPHA_BLEND_RGBA(sR, sG, sB, sA, dR, dG, dB, dA) \
|
||||||
|
do { \
|
||||||
|
dR = ((((unsigned)(sR-dR)*(unsigned)sA)/255)+dR); \
|
||||||
|
dG = ((((unsigned)(sG-dG)*(unsigned)sA)/255)+dG); \
|
||||||
|
dB = ((((unsigned)(sB-dB)*(unsigned)sA)/255)+dB); \
|
||||||
|
dA = ((unsigned)sA+(unsigned)dA-((unsigned)sA*dA)/255); \
|
||||||
} while(0)
|
} while(0)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -363,7 +363,10 @@ BlitBtoNAlpha(SDL_BlitInfo * info)
|
||||||
SDL_PixelFormat *dstfmt = info->dst_fmt;
|
SDL_PixelFormat *dstfmt = info->dst_fmt;
|
||||||
int dstbpp;
|
int dstbpp;
|
||||||
int c;
|
int c;
|
||||||
const int A = info->a;
|
Uint32 pixel;
|
||||||
|
unsigned sR, sG, sB;
|
||||||
|
unsigned dR, dG, dB, dA;
|
||||||
|
const unsigned A = info->a;
|
||||||
|
|
||||||
/* Set up some basic variables */
|
/* Set up some basic variables */
|
||||||
dstbpp = dstfmt->BytesPerPixel;
|
dstbpp = dstfmt->BytesPerPixel;
|
||||||
|
@ -377,15 +380,12 @@ BlitBtoNAlpha(SDL_BlitInfo * info)
|
||||||
}
|
}
|
||||||
bit = (byte & 0x80) >> 7;
|
bit = (byte & 0x80) >> 7;
|
||||||
if (1) {
|
if (1) {
|
||||||
Uint32 pixel;
|
|
||||||
unsigned sR, sG, sB;
|
|
||||||
unsigned dR, dG, dB;
|
|
||||||
sR = srcpal[bit].r;
|
sR = srcpal[bit].r;
|
||||||
sG = srcpal[bit].g;
|
sG = srcpal[bit].g;
|
||||||
sB = srcpal[bit].b;
|
sB = srcpal[bit].b;
|
||||||
DISEMBLE_RGB(dst, dstbpp, dstfmt, pixel, dR, dG, dB);
|
DISEMBLE_RGBA(dst, dstbpp, dstfmt, pixel, dR, dG, dB, dA);
|
||||||
ALPHA_BLEND(sR, sG, sB, A, dR, dG, dB);
|
ALPHA_BLEND_RGBA(sR, sG, sB, A, dR, dG, dB, dA);
|
||||||
ASSEMBLE_RGB(dst, dstbpp, dstfmt, dR, dG, dB);
|
ASSEMBLE_RGBA(dst, dstbpp, dstfmt, dR, dG, dB, dA);
|
||||||
}
|
}
|
||||||
byte <<= 1;
|
byte <<= 1;
|
||||||
dst += dstbpp;
|
dst += dstbpp;
|
||||||
|
@ -409,7 +409,10 @@ BlitBtoNAlphaKey(SDL_BlitInfo * info)
|
||||||
const SDL_Color *srcpal = srcfmt->palette->colors;
|
const SDL_Color *srcpal = srcfmt->palette->colors;
|
||||||
int dstbpp;
|
int dstbpp;
|
||||||
int c;
|
int c;
|
||||||
const int A = info->a;
|
Uint32 pixel;
|
||||||
|
unsigned sR, sG, sB;
|
||||||
|
unsigned dR, dG, dB, dA;
|
||||||
|
const unsigned A = info->a;
|
||||||
Uint32 ckey = info->colorkey;
|
Uint32 ckey = info->colorkey;
|
||||||
|
|
||||||
/* Set up some basic variables */
|
/* Set up some basic variables */
|
||||||
|
@ -424,15 +427,12 @@ BlitBtoNAlphaKey(SDL_BlitInfo * info)
|
||||||
}
|
}
|
||||||
bit = (byte & 0x80) >> 7;
|
bit = (byte & 0x80) >> 7;
|
||||||
if (bit != ckey) {
|
if (bit != ckey) {
|
||||||
int sR, sG, sB;
|
|
||||||
int dR, dG, dB;
|
|
||||||
Uint32 pixel;
|
|
||||||
sR = srcpal[bit].r;
|
sR = srcpal[bit].r;
|
||||||
sG = srcpal[bit].g;
|
sG = srcpal[bit].g;
|
||||||
sB = srcpal[bit].b;
|
sB = srcpal[bit].b;
|
||||||
DISEMBLE_RGB(dst, dstbpp, dstfmt, pixel, dR, dG, dB);
|
DISEMBLE_RGBA(dst, dstbpp, dstfmt, pixel, dR, dG, dB, dA);
|
||||||
ALPHA_BLEND(sR, sG, sB, A, dR, dG, dB);
|
ALPHA_BLEND_RGBA(sR, sG, sB, A, dR, dG, dB, dA);
|
||||||
ASSEMBLE_RGB(dst, dstbpp, dstfmt, dR, dG, dB);
|
ASSEMBLE_RGBA(dst, dstbpp, dstfmt, dR, dG, dB, dA);
|
||||||
}
|
}
|
||||||
byte <<= 1;
|
byte <<= 1;
|
||||||
dst += dstbpp;
|
dst += dstbpp;
|
||||||
|
|
|
@ -437,30 +437,29 @@ Blit1toNAlpha(SDL_BlitInfo * info)
|
||||||
SDL_PixelFormat *dstfmt = info->dst_fmt;
|
SDL_PixelFormat *dstfmt = info->dst_fmt;
|
||||||
const SDL_Color *srcpal = info->src_fmt->palette->colors;
|
const SDL_Color *srcpal = info->src_fmt->palette->colors;
|
||||||
int dstbpp;
|
int dstbpp;
|
||||||
const int A = info->a;
|
Uint32 pixel;
|
||||||
|
unsigned sR, sG, sB;
|
||||||
|
unsigned dR, dG, dB, dA;
|
||||||
|
const unsigned A = info->a;
|
||||||
|
|
||||||
/* Set up some basic variables */
|
/* Set up some basic variables */
|
||||||
dstbpp = dstfmt->BytesPerPixel;
|
dstbpp = dstfmt->BytesPerPixel;
|
||||||
|
|
||||||
while (height--) {
|
while (height--) {
|
||||||
int sR, sG, sB;
|
/* *INDENT-OFF* */
|
||||||
int dR, dG, dB;
|
DUFFS_LOOP4(
|
||||||
/* *INDENT-OFF* */
|
{
|
||||||
DUFFS_LOOP4(
|
sR = srcpal[*src].r;
|
||||||
{
|
sG = srcpal[*src].g;
|
||||||
Uint32 pixel;
|
sB = srcpal[*src].b;
|
||||||
sR = srcpal[*src].r;
|
DISEMBLE_RGBA(dst, dstbpp, dstfmt, pixel, dR, dG, dB, dA);
|
||||||
sG = srcpal[*src].g;
|
ALPHA_BLEND_RGBA(sR, sG, sB, A, dR, dG, dB, dA);
|
||||||
sB = srcpal[*src].b;
|
ASSEMBLE_RGBA(dst, dstbpp, dstfmt, dR, dG, dB, dA);
|
||||||
DISEMBLE_RGB(dst, dstbpp, dstfmt,
|
src++;
|
||||||
pixel, dR, dG, dB);
|
dst += dstbpp;
|
||||||
ALPHA_BLEND(sR, sG, sB, A, dR, dG, dB);
|
},
|
||||||
ASSEMBLE_RGB(dst, dstbpp, dstfmt, dR, dG, dB);
|
width);
|
||||||
src++;
|
/* *INDENT-ON* */
|
||||||
dst += dstbpp;
|
|
||||||
},
|
|
||||||
width);
|
|
||||||
/* *INDENT-ON* */
|
|
||||||
src += srcskip;
|
src += srcskip;
|
||||||
dst += dstskip;
|
dst += dstskip;
|
||||||
}
|
}
|
||||||
|
@ -479,26 +478,25 @@ Blit1toNAlphaKey(SDL_BlitInfo * info)
|
||||||
const SDL_Color *srcpal = info->src_fmt->palette->colors;
|
const SDL_Color *srcpal = info->src_fmt->palette->colors;
|
||||||
Uint32 ckey = info->colorkey;
|
Uint32 ckey = info->colorkey;
|
||||||
int dstbpp;
|
int dstbpp;
|
||||||
const int A = info->a;
|
Uint32 pixel;
|
||||||
|
unsigned sR, sG, sB;
|
||||||
|
unsigned dR, dG, dB, dA;
|
||||||
|
const unsigned A = info->a;
|
||||||
|
|
||||||
/* Set up some basic variables */
|
/* Set up some basic variables */
|
||||||
dstbpp = dstfmt->BytesPerPixel;
|
dstbpp = dstfmt->BytesPerPixel;
|
||||||
|
|
||||||
while (height--) {
|
while (height--) {
|
||||||
int sR, sG, sB;
|
|
||||||
int dR, dG, dB;
|
|
||||||
/* *INDENT-OFF* */
|
/* *INDENT-OFF* */
|
||||||
DUFFS_LOOP(
|
DUFFS_LOOP(
|
||||||
{
|
{
|
||||||
if ( *src != ckey ) {
|
if ( *src != ckey ) {
|
||||||
Uint32 pixel;
|
|
||||||
sR = srcpal[*src].r;
|
sR = srcpal[*src].r;
|
||||||
sG = srcpal[*src].g;
|
sG = srcpal[*src].g;
|
||||||
sB = srcpal[*src].b;
|
sB = srcpal[*src].b;
|
||||||
DISEMBLE_RGB(dst, dstbpp, dstfmt,
|
DISEMBLE_RGBA(dst, dstbpp, dstfmt, pixel, dR, dG, dB, dA);
|
||||||
pixel, dR, dG, dB);
|
ALPHA_BLEND_RGBA(sR, sG, sB, A, dR, dG, dB, dA);
|
||||||
ALPHA_BLEND(sR, sG, sB, A, dR, dG, dB);
|
ASSEMBLE_RGBA(dst, dstbpp, dstfmt, dR, dG, dB, dA);
|
||||||
ASSEMBLE_RGB(dst, dstbpp, dstfmt, dR, dG, dB);
|
|
||||||
}
|
}
|
||||||
src++;
|
src++;
|
||||||
dst += dstbpp;
|
dst += dstbpp;
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -95,6 +95,7 @@ static void SDL_Blit_RGB888_RGB888_Blend(SDL_BlitInfo *info)
|
||||||
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
||||||
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
||||||
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
||||||
|
dstA = srcA + ((255 - srcA) * dstA) / 255;
|
||||||
break;
|
break;
|
||||||
case SDL_COPY_ADD:
|
case SDL_COPY_ADD:
|
||||||
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
||||||
|
@ -168,6 +169,7 @@ static void SDL_Blit_RGB888_RGB888_Blend_Scale(SDL_BlitInfo *info)
|
||||||
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
||||||
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
||||||
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
||||||
|
dstA = srcA + ((255 - srcA) * dstA) / 255;
|
||||||
break;
|
break;
|
||||||
case SDL_COPY_ADD:
|
case SDL_COPY_ADD:
|
||||||
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
||||||
|
@ -323,6 +325,7 @@ static void SDL_Blit_RGB888_RGB888_Modulate_Blend(SDL_BlitInfo *info)
|
||||||
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
||||||
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
||||||
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
||||||
|
dstA = srcA + ((255 - srcA) * dstA) / 255;
|
||||||
break;
|
break;
|
||||||
case SDL_COPY_ADD:
|
case SDL_COPY_ADD:
|
||||||
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
||||||
|
@ -408,6 +411,7 @@ static void SDL_Blit_RGB888_RGB888_Modulate_Blend_Scale(SDL_BlitInfo *info)
|
||||||
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
||||||
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
||||||
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
||||||
|
dstA = srcA + ((255 - srcA) * dstA) / 255;
|
||||||
break;
|
break;
|
||||||
case SDL_COPY_ADD:
|
case SDL_COPY_ADD:
|
||||||
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
||||||
|
@ -503,6 +507,7 @@ static void SDL_Blit_RGB888_BGR888_Blend(SDL_BlitInfo *info)
|
||||||
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
||||||
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
||||||
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
||||||
|
dstA = srcA + ((255 - srcA) * dstA) / 255;
|
||||||
break;
|
break;
|
||||||
case SDL_COPY_ADD:
|
case SDL_COPY_ADD:
|
||||||
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
||||||
|
@ -576,6 +581,7 @@ static void SDL_Blit_RGB888_BGR888_Blend_Scale(SDL_BlitInfo *info)
|
||||||
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
||||||
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
||||||
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
||||||
|
dstA = srcA + ((255 - srcA) * dstA) / 255;
|
||||||
break;
|
break;
|
||||||
case SDL_COPY_ADD:
|
case SDL_COPY_ADD:
|
||||||
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
||||||
|
@ -731,6 +737,7 @@ static void SDL_Blit_RGB888_BGR888_Modulate_Blend(SDL_BlitInfo *info)
|
||||||
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
||||||
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
||||||
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
||||||
|
dstA = srcA + ((255 - srcA) * dstA) / 255;
|
||||||
break;
|
break;
|
||||||
case SDL_COPY_ADD:
|
case SDL_COPY_ADD:
|
||||||
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
||||||
|
@ -816,6 +823,7 @@ static void SDL_Blit_RGB888_BGR888_Modulate_Blend_Scale(SDL_BlitInfo *info)
|
||||||
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
||||||
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
||||||
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
||||||
|
dstA = srcA + ((255 - srcA) * dstA) / 255;
|
||||||
break;
|
break;
|
||||||
case SDL_COPY_ADD:
|
case SDL_COPY_ADD:
|
||||||
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
||||||
|
@ -911,6 +919,7 @@ static void SDL_Blit_RGB888_ARGB8888_Blend(SDL_BlitInfo *info)
|
||||||
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
||||||
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
||||||
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
||||||
|
dstA = srcA + ((255 - srcA) * dstA) / 255;
|
||||||
break;
|
break;
|
||||||
case SDL_COPY_ADD:
|
case SDL_COPY_ADD:
|
||||||
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
||||||
|
@ -984,6 +993,7 @@ static void SDL_Blit_RGB888_ARGB8888_Blend_Scale(SDL_BlitInfo *info)
|
||||||
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
||||||
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
||||||
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
||||||
|
dstA = srcA + ((255 - srcA) * dstA) / 255;
|
||||||
break;
|
break;
|
||||||
case SDL_COPY_ADD:
|
case SDL_COPY_ADD:
|
||||||
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
||||||
|
@ -1139,6 +1149,7 @@ static void SDL_Blit_RGB888_ARGB8888_Modulate_Blend(SDL_BlitInfo *info)
|
||||||
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
||||||
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
||||||
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
||||||
|
dstA = srcA + ((255 - srcA) * dstA) / 255;
|
||||||
break;
|
break;
|
||||||
case SDL_COPY_ADD:
|
case SDL_COPY_ADD:
|
||||||
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
||||||
|
@ -1224,6 +1235,7 @@ static void SDL_Blit_RGB888_ARGB8888_Modulate_Blend_Scale(SDL_BlitInfo *info)
|
||||||
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
||||||
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
||||||
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
||||||
|
dstA = srcA + ((255 - srcA) * dstA) / 255;
|
||||||
break;
|
break;
|
||||||
case SDL_COPY_ADD:
|
case SDL_COPY_ADD:
|
||||||
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
||||||
|
@ -1319,6 +1331,7 @@ static void SDL_Blit_BGR888_RGB888_Blend(SDL_BlitInfo *info)
|
||||||
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
||||||
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
||||||
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
||||||
|
dstA = srcA + ((255 - srcA) * dstA) / 255;
|
||||||
break;
|
break;
|
||||||
case SDL_COPY_ADD:
|
case SDL_COPY_ADD:
|
||||||
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
||||||
|
@ -1392,6 +1405,7 @@ static void SDL_Blit_BGR888_RGB888_Blend_Scale(SDL_BlitInfo *info)
|
||||||
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
||||||
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
||||||
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
||||||
|
dstA = srcA + ((255 - srcA) * dstA) / 255;
|
||||||
break;
|
break;
|
||||||
case SDL_COPY_ADD:
|
case SDL_COPY_ADD:
|
||||||
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
||||||
|
@ -1547,6 +1561,7 @@ static void SDL_Blit_BGR888_RGB888_Modulate_Blend(SDL_BlitInfo *info)
|
||||||
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
||||||
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
||||||
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
||||||
|
dstA = srcA + ((255 - srcA) * dstA) / 255;
|
||||||
break;
|
break;
|
||||||
case SDL_COPY_ADD:
|
case SDL_COPY_ADD:
|
||||||
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
||||||
|
@ -1632,6 +1647,7 @@ static void SDL_Blit_BGR888_RGB888_Modulate_Blend_Scale(SDL_BlitInfo *info)
|
||||||
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
||||||
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
||||||
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
||||||
|
dstA = srcA + ((255 - srcA) * dstA) / 255;
|
||||||
break;
|
break;
|
||||||
case SDL_COPY_ADD:
|
case SDL_COPY_ADD:
|
||||||
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
||||||
|
@ -1722,6 +1738,7 @@ static void SDL_Blit_BGR888_BGR888_Blend(SDL_BlitInfo *info)
|
||||||
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
||||||
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
||||||
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
||||||
|
dstA = srcA + ((255 - srcA) * dstA) / 255;
|
||||||
break;
|
break;
|
||||||
case SDL_COPY_ADD:
|
case SDL_COPY_ADD:
|
||||||
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
||||||
|
@ -1795,6 +1812,7 @@ static void SDL_Blit_BGR888_BGR888_Blend_Scale(SDL_BlitInfo *info)
|
||||||
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
||||||
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
||||||
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
||||||
|
dstA = srcA + ((255 - srcA) * dstA) / 255;
|
||||||
break;
|
break;
|
||||||
case SDL_COPY_ADD:
|
case SDL_COPY_ADD:
|
||||||
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
||||||
|
@ -1950,6 +1968,7 @@ static void SDL_Blit_BGR888_BGR888_Modulate_Blend(SDL_BlitInfo *info)
|
||||||
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
||||||
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
||||||
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
||||||
|
dstA = srcA + ((255 - srcA) * dstA) / 255;
|
||||||
break;
|
break;
|
||||||
case SDL_COPY_ADD:
|
case SDL_COPY_ADD:
|
||||||
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
||||||
|
@ -2035,6 +2054,7 @@ static void SDL_Blit_BGR888_BGR888_Modulate_Blend_Scale(SDL_BlitInfo *info)
|
||||||
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
||||||
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
||||||
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
||||||
|
dstA = srcA + ((255 - srcA) * dstA) / 255;
|
||||||
break;
|
break;
|
||||||
case SDL_COPY_ADD:
|
case SDL_COPY_ADD:
|
||||||
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
||||||
|
@ -2130,6 +2150,7 @@ static void SDL_Blit_BGR888_ARGB8888_Blend(SDL_BlitInfo *info)
|
||||||
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
||||||
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
||||||
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
||||||
|
dstA = srcA + ((255 - srcA) * dstA) / 255;
|
||||||
break;
|
break;
|
||||||
case SDL_COPY_ADD:
|
case SDL_COPY_ADD:
|
||||||
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
||||||
|
@ -2203,6 +2224,7 @@ static void SDL_Blit_BGR888_ARGB8888_Blend_Scale(SDL_BlitInfo *info)
|
||||||
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
||||||
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
||||||
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
||||||
|
dstA = srcA + ((255 - srcA) * dstA) / 255;
|
||||||
break;
|
break;
|
||||||
case SDL_COPY_ADD:
|
case SDL_COPY_ADD:
|
||||||
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
||||||
|
@ -2358,6 +2380,7 @@ static void SDL_Blit_BGR888_ARGB8888_Modulate_Blend(SDL_BlitInfo *info)
|
||||||
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
||||||
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
||||||
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
||||||
|
dstA = srcA + ((255 - srcA) * dstA) / 255;
|
||||||
break;
|
break;
|
||||||
case SDL_COPY_ADD:
|
case SDL_COPY_ADD:
|
||||||
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
||||||
|
@ -2443,6 +2466,7 @@ static void SDL_Blit_BGR888_ARGB8888_Modulate_Blend_Scale(SDL_BlitInfo *info)
|
||||||
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
||||||
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
||||||
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
||||||
|
dstA = srcA + ((255 - srcA) * dstA) / 255;
|
||||||
break;
|
break;
|
||||||
case SDL_COPY_ADD:
|
case SDL_COPY_ADD:
|
||||||
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
||||||
|
@ -2538,6 +2562,7 @@ static void SDL_Blit_ARGB8888_RGB888_Blend(SDL_BlitInfo *info)
|
||||||
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
||||||
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
||||||
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
||||||
|
dstA = srcA + ((255 - srcA) * dstA) / 255;
|
||||||
break;
|
break;
|
||||||
case SDL_COPY_ADD:
|
case SDL_COPY_ADD:
|
||||||
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
||||||
|
@ -2611,6 +2636,7 @@ static void SDL_Blit_ARGB8888_RGB888_Blend_Scale(SDL_BlitInfo *info)
|
||||||
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
||||||
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
||||||
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
||||||
|
dstA = srcA + ((255 - srcA) * dstA) / 255;
|
||||||
break;
|
break;
|
||||||
case SDL_COPY_ADD:
|
case SDL_COPY_ADD:
|
||||||
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
||||||
|
@ -2766,6 +2792,7 @@ static void SDL_Blit_ARGB8888_RGB888_Modulate_Blend(SDL_BlitInfo *info)
|
||||||
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
||||||
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
||||||
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
||||||
|
dstA = srcA + ((255 - srcA) * dstA) / 255;
|
||||||
break;
|
break;
|
||||||
case SDL_COPY_ADD:
|
case SDL_COPY_ADD:
|
||||||
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
||||||
|
@ -2851,6 +2878,7 @@ static void SDL_Blit_ARGB8888_RGB888_Modulate_Blend_Scale(SDL_BlitInfo *info)
|
||||||
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
||||||
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
||||||
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
||||||
|
dstA = srcA + ((255 - srcA) * dstA) / 255;
|
||||||
break;
|
break;
|
||||||
case SDL_COPY_ADD:
|
case SDL_COPY_ADD:
|
||||||
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
||||||
|
@ -2946,6 +2974,7 @@ static void SDL_Blit_ARGB8888_BGR888_Blend(SDL_BlitInfo *info)
|
||||||
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
||||||
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
||||||
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
||||||
|
dstA = srcA + ((255 - srcA) * dstA) / 255;
|
||||||
break;
|
break;
|
||||||
case SDL_COPY_ADD:
|
case SDL_COPY_ADD:
|
||||||
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
||||||
|
@ -3019,6 +3048,7 @@ static void SDL_Blit_ARGB8888_BGR888_Blend_Scale(SDL_BlitInfo *info)
|
||||||
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
||||||
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
||||||
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
||||||
|
dstA = srcA + ((255 - srcA) * dstA) / 255;
|
||||||
break;
|
break;
|
||||||
case SDL_COPY_ADD:
|
case SDL_COPY_ADD:
|
||||||
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
||||||
|
@ -3174,6 +3204,7 @@ static void SDL_Blit_ARGB8888_BGR888_Modulate_Blend(SDL_BlitInfo *info)
|
||||||
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
||||||
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
||||||
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
||||||
|
dstA = srcA + ((255 - srcA) * dstA) / 255;
|
||||||
break;
|
break;
|
||||||
case SDL_COPY_ADD:
|
case SDL_COPY_ADD:
|
||||||
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
||||||
|
@ -3259,6 +3290,7 @@ static void SDL_Blit_ARGB8888_BGR888_Modulate_Blend_Scale(SDL_BlitInfo *info)
|
||||||
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
||||||
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
||||||
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
||||||
|
dstA = srcA + ((255 - srcA) * dstA) / 255;
|
||||||
break;
|
break;
|
||||||
case SDL_COPY_ADD:
|
case SDL_COPY_ADD:
|
||||||
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
||||||
|
@ -3349,6 +3381,7 @@ static void SDL_Blit_ARGB8888_ARGB8888_Blend(SDL_BlitInfo *info)
|
||||||
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
||||||
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
||||||
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
||||||
|
dstA = srcA + ((255 - srcA) * dstA) / 255;
|
||||||
break;
|
break;
|
||||||
case SDL_COPY_ADD:
|
case SDL_COPY_ADD:
|
||||||
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
||||||
|
@ -3422,6 +3455,7 @@ static void SDL_Blit_ARGB8888_ARGB8888_Blend_Scale(SDL_BlitInfo *info)
|
||||||
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
||||||
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
||||||
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
||||||
|
dstA = srcA + ((255 - srcA) * dstA) / 255;
|
||||||
break;
|
break;
|
||||||
case SDL_COPY_ADD:
|
case SDL_COPY_ADD:
|
||||||
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
||||||
|
@ -3577,6 +3611,7 @@ static void SDL_Blit_ARGB8888_ARGB8888_Modulate_Blend(SDL_BlitInfo *info)
|
||||||
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
||||||
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
||||||
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
||||||
|
dstA = srcA + ((255 - srcA) * dstA) / 255;
|
||||||
break;
|
break;
|
||||||
case SDL_COPY_ADD:
|
case SDL_COPY_ADD:
|
||||||
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
||||||
|
@ -3662,6 +3697,7 @@ static void SDL_Blit_ARGB8888_ARGB8888_Modulate_Blend_Scale(SDL_BlitInfo *info)
|
||||||
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
||||||
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
||||||
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
||||||
|
dstA = srcA + ((255 - srcA) * dstA) / 255;
|
||||||
break;
|
break;
|
||||||
case SDL_COPY_ADD:
|
case SDL_COPY_ADD:
|
||||||
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
||||||
|
@ -3757,6 +3793,7 @@ static void SDL_Blit_RGBA8888_RGB888_Blend(SDL_BlitInfo *info)
|
||||||
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
||||||
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
||||||
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
||||||
|
dstA = srcA + ((255 - srcA) * dstA) / 255;
|
||||||
break;
|
break;
|
||||||
case SDL_COPY_ADD:
|
case SDL_COPY_ADD:
|
||||||
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
||||||
|
@ -3830,6 +3867,7 @@ static void SDL_Blit_RGBA8888_RGB888_Blend_Scale(SDL_BlitInfo *info)
|
||||||
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
||||||
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
||||||
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
||||||
|
dstA = srcA + ((255 - srcA) * dstA) / 255;
|
||||||
break;
|
break;
|
||||||
case SDL_COPY_ADD:
|
case SDL_COPY_ADD:
|
||||||
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
||||||
|
@ -3985,6 +4023,7 @@ static void SDL_Blit_RGBA8888_RGB888_Modulate_Blend(SDL_BlitInfo *info)
|
||||||
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
||||||
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
||||||
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
||||||
|
dstA = srcA + ((255 - srcA) * dstA) / 255;
|
||||||
break;
|
break;
|
||||||
case SDL_COPY_ADD:
|
case SDL_COPY_ADD:
|
||||||
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
||||||
|
@ -4070,6 +4109,7 @@ static void SDL_Blit_RGBA8888_RGB888_Modulate_Blend_Scale(SDL_BlitInfo *info)
|
||||||
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
||||||
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
||||||
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
||||||
|
dstA = srcA + ((255 - srcA) * dstA) / 255;
|
||||||
break;
|
break;
|
||||||
case SDL_COPY_ADD:
|
case SDL_COPY_ADD:
|
||||||
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
||||||
|
@ -4165,6 +4205,7 @@ static void SDL_Blit_RGBA8888_BGR888_Blend(SDL_BlitInfo *info)
|
||||||
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
||||||
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
||||||
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
||||||
|
dstA = srcA + ((255 - srcA) * dstA) / 255;
|
||||||
break;
|
break;
|
||||||
case SDL_COPY_ADD:
|
case SDL_COPY_ADD:
|
||||||
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
||||||
|
@ -4238,6 +4279,7 @@ static void SDL_Blit_RGBA8888_BGR888_Blend_Scale(SDL_BlitInfo *info)
|
||||||
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
||||||
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
||||||
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
||||||
|
dstA = srcA + ((255 - srcA) * dstA) / 255;
|
||||||
break;
|
break;
|
||||||
case SDL_COPY_ADD:
|
case SDL_COPY_ADD:
|
||||||
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
||||||
|
@ -4393,6 +4435,7 @@ static void SDL_Blit_RGBA8888_BGR888_Modulate_Blend(SDL_BlitInfo *info)
|
||||||
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
||||||
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
||||||
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
||||||
|
dstA = srcA + ((255 - srcA) * dstA) / 255;
|
||||||
break;
|
break;
|
||||||
case SDL_COPY_ADD:
|
case SDL_COPY_ADD:
|
||||||
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
||||||
|
@ -4478,6 +4521,7 @@ static void SDL_Blit_RGBA8888_BGR888_Modulate_Blend_Scale(SDL_BlitInfo *info)
|
||||||
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
||||||
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
||||||
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
||||||
|
dstA = srcA + ((255 - srcA) * dstA) / 255;
|
||||||
break;
|
break;
|
||||||
case SDL_COPY_ADD:
|
case SDL_COPY_ADD:
|
||||||
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
||||||
|
@ -4573,6 +4617,7 @@ static void SDL_Blit_RGBA8888_ARGB8888_Blend(SDL_BlitInfo *info)
|
||||||
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
||||||
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
||||||
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
||||||
|
dstA = srcA + ((255 - srcA) * dstA) / 255;
|
||||||
break;
|
break;
|
||||||
case SDL_COPY_ADD:
|
case SDL_COPY_ADD:
|
||||||
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
||||||
|
@ -4646,6 +4691,7 @@ static void SDL_Blit_RGBA8888_ARGB8888_Blend_Scale(SDL_BlitInfo *info)
|
||||||
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
||||||
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
||||||
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
||||||
|
dstA = srcA + ((255 - srcA) * dstA) / 255;
|
||||||
break;
|
break;
|
||||||
case SDL_COPY_ADD:
|
case SDL_COPY_ADD:
|
||||||
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
||||||
|
@ -4801,6 +4847,7 @@ static void SDL_Blit_RGBA8888_ARGB8888_Modulate_Blend(SDL_BlitInfo *info)
|
||||||
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
||||||
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
||||||
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
||||||
|
dstA = srcA + ((255 - srcA) * dstA) / 255;
|
||||||
break;
|
break;
|
||||||
case SDL_COPY_ADD:
|
case SDL_COPY_ADD:
|
||||||
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
||||||
|
@ -4886,6 +4933,7 @@ static void SDL_Blit_RGBA8888_ARGB8888_Modulate_Blend_Scale(SDL_BlitInfo *info)
|
||||||
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
||||||
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
||||||
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
||||||
|
dstA = srcA + ((255 - srcA) * dstA) / 255;
|
||||||
break;
|
break;
|
||||||
case SDL_COPY_ADD:
|
case SDL_COPY_ADD:
|
||||||
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
||||||
|
@ -4981,6 +5029,7 @@ static void SDL_Blit_ABGR8888_RGB888_Blend(SDL_BlitInfo *info)
|
||||||
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
||||||
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
||||||
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
||||||
|
dstA = srcA + ((255 - srcA) * dstA) / 255;
|
||||||
break;
|
break;
|
||||||
case SDL_COPY_ADD:
|
case SDL_COPY_ADD:
|
||||||
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
||||||
|
@ -5054,6 +5103,7 @@ static void SDL_Blit_ABGR8888_RGB888_Blend_Scale(SDL_BlitInfo *info)
|
||||||
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
||||||
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
||||||
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
||||||
|
dstA = srcA + ((255 - srcA) * dstA) / 255;
|
||||||
break;
|
break;
|
||||||
case SDL_COPY_ADD:
|
case SDL_COPY_ADD:
|
||||||
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
||||||
|
@ -5209,6 +5259,7 @@ static void SDL_Blit_ABGR8888_RGB888_Modulate_Blend(SDL_BlitInfo *info)
|
||||||
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
||||||
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
||||||
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
||||||
|
dstA = srcA + ((255 - srcA) * dstA) / 255;
|
||||||
break;
|
break;
|
||||||
case SDL_COPY_ADD:
|
case SDL_COPY_ADD:
|
||||||
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
||||||
|
@ -5294,6 +5345,7 @@ static void SDL_Blit_ABGR8888_RGB888_Modulate_Blend_Scale(SDL_BlitInfo *info)
|
||||||
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
||||||
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
||||||
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
||||||
|
dstA = srcA + ((255 - srcA) * dstA) / 255;
|
||||||
break;
|
break;
|
||||||
case SDL_COPY_ADD:
|
case SDL_COPY_ADD:
|
||||||
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
||||||
|
@ -5389,6 +5441,7 @@ static void SDL_Blit_ABGR8888_BGR888_Blend(SDL_BlitInfo *info)
|
||||||
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
||||||
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
||||||
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
||||||
|
dstA = srcA + ((255 - srcA) * dstA) / 255;
|
||||||
break;
|
break;
|
||||||
case SDL_COPY_ADD:
|
case SDL_COPY_ADD:
|
||||||
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
||||||
|
@ -5462,6 +5515,7 @@ static void SDL_Blit_ABGR8888_BGR888_Blend_Scale(SDL_BlitInfo *info)
|
||||||
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
||||||
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
||||||
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
||||||
|
dstA = srcA + ((255 - srcA) * dstA) / 255;
|
||||||
break;
|
break;
|
||||||
case SDL_COPY_ADD:
|
case SDL_COPY_ADD:
|
||||||
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
||||||
|
@ -5617,6 +5671,7 @@ static void SDL_Blit_ABGR8888_BGR888_Modulate_Blend(SDL_BlitInfo *info)
|
||||||
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
||||||
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
||||||
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
||||||
|
dstA = srcA + ((255 - srcA) * dstA) / 255;
|
||||||
break;
|
break;
|
||||||
case SDL_COPY_ADD:
|
case SDL_COPY_ADD:
|
||||||
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
||||||
|
@ -5702,6 +5757,7 @@ static void SDL_Blit_ABGR8888_BGR888_Modulate_Blend_Scale(SDL_BlitInfo *info)
|
||||||
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
||||||
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
||||||
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
||||||
|
dstA = srcA + ((255 - srcA) * dstA) / 255;
|
||||||
break;
|
break;
|
||||||
case SDL_COPY_ADD:
|
case SDL_COPY_ADD:
|
||||||
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
||||||
|
@ -5797,6 +5853,7 @@ static void SDL_Blit_ABGR8888_ARGB8888_Blend(SDL_BlitInfo *info)
|
||||||
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
||||||
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
||||||
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
||||||
|
dstA = srcA + ((255 - srcA) * dstA) / 255;
|
||||||
break;
|
break;
|
||||||
case SDL_COPY_ADD:
|
case SDL_COPY_ADD:
|
||||||
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
||||||
|
@ -5870,6 +5927,7 @@ static void SDL_Blit_ABGR8888_ARGB8888_Blend_Scale(SDL_BlitInfo *info)
|
||||||
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
||||||
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
||||||
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
||||||
|
dstA = srcA + ((255 - srcA) * dstA) / 255;
|
||||||
break;
|
break;
|
||||||
case SDL_COPY_ADD:
|
case SDL_COPY_ADD:
|
||||||
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
||||||
|
@ -6025,6 +6083,7 @@ static void SDL_Blit_ABGR8888_ARGB8888_Modulate_Blend(SDL_BlitInfo *info)
|
||||||
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
||||||
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
||||||
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
||||||
|
dstA = srcA + ((255 - srcA) * dstA) / 255;
|
||||||
break;
|
break;
|
||||||
case SDL_COPY_ADD:
|
case SDL_COPY_ADD:
|
||||||
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
||||||
|
@ -6110,6 +6169,7 @@ static void SDL_Blit_ABGR8888_ARGB8888_Modulate_Blend_Scale(SDL_BlitInfo *info)
|
||||||
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
||||||
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
||||||
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
||||||
|
dstA = srcA + ((255 - srcA) * dstA) / 255;
|
||||||
break;
|
break;
|
||||||
case SDL_COPY_ADD:
|
case SDL_COPY_ADD:
|
||||||
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
||||||
|
@ -6205,6 +6265,7 @@ static void SDL_Blit_BGRA8888_RGB888_Blend(SDL_BlitInfo *info)
|
||||||
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
||||||
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
||||||
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
||||||
|
dstA = srcA + ((255 - srcA) * dstA) / 255;
|
||||||
break;
|
break;
|
||||||
case SDL_COPY_ADD:
|
case SDL_COPY_ADD:
|
||||||
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
||||||
|
@ -6278,6 +6339,7 @@ static void SDL_Blit_BGRA8888_RGB888_Blend_Scale(SDL_BlitInfo *info)
|
||||||
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
||||||
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
||||||
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
||||||
|
dstA = srcA + ((255 - srcA) * dstA) / 255;
|
||||||
break;
|
break;
|
||||||
case SDL_COPY_ADD:
|
case SDL_COPY_ADD:
|
||||||
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
||||||
|
@ -6433,6 +6495,7 @@ static void SDL_Blit_BGRA8888_RGB888_Modulate_Blend(SDL_BlitInfo *info)
|
||||||
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
||||||
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
||||||
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
||||||
|
dstA = srcA + ((255 - srcA) * dstA) / 255;
|
||||||
break;
|
break;
|
||||||
case SDL_COPY_ADD:
|
case SDL_COPY_ADD:
|
||||||
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
||||||
|
@ -6518,6 +6581,7 @@ static void SDL_Blit_BGRA8888_RGB888_Modulate_Blend_Scale(SDL_BlitInfo *info)
|
||||||
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
||||||
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
||||||
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
||||||
|
dstA = srcA + ((255 - srcA) * dstA) / 255;
|
||||||
break;
|
break;
|
||||||
case SDL_COPY_ADD:
|
case SDL_COPY_ADD:
|
||||||
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
||||||
|
@ -6613,6 +6677,7 @@ static void SDL_Blit_BGRA8888_BGR888_Blend(SDL_BlitInfo *info)
|
||||||
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
||||||
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
||||||
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
||||||
|
dstA = srcA + ((255 - srcA) * dstA) / 255;
|
||||||
break;
|
break;
|
||||||
case SDL_COPY_ADD:
|
case SDL_COPY_ADD:
|
||||||
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
||||||
|
@ -6686,6 +6751,7 @@ static void SDL_Blit_BGRA8888_BGR888_Blend_Scale(SDL_BlitInfo *info)
|
||||||
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
||||||
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
||||||
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
||||||
|
dstA = srcA + ((255 - srcA) * dstA) / 255;
|
||||||
break;
|
break;
|
||||||
case SDL_COPY_ADD:
|
case SDL_COPY_ADD:
|
||||||
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
||||||
|
@ -6841,6 +6907,7 @@ static void SDL_Blit_BGRA8888_BGR888_Modulate_Blend(SDL_BlitInfo *info)
|
||||||
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
||||||
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
||||||
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
||||||
|
dstA = srcA + ((255 - srcA) * dstA) / 255;
|
||||||
break;
|
break;
|
||||||
case SDL_COPY_ADD:
|
case SDL_COPY_ADD:
|
||||||
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
||||||
|
@ -6926,6 +6993,7 @@ static void SDL_Blit_BGRA8888_BGR888_Modulate_Blend_Scale(SDL_BlitInfo *info)
|
||||||
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
||||||
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
||||||
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
||||||
|
dstA = srcA + ((255 - srcA) * dstA) / 255;
|
||||||
break;
|
break;
|
||||||
case SDL_COPY_ADD:
|
case SDL_COPY_ADD:
|
||||||
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
||||||
|
@ -7021,6 +7089,7 @@ static void SDL_Blit_BGRA8888_ARGB8888_Blend(SDL_BlitInfo *info)
|
||||||
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
||||||
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
||||||
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
||||||
|
dstA = srcA + ((255 - srcA) * dstA) / 255;
|
||||||
break;
|
break;
|
||||||
case SDL_COPY_ADD:
|
case SDL_COPY_ADD:
|
||||||
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
||||||
|
@ -7094,6 +7163,7 @@ static void SDL_Blit_BGRA8888_ARGB8888_Blend_Scale(SDL_BlitInfo *info)
|
||||||
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
||||||
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
||||||
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
||||||
|
dstA = srcA + ((255 - srcA) * dstA) / 255;
|
||||||
break;
|
break;
|
||||||
case SDL_COPY_ADD:
|
case SDL_COPY_ADD:
|
||||||
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
||||||
|
@ -7249,6 +7319,7 @@ static void SDL_Blit_BGRA8888_ARGB8888_Modulate_Blend(SDL_BlitInfo *info)
|
||||||
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
||||||
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
||||||
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
||||||
|
dstA = srcA + ((255 - srcA) * dstA) / 255;
|
||||||
break;
|
break;
|
||||||
case SDL_COPY_ADD:
|
case SDL_COPY_ADD:
|
||||||
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
||||||
|
@ -7334,6 +7405,7 @@ static void SDL_Blit_BGRA8888_ARGB8888_Modulate_Blend_Scale(SDL_BlitInfo *info)
|
||||||
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
dstR = srcR + ((255 - srcA) * dstR) / 255;
|
||||||
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
dstG = srcG + ((255 - srcA) * dstG) / 255;
|
||||||
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
dstB = srcB + ((255 - srcA) * dstB) / 255;
|
||||||
|
dstA = srcA + ((255 - srcA) * dstA) / 255;
|
||||||
break;
|
break;
|
||||||
case SDL_COPY_ADD:
|
case SDL_COPY_ADD:
|
||||||
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
|
||||||
|
|
|
@ -82,7 +82,7 @@ sub open_file {
|
||||||
/* DO NOT EDIT! This file is generated by sdlgenblit.pl */
|
/* DO NOT EDIT! This file is generated by sdlgenblit.pl */
|
||||||
/*
|
/*
|
||||||
Simple DirectMedia Layer
|
Simple DirectMedia Layer
|
||||||
Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org>
|
Copyright (C) 1997-2013 Sam Lantinga <slouken\@libsdl.org>
|
||||||
|
|
||||||
This software is provided 'as-is', without any express or implied
|
This software is provided 'as-is', without any express or implied
|
||||||
warranty. In no event will the authors be held liable for any damages
|
warranty. In no event will the authors be held liable for any damages
|
||||||
|
@ -241,6 +241,7 @@ __EOF__
|
||||||
${d}R = ${s}R + ((255 - ${s}A) * ${d}R) / 255;
|
${d}R = ${s}R + ((255 - ${s}A) * ${d}R) / 255;
|
||||||
${d}G = ${s}G + ((255 - ${s}A) * ${d}G) / 255;
|
${d}G = ${s}G + ((255 - ${s}A) * ${d}G) / 255;
|
||||||
${d}B = ${s}B + ((255 - ${s}A) * ${d}B) / 255;
|
${d}B = ${s}B + ((255 - ${s}A) * ${d}B) / 255;
|
||||||
|
${d}A = ${s}A + ((255 - ${s}A) * ${d}A) / 255;
|
||||||
break;
|
break;
|
||||||
case SDL_COPY_ADD:
|
case SDL_COPY_ADD:
|
||||||
${d}R = ${s}R + ${d}R; if (${d}R > 255) ${d}R = 255;
|
${d}R = ${s}R + ${d}R; if (${d}R > 255) ${d}R = 255;
|
||||||
|
|
|
@ -87,6 +87,88 @@ LoadTexture(SDL_Renderer *renderer, char *file, SDL_bool transparent)
|
||||||
return texture;
|
return texture;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
DrawComposite(DrawState *s)
|
||||||
|
{
|
||||||
|
SDL_Rect viewport, R;
|
||||||
|
SDL_Texture *target, *A, *B;
|
||||||
|
|
||||||
|
static SDL_bool blend_tested = SDL_FALSE;
|
||||||
|
if (!blend_tested) {
|
||||||
|
SDL_Texture *A, *B;
|
||||||
|
Uint32 P;
|
||||||
|
|
||||||
|
A = SDL_CreateTexture(s->renderer, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_TARGET, 1, 1);
|
||||||
|
SDL_SetTextureBlendMode(A, SDL_BLENDMODE_BLEND);
|
||||||
|
|
||||||
|
B = SDL_CreateTexture(s->renderer, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_TARGET, 1, 1);
|
||||||
|
SDL_SetTextureBlendMode(B, SDL_BLENDMODE_BLEND);
|
||||||
|
|
||||||
|
SDL_SetRenderTarget(s->renderer, A);
|
||||||
|
SDL_SetRenderDrawColor(s->renderer, 0x00, 0x00, 0x00, 0x80);
|
||||||
|
SDL_RenderFillRect(s->renderer, NULL);
|
||||||
|
|
||||||
|
SDL_SetRenderTarget(s->renderer, B);
|
||||||
|
SDL_SetRenderDrawColor(s->renderer, 0x00, 0x00, 0x00, 0x00);
|
||||||
|
SDL_RenderFillRect(s->renderer, NULL);
|
||||||
|
SDL_RenderCopy(s->renderer, A, NULL, NULL);
|
||||||
|
SDL_RenderReadPixels(s->renderer, NULL, SDL_PIXELFORMAT_ARGB8888, &P, sizeof(P));
|
||||||
|
|
||||||
|
printf("Blended pixel: 0x%8.8X\n", P);
|
||||||
|
|
||||||
|
SDL_DestroyTexture(A);
|
||||||
|
SDL_DestroyTexture(B);
|
||||||
|
blend_tested = SDL_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
SDL_RenderGetViewport(s->renderer, &viewport);
|
||||||
|
|
||||||
|
target = SDL_CreateTexture(s->renderer, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_TARGET, viewport.w, viewport.h);
|
||||||
|
SDL_SetTextureBlendMode(target, SDL_BLENDMODE_BLEND);
|
||||||
|
SDL_SetRenderTarget(s->renderer, target);
|
||||||
|
|
||||||
|
/* Draw the background.
|
||||||
|
This is solid black so when the sprite is copied to it, any per-pixel alpha will be blended through.
|
||||||
|
*/
|
||||||
|
SDL_SetRenderDrawColor(s->renderer, 0x00, 0x00, 0x00, 0x00);
|
||||||
|
SDL_RenderFillRect(s->renderer, NULL);
|
||||||
|
|
||||||
|
/* Scale and draw the sprite */
|
||||||
|
s->sprite_rect.w += s->scale_direction;
|
||||||
|
s->sprite_rect.h += s->scale_direction;
|
||||||
|
if (s->scale_direction > 0) {
|
||||||
|
if (s->sprite_rect.w >= viewport.w || s->sprite_rect.h >= viewport.h) {
|
||||||
|
s->scale_direction = -1;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (s->sprite_rect.w <= 1 || s->sprite_rect.h <= 1) {
|
||||||
|
s->scale_direction = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
s->sprite_rect.x = (viewport.w - s->sprite_rect.w) / 2;
|
||||||
|
s->sprite_rect.y = (viewport.h - s->sprite_rect.h) / 2;
|
||||||
|
|
||||||
|
SDL_RenderCopy(s->renderer, s->sprite, NULL, &s->sprite_rect);
|
||||||
|
|
||||||
|
SDL_SetRenderTarget(s->renderer, NULL);
|
||||||
|
SDL_RenderCopy(s->renderer, s->background, NULL, NULL);
|
||||||
|
|
||||||
|
SDL_SetRenderDrawBlendMode(s->renderer, SDL_BLENDMODE_BLEND);
|
||||||
|
SDL_SetRenderDrawColor(s->renderer, 0xff, 0x00, 0x00, 0x80);
|
||||||
|
R.x = 0;
|
||||||
|
R.y = 0;
|
||||||
|
R.w = 100;
|
||||||
|
R.h = 100;
|
||||||
|
SDL_RenderFillRect(s->renderer, &R);
|
||||||
|
SDL_SetRenderDrawBlendMode(s->renderer, SDL_BLENDMODE_NONE);
|
||||||
|
|
||||||
|
SDL_RenderCopy(s->renderer, target, NULL, NULL);
|
||||||
|
SDL_DestroyTexture(target);
|
||||||
|
|
||||||
|
/* Update the screen! */
|
||||||
|
SDL_RenderPresent(s->renderer);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
Draw(DrawState *s)
|
Draw(DrawState *s)
|
||||||
{
|
{
|
||||||
|
@ -134,6 +216,7 @@ main(int argc, char *argv[])
|
||||||
SDL_Event event;
|
SDL_Event event;
|
||||||
int frames;
|
int frames;
|
||||||
Uint32 then, now;
|
Uint32 then, now;
|
||||||
|
SDL_bool test_composite = SDL_FALSE;
|
||||||
|
|
||||||
/* Initialize test framework */
|
/* Initialize test framework */
|
||||||
state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO);
|
state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO);
|
||||||
|
@ -145,8 +228,17 @@ main(int argc, char *argv[])
|
||||||
|
|
||||||
consumed = SDLTest_CommonArg(state, i);
|
consumed = SDLTest_CommonArg(state, i);
|
||||||
if (consumed == 0) {
|
if (consumed == 0) {
|
||||||
fprintf(stderr, "Usage: %s %s\n", argv[0], SDLTest_CommonUsage(state));
|
consumed = -1;
|
||||||
return 1;
|
if (SDL_strcasecmp(argv[i], "--composite") == 0) {
|
||||||
|
test_composite = SDL_TRUE;
|
||||||
|
consumed = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (consumed < 0) {
|
||||||
|
fprintf(stderr,
|
||||||
|
"Usage: %s %s [--composite]\n",
|
||||||
|
argv[0], SDLTest_CommonUsage(state));
|
||||||
|
quit(1);
|
||||||
}
|
}
|
||||||
i += consumed;
|
i += consumed;
|
||||||
}
|
}
|
||||||
|
@ -160,7 +252,11 @@ main(int argc, char *argv[])
|
||||||
|
|
||||||
drawstate->window = state->windows[i];
|
drawstate->window = state->windows[i];
|
||||||
drawstate->renderer = state->renderers[i];
|
drawstate->renderer = state->renderers[i];
|
||||||
drawstate->sprite = LoadTexture(drawstate->renderer, "icon.bmp", SDL_TRUE);
|
if (test_composite) {
|
||||||
|
drawstate->sprite = LoadTexture(drawstate->renderer, "icon-alpha.bmp", SDL_TRUE);
|
||||||
|
} else {
|
||||||
|
drawstate->sprite = LoadTexture(drawstate->renderer, "icon.bmp", SDL_TRUE);
|
||||||
|
}
|
||||||
drawstate->background = LoadTexture(drawstate->renderer, "sample.bmp", SDL_FALSE);
|
drawstate->background = LoadTexture(drawstate->renderer, "sample.bmp", SDL_FALSE);
|
||||||
if (!drawstate->sprite || !drawstate->background) {
|
if (!drawstate->sprite || !drawstate->background) {
|
||||||
quit(2);
|
quit(2);
|
||||||
|
@ -181,7 +277,11 @@ main(int argc, char *argv[])
|
||||||
SDLTest_CommonEvent(state, &event, &done);
|
SDLTest_CommonEvent(state, &event, &done);
|
||||||
}
|
}
|
||||||
for (i = 0; i < state->num_windows; ++i) {
|
for (i = 0; i < state->num_windows; ++i) {
|
||||||
Draw(&drawstates[i]);
|
if (test_composite) {
|
||||||
|
DrawComposite(&drawstates[i]);
|
||||||
|
} else {
|
||||||
|
Draw(&drawstates[i]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -56,7 +56,7 @@ quit(int rc)
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
LoadSprite(char *file)
|
LoadSprite(const char *file)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
SDL_Surface *temp;
|
SDL_Surface *temp;
|
||||||
|
@ -243,6 +243,7 @@ main(int argc, char *argv[])
|
||||||
SDL_Event event;
|
SDL_Event event;
|
||||||
Uint32 then, now, frames;
|
Uint32 then, now, frames;
|
||||||
Uint64 seed;
|
Uint64 seed;
|
||||||
|
const char *icon = "icon.bmp";
|
||||||
|
|
||||||
/* Initialize parameters */
|
/* Initialize parameters */
|
||||||
num_sprites = NUM_SPRITES;
|
num_sprites = NUM_SPRITES;
|
||||||
|
@ -292,11 +293,14 @@ main(int argc, char *argv[])
|
||||||
} else if (SDL_isdigit(*argv[i])) {
|
} else if (SDL_isdigit(*argv[i])) {
|
||||||
num_sprites = SDL_atoi(argv[i]);
|
num_sprites = SDL_atoi(argv[i]);
|
||||||
consumed = 1;
|
consumed = 1;
|
||||||
|
} else if (argv[i][0] != '-') {
|
||||||
|
icon = argv[i];
|
||||||
|
consumed = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (consumed < 0) {
|
if (consumed < 0) {
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"Usage: %s %s [--blend none|blend|add|mod] [--cyclecolor] [--cyclealpha] [--iterations N]\n",
|
"Usage: %s %s [--blend none|blend|add|mod] [--cyclecolor] [--cyclealpha] [--iterations N] [num_sprites] [icon.bmp]\n",
|
||||||
argv[0], SDLTest_CommonUsage(state));
|
argv[0], SDLTest_CommonUsage(state));
|
||||||
quit(1);
|
quit(1);
|
||||||
}
|
}
|
||||||
|
@ -318,7 +322,7 @@ main(int argc, char *argv[])
|
||||||
SDL_SetRenderDrawColor(renderer, 0xA0, 0xA0, 0xA0, 0xFF);
|
SDL_SetRenderDrawColor(renderer, 0xA0, 0xA0, 0xA0, 0xFF);
|
||||||
SDL_RenderClear(renderer);
|
SDL_RenderClear(renderer);
|
||||||
}
|
}
|
||||||
if (LoadSprite("icon.bmp") < 0) {
|
if (LoadSprite(icon) < 0) {
|
||||||
quit(2);
|
quit(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue