diff --git a/docs/README-migration.md b/docs/README-migration.md index 97f1f255a..693c3e963 100644 --- a/docs/README-migration.md +++ b/docs/README-migration.md @@ -1269,6 +1269,8 @@ 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_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 can call SDL_ConvertEventToRenderCoordinates() to explicitly map event coordinates into the rendering viewport. @@ -1712,6 +1714,8 @@ 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_GetSurfaceBlendMode() and SDL_GetSurfaceColorKey() have been changed to return the values directly instead of an int error code. + The following functions have been renamed: * SDL_BlitScaled() => SDL_BlitSurfaceScaled() * SDL_ConvertSurfaceFormat() => SDL_ConvertSurface() @@ -1749,8 +1753,6 @@ The following symbols have been renamed: SDL_WindowsMessageHook has changed signatures so the message may be modified and it can block further message processing. -SDL_GetAndroidExternalStorageState() takes the state as an output parameter and returns 0 if the function succeeds or a negative error code if there was an error. - SDL_RequestAndroidPermission is no longer a blocking call; the caller now provides a callback function that fires when a response is available. SDL_iPhoneSetAnimationCallback() and SDL_iPhoneSetEventPump() have been renamed to SDL_SetiOSAnimationCallback() and SDL_SetiOSEventPump(), respectively. SDL2 has had macros to provide this new name with the old symbol since the introduction of the iPad, but now the correctly-named symbol is the only option. diff --git a/include/SDL3/SDL_render.h b/include/SDL3/SDL_render.h index 6580f575b..6bd99f4d9 100644 --- a/include/SDL3/SDL_render.h +++ b/include/SDL3/SDL_render.h @@ -1006,15 +1006,13 @@ extern SDL_DECLSPEC int SDLCALL SDL_SetTextureBlendMode(SDL_Texture *texture, SD * Get the blend mode used for texture copy operations. * * \param texture the texture to query. - * \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. + * \returns the current SDL_BlendMode. * * \since This function is available since SDL 3.0.0. * * \sa SDL_SetTextureBlendMode */ -extern SDL_DECLSPEC int SDLCALL SDL_GetTextureBlendMode(SDL_Texture *texture, SDL_BlendMode *blendMode); +extern SDL_DECLSPEC SDL_BlendMode SDLCALL SDL_GetTextureBlendMode(SDL_Texture *texture); /** * Set the scale mode used for texture scale operations. @@ -1038,15 +1036,13 @@ extern SDL_DECLSPEC int SDLCALL SDL_SetTextureScaleMode(SDL_Texture *texture, SD * Get the scale mode used for texture scale operations. * * \param texture the texture to query. - * \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. + * \returns the current scale mode. * * \since This function is available since SDL 3.0.0. * * \sa SDL_SetTextureScaleMode */ -extern SDL_DECLSPEC int SDLCALL SDL_GetTextureScaleMode(SDL_Texture *texture, SDL_ScaleMode *scaleMode); +extern SDL_DECLSPEC SDL_ScaleMode SDLCALL SDL_GetTextureScaleMode(SDL_Texture *texture); /** * Update the given texture rectangle with new pixel data. @@ -1641,15 +1637,13 @@ extern SDL_DECLSPEC int SDLCALL SDL_SetRenderColorScale(SDL_Renderer *renderer, * Get the color scale used for render operations. * * \param renderer the rendering context. - * \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. + * \returns the current color scale value. * * \since This function is available since SDL 3.0.0. * * \sa SDL_SetRenderColorScale */ -extern SDL_DECLSPEC int SDLCALL SDL_GetRenderColorScale(SDL_Renderer *renderer, float *scale); +extern SDL_DECLSPEC float SDLCALL SDL_GetRenderColorScale(SDL_Renderer *renderer); /** * Set the blend mode used for drawing operations (Fill and Line). @@ -1671,15 +1665,13 @@ extern SDL_DECLSPEC int SDLCALL SDL_SetRenderDrawBlendMode(SDL_Renderer *rendere * Get the blend mode used for drawing operations. * * \param renderer the rendering context. - * \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. + * \returns the current SDL_BlendMode. * * \since This function is available since SDL 3.0.0. * * \sa SDL_SetRenderDrawBlendMode */ -extern SDL_DECLSPEC int SDLCALL SDL_GetRenderDrawBlendMode(SDL_Renderer *renderer, SDL_BlendMode *blendMode); +extern SDL_DECLSPEC SDL_BlendMode SDLCALL SDL_GetRenderDrawBlendMode(SDL_Renderer *renderer); /** * Clear the current rendering target with the drawing color. diff --git a/include/SDL3/SDL_surface.h b/include/SDL3/SDL_surface.h index 6998b1299..e14de0f25 100644 --- a/include/SDL3/SDL_surface.h +++ b/include/SDL3/SDL_surface.h @@ -511,16 +511,14 @@ extern SDL_DECLSPEC SDL_bool SDLCALL SDL_SurfaceHasColorKey(SDL_Surface *surface * If the surface doesn't have color key enabled this function returns -1. * * \param surface the SDL_Surface structure to query. - * \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. + * \returns the transparent pixel. * * \since This function is available since SDL 3.0.0. * * \sa SDL_SetSurfaceColorKey * \sa SDL_SurfaceHasColorKey */ -extern SDL_DECLSPEC int SDLCALL SDL_GetSurfaceColorKey(SDL_Surface *surface, Uint32 *key); +extern SDL_DECLSPEC Uint32 SDLCALL SDL_GetSurfaceColorKey(SDL_Surface *surface); /** * Set an additional color value multiplied into blit operations. @@ -620,15 +618,13 @@ extern SDL_DECLSPEC int SDLCALL SDL_SetSurfaceBlendMode(SDL_Surface *surface, SD * Get the blend mode used for blit operations. * * \param surface the SDL_Surface structure to query. - * \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. + * \returns the current SDL_BlendMode. * * \since This function is available since SDL 3.0.0. * * \sa SDL_SetSurfaceBlendMode */ -extern SDL_DECLSPEC int SDLCALL SDL_GetSurfaceBlendMode(SDL_Surface *surface, SDL_BlendMode *blendMode); +extern SDL_DECLSPEC SDL_BlendMode SDLCALL SDL_GetSurfaceBlendMode(SDL_Surface *surface); /** * Set the clipping rectangle for a surface. diff --git a/include/SDL3/SDL_system.h b/include/SDL3/SDL_system.h index 3d9c9d979..4c4a963ea 100644 --- a/include/SDL3/SDL_system.h +++ b/include/SDL3/SDL_system.h @@ -426,16 +426,14 @@ extern SDL_DECLSPEC const char *SDLCALL SDL_GetAndroidInternalStoragePath(void); * * If external storage is currently unavailable, this will return 0. * - * \param state filled with the current state of external storage. 0 if + * \returns the current state of external storage, or 0 if * external storage is currently unavailable. - * \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. * * \sa SDL_GetAndroidExternalStoragePath */ -extern SDL_DECLSPEC int SDLCALL SDL_GetAndroidExternalStorageState(Uint32 *state); +extern SDL_DECLSPEC Uint32 SDLCALL SDL_GetAndroidExternalStorageState(void); /** * Get the path used for external storage for this Android application. diff --git a/src/core/SDL_core_unsupported.c b/src/core/SDL_core_unsupported.c index 883c50452..da1c14327 100644 --- a/src/core/SDL_core_unsupported.c +++ b/src/core/SDL_core_unsupported.c @@ -142,11 +142,11 @@ const char* SDL_GetAndroidExternalStoragePath() return NULL; } -SDL_DECLSPEC int SDLCALL SDL_GetAndroidExternalStorageState(Uint32 *state); -int SDL_GetAndroidExternalStorageState(Uint32 *state) +SDL_DECLSPEC Uint32 SDLCALL SDL_GetAndroidExternalStorageState(void); +Uint32 SDL_GetAndroidExternalStorageState(void) { - (void)state; - return SDL_Unsupported(); + SDL_Unsupported(); + return 0; } SDL_DECLSPEC const char *SDLCALL SDL_GetAndroidInternalStoragePath(void); const char *SDL_GetAndroidInternalStoragePath(void) diff --git a/src/core/android/SDL_android.c b/src/core/android/SDL_android.c index d0c4e1a04..3d1e46b68 100644 --- a/src/core/android/SDL_android.c +++ b/src/core/android/SDL_android.c @@ -2507,22 +2507,19 @@ const char *SDL_GetAndroidInternalStoragePath(void) return s_AndroidInternalFilesPath; } -int SDL_GetAndroidExternalStorageState(Uint32 *state) +Uint32 SDL_GetAndroidExternalStorageState(void) { struct LocalReferenceHolder refs = LocalReferenceHolder_Setup(__FUNCTION__); jmethodID mid; jclass cls; jstring stateString; const char *state_string; - int stateFlags; + Uint32 stateFlags; JNIEnv *env = Android_JNI_GetEnv(); if (!LocalReferenceHolder_Init(&refs, env)) { LocalReferenceHolder_Cleanup(&refs); - if (state) { - *state = 0; - } - return -1; + return 0; } cls = (*env)->FindClass(env, "android/os/Environment"); @@ -2546,10 +2543,8 @@ int SDL_GetAndroidExternalStorageState(Uint32 *state) (*env)->ReleaseStringUTFChars(env, stateString, state_string); LocalReferenceHolder_Cleanup(&refs); - if (state) { - *state = stateFlags; - } - return 0; + + return stateFlags; } // this caches a string until the process ends, so there's no need to use SDL_FreeLater. diff --git a/src/dynapi/SDL_dynapi_procs.h b/src/dynapi/SDL_dynapi_procs.h index c33d2779b..e2cedea07 100644 --- a/src/dynapi/SDL_dynapi_procs.h +++ b/src/dynapi/SDL_dynapi_procs.h @@ -196,7 +196,7 @@ SDL_DYNAPI_PROC(SDL_bool,SDL_GamepadSensorEnabled,(SDL_Gamepad *a, SDL_SensorTyp SDL_DYNAPI_PROC(void*,SDL_GetAndroidActivity,(void),(),return) SDL_DYNAPI_PROC(const char*,SDL_GetAndroidCachePath,(void),(),return) SDL_DYNAPI_PROC(const char*,SDL_GetAndroidExternalStoragePath,(void),(),return) -SDL_DYNAPI_PROC(int,SDL_GetAndroidExternalStorageState,(Uint32 *a),(a),return) +SDL_DYNAPI_PROC(Uint32,SDL_GetAndroidExternalStorageState,(void),(),return) SDL_DYNAPI_PROC(const char*,SDL_GetAndroidInternalStoragePath,(void),(),return) SDL_DYNAPI_PROC(void*,SDL_GetAndroidJNIEnv,(void),(),return) SDL_DYNAPI_PROC(int,SDL_GetAndroidSDKVersion,(void),(),return) @@ -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_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_GetRenderColorScale,(SDL_Renderer *a, float *b),(a,b),return) -SDL_DYNAPI_PROC(int,SDL_GetRenderDrawBlendMode,(SDL_Renderer *a, SDL_BlendMode *b),(a,b),return) +SDL_DYNAPI_PROC(float,SDL_GetRenderColorScale,(SDL_Renderer *a),(a),return) +SDL_DYNAPI_PROC(SDL_BlendMode,SDL_GetRenderDrawBlendMode,(SDL_Renderer *a),(a),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(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(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_GetSurfaceBlendMode,(SDL_Surface *a, SDL_BlendMode *b),(a,b),return) +SDL_DYNAPI_PROC(SDL_BlendMode,SDL_GetSurfaceBlendMode,(SDL_Surface *a),(a),return) SDL_DYNAPI_PROC(int,SDL_GetSurfaceClipRect,(SDL_Surface *a, SDL_Rect *b),(a,b),return) -SDL_DYNAPI_PROC(int,SDL_GetSurfaceColorKey,(SDL_Surface *a, Uint32 *b),(a,b),return) +SDL_DYNAPI_PROC(Uint32,SDL_GetSurfaceColorKey,(SDL_Surface *a),(a),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_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_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_GetTextureBlendMode,(SDL_Texture *a, SDL_BlendMode *b),(a,b),return) +SDL_DYNAPI_PROC(SDL_BlendMode,SDL_GetTextureBlendMode,(SDL_Texture *a),(a),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(SDL_PropertiesID,SDL_GetTextureProperties,(SDL_Texture *a),(a),return) -SDL_DYNAPI_PROC(int,SDL_GetTextureScaleMode,(SDL_Texture *a, SDL_ScaleMode *b),(a,b),return) +SDL_DYNAPI_PROC(SDL_ScaleMode,SDL_GetTextureScaleMode,(SDL_Texture *a),(a),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(const char*,SDL_GetThreadName,(SDL_Thread *a),(a),return) diff --git a/src/render/SDL_render.c b/src/render/SDL_render.c index ed049a5d1..6fb1a0ebf 100644 --- a/src/render/SDL_render.c +++ b/src/render/SDL_render.c @@ -1641,7 +1641,6 @@ 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); @@ -1653,8 +1652,7 @@ 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_GetSurfaceBlendMode(surface, &blendMode); - SDL_SetTextureBlendMode(texture, blendMode); + SDL_SetTextureBlendMode(texture, SDL_GetSurfaceBlendMode(surface)); } } return texture; @@ -1799,6 +1797,10 @@ int SDL_SetTextureBlendMode(SDL_Texture *texture, SDL_BlendMode blendMode) CHECK_TEXTURE_MAGIC(texture, -1); + if (blendMode == SDL_BLENDMODE_INVALID) { + return SDL_InvalidParamError("blendMode"); + } + renderer = texture->renderer; if (!IsSupportedBlendMode(renderer, blendMode)) { return SDL_Unsupported(); @@ -1810,14 +1812,11 @@ int SDL_SetTextureBlendMode(SDL_Texture *texture, SDL_BlendMode blendMode) return 0; } -int SDL_GetTextureBlendMode(SDL_Texture *texture, SDL_BlendMode *blendMode) +SDL_BlendMode SDL_GetTextureBlendMode(SDL_Texture *texture) { - CHECK_TEXTURE_MAGIC(texture, -1); + CHECK_TEXTURE_MAGIC(texture, SDL_BLENDMODE_INVALID); - if (blendMode) { - *blendMode = texture->blendMode; - } - return 0; + return texture->blendMode; } int SDL_SetTextureScaleMode(SDL_Texture *texture, SDL_ScaleMode scaleMode) @@ -1836,14 +1835,11 @@ int SDL_SetTextureScaleMode(SDL_Texture *texture, SDL_ScaleMode scaleMode) return 0; } -int SDL_GetTextureScaleMode(SDL_Texture *texture, SDL_ScaleMode *scaleMode) +SDL_ScaleMode SDL_GetTextureScaleMode(SDL_Texture *texture) { - CHECK_TEXTURE_MAGIC(texture, -1); + CHECK_TEXTURE_MAGIC(texture, SDL_SCALEMODE_LINEAR); - if (scaleMode) { - *scaleMode = texture->scaleMode; - } - return 0; + return texture->scaleMode; } #if SDL_HAVE_YUV @@ -3069,20 +3065,21 @@ int SDL_SetRenderColorScale(SDL_Renderer *renderer, float scale) return 0; } -int SDL_GetRenderColorScale(SDL_Renderer *renderer, float *scale) +float SDL_GetRenderColorScale(SDL_Renderer *renderer) { - CHECK_RENDERER_MAGIC(renderer, -1); + CHECK_RENDERER_MAGIC(renderer, 1.0f); - if (scale) { - *scale = renderer->color_scale / renderer->SDR_white_point; - } - return 0; + return renderer->color_scale / renderer->SDR_white_point; } int SDL_SetRenderDrawBlendMode(SDL_Renderer *renderer, SDL_BlendMode blendMode) { CHECK_RENDERER_MAGIC(renderer, -1); + if (blendMode == SDL_BLENDMODE_INVALID) { + return SDL_InvalidParamError("blendMode"); + } + if (!IsSupportedBlendMode(renderer, blendMode)) { return SDL_Unsupported(); } @@ -3090,20 +3087,18 @@ int SDL_SetRenderDrawBlendMode(SDL_Renderer *renderer, SDL_BlendMode blendMode) return 0; } -int SDL_GetRenderDrawBlendMode(SDL_Renderer *renderer, SDL_BlendMode *blendMode) +SDL_BlendMode SDL_GetRenderDrawBlendMode(SDL_Renderer *renderer) { - CHECK_RENDERER_MAGIC(renderer, -1); + CHECK_RENDERER_MAGIC(renderer, SDL_BLENDMODE_INVALID); - *blendMode = renderer->blendMode; - return 0; + return renderer->blendMode; } int SDL_RenderClear(SDL_Renderer *renderer) { - int retval; CHECK_RENDERER_MAGIC(renderer, -1); - retval = QueueCmdClear(renderer); - return retval; + + return QueueCmdClear(renderer); } int SDL_RenderPoint(SDL_Renderer *renderer, float x, float y) @@ -3970,7 +3965,7 @@ static int SDLCALL SDL_SW_RenderGeometryRaw(SDL_Renderer *renderer, float r = 0, g = 0, b = 0, a = 0; /* Save */ - SDL_GetRenderDrawBlendMode(renderer, &blendMode); + blendMode = SDL_GetRenderDrawBlendMode(renderer); SDL_GetRenderDrawColorFloat(renderer, &r, &g, &b, &a); if (texture) { diff --git a/src/render/software/SDL_render_sw.c b/src/render/software/SDL_render_sw.c index 4e462e75d..4df9ea7ef 100644 --- a/src/render/software/SDL_render_sw.c +++ b/src/render/software/SDL_render_sw.c @@ -355,7 +355,7 @@ static int SW_RenderCopyEx(SDL_Renderer *renderer, SDL_Surface *surface, SDL_Tex return -1; } - SDL_GetSurfaceBlendMode(src, &blendmode); + blendmode = SDL_GetSurfaceBlendMode(src); 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; - SDL_GetSurfaceBlendMode(src, &blendmode); + blendmode = SDL_GetSurfaceBlendMode(src); SDL_GetSurfaceAlphaMod(src, &alphaMod); SDL_GetSurfaceColorMod(src, &rMod, &gMod, &bMod); diff --git a/src/render/software/SDL_rotate.c b/src/render/software/SDL_rotate.c index 02382a8e6..30ff1e95b 100644 --- a/src/render/software/SDL_rotate.c +++ b/src/render/software/SDL_rotate.c @@ -78,11 +78,7 @@ Returns colorkey info for a surface */ static Uint32 get_colorkey(SDL_Surface *src) { - Uint32 key = 0; - if (SDL_SurfaceHasColorKey(src)) { - SDL_GetSurfaceColorKey(src, &key); - } - return key; + return SDL_GetSurfaceColorKey(src); } /* rotate (sx, sy) by (angle, center) into (dx, dy) */ @@ -501,9 +497,8 @@ SDL_Surface *SDLgfx_rotateSurface(SDL_Surface *src, double angle, int smooth, in } if (SDL_SurfaceHasColorKey(src)) { - if (SDL_GetSurfaceColorKey(src, &colorkey) == 0) { - colorKeyAvailable = SDL_TRUE; - } + colorkey = SDL_GetSurfaceColorKey(src); + 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; @@ -536,7 +531,7 @@ SDL_Surface *SDLgfx_rotateSurface(SDL_Surface *src, double angle, int smooth, in /* Adjust for guard rows */ rz_dst->h = rect_dest->h; - SDL_GetSurfaceBlendMode(src, &blendmode); + blendmode = SDL_GetSurfaceBlendMode(src); if (colorKeyAvailable == SDL_TRUE) { /* If available, the colorkey will be used to discard the pixels that are outside of the rotated area. */ diff --git a/src/render/software/SDL_triangle.c b/src/render/software/SDL_triangle.c index fd4350d06..048859f54 100644 --- a/src/render/software/SDL_triangle.c +++ b/src/render/software/SDL_triangle.c @@ -524,7 +524,7 @@ int SDL_SW_BlitTriangle( bounding_rect_fixedpoint(d0, d1, d2, &dstrect); - SDL_GetSurfaceBlendMode(src, &blend); + blend = SDL_GetSurfaceBlendMode(src); /* TRIANGLE_GET_TEXTCOORD interpolates up to the max values included, so reduce by 1 */ { diff --git a/src/video/SDL_surface.c b/src/video/SDL_surface.c index 9a6a7bce9..d973aca69 100644 --- a/src/video/SDL_surface.c +++ b/src/video/SDL_surface.c @@ -515,20 +515,13 @@ SDL_bool SDL_SurfaceHasColorKey(SDL_Surface *surface) return SDL_TRUE; } -int SDL_GetSurfaceColorKey(SDL_Surface *surface, Uint32 *key) +Uint32 SDL_GetSurfaceColorKey(SDL_Surface *surface) { if (!SDL_SurfaceValid(surface)) { - return SDL_InvalidParamError("surface"); + return 0; } - 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; + return surface->internal->map.info.colorkey; } /* This is a fairly slow function to switch from colorkey to alpha @@ -706,6 +699,10 @@ int SDL_SetSurfaceBlendMode(SDL_Surface *surface, SDL_BlendMode blendMode) return SDL_InvalidParamError("surface"); } + if (blendMode == SDL_BLENDMODE_INVALID) { + return SDL_InvalidParamError("blendMode"); + } + status = 0; flags = surface->internal->map.info.flags; 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); @@ -742,40 +739,39 @@ int SDL_SetSurfaceBlendMode(SDL_Surface *surface, SDL_BlendMode blendMode) return status; } -int SDL_GetSurfaceBlendMode(SDL_Surface *surface, SDL_BlendMode *blendMode) +SDL_BlendMode SDL_GetSurfaceBlendMode(SDL_Surface *surface) { - if (!SDL_SurfaceValid(surface)) { - return SDL_InvalidParamError("surface"); - } + SDL_BlendMode blendMode; - if (!blendMode) { - return 0; + if (!SDL_SurfaceValid(surface)) { + SDL_InvalidParamError("surface"); + return SDL_BLENDMODE_INVALID; } 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: - *blendMode = SDL_BLENDMODE_BLEND; + blendMode = SDL_BLENDMODE_BLEND; break; case SDL_COPY_BLEND_PREMULTIPLIED: - *blendMode = SDL_BLENDMODE_BLEND_PREMULTIPLIED; + blendMode = SDL_BLENDMODE_BLEND_PREMULTIPLIED; break; case SDL_COPY_ADD: - *blendMode = SDL_BLENDMODE_ADD; + blendMode = SDL_BLENDMODE_ADD; break; case SDL_COPY_ADD_PREMULTIPLIED: - *blendMode = SDL_BLENDMODE_ADD_PREMULTIPLIED; + blendMode = SDL_BLENDMODE_ADD_PREMULTIPLIED; break; case SDL_COPY_MOD: - *blendMode = SDL_BLENDMODE_MOD; + blendMode = SDL_BLENDMODE_MOD; break; case SDL_COPY_MUL: - *blendMode = SDL_BLENDMODE_MUL; + blendMode = SDL_BLENDMODE_MUL; break; default: - *blendMode = SDL_BLENDMODE_NONE; + blendMode = SDL_BLENDMODE_NONE; break; } - return 0; + return blendMode; } SDL_bool SDL_SetSurfaceClipRect(SDL_Surface *surface, const SDL_Rect *rect) @@ -1151,7 +1147,7 @@ int SDL_BlitSurfaceUncheckedScaled(SDL_Surface *src, const SDL_Rect *srcrect, /* Save source infos */ SDL_GetSurfaceColorMod(src, &r, &g, &b); SDL_GetSurfaceAlphaMod(src, &alpha); - SDL_GetSurfaceBlendMode(src, &blendMode); + blendMode = SDL_GetSurfaceBlendMode(src); srcrect2.x = srcrect->x; srcrect2.y = srcrect->y; srcrect2.w = srcrect->w; diff --git a/test/testautomation_render.c b/test/testautomation_render.c index aebdb32a0..c9057d3b3 100644 --- a/test/testautomation_render.c +++ b/test/testautomation_render.c @@ -402,9 +402,8 @@ static void testBlendModeOperation(TestRenderOperation op, int mode, SDL_PixelFo return; } if (SDL_ISPIXELFORMAT_ALPHA(dst_format)) { - SDL_BlendMode blendMode = SDL_BLENDMODE_NONE; - ret = SDL_GetTextureBlendMode(dst, &blendMode); - SDLTest_AssertCheck(ret == 0, "Verify result from SDL_GetTextureBlendMode(), expected: 0, got: %i", ret); + SDL_BlendMode blendMode = SDL_GetTextureBlendMode(dst); + SDLTest_AssertCheck(blendMode != SDL_BLENDMODE_INVALID, "Verify result from SDL_GetTextureBlendMode(), expected: !SDL_BLENDMODE_INVALID, got: 0x%" SDL_PRIx32, blendMode); SDLTest_AssertCheck(blendMode == SDL_BLENDMODE_BLEND, "Verify alpha texture blend mode, expected %d, got %" SDL_PRIu32, SDL_BLENDMODE_BLEND, blendMode); } diff --git a/test/testautomation_surface.c b/test/testautomation_surface.c index f3e266bae..6cc29c07e 100644 --- a/test/testautomation_surface.c +++ b/test/testautomation_surface.c @@ -54,8 +54,8 @@ static void surfaceSetUp(void *arg) /* Disable blend mode for target surface */ result = SDL_SetSurfaceBlendMode(testSurface, blendMode); SDLTest_AssertCheck(result == 0, "Validate result from SDL_SetSurfaceBlendMode, expected: 0, got: %i", result); - result = SDL_GetSurfaceBlendMode(testSurface, ¤tBlendMode); - SDLTest_AssertCheck(result == 0, "Validate result from SDL_GetSurfaceBlendMode, expected: 0, got: %i", result); + currentBlendMode = SDL_GetSurfaceBlendMode(testSurface); + SDLTest_AssertCheck(currentBlendMode != SDL_BLENDMODE_INVALID, "Validate result from SDL_GetSurfaceBlendMode, expected: !SDL_BLENDMODE_INVALID, got: 0x%" SDL_PRIx32, currentBlendMode); SDLTest_AssertCheck(currentBlendMode == blendMode, "Validate blendMode, expected: %" SDL_PRIu32 ", got: %" SDL_PRIu32, blendMode, currentBlendMode); } } diff --git a/test/testshader.c b/test/testshader.c index aa299077a..d8bc7f441 100644 --- a/test/testshader.c +++ b/test/testshader.c @@ -332,7 +332,7 @@ SDL_GL_LoadTexture(SDL_Surface *surface, GLfloat *texcoord) } /* Save the alpha blending attributes */ - SDL_GetSurfaceBlendMode(surface, &saved_mode); + saved_mode = SDL_GetSurfaceBlendMode(surface); SDL_SetSurfaceBlendMode(surface, SDL_BLENDMODE_NONE); /* Copy the surface into the GL texture image */