Applying these changes to external code doesn't actually improve anything, and within the context of the other Get* functions for renderers and surfaces, these stand out as outliers, so I'm going to back this change out.
This commit is contained in:
Sam Lantinga
2024-07-17 09:40:25 -07:00
parent b3df46e4bc
commit 5f5e91eab6
12 changed files with 102 additions and 67 deletions

View File

@@ -1641,6 +1641,7 @@ SDL_Texture *SDL_CreateTextureFromSurface(SDL_Renderer *renderer, SDL_Surface *s
{
Uint8 r, g, b, a;
SDL_BlendMode blendMode;
SDL_GetSurfaceColorMod(surface, &r, &g, &b);
SDL_SetTextureColorMod(texture, r, g, b);
@@ -1652,7 +1653,8 @@ SDL_Texture *SDL_CreateTextureFromSurface(SDL_Renderer *renderer, SDL_Surface *s
/* We converted to a texture with alpha format */
SDL_SetTextureBlendMode(texture, SDL_BLENDMODE_BLEND);
} else {
SDL_SetTextureBlendMode(texture, SDL_GetSurfaceBlendMode(surface));
SDL_GetSurfaceBlendMode(surface, &blendMode);
SDL_SetTextureBlendMode(texture, blendMode);
}
}
return texture;
@@ -1812,11 +1814,14 @@ int SDL_SetTextureBlendMode(SDL_Texture *texture, SDL_BlendMode blendMode)
return 0;
}
SDL_BlendMode SDL_GetTextureBlendMode(SDL_Texture *texture)
int SDL_GetTextureBlendMode(SDL_Texture *texture, SDL_BlendMode *blendMode)
{
CHECK_TEXTURE_MAGIC(texture, SDL_BLENDMODE_INVALID);
CHECK_TEXTURE_MAGIC(texture, -1);
return texture->blendMode;
if (blendMode) {
*blendMode = texture->blendMode;
}
return 0;
}
int SDL_SetTextureScaleMode(SDL_Texture *texture, SDL_ScaleMode scaleMode)
@@ -1835,11 +1840,14 @@ int SDL_SetTextureScaleMode(SDL_Texture *texture, SDL_ScaleMode scaleMode)
return 0;
}
SDL_ScaleMode SDL_GetTextureScaleMode(SDL_Texture *texture)
int SDL_GetTextureScaleMode(SDL_Texture *texture, SDL_ScaleMode *scaleMode)
{
CHECK_TEXTURE_MAGIC(texture, SDL_SCALEMODE_LINEAR);
CHECK_TEXTURE_MAGIC(texture, -1);
return texture->scaleMode;
if (scaleMode) {
*scaleMode = texture->scaleMode;
}
return 0;
}
#if SDL_HAVE_YUV
@@ -3065,11 +3073,14 @@ int SDL_SetRenderColorScale(SDL_Renderer *renderer, float scale)
return 0;
}
float SDL_GetRenderColorScale(SDL_Renderer *renderer)
int SDL_GetRenderColorScale(SDL_Renderer *renderer, float *scale)
{
CHECK_RENDERER_MAGIC(renderer, 1.0f);
CHECK_RENDERER_MAGIC(renderer, -1);
return renderer->color_scale / renderer->SDR_white_point;
if (scale) {
*scale = renderer->color_scale / renderer->SDR_white_point;
}
return 0;
}
int SDL_SetRenderDrawBlendMode(SDL_Renderer *renderer, SDL_BlendMode blendMode)
@@ -3087,18 +3098,20 @@ int SDL_SetRenderDrawBlendMode(SDL_Renderer *renderer, SDL_BlendMode blendMode)
return 0;
}
SDL_BlendMode SDL_GetRenderDrawBlendMode(SDL_Renderer *renderer)
int SDL_GetRenderDrawBlendMode(SDL_Renderer *renderer, SDL_BlendMode *blendMode)
{
CHECK_RENDERER_MAGIC(renderer, SDL_BLENDMODE_INVALID);
CHECK_RENDERER_MAGIC(renderer, -1);
return renderer->blendMode;
*blendMode = renderer->blendMode;
return 0;
}
int SDL_RenderClear(SDL_Renderer *renderer)
{
int retval;
CHECK_RENDERER_MAGIC(renderer, -1);
return QueueCmdClear(renderer);
retval = QueueCmdClear(renderer);
return retval;
}
int SDL_RenderPoint(SDL_Renderer *renderer, float x, float y)
@@ -3965,7 +3978,7 @@ static int SDLCALL SDL_SW_RenderGeometryRaw(SDL_Renderer *renderer,
float r = 0, g = 0, b = 0, a = 0;
/* Save */
blendMode = SDL_GetRenderDrawBlendMode(renderer);
SDL_GetRenderDrawBlendMode(renderer, &blendMode);
SDL_GetRenderDrawColorFloat(renderer, &r, &g, &b, &a);
if (texture) {

View File

@@ -355,7 +355,7 @@ static int SW_RenderCopyEx(SDL_Renderer *renderer, SDL_Surface *surface, SDL_Tex
return -1;
}
blendmode = SDL_GetSurfaceBlendMode(src);
SDL_GetSurfaceBlendMode(src, &blendmode);
SDL_GetSurfaceAlphaMod(src, &alphaMod);
SDL_GetSurfaceColorMod(src, &rMod, &gMod, &bMod);
@@ -841,7 +841,7 @@ static int SW_RunCommandQueue(SDL_Renderer *renderer, SDL_RenderCommand *cmd, vo
SDL_BlendMode blendmode;
Uint8 alphaMod, rMod, gMod, bMod;
blendmode = SDL_GetSurfaceBlendMode(src);
SDL_GetSurfaceBlendMode(src, &blendmode);
SDL_GetSurfaceAlphaMod(src, &alphaMod);
SDL_GetSurfaceColorMod(src, &rMod, &gMod, &bMod);

View File

@@ -78,7 +78,11 @@ Returns colorkey info for a surface
*/
static Uint32 get_colorkey(SDL_Surface *src)
{
return SDL_GetSurfaceColorKey(src);
Uint32 key = 0;
if (SDL_SurfaceHasColorKey(src)) {
SDL_GetSurfaceColorKey(src, &key);
}
return key;
}
/* rotate (sx, sy) by (angle, center) into (dx, dy) */
@@ -497,8 +501,9 @@ SDL_Surface *SDLgfx_rotateSurface(SDL_Surface *src, double angle, int smooth, in
}
if (SDL_SurfaceHasColorKey(src)) {
colorkey = SDL_GetSurfaceColorKey(src);
colorKeyAvailable = SDL_TRUE;
if (SDL_GetSurfaceColorKey(src, &colorkey) == 0) {
colorKeyAvailable = SDL_TRUE;
}
}
/* This function requires a 32-bit surface or 8-bit surface with a colorkey */
is8bit = src->internal->format->bits_per_pixel == 8 && colorKeyAvailable;
@@ -531,7 +536,7 @@ SDL_Surface *SDLgfx_rotateSurface(SDL_Surface *src, double angle, int smooth, in
/* Adjust for guard rows */
rz_dst->h = rect_dest->h;
blendmode = SDL_GetSurfaceBlendMode(src);
SDL_GetSurfaceBlendMode(src, &blendmode);
if (colorKeyAvailable == SDL_TRUE) {
/* If available, the colorkey will be used to discard the pixels that are outside of the rotated area. */

View File

@@ -524,7 +524,7 @@ int SDL_SW_BlitTriangle(
bounding_rect_fixedpoint(d0, d1, d2, &dstrect);
blend = SDL_GetSurfaceBlendMode(src);
SDL_GetSurfaceBlendMode(src, &blend);
/* TRIANGLE_GET_TEXTCOORD interpolates up to the max values included, so reduce by 1 */
{