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

@ -1269,8 +1269,6 @@ Textures are created with SDL_SCALEMODE_LINEAR by default, and use SDL_BLENDMODE
SDL_QueryTexture() has been removed. The properties of the texture can be queried using SDL_PROP_TEXTURE_FORMAT_NUMBER, SDL_PROP_TEXTURE_ACCESS_NUMBER, SDL_PROP_TEXTURE_WIDTH_NUMBER, and SDL_PROP_TEXTURE_HEIGHT_NUMBER. A function SDL_GetTextureSize() has been added to get the size of the texture as floating point values. SDL_QueryTexture() has been removed. The properties of the texture can be queried using SDL_PROP_TEXTURE_FORMAT_NUMBER, SDL_PROP_TEXTURE_ACCESS_NUMBER, SDL_PROP_TEXTURE_WIDTH_NUMBER, and SDL_PROP_TEXTURE_HEIGHT_NUMBER. A function SDL_GetTextureSize() has been added to get the size of the texture as floating point values.
SDL_GetRenderDrawBlendMode(), SDL_GetTextureBlendMode(), and SDL_GetTextureScaleMode() have been changed to return the values directly instead of an int error code.
Mouse and touch events are no longer filtered to change their coordinates, instead you Mouse and touch events are no longer filtered to change their coordinates, instead you
can call SDL_ConvertEventToRenderCoordinates() to explicitly map event coordinates into can call SDL_ConvertEventToRenderCoordinates() to explicitly map event coordinates into
the rendering viewport. the rendering viewport.
@ -1714,8 +1712,6 @@ SDL_SetSurfaceColorKey() takes an SDL_bool to enable and disable colorkey. RLE a
SDL_SetSurfaceRLE() takes an SDL_bool to enable and disable RLE acceleration. SDL_SetSurfaceRLE() takes an SDL_bool to enable and disable RLE acceleration.
SDL_GetSurfaceBlendMode() and SDL_GetSurfaceColorKey() have been changed to return the values directly instead of an int error code.
The following functions have been renamed: The following functions have been renamed:
* SDL_BlitScaled() => SDL_BlitSurfaceScaled() * SDL_BlitScaled() => SDL_BlitSurfaceScaled()
* SDL_ConvertSurfaceFormat() => SDL_ConvertSurface() * SDL_ConvertSurfaceFormat() => SDL_ConvertSurface()

View file

@ -1006,13 +1006,15 @@ extern SDL_DECLSPEC int SDLCALL SDL_SetTextureBlendMode(SDL_Texture *texture, SD
* Get the blend mode used for texture copy operations. * Get the blend mode used for texture copy operations.
* *
* \param texture the texture to query. * \param texture the texture to query.
* \returns the current SDL_BlendMode. * \param blendMode a pointer filled in with the current SDL_BlendMode.
* \returns 0 on success or a negative error code on failure; call
* SDL_GetError() for more information.
* *
* \since This function is available since SDL 3.0.0. * \since This function is available since SDL 3.0.0.
* *
* \sa SDL_SetTextureBlendMode * \sa SDL_SetTextureBlendMode
*/ */
extern SDL_DECLSPEC SDL_BlendMode SDLCALL SDL_GetTextureBlendMode(SDL_Texture *texture); extern SDL_DECLSPEC int SDLCALL SDL_GetTextureBlendMode(SDL_Texture *texture, SDL_BlendMode *blendMode);
/** /**
* Set the scale mode used for texture scale operations. * Set the scale mode used for texture scale operations.
@ -1036,13 +1038,15 @@ extern SDL_DECLSPEC int SDLCALL SDL_SetTextureScaleMode(SDL_Texture *texture, SD
* Get the scale mode used for texture scale operations. * Get the scale mode used for texture scale operations.
* *
* \param texture the texture to query. * \param texture the texture to query.
* \returns the current scale mode. * \param scaleMode a pointer filled in with the current scale mode.
* \returns 0 on success or a negative error code on failure; call
* SDL_GetError() for more information.
* *
* \since This function is available since SDL 3.0.0. * \since This function is available since SDL 3.0.0.
* *
* \sa SDL_SetTextureScaleMode * \sa SDL_SetTextureScaleMode
*/ */
extern SDL_DECLSPEC SDL_ScaleMode SDLCALL SDL_GetTextureScaleMode(SDL_Texture *texture); extern SDL_DECLSPEC int SDLCALL SDL_GetTextureScaleMode(SDL_Texture *texture, SDL_ScaleMode *scaleMode);
/** /**
* Update the given texture rectangle with new pixel data. * Update the given texture rectangle with new pixel data.
@ -1637,13 +1641,15 @@ extern SDL_DECLSPEC int SDLCALL SDL_SetRenderColorScale(SDL_Renderer *renderer,
* Get the color scale used for render operations. * Get the color scale used for render operations.
* *
* \param renderer the rendering context. * \param renderer the rendering context.
* \returns the current color scale value. * \param scale a pointer filled in with the current color scale value.
* \returns 0 on success or a negative error code on failure; call
* SDL_GetError() for more information.
* *
* \since This function is available since SDL 3.0.0. * \since This function is available since SDL 3.0.0.
* *
* \sa SDL_SetRenderColorScale * \sa SDL_SetRenderColorScale
*/ */
extern SDL_DECLSPEC float SDLCALL SDL_GetRenderColorScale(SDL_Renderer *renderer); extern SDL_DECLSPEC int SDLCALL SDL_GetRenderColorScale(SDL_Renderer *renderer, float *scale);
/** /**
* Set the blend mode used for drawing operations (Fill and Line). * Set the blend mode used for drawing operations (Fill and Line).
@ -1665,13 +1671,15 @@ extern SDL_DECLSPEC int SDLCALL SDL_SetRenderDrawBlendMode(SDL_Renderer *rendere
* Get the blend mode used for drawing operations. * Get the blend mode used for drawing operations.
* *
* \param renderer the rendering context. * \param renderer the rendering context.
* \returns the current SDL_BlendMode. * \param blendMode a pointer filled in with the current SDL_BlendMode.
* \returns 0 on success or a negative error code on failure; call
* SDL_GetError() for more information.
* *
* \since This function is available since SDL 3.0.0. * \since This function is available since SDL 3.0.0.
* *
* \sa SDL_SetRenderDrawBlendMode * \sa SDL_SetRenderDrawBlendMode
*/ */
extern SDL_DECLSPEC SDL_BlendMode SDLCALL SDL_GetRenderDrawBlendMode(SDL_Renderer *renderer); extern SDL_DECLSPEC int SDLCALL SDL_GetRenderDrawBlendMode(SDL_Renderer *renderer, SDL_BlendMode *blendMode);
/** /**
* Clear the current rendering target with the drawing color. * Clear the current rendering target with the drawing color.

View file

@ -511,14 +511,16 @@ extern SDL_DECLSPEC SDL_bool SDLCALL SDL_SurfaceHasColorKey(SDL_Surface *surface
* If the surface doesn't have color key enabled this function returns -1. * If the surface doesn't have color key enabled this function returns -1.
* *
* \param surface the SDL_Surface structure to query. * \param surface the SDL_Surface structure to query.
* \returns the transparent pixel. * \param key a pointer filled in with the transparent pixel.
* \returns 0 on success or a negative error code on failure; call
* SDL_GetError() for more information.
* *
* \since This function is available since SDL 3.0.0. * \since This function is available since SDL 3.0.0.
* *
* \sa SDL_SetSurfaceColorKey * \sa SDL_SetSurfaceColorKey
* \sa SDL_SurfaceHasColorKey * \sa SDL_SurfaceHasColorKey
*/ */
extern SDL_DECLSPEC Uint32 SDLCALL SDL_GetSurfaceColorKey(SDL_Surface *surface); extern SDL_DECLSPEC int SDLCALL SDL_GetSurfaceColorKey(SDL_Surface *surface, Uint32 *key);
/** /**
* Set an additional color value multiplied into blit operations. * Set an additional color value multiplied into blit operations.
@ -618,13 +620,15 @@ extern SDL_DECLSPEC int SDLCALL SDL_SetSurfaceBlendMode(SDL_Surface *surface, SD
* Get the blend mode used for blit operations. * Get the blend mode used for blit operations.
* *
* \param surface the SDL_Surface structure to query. * \param surface the SDL_Surface structure to query.
* \returns the current SDL_BlendMode. * \param blendMode a pointer filled in with the current SDL_BlendMode.
* \returns 0 on success or a negative error code on failure; call
* SDL_GetError() for more information.
* *
* \since This function is available since SDL 3.0.0. * \since This function is available since SDL 3.0.0.
* *
* \sa SDL_SetSurfaceBlendMode * \sa SDL_SetSurfaceBlendMode
*/ */
extern SDL_DECLSPEC SDL_BlendMode SDLCALL SDL_GetSurfaceBlendMode(SDL_Surface *surface); extern SDL_DECLSPEC int SDLCALL SDL_GetSurfaceBlendMode(SDL_Surface *surface, SDL_BlendMode *blendMode);
/** /**
* Set the clipping rectangle for a surface. * Set the clipping rectangle for a surface.

View file

@ -433,8 +433,8 @@ SDL_DYNAPI_PROC(int,SDL_GetRectUnionFloat,(const SDL_FRect *a, const SDL_FRect *
SDL_DYNAPI_PROC(SDL_bool,SDL_GetRelativeMouseMode,(void),(),return) SDL_DYNAPI_PROC(SDL_bool,SDL_GetRelativeMouseMode,(void),(),return)
SDL_DYNAPI_PROC(SDL_MouseButtonFlags,SDL_GetRelativeMouseState,(float *a, float *b),(a,b),return) SDL_DYNAPI_PROC(SDL_MouseButtonFlags,SDL_GetRelativeMouseState,(float *a, float *b),(a,b),return)
SDL_DYNAPI_PROC(int,SDL_GetRenderClipRect,(SDL_Renderer *a, SDL_Rect *b),(a,b),return) SDL_DYNAPI_PROC(int,SDL_GetRenderClipRect,(SDL_Renderer *a, SDL_Rect *b),(a,b),return)
SDL_DYNAPI_PROC(float,SDL_GetRenderColorScale,(SDL_Renderer *a),(a),return) SDL_DYNAPI_PROC(int,SDL_GetRenderColorScale,(SDL_Renderer *a, float *b),(a,b),return)
SDL_DYNAPI_PROC(SDL_BlendMode,SDL_GetRenderDrawBlendMode,(SDL_Renderer *a),(a),return) SDL_DYNAPI_PROC(int,SDL_GetRenderDrawBlendMode,(SDL_Renderer *a, SDL_BlendMode *b),(a,b),return)
SDL_DYNAPI_PROC(int,SDL_GetRenderDrawColor,(SDL_Renderer *a, Uint8 *b, Uint8 *c, Uint8 *d, Uint8 *e),(a,b,c,d,e),return) SDL_DYNAPI_PROC(int,SDL_GetRenderDrawColor,(SDL_Renderer *a, Uint8 *b, Uint8 *c, Uint8 *d, Uint8 *e),(a,b,c,d,e),return)
SDL_DYNAPI_PROC(int,SDL_GetRenderDrawColorFloat,(SDL_Renderer *a, float *b, float *c, float *d, float *e),(a,b,c,d,e),return) SDL_DYNAPI_PROC(int,SDL_GetRenderDrawColorFloat,(SDL_Renderer *a, float *b, float *c, float *d, float *e),(a,b,c,d,e),return)
SDL_DYNAPI_PROC(const char*,SDL_GetRenderDriver,(int a),(a),return) SDL_DYNAPI_PROC(const char*,SDL_GetRenderDriver,(int a),(a),return)
@ -475,9 +475,9 @@ SDL_DYNAPI_PROC(int,SDL_GetStoragePathInfo,(SDL_Storage *a, const char *b, SDL_P
SDL_DYNAPI_PROC(Uint64,SDL_GetStorageSpaceRemaining,(SDL_Storage *a),(a),return) SDL_DYNAPI_PROC(Uint64,SDL_GetStorageSpaceRemaining,(SDL_Storage *a),(a),return)
SDL_DYNAPI_PROC(const char*,SDL_GetStringProperty,(SDL_PropertiesID a, const char *b, const char *c),(a,b,c),return) SDL_DYNAPI_PROC(const char*,SDL_GetStringProperty,(SDL_PropertiesID a, const char *b, const char *c),(a,b,c),return)
SDL_DYNAPI_PROC(int,SDL_GetSurfaceAlphaMod,(SDL_Surface *a, Uint8 *b),(a,b),return) SDL_DYNAPI_PROC(int,SDL_GetSurfaceAlphaMod,(SDL_Surface *a, Uint8 *b),(a,b),return)
SDL_DYNAPI_PROC(SDL_BlendMode,SDL_GetSurfaceBlendMode,(SDL_Surface *a),(a),return) SDL_DYNAPI_PROC(int,SDL_GetSurfaceBlendMode,(SDL_Surface *a, SDL_BlendMode *b),(a,b),return)
SDL_DYNAPI_PROC(int,SDL_GetSurfaceClipRect,(SDL_Surface *a, SDL_Rect *b),(a,b),return) SDL_DYNAPI_PROC(int,SDL_GetSurfaceClipRect,(SDL_Surface *a, SDL_Rect *b),(a,b),return)
SDL_DYNAPI_PROC(Uint32,SDL_GetSurfaceColorKey,(SDL_Surface *a),(a),return) SDL_DYNAPI_PROC(int,SDL_GetSurfaceColorKey,(SDL_Surface *a, Uint32 *b),(a,b),return)
SDL_DYNAPI_PROC(int,SDL_GetSurfaceColorMod,(SDL_Surface *a, Uint8 *b, Uint8 *c, Uint8 *d),(a,b,c,d),return) SDL_DYNAPI_PROC(int,SDL_GetSurfaceColorMod,(SDL_Surface *a, Uint8 *b, Uint8 *c, Uint8 *d),(a,b,c,d),return)
SDL_DYNAPI_PROC(SDL_Colorspace,SDL_GetSurfaceColorspace,(SDL_Surface *a),(a),return) SDL_DYNAPI_PROC(SDL_Colorspace,SDL_GetSurfaceColorspace,(SDL_Surface *a),(a),return)
SDL_DYNAPI_PROC(SDL_Palette*,SDL_GetSurfacePalette,(SDL_Surface *a),(a),return) SDL_DYNAPI_PROC(SDL_Palette*,SDL_GetSurfacePalette,(SDL_Surface *a),(a),return)
@ -488,11 +488,11 @@ SDL_DYNAPI_PROC(void*,SDL_GetTLS,(SDL_TLSID *a),(a),return)
SDL_DYNAPI_PROC(int,SDL_GetTextInputArea,(SDL_Window *a, SDL_Rect *b, int *c),(a,b,c),return) SDL_DYNAPI_PROC(int,SDL_GetTextInputArea,(SDL_Window *a, SDL_Rect *b, int *c),(a,b,c),return)
SDL_DYNAPI_PROC(int,SDL_GetTextureAlphaMod,(SDL_Texture *a, Uint8 *b),(a,b),return) SDL_DYNAPI_PROC(int,SDL_GetTextureAlphaMod,(SDL_Texture *a, Uint8 *b),(a,b),return)
SDL_DYNAPI_PROC(int,SDL_GetTextureAlphaModFloat,(SDL_Texture *a, float *b),(a,b),return) SDL_DYNAPI_PROC(int,SDL_GetTextureAlphaModFloat,(SDL_Texture *a, float *b),(a,b),return)
SDL_DYNAPI_PROC(SDL_BlendMode,SDL_GetTextureBlendMode,(SDL_Texture *a),(a),return) SDL_DYNAPI_PROC(int,SDL_GetTextureBlendMode,(SDL_Texture *a, SDL_BlendMode *b),(a,b),return)
SDL_DYNAPI_PROC(int,SDL_GetTextureColorMod,(SDL_Texture *a, Uint8 *b, Uint8 *c, Uint8 *d),(a,b,c,d),return) SDL_DYNAPI_PROC(int,SDL_GetTextureColorMod,(SDL_Texture *a, Uint8 *b, Uint8 *c, Uint8 *d),(a,b,c,d),return)
SDL_DYNAPI_PROC(int,SDL_GetTextureColorModFloat,(SDL_Texture *a, float *b, float *c, float *d),(a,b,c,d),return) SDL_DYNAPI_PROC(int,SDL_GetTextureColorModFloat,(SDL_Texture *a, float *b, float *c, float *d),(a,b,c,d),return)
SDL_DYNAPI_PROC(SDL_PropertiesID,SDL_GetTextureProperties,(SDL_Texture *a),(a),return) SDL_DYNAPI_PROC(SDL_PropertiesID,SDL_GetTextureProperties,(SDL_Texture *a),(a),return)
SDL_DYNAPI_PROC(SDL_ScaleMode,SDL_GetTextureScaleMode,(SDL_Texture *a),(a),return) SDL_DYNAPI_PROC(int,SDL_GetTextureScaleMode,(SDL_Texture *a, SDL_ScaleMode *b),(a,b),return)
SDL_DYNAPI_PROC(int,SDL_GetTextureSize,(SDL_Texture *a, float *b, float *c),(a,b,c),return) SDL_DYNAPI_PROC(int,SDL_GetTextureSize,(SDL_Texture *a, float *b, float *c),(a,b,c),return)
SDL_DYNAPI_PROC(SDL_ThreadID,SDL_GetThreadID,(SDL_Thread *a),(a),return) SDL_DYNAPI_PROC(SDL_ThreadID,SDL_GetThreadID,(SDL_Thread *a),(a),return)
SDL_DYNAPI_PROC(const char*,SDL_GetThreadName,(SDL_Thread *a),(a),return) SDL_DYNAPI_PROC(const char*,SDL_GetThreadName,(SDL_Thread *a),(a),return)

View file

@ -1641,6 +1641,7 @@ SDL_Texture *SDL_CreateTextureFromSurface(SDL_Renderer *renderer, SDL_Surface *s
{ {
Uint8 r, g, b, a; Uint8 r, g, b, a;
SDL_BlendMode blendMode;
SDL_GetSurfaceColorMod(surface, &r, &g, &b); SDL_GetSurfaceColorMod(surface, &r, &g, &b);
SDL_SetTextureColorMod(texture, 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 */ /* We converted to a texture with alpha format */
SDL_SetTextureBlendMode(texture, SDL_BLENDMODE_BLEND); SDL_SetTextureBlendMode(texture, SDL_BLENDMODE_BLEND);
} else { } else {
SDL_SetTextureBlendMode(texture, SDL_GetSurfaceBlendMode(surface)); SDL_GetSurfaceBlendMode(surface, &blendMode);
SDL_SetTextureBlendMode(texture, blendMode);
} }
} }
return texture; return texture;
@ -1812,11 +1814,14 @@ int SDL_SetTextureBlendMode(SDL_Texture *texture, SDL_BlendMode blendMode)
return 0; 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) int SDL_SetTextureScaleMode(SDL_Texture *texture, SDL_ScaleMode scaleMode)
@ -1835,11 +1840,14 @@ int SDL_SetTextureScaleMode(SDL_Texture *texture, SDL_ScaleMode scaleMode)
return 0; 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 #if SDL_HAVE_YUV
@ -3065,11 +3073,14 @@ int SDL_SetRenderColorScale(SDL_Renderer *renderer, float scale)
return 0; 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) int SDL_SetRenderDrawBlendMode(SDL_Renderer *renderer, SDL_BlendMode blendMode)
@ -3087,18 +3098,20 @@ int SDL_SetRenderDrawBlendMode(SDL_Renderer *renderer, SDL_BlendMode blendMode)
return 0; 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 SDL_RenderClear(SDL_Renderer *renderer)
{ {
int retval;
CHECK_RENDERER_MAGIC(renderer, -1); CHECK_RENDERER_MAGIC(renderer, -1);
retval = QueueCmdClear(renderer);
return QueueCmdClear(renderer); return retval;
} }
int SDL_RenderPoint(SDL_Renderer *renderer, float x, float y) 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; float r = 0, g = 0, b = 0, a = 0;
/* Save */ /* Save */
blendMode = SDL_GetRenderDrawBlendMode(renderer); SDL_GetRenderDrawBlendMode(renderer, &blendMode);
SDL_GetRenderDrawColorFloat(renderer, &r, &g, &b, &a); SDL_GetRenderDrawColorFloat(renderer, &r, &g, &b, &a);
if (texture) { if (texture) {

View file

@ -355,7 +355,7 @@ static int SW_RenderCopyEx(SDL_Renderer *renderer, SDL_Surface *surface, SDL_Tex
return -1; return -1;
} }
blendmode = SDL_GetSurfaceBlendMode(src); SDL_GetSurfaceBlendMode(src, &blendmode);
SDL_GetSurfaceAlphaMod(src, &alphaMod); SDL_GetSurfaceAlphaMod(src, &alphaMod);
SDL_GetSurfaceColorMod(src, &rMod, &gMod, &bMod); SDL_GetSurfaceColorMod(src, &rMod, &gMod, &bMod);
@ -841,7 +841,7 @@ static int SW_RunCommandQueue(SDL_Renderer *renderer, SDL_RenderCommand *cmd, vo
SDL_BlendMode blendmode; SDL_BlendMode blendmode;
Uint8 alphaMod, rMod, gMod, bMod; Uint8 alphaMod, rMod, gMod, bMod;
blendmode = SDL_GetSurfaceBlendMode(src); SDL_GetSurfaceBlendMode(src, &blendmode);
SDL_GetSurfaceAlphaMod(src, &alphaMod); SDL_GetSurfaceAlphaMod(src, &alphaMod);
SDL_GetSurfaceColorMod(src, &rMod, &gMod, &bMod); 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) 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) */ /* 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)) { if (SDL_SurfaceHasColorKey(src)) {
colorkey = SDL_GetSurfaceColorKey(src); if (SDL_GetSurfaceColorKey(src, &colorkey) == 0) {
colorKeyAvailable = SDL_TRUE; colorKeyAvailable = SDL_TRUE;
}
} }
/* This function requires a 32-bit surface or 8-bit surface with a colorkey */ /* This function requires a 32-bit surface or 8-bit surface with a colorkey */
is8bit = src->internal->format->bits_per_pixel == 8 && colorKeyAvailable; 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 */ /* Adjust for guard rows */
rz_dst->h = rect_dest->h; rz_dst->h = rect_dest->h;
blendmode = SDL_GetSurfaceBlendMode(src); SDL_GetSurfaceBlendMode(src, &blendmode);
if (colorKeyAvailable == SDL_TRUE) { if (colorKeyAvailable == SDL_TRUE) {
/* If available, the colorkey will be used to discard the pixels that are outside of the rotated area. */ /* 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); 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 */ /* TRIANGLE_GET_TEXTCOORD interpolates up to the max values included, so reduce by 1 */
{ {

View file

@ -515,13 +515,20 @@ SDL_bool SDL_SurfaceHasColorKey(SDL_Surface *surface)
return SDL_TRUE; return SDL_TRUE;
} }
Uint32 SDL_GetSurfaceColorKey(SDL_Surface *surface) int SDL_GetSurfaceColorKey(SDL_Surface *surface, Uint32 *key)
{ {
if (!SDL_SurfaceValid(surface)) { if (!SDL_SurfaceValid(surface)) {
return 0; return SDL_InvalidParamError("surface");
} }
return surface->internal->map.info.colorkey; if (!(surface->internal->map.info.flags & SDL_COPY_COLORKEY)) {
return SDL_SetError("Surface doesn't have a colorkey");
}
if (key) {
*key = surface->internal->map.info.colorkey;
}
return 0;
} }
/* This is a fairly slow function to switch from colorkey to alpha /* This is a fairly slow function to switch from colorkey to alpha
@ -739,39 +746,40 @@ int SDL_SetSurfaceBlendMode(SDL_Surface *surface, SDL_BlendMode blendMode)
return status; return status;
} }
SDL_BlendMode SDL_GetSurfaceBlendMode(SDL_Surface *surface) int SDL_GetSurfaceBlendMode(SDL_Surface *surface, SDL_BlendMode *blendMode)
{ {
SDL_BlendMode blendMode;
if (!SDL_SurfaceValid(surface)) { if (!SDL_SurfaceValid(surface)) {
SDL_InvalidParamError("surface"); return SDL_InvalidParamError("surface");
return SDL_BLENDMODE_INVALID; }
if (!blendMode) {
return 0;
} }
switch (surface->internal->map.info.flags & (SDL_COPY_BLEND | SDL_COPY_BLEND_PREMULTIPLIED | SDL_COPY_ADD | SDL_COPY_ADD_PREMULTIPLIED | SDL_COPY_MOD | SDL_COPY_MUL)) { switch (surface->internal->map.info.flags & (SDL_COPY_BLEND | SDL_COPY_BLEND_PREMULTIPLIED | SDL_COPY_ADD | SDL_COPY_ADD_PREMULTIPLIED | SDL_COPY_MOD | SDL_COPY_MUL)) {
case SDL_COPY_BLEND: case SDL_COPY_BLEND:
blendMode = SDL_BLENDMODE_BLEND; *blendMode = SDL_BLENDMODE_BLEND;
break; break;
case SDL_COPY_BLEND_PREMULTIPLIED: case SDL_COPY_BLEND_PREMULTIPLIED:
blendMode = SDL_BLENDMODE_BLEND_PREMULTIPLIED; *blendMode = SDL_BLENDMODE_BLEND_PREMULTIPLIED;
break; break;
case SDL_COPY_ADD: case SDL_COPY_ADD:
blendMode = SDL_BLENDMODE_ADD; *blendMode = SDL_BLENDMODE_ADD;
break; break;
case SDL_COPY_ADD_PREMULTIPLIED: case SDL_COPY_ADD_PREMULTIPLIED:
blendMode = SDL_BLENDMODE_ADD_PREMULTIPLIED; *blendMode = SDL_BLENDMODE_ADD_PREMULTIPLIED;
break; break;
case SDL_COPY_MOD: case SDL_COPY_MOD:
blendMode = SDL_BLENDMODE_MOD; *blendMode = SDL_BLENDMODE_MOD;
break; break;
case SDL_COPY_MUL: case SDL_COPY_MUL:
blendMode = SDL_BLENDMODE_MUL; *blendMode = SDL_BLENDMODE_MUL;
break; break;
default: default:
blendMode = SDL_BLENDMODE_NONE; *blendMode = SDL_BLENDMODE_NONE;
break; break;
} }
return blendMode; return 0;
} }
SDL_bool SDL_SetSurfaceClipRect(SDL_Surface *surface, const SDL_Rect *rect) SDL_bool SDL_SetSurfaceClipRect(SDL_Surface *surface, const SDL_Rect *rect)
@ -1147,7 +1155,7 @@ int SDL_BlitSurfaceUncheckedScaled(SDL_Surface *src, const SDL_Rect *srcrect,
/* Save source infos */ /* Save source infos */
SDL_GetSurfaceColorMod(src, &r, &g, &b); SDL_GetSurfaceColorMod(src, &r, &g, &b);
SDL_GetSurfaceAlphaMod(src, &alpha); SDL_GetSurfaceAlphaMod(src, &alpha);
blendMode = SDL_GetSurfaceBlendMode(src); SDL_GetSurfaceBlendMode(src, &blendMode);
srcrect2.x = srcrect->x; srcrect2.x = srcrect->x;
srcrect2.y = srcrect->y; srcrect2.y = srcrect->y;
srcrect2.w = srcrect->w; srcrect2.w = srcrect->w;

View file

@ -402,8 +402,9 @@ static void testBlendModeOperation(TestRenderOperation op, int mode, SDL_PixelFo
return; return;
} }
if (SDL_ISPIXELFORMAT_ALPHA(dst_format)) { if (SDL_ISPIXELFORMAT_ALPHA(dst_format)) {
SDL_BlendMode blendMode = SDL_GetTextureBlendMode(dst); SDL_BlendMode blendMode = SDL_BLENDMODE_NONE;
SDLTest_AssertCheck(blendMode != SDL_BLENDMODE_INVALID, "Verify result from SDL_GetTextureBlendMode(), expected: !SDL_BLENDMODE_INVALID, got: 0x%" SDL_PRIx32, blendMode); ret = SDL_GetTextureBlendMode(dst, &blendMode);
SDLTest_AssertCheck(ret == 0, "Verify result from SDL_GetTextureBlendMode(), expected: 0, got: %i", ret);
SDLTest_AssertCheck(blendMode == SDL_BLENDMODE_BLEND, "Verify alpha texture blend mode, expected %d, got %" SDL_PRIu32, SDL_BLENDMODE_BLEND, blendMode); SDLTest_AssertCheck(blendMode == SDL_BLENDMODE_BLEND, "Verify alpha texture blend mode, expected %d, got %" SDL_PRIu32, SDL_BLENDMODE_BLEND, blendMode);
} }

View file

@ -54,8 +54,8 @@ static void surfaceSetUp(void *arg)
/* Disable blend mode for target surface */ /* Disable blend mode for target surface */
result = SDL_SetSurfaceBlendMode(testSurface, blendMode); result = SDL_SetSurfaceBlendMode(testSurface, blendMode);
SDLTest_AssertCheck(result == 0, "Validate result from SDL_SetSurfaceBlendMode, expected: 0, got: %i", result); SDLTest_AssertCheck(result == 0, "Validate result from SDL_SetSurfaceBlendMode, expected: 0, got: %i", result);
currentBlendMode = SDL_GetSurfaceBlendMode(testSurface); result = SDL_GetSurfaceBlendMode(testSurface, &currentBlendMode);
SDLTest_AssertCheck(currentBlendMode != SDL_BLENDMODE_INVALID, "Validate result from SDL_GetSurfaceBlendMode, expected: !SDL_BLENDMODE_INVALID, got: 0x%" SDL_PRIx32, currentBlendMode); SDLTest_AssertCheck(result == 0, "Validate result from SDL_GetSurfaceBlendMode, expected: 0, got: %i", result);
SDLTest_AssertCheck(currentBlendMode == blendMode, "Validate blendMode, expected: %" SDL_PRIu32 ", got: %" SDL_PRIu32, blendMode, currentBlendMode); SDLTest_AssertCheck(currentBlendMode == blendMode, "Validate blendMode, expected: %" SDL_PRIu32 ", got: %" SDL_PRIu32, blendMode, currentBlendMode);
} }
} }

View file

@ -332,7 +332,7 @@ SDL_GL_LoadTexture(SDL_Surface *surface, GLfloat *texcoord)
} }
/* Save the alpha blending attributes */ /* Save the alpha blending attributes */
saved_mode = SDL_GetSurfaceBlendMode(surface); SDL_GetSurfaceBlendMode(surface, &saved_mode);
SDL_SetSurfaceBlendMode(surface, SDL_BLENDMODE_NONE); SDL_SetSurfaceBlendMode(surface, SDL_BLENDMODE_NONE);
/* Copy the surface into the GL texture image */ /* Copy the surface into the GL texture image */