Simplified SDL_Surface

SDL_Surface has been simplified and internal details are no longer in the public structure.

The `format` member of SDL_Surface is now an enumerated pixel format value. You can get the full details of the pixel format by calling `SDL_GetPixelFormatDetails(surface->format)`. You can get the palette associated with the surface by calling SDL_GetSurfacePalette(). You can get the clip rectangle by calling SDL_GetSurfaceClipRect().

SDL_PixelFormat has been renamed SDL_PixelFormatDetails and just describes the pixel format, it does not include a palette for indexed pixel types.

SDL_PixelFormatEnum has been renamed SDL_PixelFormat and is used instead of Uint32 for API functions that refer to pixel format by enumerated value.

SDL_MapRGB(), SDL_MapRGBA(), SDL_GetRGB(), and SDL_GetRGBA() take an optional palette parameter for indexed color lookups.
This commit is contained in:
Sam Lantinga 2024-07-08 14:59:18 -07:00
parent 40ed098ce8
commit 2ba76dbe80
123 changed files with 1865 additions and 1838 deletions

View File

@ -558,6 +558,7 @@
<ClInclude Include="..\..\src\video\SDL_pixels_c.h" /> <ClInclude Include="..\..\src\video\SDL_pixels_c.h" />
<ClInclude Include="..\..\src\video\SDL_rect_c.h" /> <ClInclude Include="..\..\src\video\SDL_rect_c.h" />
<ClInclude Include="..\..\src\video\SDL_RLEaccel_c.h" /> <ClInclude Include="..\..\src\video\SDL_RLEaccel_c.h" />
<ClInclude Include="..\..\src\video\SDL_surface_c.h" />
<ClInclude Include="..\..\src\video\SDL_sysvideo.h" /> <ClInclude Include="..\..\src\video\SDL_sysvideo.h" />
<ClInclude Include="..\..\src\video\SDL_vulkan_internal.h" /> <ClInclude Include="..\..\src\video\SDL_vulkan_internal.h" />
<ClInclude Include="..\..\src\video\SDL_yuv_c.h" /> <ClInclude Include="..\..\src\video\SDL_yuv_c.h" />
@ -863,4 +864,4 @@
<ImportGroup Label="ExtensionTargets"> <ImportGroup Label="ExtensionTargets">
<Import Project="$(VCTargetsPath)\BuildCustomizations\masm.targets" /> <Import Project="$(VCTargetsPath)\BuildCustomizations\masm.targets" />
</ImportGroup> </ImportGroup>
</Project> </Project>

View File

@ -436,6 +436,7 @@
<ClInclude Include="..\..\src\video\SDL_pixels_c.h" /> <ClInclude Include="..\..\src\video\SDL_pixels_c.h" />
<ClInclude Include="..\..\src\video\SDL_rect_c.h" /> <ClInclude Include="..\..\src\video\SDL_rect_c.h" />
<ClInclude Include="..\..\src\video\SDL_RLEaccel_c.h" /> <ClInclude Include="..\..\src\video\SDL_RLEaccel_c.h" />
<ClInclude Include="..\..\src\video\SDL_surface_c.h" />
<ClInclude Include="..\..\src\video\SDL_sysvideo.h" /> <ClInclude Include="..\..\src\video\SDL_sysvideo.h" />
<ClInclude Include="..\..\src\video\SDL_vulkan_internal.h" /> <ClInclude Include="..\..\src\video\SDL_vulkan_internal.h" />
<ClInclude Include="..\..\src\video\SDL_yuv_c.h" /> <ClInclude Include="..\..\src\video\SDL_yuv_c.h" />
@ -462,4 +463,4 @@
<ItemGroup> <ItemGroup>
<ResourceCompile Include="..\..\src\core\windows\version.rc" /> <ResourceCompile Include="..\..\src\core\windows\version.rc" />
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@ -185,6 +185,7 @@
<ClInclude Include="..\src\video\SDL_pixels_c.h" /> <ClInclude Include="..\src\video\SDL_pixels_c.h" />
<ClInclude Include="..\src\video\SDL_rect_c.h" /> <ClInclude Include="..\src\video\SDL_rect_c.h" />
<ClInclude Include="..\src\video\SDL_RLEaccel_c.h" /> <ClInclude Include="..\src\video\SDL_RLEaccel_c.h" />
<ClInclude Include="..\src\video\SDL_surface_c.h" />
<ClInclude Include="..\src\video\SDL_sysvideo.h" /> <ClInclude Include="..\src\video\SDL_sysvideo.h" />
<ClInclude Include="..\src\video\SDL_sysvidocapture.h" /> <ClInclude Include="..\src\video\SDL_sysvidocapture.h" />
<ClInclude Include="..\src\video\SDL_yuv_c.h" /> <ClInclude Include="..\src\video\SDL_yuv_c.h" />
@ -917,4 +918,4 @@
<ImportGroup Label="ExtensionTargets"> <ImportGroup Label="ExtensionTargets">
<Import Project="$(VCTargetsPath)\BuildCustomizations\masm.targets" /> <Import Project="$(VCTargetsPath)\BuildCustomizations\masm.targets" />
</ImportGroup> </ImportGroup>
</Project> </Project>

View File

@ -438,6 +438,9 @@
<ClInclude Include="..\src\video\SDL_RLEaccel_c.h"> <ClInclude Include="..\src\video\SDL_RLEaccel_c.h">
<Filter>Source Files</Filter> <Filter>Source Files</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="..\src\video\SDL_surface_c.h">
<Filter>Source Files</Filter>
</ClInclude>
<ClInclude Include="..\src\video\SDL_sysvideo.h"> <ClInclude Include="..\src\video\SDL_sysvideo.h">
<Filter>Source Files</Filter> <Filter>Source Files</Filter>
</ClInclude> </ClInclude>
@ -973,4 +976,4 @@
<Filter>Source Files</Filter> <Filter>Source Files</Filter>
</ClCompile> </ClCompile>
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@ -464,6 +464,7 @@
<ClInclude Include="..\..\src\video\SDL_pixels_c.h" /> <ClInclude Include="..\..\src\video\SDL_pixels_c.h" />
<ClInclude Include="..\..\src\video\SDL_rect_c.h" /> <ClInclude Include="..\..\src\video\SDL_rect_c.h" />
<ClInclude Include="..\..\src\video\SDL_RLEaccel_c.h" /> <ClInclude Include="..\..\src\video\SDL_RLEaccel_c.h" />
<ClInclude Include="..\..\src\video\SDL_surface_c.h" />
<ClInclude Include="..\..\src\video\SDL_sysvideo.h" /> <ClInclude Include="..\..\src\video\SDL_sysvideo.h" />
<ClInclude Include="..\..\src\video\SDL_vulkan_internal.h" /> <ClInclude Include="..\..\src\video\SDL_vulkan_internal.h" />
<ClInclude Include="..\..\src\video\SDL_yuv_c.h" /> <ClInclude Include="..\..\src\video\SDL_yuv_c.h" />

View File

@ -615,6 +615,9 @@
<ClInclude Include="..\..\src\video\SDL_RLEaccel_c.h"> <ClInclude Include="..\..\src\video\SDL_RLEaccel_c.h">
<Filter>video</Filter> <Filter>video</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="..\..\src\video\SDL_surface_c.h">
<Filter>video</Filter>
</ClInclude>
<ClInclude Include="..\..\src\video\SDL_blit.h"> <ClInclude Include="..\..\src\video\SDL_blit.h">
<Filter>video</Filter> <Filter>video</Filter>
</ClInclude> </ClInclude>
@ -1554,4 +1557,4 @@
<ItemGroup> <ItemGroup>
<MASM Include="..\..\src\stdlib\SDL_mslibc_x64.masm" /> <MASM Include="..\..\src\stdlib\SDL_mslibc_x64.masm" />
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@ -1566,7 +1566,7 @@ typedef SDL_GameControllerButton, SDL_GamepadButton;
@@ @@
@@ @@
- SDL_AllocFormat - SDL_AllocFormat
+ SDL_CreatePixelFormat + SDL_GetPixelFormatDetails
(...) (...)
@@ @@
@@ @@
@ -1575,23 +1575,18 @@ typedef SDL_GameControllerButton, SDL_GamepadButton;
(...) (...)
@@ @@
@@ @@
- SDL_FreeFormat
+ SDL_DestroyPixelFormat
(...)
@@
@@
- SDL_FreePalette - SDL_FreePalette
+ SDL_DestroyPalette + SDL_DestroyPalette
(...) (...)
@@ @@
@@ @@
- SDL_MasksToPixelFormatEnum - SDL_MasksToPixelFormatEnum
+ SDL_GetPixelFormatEnumForMasks + SDL_GetPixelFormatForMasks
(...) (...)
@@ @@
@@ @@
- SDL_PixelFormatEnumToMasks - SDL_PixelFormatEnumToMasks
+ SDL_GetMasksForPixelFormatEnum + SDL_GetMasksForPixelFormat
(...) (...)
@@ @@
@@ @@
@ -3488,3 +3483,21 @@ typedef SDL_Colour, SDL_Color;
@@ @@
- SDLK_z - SDLK_z
+ SDLK_Z + SDLK_Z
@@
typedef SDL_PixelFormat, SDL_PackedPixelDetails;
@@
- SDL_PixelFormat
+ SDL_PixelFormatDetails
@@
@@
- SDL_ConvertSurfaceFormat
+ SDL_ConvertSurface
(...)
@@
@@
- SDL_PREALLOC
+ SDL_SURFACE_PREALLOCATED
@@
@@
- SDL_SIMD_ALIGNED
+ SDL_SURFACE_SIMD_ALIGNED

View File

@ -15,7 +15,7 @@ int main(int argc, char *argv[])
return 1; return 1;
} }
screenSurface = SDL_GetWindowSurface(window); screenSurface = SDL_GetWindowSurface(window);
SDL_FillSurfaceRect(screenSurface, NULL, SDL_MapRGB(screenSurface->format, 0xff, 0xff, 0xff)); SDL_FillSurfaceRect(screenSurface, NULL, SDL_MapSurfaceRGB(screenSurface, 0xff, 0xff, 0xff));
SDL_UpdateWindowSurface(window); SDL_UpdateWindowSurface(window);
SDL_Delay(100); SDL_Delay(100);
SDL_DestroyWindow(window); SDL_DestroyWindow(window);

View File

@ -1092,19 +1092,22 @@ The following symbols have been renamed:
## SDL_pixels.h ## SDL_pixels.h
SDL_PixelFormat has been renamed SDL_PixelFormatDetails and just describes the pixel format, it does not include a palette for indexed pixel types.
SDL_PixelFormatEnum has been renamed SDL_PixelFormat and is used instead of Uint32 for API functions that refer to pixel format by enumerated value.
SDL_MapRGB(), SDL_MapRGBA(), SDL_GetRGB(), and SDL_GetRGBA() take an optional palette parameter for indexed color lookups.
SDL_GetMasksForPixelFormat() now returns the standard int error code.
SDL_CalculateGammaRamp has been removed, because SDL_SetWindowGammaRamp has been removed as well due to poor support in modern operating systems (see [SDL_video.h](#sdl_videoh)). SDL_CalculateGammaRamp has been removed, because SDL_SetWindowGammaRamp has been removed as well due to poor support in modern operating systems (see [SDL_video.h](#sdl_videoh)).
The BitsPerPixel and BytesPerPixel fields of SDL_PixelFormat have been renamed bits_per_pixel and bytes_per_pixel.
SDL_PixelFormatEnum is used instead of Uint32 for API functions that refer to pixel format by enumerated value.
The following functions have been renamed: The following functions have been renamed:
* SDL_AllocFormat() => SDL_CreatePixelFormat() * SDL_AllocFormat() => SDL_GetPixelFormatDetails()
* SDL_AllocPalette() => SDL_CreatePalette() * SDL_AllocPalette() => SDL_CreatePalette()
* SDL_FreeFormat() => SDL_DestroyPixelFormat()
* SDL_FreePalette() => SDL_DestroyPalette() * SDL_FreePalette() => SDL_DestroyPalette()
* SDL_MasksToPixelFormatEnum() => SDL_GetPixelFormatEnumForMasks() * SDL_MasksToPixelFormatEnum() => SDL_GetPixelFormatForMasks()
* SDL_PixelFormatEnumToMasks() => SDL_GetMasksForPixelFormatEnum() * SDL_PixelFormatEnumToMasks() => SDL_GetMasksForPixelFormat()
The following symbols have been renamed: The following symbols have been renamed:
* SDL_PIXELFORMAT_BGR444 => SDL_PIXELFORMAT_XBGR4444 * SDL_PIXELFORMAT_BGR444 => SDL_PIXELFORMAT_XBGR4444
@ -1114,9 +1117,16 @@ The following symbols have been renamed:
* SDL_PIXELFORMAT_RGB555 => SDL_PIXELFORMAT_XRGB1555 * SDL_PIXELFORMAT_RGB555 => SDL_PIXELFORMAT_XRGB1555
* SDL_PIXELFORMAT_RGB888 => SDL_PIXELFORMAT_XRGB8888 * SDL_PIXELFORMAT_RGB888 => SDL_PIXELFORMAT_XRGB8888
The following functions have been removed:
* SDL_FreeFormat()
* SDL_SetPixelFormatPalette()
The following macros have been removed: The following macros have been removed:
* SDL_Colour - use SDL_Color instead * SDL_Colour - use SDL_Color instead
The following structures have been renamed:
* SDL_PixelFormat => SDL_PixelFormatDetails
## SDL_platform.h ## SDL_platform.h
The following platform preprocessor macros have been renamed: The following platform preprocessor macros have been renamed:
@ -1598,19 +1608,23 @@ The following functions have been removed:
## SDL_surface.h ## SDL_surface.h
SDL_Surface has been simplified and internal details are no longer in the public structure.
The `format` member of SDL_Surface is now an enumerated pixel format value. You can get the full details of the pixel format by calling `SDL_GetPixelFormatDetails(surface->format)`. You can get the palette associated with the surface by calling SDL_GetSurfacePalette(). You can get the clip rectangle by calling SDL_GetSurfaceClipRect().
The userdata member of SDL_Surface has been replaced with a more general properties interface, which can be queried with SDL_GetSurfaceProperties() The userdata member of SDL_Surface has been replaced with a more general properties interface, which can be queried with SDL_GetSurfaceProperties()
Removed unused 'flags' parameter from SDL_ConvertSurface and SDL_ConvertSurfaceFormat. Removed the unused 'flags' parameter from SDL_ConvertSurface.
SDL_CreateRGBSurface() and SDL_CreateRGBSurfaceWithFormat() have been combined into a new function SDL_CreateSurface(). SDL_CreateRGBSurface() and SDL_CreateRGBSurfaceWithFormat() have been combined into a new function SDL_CreateSurface().
SDL_CreateRGBSurfaceFrom() and SDL_CreateRGBSurfaceWithFormatFrom() have been combined into a new function SDL_CreateSurfaceFrom(). SDL_CreateRGBSurfaceFrom() and SDL_CreateRGBSurfaceWithFormatFrom() have been combined into a new function SDL_CreateSurfaceFrom(), and the parameter order has changed for consistency with SDL_CreateSurface().
You can implement the old functions in your own code easily: You can implement the old functions in your own code easily:
```c ```c
SDL_Surface *SDL_CreateRGBSurface(Uint32 flags, int width, int height, int depth, Uint32 Rmask, Uint32 Gmask, Uint32 Bmask, Uint32 Amask) SDL_Surface *SDL_CreateRGBSurface(Uint32 flags, int width, int height, int depth, Uint32 Rmask, Uint32 Gmask, Uint32 Bmask, Uint32 Amask)
{ {
return SDL_CreateSurface(width, height, return SDL_CreateSurface(width, height,
SDL_GetPixelFormatEnumForMasks(depth, Rmask, Gmask, Bmask, Amask)); SDL_GetPixelFormatForMasks(depth, Rmask, Gmask, Bmask, Amask));
} }
SDL_Surface *SDL_CreateRGBSurfaceWithFormat(Uint32 flags, int width, int height, int depth, Uint32 format) SDL_Surface *SDL_CreateRGBSurfaceWithFormat(Uint32 flags, int width, int height, int depth, Uint32 format)
@ -1620,13 +1634,14 @@ SDL_Surface *SDL_CreateRGBSurfaceWithFormat(Uint32 flags, int width, int height,
SDL_Surface *SDL_CreateRGBSurfaceFrom(void *pixels, int width, int height, int depth, int pitch, Uint32 Rmask, Uint32 Gmask, Uint32 Bmask, Uint32 Amask) SDL_Surface *SDL_CreateRGBSurfaceFrom(void *pixels, int width, int height, int depth, int pitch, Uint32 Rmask, Uint32 Gmask, Uint32 Bmask, Uint32 Amask)
{ {
return SDL_CreateSurfaceFrom(pixels, width, height, pitch, return SDL_CreateSurfaceFrom(width, height,
SDL_GetPixelFormatEnumForMasks(depth, Rmask, Gmask, Bmask, Amask)); SDL_GetPixelFormatForMasks(depth, Rmask, Gmask, Bmask, Amask),
pixels, pitch);
} }
SDL_Surface *SDL_CreateRGBSurfaceWithFormatFrom(void *pixels, int width, int height, int depth, int pitch, Uint32 format) SDL_Surface *SDL_CreateRGBSurfaceWithFormatFrom(void *pixels, int width, int height, int depth, int pitch, Uint32 format)
{ {
return SDL_CreateSurfaceFrom(pixels, width, height, pitch, format); return SDL_CreateSurfaceFrom(width, height, format, pixels, pitch);
} }
``` ```
@ -1645,10 +1660,15 @@ SDL_BlitSurfaceScaled() and SDL_BlitSurfaceUncheckedScaled() now take a scale pa
SDL_SoftStretch() now takes a scale paramater. SDL_SoftStretch() now takes a scale paramater.
SDL_PixelFormatEnum is used instead of Uint32 for API functions that refer to pixel format by enumerated value. SDL_PixelFormat is used instead of Uint32 for API functions that refer to pixel format by enumerated value.
SDL_SetSurfaceColorKey() takes an SDL_bool to enable and disable colorkey. RLE acceleration isn't controlled by the parameter, you should use SDL_SetSurfaceRLE() to change that separately.
SDL_SetSurfaceRLE() takes an SDL_bool to enable and disable RLE acceleration.
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_FillRect() => SDL_FillSurfaceRect() * SDL_FillRect() => SDL_FillSurfaceRect()
* SDL_FillRects() => SDL_FillSurfaceRects() * SDL_FillRects() => SDL_FillSurfaceRects()
* SDL_FreeSurface() => SDL_DestroySurface() * SDL_FreeSurface() => SDL_DestroySurface()
@ -1669,11 +1689,16 @@ The following symbols have been removed:
* SDL_SWSURFACE * SDL_SWSURFACE
The following functions have been removed: The following functions have been removed:
* SDL_FreeFormat()
* SDL_GetYUVConversionMode() * SDL_GetYUVConversionMode()
* SDL_GetYUVConversionModeForResolution() * SDL_GetYUVConversionModeForResolution()
* SDL_SetYUVConversionMode() - use SDL_SetSurfaceColorspace() to set the surface colorspace and SDL_PROP_TEXTURE_CREATE_COLORSPACE_NUMBER with SDL_CreateTextureWithProperties() to set the texture colorspace. The default colorspace for YUV pixel formats is SDL_COLORSPACE_JPEG. * SDL_SetYUVConversionMode() - use SDL_SetSurfaceColorspace() to set the surface colorspace and SDL_PROP_TEXTURE_CREATE_COLORSPACE_NUMBER with SDL_CreateTextureWithProperties() to set the texture colorspace. The default colorspace for YUV pixel formats is SDL_COLORSPACE_JPEG.
* SDL_SoftStretchLinear() - use SDL_SoftStretch() with SDL_SCALEMODE_LINEAR * SDL_SoftStretchLinear() - use SDL_SoftStretch() with SDL_SCALEMODE_LINEAR
The following symbols have been renamed:
* SDL_PREALLOC => SDL_SURFACE_PREALLOCATED
* SDL_SIMD_ALIGNED => SDL_SURFACE_SIMD_ALIGNED
## SDL_system.h ## SDL_system.h
SDL_WindowsMessageHook has changed signatures so the message may be modified and it can block further message processing. SDL_WindowsMessageHook has changed signatures so the message may be modified and it can block further message processing.
@ -1835,7 +1860,7 @@ The callback passed to SDL_AddTimer() has changed parameters to:
Uint32 SDLCALL TimerCallback(void *userdata, SDL_TimerID timerID, Uint32 interval); Uint32 SDLCALL TimerCallback(void *userdata, SDL_TimerID timerID, Uint32 interval);
```` ````
The return value of SDL_RemoveTimer() has changed to the standard int error code. SDL_RemoveTimer() now returns the standard int error code.
## SDL_touch.h ## SDL_touch.h

View File

@ -78,7 +78,7 @@ typedef struct SDL_Camera SDL_Camera;
*/ */
typedef struct SDL_CameraSpec typedef struct SDL_CameraSpec
{ {
SDL_PixelFormatEnum format; /**< Frame format */ SDL_PixelFormat format; /**< Frame format */
SDL_Colorspace colorspace; /**< Frame colorspace */ SDL_Colorspace colorspace; /**< Frame colorspace */
int width; /**< Frame width */ int width; /**< Frame width */
int height; /**< Frame height */ int height; /**< Frame height */

View File

@ -453,19 +453,18 @@
#define SDL_sem SDL_Semaphore #define SDL_sem SDL_Semaphore
/* ##SDL_pixels.h */ /* ##SDL_pixels.h */
#define SDL_AllocFormat SDL_CreatePixelFormat #define SDL_AllocFormat SDL_GetPixelFormatDetails
#define SDL_AllocPalette SDL_CreatePalette #define SDL_AllocPalette SDL_CreatePalette
#define SDL_Colour SDL_Color #define SDL_Colour SDL_Color
#define SDL_FreeFormat SDL_DestroyPixelFormat
#define SDL_FreePalette SDL_DestroyPalette #define SDL_FreePalette SDL_DestroyPalette
#define SDL_MasksToPixelFormatEnum SDL_GetPixelFormatEnumForMasks #define SDL_MasksToPixelFormatEnum SDL_GetPixelFormatForMasks
#define SDL_PIXELFORMAT_BGR444 SDL_PIXELFORMAT_XBGR4444 #define SDL_PIXELFORMAT_BGR444 SDL_PIXELFORMAT_XBGR4444
#define SDL_PIXELFORMAT_BGR555 SDL_PIXELFORMAT_XBGR1555 #define SDL_PIXELFORMAT_BGR555 SDL_PIXELFORMAT_XBGR1555
#define SDL_PIXELFORMAT_BGR888 SDL_PIXELFORMAT_XBGR8888 #define SDL_PIXELFORMAT_BGR888 SDL_PIXELFORMAT_XBGR8888
#define SDL_PIXELFORMAT_RGB444 SDL_PIXELFORMAT_XRGB4444 #define SDL_PIXELFORMAT_RGB444 SDL_PIXELFORMAT_XRGB4444
#define SDL_PIXELFORMAT_RGB555 SDL_PIXELFORMAT_XRGB1555 #define SDL_PIXELFORMAT_RGB555 SDL_PIXELFORMAT_XRGB1555
#define SDL_PIXELFORMAT_RGB888 SDL_PIXELFORMAT_XRGB8888 #define SDL_PIXELFORMAT_RGB888 SDL_PIXELFORMAT_XRGB8888
#define SDL_PixelFormatEnumToMasks SDL_GetMasksForPixelFormatEnum #define SDL_PixelFormatEnumToMasks SDL_GetMasksForPixelFormat
/* ##SDL_rect.h */ /* ##SDL_rect.h */
#define SDL_EncloseFPoints SDL_GetRectEnclosingPointsFloat #define SDL_EncloseFPoints SDL_GetRectEnclosingPointsFloat
@ -580,6 +579,7 @@
/* ##SDL_surface.h */ /* ##SDL_surface.h */
#define SDL_BlitScaled SDL_BlitSurfaceScaled #define SDL_BlitScaled SDL_BlitSurfaceScaled
#define SDL_ConvertSurfaceFormat SDL_ConvertSurface
#define SDL_FillRect SDL_FillSurfaceRect #define SDL_FillRect SDL_FillSurfaceRect
#define SDL_FillRects SDL_FillSurfaceRects #define SDL_FillRects SDL_FillSurfaceRects
#define SDL_FreeSurface SDL_DestroySurface #define SDL_FreeSurface SDL_DestroySurface
@ -590,6 +590,8 @@
#define SDL_LoadBMP_RW SDL_LoadBMP_IO #define SDL_LoadBMP_RW SDL_LoadBMP_IO
#define SDL_LowerBlit SDL_BlitSurfaceUnchecked #define SDL_LowerBlit SDL_BlitSurfaceUnchecked
#define SDL_LowerBlitScaled SDL_BlitSurfaceUncheckedScaled #define SDL_LowerBlitScaled SDL_BlitSurfaceUncheckedScaled
#define SDL_PREALLOC SDL_SURFACE_PREALLOCATED
#define SDL_SIMD_ALIGNED SDL_SURFACE_SIMD_ALIGNED
#define SDL_SaveBMP_RW SDL_SaveBMP_IO #define SDL_SaveBMP_RW SDL_SaveBMP_IO
#define SDL_SetClipRect SDL_SetSurfaceClipRect #define SDL_SetClipRect SDL_SetSurfaceClipRect
#define SDL_SetColorKey SDL_SetSurfaceColorKey #define SDL_SetColorKey SDL_SetSurfaceColorKey
@ -1048,19 +1050,18 @@
#define SDL_sem SDL_sem_renamed_SDL_Semaphore #define SDL_sem SDL_sem_renamed_SDL_Semaphore
/* ##SDL_pixels.h */ /* ##SDL_pixels.h */
#define SDL_AllocFormat SDL_AllocFormat_renamed_SDL_CreatePixelFormat #define SDL_AllocFormat SDL_AllocFormat_renamed_SDL_GetPixelFormatDetails
#define SDL_AllocPalette SDL_AllocPalette_renamed_SDL_CreatePalette #define SDL_AllocPalette SDL_AllocPalette_renamed_SDL_CreatePalette
#define SDL_Colour SDL_Colour_renamed_SDL_Color #define SDL_Colour SDL_Colour_renamed_SDL_Color
#define SDL_FreeFormat SDL_FreeFormat_renamed_SDL_DestroyPixelFormat
#define SDL_FreePalette SDL_FreePalette_renamed_SDL_DestroyPalette #define SDL_FreePalette SDL_FreePalette_renamed_SDL_DestroyPalette
#define SDL_MasksToPixelFormatEnum SDL_MasksToPixelFormatEnum_renamed_SDL_GetPixelFormatEnumForMasks #define SDL_MasksToPixelFormatEnum SDL_MasksToPixelFormatEnum_renamed_SDL_GetPixelFormatForMasks
#define SDL_PIXELFORMAT_BGR444 SDL_PIXELFORMAT_BGR444_renamed_SDL_PIXELFORMAT_XBGR4444 #define SDL_PIXELFORMAT_BGR444 SDL_PIXELFORMAT_BGR444_renamed_SDL_PIXELFORMAT_XBGR4444
#define SDL_PIXELFORMAT_BGR555 SDL_PIXELFORMAT_BGR555_renamed_SDL_PIXELFORMAT_XBGR1555 #define SDL_PIXELFORMAT_BGR555 SDL_PIXELFORMAT_BGR555_renamed_SDL_PIXELFORMAT_XBGR1555
#define SDL_PIXELFORMAT_BGR888 SDL_PIXELFORMAT_BGR888_renamed_SDL_PIXELFORMAT_XBGR8888 #define SDL_PIXELFORMAT_BGR888 SDL_PIXELFORMAT_BGR888_renamed_SDL_PIXELFORMAT_XBGR8888
#define SDL_PIXELFORMAT_RGB444 SDL_PIXELFORMAT_RGB444_renamed_SDL_PIXELFORMAT_XRGB4444 #define SDL_PIXELFORMAT_RGB444 SDL_PIXELFORMAT_RGB444_renamed_SDL_PIXELFORMAT_XRGB4444
#define SDL_PIXELFORMAT_RGB555 SDL_PIXELFORMAT_RGB555_renamed_SDL_PIXELFORMAT_XRGB1555 #define SDL_PIXELFORMAT_RGB555 SDL_PIXELFORMAT_RGB555_renamed_SDL_PIXELFORMAT_XRGB1555
#define SDL_PIXELFORMAT_RGB888 SDL_PIXELFORMAT_RGB888_renamed_SDL_PIXELFORMAT_XRGB8888 #define SDL_PIXELFORMAT_RGB888 SDL_PIXELFORMAT_RGB888_renamed_SDL_PIXELFORMAT_XRGB8888
#define SDL_PixelFormatEnumToMasks SDL_PixelFormatEnumToMasks_renamed_SDL_GetMasksForPixelFormatEnum #define SDL_PixelFormatEnumToMasks SDL_PixelFormatEnumToMasks_renamed_SDL_GetMasksForPixelFormat
/* ##SDL_rect.h */ /* ##SDL_rect.h */
#define SDL_EncloseFPoints SDL_EncloseFPoints_renamed_SDL_GetRectEnclosingPointsFloat #define SDL_EncloseFPoints SDL_EncloseFPoints_renamed_SDL_GetRectEnclosingPointsFloat
@ -1175,6 +1176,7 @@
/* ##SDL_surface.h */ /* ##SDL_surface.h */
#define SDL_BlitScaled SDL_BlitScaled_renamed_SDL_BlitSurfaceScaled #define SDL_BlitScaled SDL_BlitScaled_renamed_SDL_BlitSurfaceScaled
#define SDL_ConvertSurfaceFormat SDL_ConvertSurfaceFormat_renamed_SDL_ConvertSurface
#define SDL_FillRect SDL_FillRect_renamed_SDL_FillSurfaceRect #define SDL_FillRect SDL_FillRect_renamed_SDL_FillSurfaceRect
#define SDL_FillRects SDL_FillRects_renamed_SDL_FillSurfaceRects #define SDL_FillRects SDL_FillRects_renamed_SDL_FillSurfaceRects
#define SDL_FreeSurface SDL_FreeSurface_renamed_SDL_DestroySurface #define SDL_FreeSurface SDL_FreeSurface_renamed_SDL_DestroySurface
@ -1185,6 +1187,8 @@
#define SDL_LoadBMP_RW SDL_LoadBMP_RW_renamed_SDL_LoadBMP_IO #define SDL_LoadBMP_RW SDL_LoadBMP_RW_renamed_SDL_LoadBMP_IO
#define SDL_LowerBlit SDL_LowerBlit_renamed_SDL_BlitSurfaceUnchecked #define SDL_LowerBlit SDL_LowerBlit_renamed_SDL_BlitSurfaceUnchecked
#define SDL_LowerBlitScaled SDL_LowerBlitScaled_renamed_SDL_BlitSurfaceUncheckedScaled #define SDL_LowerBlitScaled SDL_LowerBlitScaled_renamed_SDL_BlitSurfaceUncheckedScaled
#define SDL_PREALLOC SDL_PREALLOC_renamed_SDL_SURFACE_PREALLOCATED
#define SDL_SIMD_ALIGNED SDL_SIMD_ALIGNED_renamed_SDL_SURFACE_SIMD_ALIGNED
#define SDL_SaveBMP_RW SDL_SaveBMP_RW_renamed_SDL_SaveBMP_IO #define SDL_SaveBMP_RW SDL_SaveBMP_RW_renamed_SDL_SaveBMP_IO
#define SDL_SetClipRect SDL_SetClipRect_renamed_SDL_SetSurfaceClipRect #define SDL_SetClipRect SDL_SetClipRect_renamed_SDL_SetSurfaceClipRect
#define SDL_SetColorKey SDL_SetColorKey_renamed_SDL_SetSurfaceColorKey #define SDL_SetColorKey SDL_SetColorKey_renamed_SDL_SetSurfaceColorKey

View File

@ -133,7 +133,8 @@ typedef enum SDL_PackedLayout
#define SDL_PIXELTYPE(X) (((X) >> 24) & 0x0F) #define SDL_PIXELTYPE(X) (((X) >> 24) & 0x0F)
#define SDL_PIXELORDER(X) (((X) >> 20) & 0x0F) #define SDL_PIXELORDER(X) (((X) >> 20) & 0x0F)
#define SDL_PIXELLAYOUT(X) (((X) >> 16) & 0x0F) #define SDL_PIXELLAYOUT(X) (((X) >> 16) & 0x0F)
#define SDL_BITSPERPIXEL(X) (((X) >> 8) & 0xFF) #define SDL_BITSPERPIXEL(X) \
(SDL_ISPIXELFORMAT_FOURCC(X) ? 0 : (((X) >> 8) & 0xFF))
#define SDL_BYTESPERPIXEL(X) \ #define SDL_BYTESPERPIXEL(X) \
(SDL_ISPIXELFORMAT_FOURCC(X) ? \ (SDL_ISPIXELFORMAT_FOURCC(X) ? \
((((X) == SDL_PIXELFORMAT_YUY2) || \ ((((X) == SDL_PIXELFORMAT_YUY2) || \
@ -222,7 +223,7 @@ typedef enum SDL_PackedLayout
* *
* \since This enum is available since SDL 3.0.0. * \since This enum is available since SDL 3.0.0.
*/ */
typedef enum SDL_PixelFormatEnum typedef enum SDL_PixelFormat
{ {
SDL_PIXELFORMAT_UNKNOWN, SDL_PIXELFORMAT_UNKNOWN,
SDL_PIXELFORMAT_INDEX1LSB = SDL_PIXELFORMAT_INDEX1LSB =
@ -426,7 +427,7 @@ typedef enum SDL_PixelFormatEnum
SDL_DEFINE_PIXELFOURCC('P', '0', '1', '0'), SDL_DEFINE_PIXELFOURCC('P', '0', '1', '0'),
SDL_PIXELFORMAT_EXTERNAL_OES = /**< Android video texture format */ SDL_PIXELFORMAT_EXTERNAL_OES = /**< Android video texture format */
SDL_DEFINE_PIXELFOURCC('O', 'E', 'S', ' ') SDL_DEFINE_PIXELFOURCC('O', 'E', 'S', ' ')
} SDL_PixelFormatEnum; } SDL_PixelFormat;
/** /**
* Pixels are a representation of a color in a particular color space. * Pixels are a representation of a color in a particular color space.
@ -721,7 +722,6 @@ typedef struct SDL_FColor
* *
* \since This struct is available since SDL 3.0.0. * \since This struct is available since SDL 3.0.0.
* *
* \sa SDL_PixelFormat
* \sa SDL_SetPaletteColors * \sa SDL_SetPaletteColors
*/ */
typedef struct SDL_Palette typedef struct SDL_Palette
@ -735,15 +735,11 @@ typedef struct SDL_Palette
/** /**
* Details about the format of a pixel. * Details about the format of a pixel.
* *
* Generally this is used with SDL_Surface, and covers many possible
* configurations, including paletted data and various bit patterns.
*
* \since This struct is available since SDL 3.0.0. * \since This struct is available since SDL 3.0.0.
*/ */
typedef struct SDL_PixelFormat typedef struct SDL_PixelFormatDetails
{ {
SDL_PixelFormatEnum format; SDL_PixelFormat format;
SDL_Palette *palette;
Uint8 bits_per_pixel; Uint8 bits_per_pixel;
Uint8 bytes_per_pixel; Uint8 bytes_per_pixel;
Uint8 padding[2]; Uint8 padding[2];
@ -751,17 +747,15 @@ typedef struct SDL_PixelFormat
Uint32 Gmask; Uint32 Gmask;
Uint32 Bmask; Uint32 Bmask;
Uint32 Amask; Uint32 Amask;
Uint8 Rloss; Uint8 Rbits;
Uint8 Gloss; Uint8 Gbits;
Uint8 Bloss; Uint8 Bbits;
Uint8 Aloss; Uint8 Abits;
Uint8 Rshift; Uint8 Rshift;
Uint8 Gshift; Uint8 Gshift;
Uint8 Bshift; Uint8 Bshift;
Uint8 Ashift; Uint8 Ashift;
int refcount; } SDL_PixelFormatDetails;
struct SDL_PixelFormat *next;
} SDL_PixelFormat;
/** /**
* Get the human readable name of a pixel format. * Get the human readable name of a pixel format.
@ -772,32 +766,31 @@ typedef struct SDL_PixelFormat
* \returns the human readable name of the specified pixel format or * \returns the human readable name of the specified pixel format or
* `SDL_PIXELFORMAT_UNKNOWN` if the format isn't recognized. * `SDL_PIXELFORMAT_UNKNOWN` if the format isn't recognized.
* *
* \threadsafety It is safe to call this function from any thread.
*
* \since This function is available since SDL 3.0.0. * \since This function is available since SDL 3.0.0.
*/ */
extern SDL_DECLSPEC const char* SDLCALL SDL_GetPixelFormatName(SDL_PixelFormatEnum format); extern SDL_DECLSPEC const char* SDLCALL SDL_GetPixelFormatName(SDL_PixelFormat format);
/** /**
* Convert one of the enumerated pixel formats to a bpp value and RGBA masks. * Convert one of the enumerated pixel formats to a bpp value and RGBA masks.
* *
* \param format one of the SDL_PixelFormatEnum values. * \param format one of the SDL_PixelFormat values.
* \param bpp a bits per pixel value; usually 15, 16, or 32. * \param bpp a bits per pixel value; usually 15, 16, or 32.
* \param Rmask a pointer filled in with the red mask for the format. * \param Rmask a pointer filled in with the red mask for the format.
* \param Gmask a pointer filled in with the green mask for the format. * \param Gmask a pointer filled in with the green mask for the format.
* \param Bmask a pointer filled in with the blue mask for the format. * \param Bmask a pointer filled in with the blue mask for the format.
* \param Amask a pointer filled in with the alpha mask for the format. * \param Amask a pointer filled in with the alpha mask for the format.
* \returns SDL_TRUE on success or SDL_FALSE if the conversion wasn't * \returns 0 on success or a negative error code on failure; call
* possible; call SDL_GetError() for more information. * SDL_GetError() for more information.
*
* \threadsafety It is safe to call this function from any thread.
* *
* \since This function is available since SDL 3.0.0. * \since This function is available since SDL 3.0.0.
* *
* \sa SDL_GetPixelFormatEnumForMasks * \sa SDL_GetPixelFormatForMasks
*/ */
extern SDL_DECLSPEC SDL_bool SDLCALL SDL_GetMasksForPixelFormatEnum(SDL_PixelFormatEnum format, extern SDL_DECLSPEC int SDLCALL SDL_GetMasksForPixelFormat(SDL_PixelFormat format, int *bpp, Uint32 *Rmask, Uint32 *Gmask, Uint32 *Bmask, Uint32 *Amask);
int *bpp,
Uint32 * Rmask,
Uint32 * Gmask,
Uint32 * Bmask,
Uint32 * Amask);
/** /**
* Convert a bpp value and RGBA masks to an enumerated pixel format. * Convert a bpp value and RGBA masks to an enumerated pixel format.
@ -810,47 +803,33 @@ extern SDL_DECLSPEC SDL_bool SDLCALL SDL_GetMasksForPixelFormatEnum(SDL_PixelFor
* \param Gmask the green mask for the format. * \param Gmask the green mask for the format.
* \param Bmask the blue mask for the format. * \param Bmask the blue mask for the format.
* \param Amask the alpha mask for the format. * \param Amask the alpha mask for the format.
* \returns the SDL_PixelFormatEnum value corresponding to the format masks, * \returns the SDL_PixelFormat value corresponding to the format masks,
* or SDL_PIXELFORMAT_UNKNOWN if there isn't a match. * or SDL_PIXELFORMAT_UNKNOWN if there isn't a match.
* *
* \threadsafety It is safe to call this function from any thread.
*
* \since This function is available since SDL 3.0.0. * \since This function is available since SDL 3.0.0.
* *
* \sa SDL_GetMasksForPixelFormatEnum * \sa SDL_GetMasksForPixelFormat
*/ */
extern SDL_DECLSPEC SDL_PixelFormatEnum SDLCALL SDL_GetPixelFormatEnumForMasks(int bpp, extern SDL_DECLSPEC SDL_PixelFormat SDLCALL SDL_GetPixelFormatForMasks(int bpp, Uint32 Rmask, Uint32 Gmask, Uint32 Bmask, Uint32 Amask);
Uint32 Rmask,
Uint32 Gmask,
Uint32 Bmask,
Uint32 Amask);
/** /**
* Create an SDL_PixelFormat structure corresponding to a pixel format. * Create an SDL_PixelFormatDetails structure corresponding to a pixel format.
* *
* Returned structure may come from a shared global cache (i.e. not newly * Returned structure may come from a shared global cache (i.e. not newly
* allocated), and hence should not be modified, especially the palette. Weird * allocated), and hence should not be modified, especially the palette. Weird
* errors such as `Blit combination not supported` may occur. * errors such as `Blit combination not supported` may occur.
* *
* \param pixel_format one of the SDL_PixelFormatEnum values. * \param format one of the SDL_PixelFormat values.
* \returns the new SDL_PixelFormat structure or NULL on failure; call * \returns a pointer to a SDL_PixelFormatDetails structure or NULL on failure; call
* SDL_GetError() for more information. * SDL_GetError() for more information.
* *
* \since This function is available since SDL 3.0.0. * \threadsafety It is safe to call this function from any thread.
*
* \sa SDL_DestroyPixelFormat
* \sa SDL_SetPixelFormatPalette
*/
extern SDL_DECLSPEC SDL_PixelFormat * SDLCALL SDL_CreatePixelFormat(SDL_PixelFormatEnum pixel_format);
/**
* Free an SDL_PixelFormat structure allocated by SDL_CreatePixelFormat().
*
* \param format the SDL_PixelFormat structure to free.
* *
* \since This function is available since SDL 3.0.0. * \since This function is available since SDL 3.0.0.
*
* \sa SDL_CreatePixelFormat
*/ */
extern SDL_DECLSPEC void SDLCALL SDL_DestroyPixelFormat(SDL_PixelFormat *format); extern SDL_DECLSPEC const SDL_PixelFormatDetails * SDLCALL SDL_GetPixelFormatDetails(SDL_PixelFormat format);
/** /**
* Create a palette structure with the specified number of color entries. * Create a palette structure with the specified number of color entries.
@ -862,27 +841,16 @@ extern SDL_DECLSPEC void SDLCALL SDL_DestroyPixelFormat(SDL_PixelFormat *format)
* there wasn't enough memory); call SDL_GetError() for more * there wasn't enough memory); call SDL_GetError() for more
* information. * information.
* *
* \threadsafety It is safe to call this function from any thread.
*
* \since This function is available since SDL 3.0.0. * \since This function is available since SDL 3.0.0.
* *
* \sa SDL_DestroyPalette * \sa SDL_DestroyPalette
* \sa SDL_SetPaletteColors * \sa SDL_SetPaletteColors
* \sa SDL_SetPixelFormatPalette * \sa SDL_SetSurfacePalette
*/ */
extern SDL_DECLSPEC SDL_Palette *SDLCALL SDL_CreatePalette(int ncolors); extern SDL_DECLSPEC SDL_Palette *SDLCALL SDL_CreatePalette(int ncolors);
/**
* Set the palette for a pixel format structure.
*
* \param format the SDL_PixelFormat structure that will use the palette.
* \param palette the SDL_Palette structure that will be used.
* \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.
*/
extern SDL_DECLSPEC int SDLCALL SDL_SetPixelFormatPalette(SDL_PixelFormat * format,
SDL_Palette *palette);
/** /**
* Set a range of colors in a palette. * Set a range of colors in a palette.
* *
@ -893,22 +861,24 @@ extern SDL_DECLSPEC int SDLCALL SDL_SetPixelFormatPalette(SDL_PixelFormat * form
* \returns 0 on success or a negative error code on failure; call * \returns 0 on success or a negative error code on failure; call
* SDL_GetError() for more information. * SDL_GetError() for more information.
* *
* \threadsafety It is safe to call this function from any thread, as long as the palette is not modified or destroyed in another thread.
*
* \since This function is available since SDL 3.0.0. * \since This function is available since SDL 3.0.0.
*/ */
extern SDL_DECLSPEC int SDLCALL SDL_SetPaletteColors(SDL_Palette * palette, extern SDL_DECLSPEC int SDLCALL SDL_SetPaletteColors(SDL_Palette *palette, const SDL_Color *colors, int firstcolor, int ncolors);
const SDL_Color * colors,
int firstcolor, int ncolors);
/** /**
* Free a palette created with SDL_CreatePalette(). * Free a palette created with SDL_CreatePalette().
* *
* \param palette the SDL_Palette structure to be freed. * \param palette the SDL_Palette structure to be freed.
* *
* \threadsafety It is safe to call this function from any thread, as long as the palette is not modified or destroyed in another thread.
*
* \since This function is available since SDL 3.0.0. * \since This function is available since SDL 3.0.0.
* *
* \sa SDL_CreatePalette * \sa SDL_CreatePalette
*/ */
extern SDL_DECLSPEC void SDLCALL SDL_DestroyPalette(SDL_Palette * palette); extern SDL_DECLSPEC void SDLCALL SDL_DestroyPalette(SDL_Palette *palette);
/** /**
* Map an RGB triple to an opaque pixel value for a given pixel format. * Map an RGB triple to an opaque pixel value for a given pixel format.
@ -928,20 +898,22 @@ extern SDL_DECLSPEC void SDLCALL SDL_DestroyPalette(SDL_Palette * palette);
* format the return value can be assigned to a Uint16, and similarly a Uint8 * format the return value can be assigned to a Uint16, and similarly a Uint8
* for an 8-bpp format). * for an 8-bpp format).
* *
* \param format an SDL_PixelFormat structure describing the pixel format. * \param format a pointer to SDL_PixelFormatDetails describing the pixel format.
* \param palette an optional palette for indexed formats, may be NULL.
* \param r the red component of the pixel in the range 0-255. * \param r the red component of the pixel in the range 0-255.
* \param g the green component of the pixel in the range 0-255. * \param g the green component of the pixel in the range 0-255.
* \param b the blue component of the pixel in the range 0-255. * \param b the blue component of the pixel in the range 0-255.
* \returns a pixel value. * \returns a pixel value.
* *
* \threadsafety It is safe to call this function from any thread, as long as the palette is not modified.
*
* \since This function is available since SDL 3.0.0. * \since This function is available since SDL 3.0.0.
* *
* \sa SDL_GetRGB * \sa SDL_GetRGB
* \sa SDL_GetRGBA
* \sa SDL_MapRGBA * \sa SDL_MapRGBA
* \sa SDL_MapSurfaceRGB
*/ */
extern SDL_DECLSPEC Uint32 SDLCALL SDL_MapRGB(const SDL_PixelFormat * format, extern SDL_DECLSPEC Uint32 SDLCALL SDL_MapRGB(const SDL_PixelFormatDetails *format, const SDL_Palette *palette, Uint8 r, Uint8 g, Uint8 b);
Uint8 r, Uint8 g, Uint8 b);
/** /**
* Map an RGBA quadruple to a pixel value for a given pixel format. * Map an RGBA quadruple to a pixel value for a given pixel format.
@ -961,23 +933,23 @@ extern SDL_DECLSPEC Uint32 SDLCALL SDL_MapRGB(const SDL_PixelFormat * format,
* format the return value can be assigned to a Uint16, and similarly a Uint8 * format the return value can be assigned to a Uint16, and similarly a Uint8
* for an 8-bpp format). * for an 8-bpp format).
* *
* \param format an SDL_PixelFormat structure describing the format of the * \param format a pointer to SDL_PixelFormatDetails describing the pixel format.
* pixel. * \param palette an optional palette for indexed formats, may be NULL.
* \param r the red component of the pixel in the range 0-255. * \param r the red component of the pixel in the range 0-255.
* \param g the green component of the pixel in the range 0-255. * \param g the green component of the pixel in the range 0-255.
* \param b the blue component of the pixel in the range 0-255. * \param b the blue component of the pixel in the range 0-255.
* \param a the alpha component of the pixel in the range 0-255. * \param a the alpha component of the pixel in the range 0-255.
* \returns a pixel value. * \returns a pixel value.
* *
* \threadsafety It is safe to call this function from any thread, as long as the palette is not modified.
*
* \since This function is available since SDL 3.0.0. * \since This function is available since SDL 3.0.0.
* *
* \sa SDL_GetRGB
* \sa SDL_GetRGBA * \sa SDL_GetRGBA
* \sa SDL_MapRGB * \sa SDL_MapRGB
* \sa SDL_MapSurfaceRGBA
*/ */
extern SDL_DECLSPEC Uint32 SDLCALL SDL_MapRGBA(const SDL_PixelFormat * format, extern SDL_DECLSPEC Uint32 SDLCALL SDL_MapRGBA(const SDL_PixelFormatDetails *format, const SDL_Palette *palette, Uint8 r, Uint8 g, Uint8 b, Uint8 a);
Uint8 r, Uint8 g, Uint8 b,
Uint8 a);
/** /**
* Get RGB values from a pixel in the specified format. * Get RGB values from a pixel in the specified format.
@ -988,11 +960,13 @@ extern SDL_DECLSPEC Uint32 SDLCALL SDL_MapRGBA(const SDL_PixelFormat * format,
* 0xff, 0xff] not [0xf8, 0xfc, 0xf8]). * 0xff, 0xff] not [0xf8, 0xfc, 0xf8]).
* *
* \param pixel a pixel value. * \param pixel a pixel value.
* \param format an SDL_PixelFormat structure describing the format of the * \param format a pointer to SDL_PixelFormatDetails describing the pixel format.
* pixel. * \param palette an optional palette for indexed formats, may be NULL.
* \param r a pointer filled in with the red component. * \param r a pointer filled in with the red component, may be NULL.
* \param g a pointer filled in with the green component. * \param g a pointer filled in with the green component, may be NULL.
* \param b a pointer filled in with the blue component. * \param b a pointer filled in with the blue component, may be NULL.
*
* \threadsafety It is safe to call this function from any thread, as long as the palette is not modified.
* *
* \since This function is available since SDL 3.0.0. * \since This function is available since SDL 3.0.0.
* *
@ -1000,9 +974,7 @@ extern SDL_DECLSPEC Uint32 SDLCALL SDL_MapRGBA(const SDL_PixelFormat * format,
* \sa SDL_MapRGB * \sa SDL_MapRGB
* \sa SDL_MapRGBA * \sa SDL_MapRGBA
*/ */
extern SDL_DECLSPEC void SDLCALL SDL_GetRGB(Uint32 pixel, extern SDL_DECLSPEC void SDLCALL SDL_GetRGB(Uint32 pixel, const SDL_PixelFormatDetails *format, const SDL_Palette *palette, Uint8 *r, Uint8 *g, Uint8 *b);
const SDL_PixelFormat * format,
Uint8 * r, Uint8 * g, Uint8 * b);
/** /**
* Get RGBA values from a pixel in the specified format. * Get RGBA values from a pixel in the specified format.
@ -1016,12 +988,14 @@ extern SDL_DECLSPEC void SDLCALL SDL_GetRGB(Uint32 pixel,
* (100% opaque). * (100% opaque).
* *
* \param pixel a pixel value. * \param pixel a pixel value.
* \param format an SDL_PixelFormat structure describing the format of the * \param format a pointer to SDL_PixelFormatDetails describing the pixel format.
* pixel. * \param palette an optional palette for indexed formats, may be NULL.
* \param r a pointer filled in with the red component. * \param r a pointer filled in with the red component, may be NULL.
* \param g a pointer filled in with the green component. * \param g a pointer filled in with the green component, may be NULL.
* \param b a pointer filled in with the blue component. * \param b a pointer filled in with the blue component, may be NULL.
* \param a a pointer filled in with the alpha component. * \param a a pointer filled in with the alpha component, may be NULL.
*
* \threadsafety It is safe to call this function from any thread, as long as the palette is not modified.
* *
* \since This function is available since SDL 3.0.0. * \since This function is available since SDL 3.0.0.
* *
@ -1029,10 +1003,7 @@ extern SDL_DECLSPEC void SDLCALL SDL_GetRGB(Uint32 pixel,
* \sa SDL_MapRGB * \sa SDL_MapRGB
* \sa SDL_MapRGBA * \sa SDL_MapRGBA
*/ */
extern SDL_DECLSPEC void SDLCALL SDL_GetRGBA(Uint32 pixel, extern SDL_DECLSPEC void SDLCALL SDL_GetRGBA(Uint32 pixel, const SDL_PixelFormatDetails *format, const SDL_Palette *palette, Uint8 *r, Uint8 *g, Uint8 *b, Uint8 *a);
const SDL_PixelFormat * format,
Uint8 * r, Uint8 * g, Uint8 * b,
Uint8 * a);
/* Ends C function definitions when using C++ */ /* Ends C function definitions when using C++ */

View File

@ -350,8 +350,7 @@ extern SDL_DECLSPEC const char *SDLCALL SDL_GetRendererName(SDL_Renderer *render
* - `SDL_PROP_RENDERER_VSYNC_NUMBER`: the current vsync setting * - `SDL_PROP_RENDERER_VSYNC_NUMBER`: the current vsync setting
* - `SDL_PROP_RENDERER_MAX_TEXTURE_SIZE_NUMBER`: the maximum texture width * - `SDL_PROP_RENDERER_MAX_TEXTURE_SIZE_NUMBER`: the maximum texture width
* and height * and height
* - `SDL_PROP_RENDERER_TEXTURE_FORMATS_POINTER`: a (const SDL_PixelFormatEnum * - `SDL_PROP_RENDERER_TEXTURE_FORMATS_POINTER`: a (const SDL_PixelFormat *) array of pixel formats, terminated with SDL_PIXELFORMAT_UNKNOWN,
* *) array of pixel formats, terminated with SDL_PIXELFORMAT_UNKNOWN,
* representing the available texture formats for this renderer. * representing the available texture formats for this renderer.
* - `SDL_PROP_RENDERER_OUTPUT_COLORSPACE_NUMBER`: an SDL_ColorSpace value * - `SDL_PROP_RENDERER_OUTPUT_COLORSPACE_NUMBER`: an SDL_ColorSpace value
* describing the colorspace for output to the display, defaults to * describing the colorspace for output to the display, defaults to
@ -485,7 +484,7 @@ extern SDL_DECLSPEC int SDLCALL SDL_GetCurrentRenderOutputSize(SDL_Renderer *ren
* Create a texture for a rendering context. * Create a texture for a rendering context.
* *
* \param renderer the rendering context. * \param renderer the rendering context.
* \param format one of the enumerated values in SDL_PixelFormatEnum. * \param format one of the enumerated values in SDL_PixelFormat.
* \param access one of the enumerated values in SDL_TextureAccess. * \param access one of the enumerated values in SDL_TextureAccess.
* \param w the width of the texture in pixels. * \param w the width of the texture in pixels.
* \param h the height of the texture in pixels. * \param h the height of the texture in pixels.
@ -501,7 +500,7 @@ extern SDL_DECLSPEC int SDLCALL SDL_GetCurrentRenderOutputSize(SDL_Renderer *ren
* \sa SDL_GetTextureSize * \sa SDL_GetTextureSize
* \sa SDL_UpdateTexture * \sa SDL_UpdateTexture
*/ */
extern SDL_DECLSPEC SDL_Texture *SDLCALL SDL_CreateTexture(SDL_Renderer *renderer, SDL_PixelFormatEnum format, int access, int w, int h); extern SDL_DECLSPEC SDL_Texture *SDLCALL SDL_CreateTexture(SDL_Renderer *renderer, SDL_PixelFormat format, int access, int w, int h);
/** /**
* Create a texture from an existing surface. * Create a texture from an existing surface.
@ -540,7 +539,7 @@ extern SDL_DECLSPEC SDL_Texture *SDLCALL SDL_CreateTextureFromSurface(SDL_Render
* SDL_COLORSPACE_SRGB for other RGB textures and SDL_COLORSPACE_JPEG for * SDL_COLORSPACE_SRGB for other RGB textures and SDL_COLORSPACE_JPEG for
* YUV textures. * YUV textures.
* - `SDL_PROP_TEXTURE_CREATE_FORMAT_NUMBER`: one of the enumerated values in * - `SDL_PROP_TEXTURE_CREATE_FORMAT_NUMBER`: one of the enumerated values in
* SDL_PixelFormatEnum, defaults to the best RGBA format for the renderer * SDL_PixelFormat, defaults to the best RGBA format for the renderer
* - `SDL_PROP_TEXTURE_CREATE_ACCESS_NUMBER`: one of the enumerated values in * - `SDL_PROP_TEXTURE_CREATE_ACCESS_NUMBER`: one of the enumerated values in
* SDL_TextureAccess, defaults to SDL_TEXTUREACCESS_STATIC * SDL_TextureAccess, defaults to SDL_TEXTUREACCESS_STATIC
* - `SDL_PROP_TEXTURE_CREATE_WIDTH_NUMBER`: the width of the texture in * - `SDL_PROP_TEXTURE_CREATE_WIDTH_NUMBER`: the width of the texture in
@ -672,7 +671,7 @@ extern SDL_DECLSPEC SDL_Texture *SDLCALL SDL_CreateTextureWithProperties(SDL_Ren
* - `SDL_PROP_TEXTURE_COLORSPACE_NUMBER`: an SDL_ColorSpace value describing * - `SDL_PROP_TEXTURE_COLORSPACE_NUMBER`: an SDL_ColorSpace value describing
* the texture colorspace. * the texture colorspace.
* - `SDL_PROP_TEXTURE_FORMAT_NUMBER`: one of the enumerated values in * - `SDL_PROP_TEXTURE_FORMAT_NUMBER`: one of the enumerated values in
* SDL_PixelFormatEnum. * SDL_PixelFormat.
* - `SDL_PROP_TEXTURE_ACCESS_NUMBER`: one of the enumerated values in * - `SDL_PROP_TEXTURE_ACCESS_NUMBER`: one of the enumerated values in
* SDL_TextureAccess. * SDL_TextureAccess.
* - `SDL_PROP_TEXTURE_WIDTH_NUMBER`: the width of the texture in pixels. * - `SDL_PROP_TEXTURE_WIDTH_NUMBER`: the width of the texture in pixels.

View File

@ -45,34 +45,23 @@ extern "C" {
/** /**
* The flags on an SDL_Surface. * The flags on an SDL_Surface.
* *
* These are generally meant to be considered read-only. * These are generally considered read-only.
* *
* \since This datatype is available since SDL 3.0.0. * \since This datatype is available since SDL 3.0.0.
*/ */
typedef Uint32 SDL_SurfaceFlags; typedef Uint32 SDL_SurfaceFlags;
#define SDL_PREALLOC 0x00000001u /**< Surface uses preallocated memory */ #define SDL_SURFACE_PREALLOCATED 0x00000001u /**< Surface uses preallocated pixel memory */
#define SDL_RLEACCEL 0x00000002u /**< Surface is RLE encoded */ #define SDL_SURFACE_LOCK_NEEDED 0x00000002u /**< Surface needs to be locked to access pixels */
#define SDL_DONTFREE 0x00000004u /**< Surface is referenced internally */ #define SDL_SURFACE_LOCKED 0x00000004u /**< Surface is currently locked */
#define SDL_SIMD_ALIGNED 0x00000008u /**< Surface uses aligned memory */ #define SDL_SURFACE_SIMD_ALIGNED 0x00000008u /**< Surface uses pixel memory allocated with SDL_aligned_alloc() */
#define SDL_SURFACE_USES_PROPERTIES 0x00000010u /**< Surface uses properties */
/** /**
* Evaluates to true if the surface needs to be locked before access. * Evaluates to true if the surface needs to be locked before access.
* *
* \since This macro is available since SDL 3.0.0. * \since This macro is available since SDL 3.0.0.
*/ */
#define SDL_MUSTLOCK(S) (((S)->flags & SDL_RLEACCEL) != 0) #define SDL_MUSTLOCK(S) (((S)->flags & (SDL_SURFACE_LOCK_NEEDED | SDL_SURFACE_LOCKED)) == SDL_SURFACE_LOCK_NEEDED)
/**
* An opaque type used in SDL_Surface.
*
* This is used by SDL to keep track of how blit operations should work
* internally; it is not for use directly by applications.
*
* \since This struct is available since SDL 3.0.0.
*/
typedef struct SDL_BlitMap SDL_BlitMap;
/** /**
* The scaling mode. * The scaling mode.
@ -98,6 +87,9 @@ typedef enum SDL_FlipMode
SDL_FLIP_VERTICAL /**< flip vertically */ SDL_FLIP_VERTICAL /**< flip vertically */
} SDL_FlipMode; } SDL_FlipMode;
/* Internal surface data */
typedef struct SDL_SurfaceData SDL_SurfaceData;
/** /**
* A collection of pixels used in software blitting. * A collection of pixels used in software blitting.
* *
@ -118,36 +110,24 @@ typedef enum SDL_FlipMode
typedef struct SDL_Surface typedef struct SDL_Surface
{ {
SDL_SurfaceFlags flags; /**< Read-only */ SDL_SurfaceFlags flags; /**< Read-only */
SDL_PixelFormat *format; /**< Read-only */ SDL_PixelFormat format; /**< Read-only */
int w, h; /**< Read-only */ int w, h; /**< Read-only */
int pitch; /**< Read-only */ int pitch; /**< Read-only */
void *pixels; /**< Read-write */ void *pixels; /**< Read-only pointer, writable pixels if non-NULL */
void *reserved; /**< Private */ int refcount; /**< Application reference count, used when freeing surface */
/** information needed for surfaces requiring locks */ SDL_SurfaceData *internal; /**< Private */
int locked; /**< Read-only */
/** list of BlitMap that hold a reference to this surface */
void *list_blitmap; /**< Private */
/** clipping information */
SDL_Rect clip_rect; /**< Read-only */
/** info for fast blit mapping to other surfaces */
SDL_BlitMap *map; /**< Private */
/** Reference count -- used when freeing surface */
int refcount; /**< Read-mostly */
} SDL_Surface; } SDL_Surface;
/** /**
* Allocate a new RGB surface with a specific pixel format. * Allocate a new surface with a specific pixel format.
* *
* \param width the width of the surface. * \param width the width of the surface.
* \param height the height of the surface. * \param height the height of the surface.
* \param format the SDL_PixelFormatEnum for the new surface's pixel format. * \param format the SDL_PixelFormat for the new surface's pixel format.
* \returns the new SDL_Surface structure that is created or NULL if it fails; * \returns the new SDL_Surface structure that is created or NULL if it fails;
* call SDL_GetError() for more information. * call SDL_GetError() for more information.
* *
@ -156,11 +136,10 @@ typedef struct SDL_Surface
* \sa SDL_CreateSurfaceFrom * \sa SDL_CreateSurfaceFrom
* \sa SDL_DestroySurface * \sa SDL_DestroySurface
*/ */
extern SDL_DECLSPEC SDL_Surface *SDLCALL SDL_CreateSurface(int width, int height, SDL_PixelFormatEnum format); extern SDL_DECLSPEC SDL_Surface *SDLCALL SDL_CreateSurface(int width, int height, SDL_PixelFormat format);
/** /**
* Allocate a new RGB surface with a specific pixel format and existing pixel * Allocate a new surface with a specific pixel format and existing pixel data.
* data.
* *
* No copy is made of the pixel data. Pixel data is not managed automatically; * No copy is made of the pixel data. Pixel data is not managed automatically;
* you must free the surface before you free the pixel data. * you must free the surface before you free the pixel data.
@ -171,11 +150,11 @@ extern SDL_DECLSPEC SDL_Surface *SDLCALL SDL_CreateSurface(int width, int height
* You may pass NULL for pixels and 0 for pitch to create a surface that you * You may pass NULL for pixels and 0 for pitch to create a surface that you
* will fill in with valid values later. * will fill in with valid values later.
* *
* \param pixels a pointer to existing pixel data.
* \param width the width of the surface. * \param width the width of the surface.
* \param height the height of the surface. * \param height the height of the surface.
* \param format the SDL_PixelFormat for the new surface's pixel format.
* \param pixels a pointer to existing pixel data.
* \param pitch the number of bytes between each row, including padding. * \param pitch the number of bytes between each row, including padding.
* \param format the SDL_PixelFormatEnum for the new surface's pixel format.
* \returns the new SDL_Surface structure that is created or NULL if it fails; * \returns the new SDL_Surface structure that is created or NULL if it fails;
* call SDL_GetError() for more information. * call SDL_GetError() for more information.
* *
@ -184,10 +163,10 @@ extern SDL_DECLSPEC SDL_Surface *SDLCALL SDL_CreateSurface(int width, int height
* \sa SDL_CreateSurface * \sa SDL_CreateSurface
* \sa SDL_DestroySurface * \sa SDL_DestroySurface
*/ */
extern SDL_DECLSPEC SDL_Surface *SDLCALL SDL_CreateSurfaceFrom(void *pixels, int width, int height, int pitch, SDL_PixelFormatEnum format); extern SDL_DECLSPEC SDL_Surface *SDLCALL SDL_CreateSurfaceFrom(int width, int height, SDL_PixelFormat format, void *pixels, int pitch);
/** /**
* Free an RGB surface. * Free a surface.
* *
* It is safe to pass NULL to this function. * It is safe to pass NULL to this function.
* *
@ -195,6 +174,7 @@ extern SDL_DECLSPEC SDL_Surface *SDLCALL SDL_CreateSurfaceFrom(void *pixels, int
* *
* \since This function is available since SDL 3.0.0. * \since This function is available since SDL 3.0.0.
* *
* \sa SDL_CreateStackSurface
* \sa SDL_CreateSurface * \sa SDL_CreateSurface
* \sa SDL_CreateSurfaceFrom * \sa SDL_CreateSurfaceFrom
*/ */
@ -254,6 +234,8 @@ extern SDL_DECLSPEC SDL_PropertiesID SDLCALL SDL_GetSurfaceProperties(SDL_Surfac
* SDL_GetError() for more information. * 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_GetSurfaceColorspace
*/ */
extern SDL_DECLSPEC int SDLCALL SDL_SetSurfaceColorspace(SDL_Surface *surface, SDL_Colorspace colorspace); extern SDL_DECLSPEC int SDLCALL SDL_SetSurfaceColorspace(SDL_Surface *surface, SDL_Colorspace colorspace);
@ -265,14 +247,13 @@ extern SDL_DECLSPEC int SDLCALL SDL_SetSurfaceColorspace(SDL_Surface *surface, S
* other RGB surfaces and SDL_COLORSPACE_BT709_FULL for YUV textures. * other RGB surfaces and SDL_COLORSPACE_BT709_FULL for YUV textures.
* *
* \param surface the SDL_Surface structure to query. * \param surface the SDL_Surface structure to query.
* \param colorspace a pointer filled in with an SDL_ColorSpace value * \returns the colorspace used by the surface, or SDL_COLORSPACE_UNKNOWN if the surface is NULL.
* describing the surface colorspace.
* \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_SetSurfaceColorspace
*/ */
extern SDL_DECLSPEC int SDLCALL SDL_GetSurfaceColorspace(SDL_Surface *surface, SDL_Colorspace *colorspace); extern SDL_DECLSPEC SDL_Colorspace SDLCALL SDL_GetSurfaceColorspace(SDL_Surface *surface);
/** /**
* Set the palette used by a surface. * Set the palette used by a surface.
@ -285,9 +266,24 @@ extern SDL_DECLSPEC int SDLCALL SDL_GetSurfaceColorspace(SDL_Surface *surface, S
* SDL_GetError() for more information. * 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_CreatePalette
* \sa SDL_GetSurfacePalette
*/ */
extern SDL_DECLSPEC int SDLCALL SDL_SetSurfacePalette(SDL_Surface *surface, SDL_Palette *palette); extern SDL_DECLSPEC int SDLCALL SDL_SetSurfacePalette(SDL_Surface *surface, SDL_Palette *palette);
/**
* Get the palette used by a surface.
*
* \param surface the SDL_Surface structure to query.
* \returns a pointer to the palette used by the surface, or NULL if there is no palette used.
*
* \since This function is available since SDL 3.0.0.
*
* \sa SDL_SetSurfacePalette
*/
extern SDL_DECLSPEC SDL_Palette * SDLCALL SDL_GetSurfacePalette(SDL_Surface *surface);
/** /**
* Set up a surface for directly accessing the pixels. * Set up a surface for directly accessing the pixels.
* *
@ -411,7 +407,7 @@ extern SDL_DECLSPEC int SDLCALL SDL_SaveBMP(SDL_Surface *surface, const char *fi
* the surface must be locked before directly accessing the pixels. * the surface must be locked before directly accessing the pixels.
* *
* \param surface the SDL_Surface structure to optimize. * \param surface the SDL_Surface structure to optimize.
* \param flag 0 to disable, non-zero to enable RLE acceleration. * \param enabled SDL_TRUE to enable RLE acceleration, SDL_FALSE to disable it.
* \returns 0 on success or a negative error code on failure; call * \returns 0 on success or a negative error code on failure; call
* SDL_GetError() for more information. * SDL_GetError() for more information.
* *
@ -421,7 +417,7 @@ extern SDL_DECLSPEC int SDLCALL SDL_SaveBMP(SDL_Surface *surface, const char *fi
* \sa SDL_LockSurface * \sa SDL_LockSurface
* \sa SDL_UnlockSurface * \sa SDL_UnlockSurface
*/ */
extern SDL_DECLSPEC int SDLCALL SDL_SetSurfaceRLE(SDL_Surface *surface, int flag); extern SDL_DECLSPEC int SDLCALL SDL_SetSurfaceRLE(SDL_Surface *surface, SDL_bool enabled);
/** /**
* Returns whether the surface is RLE enabled. * Returns whether the surface is RLE enabled.
@ -447,11 +443,8 @@ extern SDL_DECLSPEC SDL_bool SDLCALL SDL_SurfaceHasRLE(SDL_Surface *surface);
* It is a pixel of the format used by the surface, as generated by * It is a pixel of the format used by the surface, as generated by
* SDL_MapRGB(). * SDL_MapRGB().
* *
* RLE acceleration can substantially speed up blitting of images with large
* horizontal runs of transparent pixels. See SDL_SetSurfaceRLE() for details.
*
* \param surface the SDL_Surface structure to update. * \param surface the SDL_Surface structure to update.
* \param flag SDL_TRUE to enable color key, SDL_FALSE to disable color key. * \param enabled SDL_TRUE to enable color key, SDL_FALSE to disable color key.
* \param key the transparent pixel. * \param key the transparent pixel.
* \returns 0 on success or a negative error code on failure; call * \returns 0 on success or a negative error code on failure; call
* SDL_GetError() for more information. * SDL_GetError() for more information.
@ -459,9 +452,10 @@ extern SDL_DECLSPEC SDL_bool SDLCALL SDL_SurfaceHasRLE(SDL_Surface *surface);
* \since This function is available since SDL 3.0.0. * \since This function is available since SDL 3.0.0.
* *
* \sa SDL_GetSurfaceColorKey * \sa SDL_GetSurfaceColorKey
* \sa SDL_SetSurfaceRLE
* \sa SDL_SurfaceHasColorKey * \sa SDL_SurfaceHasColorKey
*/ */
extern SDL_DECLSPEC int SDLCALL SDL_SetSurfaceColorKey(SDL_Surface *surface, int flag, Uint32 key); extern SDL_DECLSPEC int SDLCALL SDL_SetSurfaceColorKey(SDL_Surface *surface, SDL_bool enabled, Uint32 key);
/** /**
* Returns whether the surface has a color key. * Returns whether the surface has a color key.
@ -681,41 +675,19 @@ extern SDL_DECLSPEC SDL_Surface *SDLCALL SDL_DuplicateSurface(SDL_Surface *surfa
* surface. The new, optimized surface can then be used as the source for * surface. The new, optimized surface can then be used as the source for
* future blits, making them faster. * future blits, making them faster.
* *
* If you are converting to an indexed surface and want to map colors to a palette, you can use SDL_ConvertSurfaceAndColorspace() instead.
*
* \param surface the existing SDL_Surface structure to convert. * \param surface the existing SDL_Surface structure to convert.
* \param format the SDL_PixelFormat structure that the new surface is * \param format the new pixel format.
* optimized for.
* \returns the new SDL_Surface structure that is created or NULL if it fails; * \returns the new SDL_Surface structure that is created or NULL if it fails;
* call SDL_GetError() for more information. * 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_ConvertSurfaceFormat * \sa SDL_ConvertSurfaceAndColorspace
* \sa SDL_ConvertSurfaceFormatAndColorspace
* \sa SDL_CreatePixelFormat
* \sa SDL_DestroySurface * \sa SDL_DestroySurface
*/ */
extern SDL_DECLSPEC SDL_Surface *SDLCALL SDL_ConvertSurface(SDL_Surface *surface, const SDL_PixelFormat *format); extern SDL_DECLSPEC SDL_Surface *SDLCALL SDL_ConvertSurface(SDL_Surface *surface, SDL_PixelFormat format);
/**
* Copy an existing surface to a new surface of the specified format.
*
* This function operates just like SDL_ConvertSurface(), but accepts an
* SDL_PixelFormatEnum value instead of an SDL_PixelFormat structure. As such,
* it might be easier to call but it doesn't have access to palette
* information for the destination surface, in case that would be important.
*
* \param surface the existing SDL_Surface structure to convert.
* \param pixel_format the new pixel format.
* \returns the new SDL_Surface structure that is created or NULL if it fails;
* call SDL_GetError() for more information.
*
* \since This function is available since SDL 3.0.0.
*
* \sa SDL_ConvertSurface
* \sa SDL_ConvertSurfaceFormatAndColorspace
* \sa SDL_DestroySurface
*/
extern SDL_DECLSPEC SDL_Surface *SDLCALL SDL_ConvertSurfaceFormat(SDL_Surface *surface, SDL_PixelFormatEnum pixel_format);
/** /**
* Copy an existing surface to a new surface of the specified format and * Copy an existing surface to a new surface of the specified format and
@ -726,7 +698,8 @@ extern SDL_DECLSPEC SDL_Surface *SDLCALL SDL_ConvertSurfaceFormat(SDL_Surface *s
* colorspace conversion needed. * colorspace conversion needed.
* *
* \param surface the existing SDL_Surface structure to convert. * \param surface the existing SDL_Surface structure to convert.
* \param pixel_format the new pixel format. * \param format the new pixel format.
* \param palette an optional palette to use for indexed formats, may be NULL.
* \param colorspace the new colorspace. * \param colorspace the new colorspace.
* \param props an SDL_PropertiesID with additional color properties, or 0. * \param props an SDL_PropertiesID with additional color properties, or 0.
* \returns the new SDL_Surface structure that is created or NULL if it fails; * \returns the new SDL_Surface structure that is created or NULL if it fails;
@ -735,20 +708,20 @@ extern SDL_DECLSPEC SDL_Surface *SDLCALL SDL_ConvertSurfaceFormat(SDL_Surface *s
* \since This function is available since SDL 3.0.0. * \since This function is available since SDL 3.0.0.
* *
* \sa SDL_ConvertSurface * \sa SDL_ConvertSurface
* \sa SDL_ConvertSurfaceFormat * \sa SDL_ConvertSurface
* \sa SDL_DestroySurface * \sa SDL_DestroySurface
*/ */
extern SDL_DECLSPEC SDL_Surface *SDLCALL SDL_ConvertSurfaceFormatAndColorspace(SDL_Surface *surface, SDL_PixelFormatEnum pixel_format, SDL_Colorspace colorspace, SDL_PropertiesID props); extern SDL_DECLSPEC SDL_Surface *SDLCALL SDL_ConvertSurfaceAndColorspace(SDL_Surface *surface, SDL_PixelFormat format, const SDL_Palette *palette, SDL_Colorspace colorspace, SDL_PropertiesID props);
/** /**
* Copy a block of pixels of one format to another format. * Copy a block of pixels of one format to another format.
* *
* \param width the width of the block to copy, in pixels. * \param width the width of the block to copy, in pixels.
* \param height the height of the block to copy, in pixels. * \param height the height of the block to copy, in pixels.
* \param src_format an SDL_PixelFormatEnum value of the `src` pixels format. * \param src_format an SDL_PixelFormat value of the `src` pixels format.
* \param src a pointer to the source pixels. * \param src a pointer to the source pixels.
* \param src_pitch the pitch of the source pixels, in bytes. * \param src_pitch the pitch of the source pixels, in bytes.
* \param dst_format an SDL_PixelFormatEnum value of the `dst` pixels format. * \param dst_format an SDL_PixelFormat value of the `dst` pixels format.
* \param dst a pointer to be filled in with new pixel data. * \param dst a pointer to be filled in with new pixel data.
* \param dst_pitch the pitch of the destination pixels, in bytes. * \param dst_pitch the pitch of the destination pixels, in bytes.
* \returns 0 on success or a negative error code on failure; call * \returns 0 on success or a negative error code on failure; call
@ -758,7 +731,7 @@ extern SDL_DECLSPEC SDL_Surface *SDLCALL SDL_ConvertSurfaceFormatAndColorspace(S
* *
* \sa SDL_ConvertPixelsAndColorspace * \sa SDL_ConvertPixelsAndColorspace
*/ */
extern SDL_DECLSPEC int SDLCALL SDL_ConvertPixels(int width, int height, SDL_PixelFormatEnum src_format, const void *src, int src_pitch, SDL_PixelFormatEnum dst_format, void *dst, int dst_pitch); extern SDL_DECLSPEC int SDLCALL SDL_ConvertPixels(int width, int height, SDL_PixelFormat src_format, const void *src, int src_pitch, SDL_PixelFormat dst_format, void *dst, int dst_pitch);
/** /**
* Copy a block of pixels of one format and colorspace to another format and * Copy a block of pixels of one format and colorspace to another format and
@ -766,14 +739,14 @@ extern SDL_DECLSPEC int SDLCALL SDL_ConvertPixels(int width, int height, SDL_Pix
* *
* \param width the width of the block to copy, in pixels. * \param width the width of the block to copy, in pixels.
* \param height the height of the block to copy, in pixels. * \param height the height of the block to copy, in pixels.
* \param src_format an SDL_PixelFormatEnum value of the `src` pixels format. * \param src_format an SDL_PixelFormat value of the `src` pixels format.
* \param src_colorspace an SDL_ColorSpace value describing the colorspace of * \param src_colorspace an SDL_ColorSpace value describing the colorspace of
* the `src` pixels. * the `src` pixels.
* \param src_properties an SDL_PropertiesID with additional source color * \param src_properties an SDL_PropertiesID with additional source color
* properties, or 0. * properties, or 0.
* \param src a pointer to the source pixels. * \param src a pointer to the source pixels.
* \param src_pitch the pitch of the source pixels, in bytes. * \param src_pitch the pitch of the source pixels, in bytes.
* \param dst_format an SDL_PixelFormatEnum value of the `dst` pixels format. * \param dst_format an SDL_PixelFormat value of the `dst` pixels format.
* \param dst_colorspace an SDL_ColorSpace value describing the colorspace of * \param dst_colorspace an SDL_ColorSpace value describing the colorspace of
* the `dst` pixels. * the `dst` pixels.
* \param dst_properties an SDL_PropertiesID with additional destination color * \param dst_properties an SDL_PropertiesID with additional destination color
@ -787,7 +760,7 @@ extern SDL_DECLSPEC int SDLCALL SDL_ConvertPixels(int width, int height, SDL_Pix
* *
* \sa SDL_ConvertPixels * \sa SDL_ConvertPixels
*/ */
extern SDL_DECLSPEC int SDLCALL SDL_ConvertPixelsAndColorspace(int width, int height, SDL_PixelFormatEnum src_format, SDL_Colorspace src_colorspace, SDL_PropertiesID src_properties, const void *src, int src_pitch, SDL_PixelFormatEnum dst_format, SDL_Colorspace dst_colorspace, SDL_PropertiesID dst_properties, void *dst, int dst_pitch); extern SDL_DECLSPEC int SDLCALL SDL_ConvertPixelsAndColorspace(int width, int height, SDL_PixelFormat src_format, SDL_Colorspace src_colorspace, SDL_PropertiesID src_properties, const void *src, int src_pitch, SDL_PixelFormat dst_format, SDL_Colorspace dst_colorspace, SDL_PropertiesID dst_properties, void *dst, int dst_pitch);
/** /**
* Premultiply the alpha on a block of pixels. * Premultiply the alpha on a block of pixels.
@ -798,10 +771,10 @@ extern SDL_DECLSPEC int SDLCALL SDL_ConvertPixelsAndColorspace(int width, int he
* *
* \param width the width of the block to convert, in pixels. * \param width the width of the block to convert, in pixels.
* \param height the height of the block to convert, in pixels. * \param height the height of the block to convert, in pixels.
* \param src_format an SDL_PixelFormatEnum value of the `src` pixels format. * \param src_format an SDL_PixelFormat value of the `src` pixels format.
* \param src a pointer to the source pixels. * \param src a pointer to the source pixels.
* \param src_pitch the pitch of the source pixels, in bytes. * \param src_pitch the pitch of the source pixels, in bytes.
* \param dst_format an SDL_PixelFormatEnum value of the `dst` pixels format. * \param dst_format an SDL_PixelFormat value of the `dst` pixels format.
* \param dst a pointer to be filled in with premultiplied pixel data. * \param dst a pointer to be filled in with premultiplied pixel data.
* \param dst_pitch the pitch of the destination pixels, in bytes. * \param dst_pitch the pitch of the destination pixels, in bytes.
* \returns 0 on success or a negative error code on failure; call * \returns 0 on success or a negative error code on failure; call
@ -809,7 +782,7 @@ extern SDL_DECLSPEC int SDLCALL SDL_ConvertPixelsAndColorspace(int width, int he
* *
* \since This function is available since SDL 3.0.0. * \since This function is available since SDL 3.0.0.
*/ */
extern SDL_DECLSPEC int SDLCALL SDL_PremultiplyAlpha(int width, int height, SDL_PixelFormatEnum src_format, const void *src, int src_pitch, SDL_PixelFormatEnum dst_format, void *dst, int dst_pitch); extern SDL_DECLSPEC int SDLCALL SDL_PremultiplyAlpha(int width, int height, SDL_PixelFormat src_format, const void *src, int src_pitch, SDL_PixelFormat dst_format, void *dst, int dst_pitch);
/** /**
* Perform a fast fill of a rectangle with a specific color. * Perform a fast fill of a rectangle with a specific color.
@ -1033,6 +1006,67 @@ extern SDL_DECLSPEC int SDLCALL SDL_BlitSurfaceScaled(SDL_Surface *src, const SD
*/ */
extern SDL_DECLSPEC int SDLCALL SDL_BlitSurfaceUncheckedScaled(SDL_Surface *src, const SDL_Rect *srcrect, SDL_Surface *dst, const SDL_Rect *dstrect, SDL_ScaleMode scaleMode); extern SDL_DECLSPEC int SDLCALL SDL_BlitSurfaceUncheckedScaled(SDL_Surface *src, const SDL_Rect *srcrect, SDL_Surface *dst, const SDL_Rect *dstrect, SDL_ScaleMode scaleMode);
/**
* Map an RGB triple to an opaque pixel value for a surface.
*
* This function maps the RGB color value to the specified pixel format and
* returns the pixel value best approximating the given RGB color value for
* the given pixel format.
*
* If the surface has a palette, the index of the closest matching color
* in the palette will be returned.
*
* If the surface pixel format has an alpha component it will be returned as
* all 1 bits (fully opaque).
*
* If the pixel format bpp (color depth) is less than 32-bpp then the unused
* upper bits of the return value can safely be ignored (e.g., with a 16-bpp
* format the return value can be assigned to a Uint16, and similarly a Uint8
* for an 8-bpp format).
*
* \param surface the surface to use for the pixel format and palette.
* \param r the red component of the pixel in the range 0-255.
* \param g the green component of the pixel in the range 0-255.
* \param b the blue component of the pixel in the range 0-255.
* \returns a pixel value.
*
* \since This function is available since SDL 3.0.0.
*
* \sa SDL_MapSurfaceRGBA
*/
extern SDL_DECLSPEC Uint32 SDLCALL SDL_MapSurfaceRGB(SDL_Surface *surface, Uint8 r, Uint8 g, Uint8 b);
/**
* Map an RGBA quadruple to a pixel value for a surface.
*
* This function maps the RGBA color value to the specified pixel format and
* returns the pixel value best approximating the given RGBA color value for
* the given pixel format.
*
* If the surface pixel format has no alpha component the alpha value will
* be ignored (as it will be in formats with a palette).
*
* If the surface has a palette, the index of the closest matching color
* in the palette will be returned.
*
* If the pixel format bpp (color depth) is less than 32-bpp then the unused
* upper bits of the return value can safely be ignored (e.g., with a 16-bpp
* format the return value can be assigned to a Uint16, and similarly a Uint8
* for an 8-bpp format).
*
* \param surface the surface to use for the pixel format and palette.
* \param r the red component of the pixel in the range 0-255.
* \param g the green component of the pixel in the range 0-255.
* \param b the blue component of the pixel in the range 0-255.
* \param a the alpha component of the pixel in the range 0-255.
* \returns a pixel value.
*
* \since This function is available since SDL 3.0.0.
*
* \sa SDL_MapSurfaceRGB
*/
extern SDL_DECLSPEC Uint32 SDLCALL SDL_MapSurfaceRGBA(SDL_Surface *surface, Uint8 r, Uint8 g, Uint8 b, Uint8 a);
/** /**
* Retrieves a single pixel from a surface. * Retrieves a single pixel from a surface.
* *

View File

@ -88,7 +88,7 @@ typedef enum SDL_SystemTheme
typedef struct SDL_DisplayMode typedef struct SDL_DisplayMode
{ {
SDL_DisplayID displayID; /**< the display this mode is associated with */ SDL_DisplayID displayID; /**< the display this mode is associated with */
SDL_PixelFormatEnum format; /**< pixel format */ SDL_PixelFormat format; /**< pixel format */
int w; /**< width */ int w; /**< width */
int h; /**< height */ int h; /**< height */
float pixel_density; /**< scale converting size to pixels (e.g. a 1920x1080 mode with 2.0 scale would have 3840x2160 pixels) */ float pixel_density; /**< scale converting size to pixels (e.g. a 1920x1080 mode with 2.0 scale would have 3840x2160 pixels) */

View File

@ -50,6 +50,7 @@
#include "render/SDL_sysrender.h" #include "render/SDL_sysrender.h"
#include "sensor/SDL_sensor_c.h" #include "sensor/SDL_sensor_c.h"
#include "stdlib/SDL_getenv_c.h" #include "stdlib/SDL_getenv_c.h"
#include "video/SDL_pixels_c.h"
#include "video/SDL_video_c.h" #include "video/SDL_video_c.h"
#define SDL_INIT_EVERYTHING ~0U #define SDL_INIT_EVERYTHING ~0U
@ -549,6 +550,8 @@ void SDL_Quit(void)
SDL_ClearHints(); SDL_ClearHints();
SDL_AssertionsQuit(); SDL_AssertionsQuit();
SDL_QuitPixelFormatDetails();
SDL_QuitCPUInfo(); SDL_QuitCPUInfo();
SDL_QuitProperties(); SDL_QuitProperties();

View File

@ -317,3 +317,8 @@ SDL_bool SDL_KeyMatchID(const void *a, const void *b, void *unused)
} }
return SDL_FALSE; return SDL_FALSE;
} }
void SDL_NukeFreeValue(const void *key, const void *value, void *unused)
{
SDL_free((void *)value);
}

View File

@ -29,30 +29,32 @@ typedef Uint32 (*SDL_HashTable_HashFn)(const void *key, void *data);
typedef SDL_bool (*SDL_HashTable_KeyMatchFn)(const void *a, const void *b, void *data); typedef SDL_bool (*SDL_HashTable_KeyMatchFn)(const void *a, const void *b, void *data);
typedef void (*SDL_HashTable_NukeFn)(const void *key, const void *value, void *data); typedef void (*SDL_HashTable_NukeFn)(const void *key, const void *value, void *data);
SDL_HashTable *SDL_CreateHashTable(void *data, extern SDL_HashTable *SDL_CreateHashTable(void *data,
const Uint32 num_buckets, const Uint32 num_buckets,
const SDL_HashTable_HashFn hashfn, const SDL_HashTable_HashFn hashfn,
const SDL_HashTable_KeyMatchFn keymatchfn, const SDL_HashTable_KeyMatchFn keymatchfn,
const SDL_HashTable_NukeFn nukefn, const SDL_HashTable_NukeFn nukefn,
const SDL_bool stackable); const SDL_bool stackable);
void SDL_EmptyHashTable(SDL_HashTable *table); extern void SDL_EmptyHashTable(SDL_HashTable *table);
void SDL_DestroyHashTable(SDL_HashTable *table); extern void SDL_DestroyHashTable(SDL_HashTable *table);
SDL_bool SDL_InsertIntoHashTable(SDL_HashTable *table, const void *key, const void *value); extern SDL_bool SDL_InsertIntoHashTable(SDL_HashTable *table, const void *key, const void *value);
SDL_bool SDL_RemoveFromHashTable(SDL_HashTable *table, const void *key); extern SDL_bool SDL_RemoveFromHashTable(SDL_HashTable *table, const void *key);
SDL_bool SDL_FindInHashTable(const SDL_HashTable *table, const void *key, const void **_value); extern SDL_bool SDL_FindInHashTable(const SDL_HashTable *table, const void *key, const void **_value);
SDL_bool SDL_HashTableEmpty(SDL_HashTable *table); extern SDL_bool SDL_HashTableEmpty(SDL_HashTable *table);
// iterate all values for a specific key. This only makes sense if the hash is stackable. If not-stackable, just use SDL_FindInHashTable(). // iterate all values for a specific key. This only makes sense if the hash is stackable. If not-stackable, just use SDL_FindInHashTable().
SDL_bool SDL_IterateHashTableKey(const SDL_HashTable *table, const void *key, const void **_value, void **iter); extern SDL_bool SDL_IterateHashTableKey(const SDL_HashTable *table, const void *key, const void **_value, void **iter);
// iterate all key/value pairs in a hash (stackable hashes can have duplicate keys with multiple values). // iterate all key/value pairs in a hash (stackable hashes can have duplicate keys with multiple values).
SDL_bool SDL_IterateHashTable(const SDL_HashTable *table, const void **_key, const void **_value, void **iter); extern SDL_bool SDL_IterateHashTable(const SDL_HashTable *table, const void **_key, const void **_value, void **iter);
Uint32 SDL_HashString(const void *key, void *unused); extern Uint32 SDL_HashString(const void *key, void *unused);
SDL_bool SDL_KeyMatchString(const void *a, const void *b, void *unused); extern SDL_bool SDL_KeyMatchString(const void *a, const void *b, void *unused);
Uint32 SDL_HashID(const void *key, void *unused); extern Uint32 SDL_HashID(const void *key, void *unused);
SDL_bool SDL_KeyMatchID(const void *a, const void *b, void *unused); extern SDL_bool SDL_KeyMatchID(const void *a, const void *b, void *unused);
extern void SDL_NukeFreeValue(const void *key, const void *value, void *unused);
#endif /* SDL_hashtable_h_ */ #endif /* SDL_hashtable_h_ */

View File

@ -84,7 +84,7 @@ char *SDL_GetCameraThreadName(SDL_CameraDevice *device, char *buf, size_t buflen
return buf; return buf;
} }
int SDL_AddCameraFormat(CameraFormatAddData *data, SDL_PixelFormatEnum format, SDL_Colorspace colorspace, int w, int h, int framerate_numerator, int framerate_denominator) int SDL_AddCameraFormat(CameraFormatAddData *data, SDL_PixelFormat format, SDL_Colorspace colorspace, int w, int h, int framerate_numerator, int framerate_denominator)
{ {
SDL_assert(data != NULL); SDL_assert(data != NULL);
if (data->allocated_specs <= data->num_specs) { if (data->allocated_specs <= data->num_specs) {
@ -130,7 +130,7 @@ static size_t GetFrameBufLen(const SDL_CameraSpec *spec)
const size_t w = (const size_t) spec->width; const size_t w = (const size_t) spec->width;
const size_t h = (const size_t) spec->height; const size_t h = (const size_t) spec->height;
const size_t wxh = w * h; const size_t wxh = w * h;
const SDL_PixelFormatEnum fmt = spec->format; const SDL_PixelFormat fmt = spec->format;
switch (fmt) { switch (fmt) {
// Some YUV formats have a larger Y plane than their U or V planes. // Some YUV formats have a larger Y plane than their U or V planes.
@ -367,8 +367,8 @@ static int SDLCALL CameraSpecCmp(const void *vpa, const void *vpb)
SDL_assert(b->width > 0); SDL_assert(b->width > 0);
SDL_assert(b->height > 0); SDL_assert(b->height > 0);
const SDL_PixelFormatEnum afmt = a->format; const SDL_PixelFormat afmt = a->format;
const SDL_PixelFormatEnum bfmt = b->format; const SDL_PixelFormat bfmt = b->format;
if (SDL_ISPIXELFORMAT_FOURCC(afmt) && !SDL_ISPIXELFORMAT_FOURCC(bfmt)) { if (SDL_ISPIXELFORMAT_FOURCC(afmt) && !SDL_ISPIXELFORMAT_FOURCC(bfmt)) {
return -1; return -1;
} else if (!SDL_ISPIXELFORMAT_FOURCC(afmt) && SDL_ISPIXELFORMAT_FOURCC(bfmt)) { } else if (!SDL_ISPIXELFORMAT_FOURCC(afmt) && SDL_ISPIXELFORMAT_FOURCC(bfmt)) {
@ -879,8 +879,8 @@ SDL_bool SDL_CameraThreadIterate(SDL_CameraDevice *device)
if (device->needs_conversion) { if (device->needs_conversion) {
SDL_Surface *dstsurf = (device->needs_scaling == 1) ? device->conversion_surface : output_surface; SDL_Surface *dstsurf = (device->needs_scaling == 1) ? device->conversion_surface : output_surface;
SDL_ConvertPixels(srcsurf->w, srcsurf->h, SDL_ConvertPixels(srcsurf->w, srcsurf->h,
srcsurf->format->format, srcsurf->pixels, srcsurf->pitch, srcsurf->format, srcsurf->pixels, srcsurf->pitch,
dstsurf->format->format, dstsurf->pixels, dstsurf->pitch); dstsurf->format, dstsurf->pixels, dstsurf->pitch);
srcsurf = dstsurf; srcsurf = dstsurf;
} }
if (device->needs_scaling == 1) { // upscaling? Do it last. -1: downscale, 0: no scaling, 1: upscale if (device->needs_scaling == 1) { // upscaling? Do it last. -1: downscale, 0: no scaling, 1: upscale
@ -1005,8 +1005,8 @@ static void ChooseBestCameraSpec(SDL_CameraDevice *device, const SDL_CameraSpec
SDL_assert(closest->height > 0); SDL_assert(closest->height > 0);
// okay, we have what we think is the best resolution, now we just need the best format that supports it... // okay, we have what we think is the best resolution, now we just need the best format that supports it...
const SDL_PixelFormatEnum wantfmt = spec->format; const SDL_PixelFormat wantfmt = spec->format;
SDL_PixelFormatEnum best_format = SDL_PIXELFORMAT_UNKNOWN; SDL_PixelFormat best_format = SDL_PIXELFORMAT_UNKNOWN;
SDL_Colorspace best_colorspace = SDL_COLORSPACE_UNKNOWN; SDL_Colorspace best_colorspace = SDL_COLORSPACE_UNKNOWN;
for (int i = 0; i < num_specs; i++) { for (int i = 0; i < num_specs; i++) {
const SDL_CameraSpec *thisspec = &device->all_specs[i]; const SDL_CameraSpec *thisspec = &device->all_specs[i];
@ -1124,7 +1124,7 @@ SDL_Camera *SDL_OpenCameraDevice(SDL_CameraDeviceID instance_id, const SDL_Camer
device->needs_conversion = (closest.format != device->spec.format); device->needs_conversion = (closest.format != device->spec.format);
device->acquire_surface = SDL_CreateSurfaceFrom(NULL, closest.width, closest.height, 0, closest.format); device->acquire_surface = SDL_CreateSurfaceFrom(closest.width, closest.height, closest.format, NULL, 0);
if (!device->acquire_surface) { if (!device->acquire_surface) {
ClosePhysicalCameraDevice(device); ClosePhysicalCameraDevice(device);
ReleaseCameraDevice(device); ReleaseCameraDevice(device);
@ -1136,7 +1136,7 @@ SDL_Camera *SDL_OpenCameraDevice(SDL_CameraDeviceID instance_id, const SDL_Camer
if (device->needs_scaling && device->needs_conversion) { if (device->needs_scaling && device->needs_conversion) {
const SDL_bool downsampling_first = (device->needs_scaling < 0); const SDL_bool downsampling_first = (device->needs_scaling < 0);
const SDL_CameraSpec *s = downsampling_first ? &device->spec : &closest; const SDL_CameraSpec *s = downsampling_first ? &device->spec : &closest;
const SDL_PixelFormatEnum fmt = downsampling_first ? closest.format : device->spec.format; const SDL_PixelFormat fmt = downsampling_first ? closest.format : device->spec.format;
device->conversion_surface = SDL_CreateSurface(s->width, s->height, fmt); device->conversion_surface = SDL_CreateSurface(s->width, s->height, fmt);
if (!device->conversion_surface) { if (!device->conversion_surface) {
ClosePhysicalCameraDevice(device); ClosePhysicalCameraDevice(device);
@ -1160,7 +1160,7 @@ SDL_Camera *SDL_OpenCameraDevice(SDL_CameraDeviceID instance_id, const SDL_Camer
if (device->needs_scaling || device->needs_conversion) { if (device->needs_scaling || device->needs_conversion) {
surf = SDL_CreateSurface(device->spec.width, device->spec.height, device->spec.format); surf = SDL_CreateSurface(device->spec.width, device->spec.height, device->spec.format);
} else { } else {
surf = SDL_CreateSurfaceFrom(NULL, device->spec.width, device->spec.height, 0, device->spec.format); surf = SDL_CreateSurfaceFrom(device->spec.width, device->spec.height, device->spec.format, NULL, 0);
} }
if (!surf) { if (!surf) {
ClosePhysicalCameraDevice(device); ClosePhysicalCameraDevice(device);

View File

@ -64,7 +64,7 @@ typedef struct CameraFormatAddData
int allocated_specs; int allocated_specs;
} CameraFormatAddData; } CameraFormatAddData;
int SDL_AddCameraFormat(CameraFormatAddData *data, SDL_PixelFormatEnum format, SDL_Colorspace colorspace, int w, int h, int framerate_numerator, int framerate_denominator); int SDL_AddCameraFormat(CameraFormatAddData *data, SDL_PixelFormat format, SDL_Colorspace colorspace, int w, int h, int framerate_numerator, int framerate_denominator);
typedef struct SurfaceList typedef struct SurfaceList
{ {

View File

@ -252,7 +252,7 @@ static void DestroyCameraManager(void)
} }
} }
static void format_android_to_sdl(Uint32 fmt, SDL_PixelFormatEnum *format, SDL_Colorspace *colorspace) static void format_android_to_sdl(Uint32 fmt, SDL_PixelFormat *format, SDL_Colorspace *colorspace)
{ {
switch (fmt) { switch (fmt) {
#define CASE(x, y, z) case x: *format = y; *colorspace = z; return #define CASE(x, y, z) case x: *format = y; *colorspace = z; return
@ -274,7 +274,7 @@ static void format_android_to_sdl(Uint32 fmt, SDL_PixelFormatEnum *format, SDL_C
*colorspace = SDL_COLORSPACE_UNKNOWN; *colorspace = SDL_COLORSPACE_UNKNOWN;
} }
static Uint32 format_sdl_to_android(SDL_PixelFormatEnum fmt) static Uint32 format_sdl_to_android(SDL_PixelFormat fmt)
{ {
switch (fmt) { switch (fmt) {
#define CASE(x, y) case y: return x #define CASE(x, y) case y: return x
@ -632,7 +632,7 @@ static void GatherCameraSpecs(const char *devid, CameraFormatAddData *add_data,
const int w = (int) i32ptr[1]; const int w = (int) i32ptr[1];
const int h = (int) i32ptr[2]; const int h = (int) i32ptr[2];
const int32_t type = i32ptr[3]; const int32_t type = i32ptr[3];
SDL_PixelFormatEnum sdlfmt = SDL_PIXELFORMAT_UNKNOWN; SDL_PixelFormat sdlfmt = SDL_PIXELFORMAT_UNKNOWN;
SDL_Colorspace colorspace = SDL_COLORSPACE_UNKNOWN; SDL_Colorspace colorspace = SDL_COLORSPACE_UNKNOWN;
if (type == ACAMERA_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_INPUT) { if (type == ACAMERA_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_INPUT) {

View File

@ -41,7 +41,7 @@
* <key>com.apple.security.device.camera</key> <true/> * <key>com.apple.security.device.camera</key> <true/>
*/ */
static void CoreMediaFormatToSDL(FourCharCode fmt, SDL_PixelFormatEnum *pixel_format, SDL_Colorspace *colorspace) static void CoreMediaFormatToSDL(FourCharCode fmt, SDL_PixelFormat *pixel_format, SDL_Colorspace *colorspace)
{ {
switch (fmt) { switch (fmt) {
#define CASE(x, y, z) case x: *pixel_format = y; *colorspace = z; return #define CASE(x, y, z) case x: *pixel_format = y; *colorspace = z; return
@ -260,7 +260,7 @@ static int COREMEDIA_OpenDevice(SDL_CameraDevice *device, const SDL_CameraSpec *
NSArray<AVCaptureDeviceFormat *> *formats = [avdevice formats]; NSArray<AVCaptureDeviceFormat *> *formats = [avdevice formats];
for (AVCaptureDeviceFormat *format in formats) { for (AVCaptureDeviceFormat *format in formats) {
CMFormatDescriptionRef formatDescription = [format formatDescription]; CMFormatDescriptionRef formatDescription = [format formatDescription];
SDL_PixelFormatEnum device_format = SDL_PIXELFORMAT_UNKNOWN; SDL_PixelFormat device_format = SDL_PIXELFORMAT_UNKNOWN;
SDL_Colorspace device_colorspace = SDL_COLORSPACE_UNKNOWN; SDL_Colorspace device_colorspace = SDL_COLORSPACE_UNKNOWN;
CoreMediaFormatToSDL(CMFormatDescriptionGetMediaSubType(formatDescription), &device_format, &device_colorspace); CoreMediaFormatToSDL(CMFormatDescriptionGetMediaSubType(formatDescription), &device_format, &device_colorspace);
if (device_format != spec->format || device_colorspace != spec->colorspace) { if (device_format != spec->format || device_colorspace != spec->colorspace) {
@ -384,7 +384,7 @@ static void GatherCameraSpecs(AVCaptureDevice *device, CameraFormatAddData *add_
} }
//NSLog(@"Available camera format: %@\n", fmt); //NSLog(@"Available camera format: %@\n", fmt);
SDL_PixelFormatEnum device_format = SDL_PIXELFORMAT_UNKNOWN; SDL_PixelFormat device_format = SDL_PIXELFORMAT_UNKNOWN;
SDL_Colorspace device_colorspace = SDL_COLORSPACE_UNKNOWN; SDL_Colorspace device_colorspace = SDL_COLORSPACE_UNKNOWN;
CoreMediaFormatToSDL(CMFormatDescriptionGetMediaSubType(fmt.formatDescription), &device_format, &device_colorspace); CoreMediaFormatToSDL(CMFormatDescriptionGetMediaSubType(fmt.formatDescription), &device_format, &device_colorspace);
if (device_format == SDL_PIXELFORMAT_UNKNOWN) { if (device_format == SDL_PIXELFORMAT_UNKNOWN) {

View File

@ -85,7 +85,7 @@ SDL_DEFINE_MEDIATYPE_GUID(MFVideoFormat_NV21, FCC('NV21'));
static const struct static const struct
{ {
const GUID *guid; const GUID *guid;
SDL_PixelFormatEnum format; SDL_PixelFormat format;
SDL_Colorspace colorspace; SDL_Colorspace colorspace;
} fmtmappings[] = { } fmtmappings[] = {
// This is not every possible format, just popular ones that SDL can reasonably handle. // This is not every possible format, just popular ones that SDL can reasonably handle.
@ -281,7 +281,7 @@ static SDL_Colorspace GetMediaTypeColorspace(IMFMediaType *mediatype, SDL_Colors
return colorspace; return colorspace;
} }
static void MediaTypeToSDLFmt(IMFMediaType *mediatype, SDL_PixelFormatEnum *format, SDL_Colorspace *colorspace) static void MediaTypeToSDLFmt(IMFMediaType *mediatype, SDL_PixelFormat *format, SDL_Colorspace *colorspace)
{ {
HRESULT ret; HRESULT ret;
GUID type; GUID type;
@ -300,7 +300,7 @@ static void MediaTypeToSDLFmt(IMFMediaType *mediatype, SDL_PixelFormatEnum *form
*colorspace = SDL_COLORSPACE_UNKNOWN; *colorspace = SDL_COLORSPACE_UNKNOWN;
} }
static const GUID *SDLFmtToMFVidFmtGuid(SDL_PixelFormatEnum format) static const GUID *SDLFmtToMFVidFmtGuid(SDL_PixelFormat format)
{ {
for (size_t i = 0; i < SDL_arraysize(fmtmappings); i++) { for (size_t i = 0; i < SDL_arraysize(fmtmappings); i++) {
if (fmtmappings[i].format == format) { if (fmtmappings[i].format == format) {
@ -930,7 +930,7 @@ static void GatherCameraSpecs(IMFMediaSource *source, CameraFormatAddData *add_d
GUID type; GUID type;
ret = IMFMediaType_GetGUID(mediatype, &SDL_MF_MT_MAJOR_TYPE, &type); ret = IMFMediaType_GetGUID(mediatype, &SDL_MF_MT_MAJOR_TYPE, &type);
if (SUCCEEDED(ret) && WIN_IsEqualGUID(&type, &SDL_MFMediaType_Video)) { if (SUCCEEDED(ret) && WIN_IsEqualGUID(&type, &SDL_MFMediaType_Video)) {
SDL_PixelFormatEnum sdlfmt = SDL_PIXELFORMAT_UNKNOWN; SDL_PixelFormat sdlfmt = SDL_PIXELFORMAT_UNKNOWN;
SDL_Colorspace colorspace = SDL_COLORSPACE_UNKNOWN; SDL_Colorspace colorspace = SDL_COLORSPACE_UNKNOWN;
MediaTypeToSDLFmt(mediatype, &sdlfmt, &colorspace); MediaTypeToSDLFmt(mediatype, &sdlfmt, &colorspace);
if (sdlfmt != SDL_PIXELFORMAT_UNKNOWN) { if (sdlfmt != SDL_PIXELFORMAT_UNKNOWN) {

View File

@ -357,7 +357,7 @@ static void param_update(struct spa_list *param_list, struct spa_list *pending_l
} }
static struct sdl_video_format { static struct sdl_video_format {
SDL_PixelFormatEnum format; SDL_PixelFormat format;
SDL_Colorspace colorspace; SDL_Colorspace colorspace;
uint32_t id; uint32_t id;
} sdl_video_formats[] = { } sdl_video_formats[] = {
@ -389,7 +389,7 @@ static struct sdl_video_format {
#endif #endif
}; };
static uint32_t sdl_format_to_id(SDL_PixelFormatEnum format) static uint32_t sdl_format_to_id(SDL_PixelFormat format)
{ {
struct sdl_video_format *f; struct sdl_video_format *f;
SPA_FOR_EACH_ELEMENT(sdl_video_formats, f) { SPA_FOR_EACH_ELEMENT(sdl_video_formats, f) {
@ -399,7 +399,7 @@ static uint32_t sdl_format_to_id(SDL_PixelFormatEnum format)
return SPA_VIDEO_FORMAT_UNKNOWN; return SPA_VIDEO_FORMAT_UNKNOWN;
} }
static void id_to_sdl_format(uint32_t id, SDL_PixelFormatEnum *format, SDL_Colorspace *colorspace) static void id_to_sdl_format(uint32_t id, SDL_PixelFormat *format, SDL_Colorspace *colorspace)
{ {
struct sdl_video_format *f; struct sdl_video_format *f;
SPA_FOR_EACH_ELEMENT(sdl_video_formats, f) { SPA_FOR_EACH_ELEMENT(sdl_video_formats, f) {
@ -603,7 +603,7 @@ static void PIPEWIRECAMERA_ReleaseFrame(SDL_CameraDevice *device, SDL_Surface *f
PIPEWIRE_pw_thread_loop_unlock(hotplug.loop); PIPEWIRE_pw_thread_loop_unlock(hotplug.loop);
} }
static void collect_rates(CameraFormatAddData *data, struct param *p, SDL_PixelFormatEnum sdlfmt, SDL_Colorspace colorspace, const struct spa_rectangle *size) static void collect_rates(CameraFormatAddData *data, struct param *p, SDL_PixelFormat sdlfmt, SDL_Colorspace colorspace, const struct spa_rectangle *size)
{ {
const struct spa_pod_prop *prop; const struct spa_pod_prop *prop;
struct spa_pod * values; struct spa_pod * values;
@ -636,7 +636,7 @@ static void collect_rates(CameraFormatAddData *data, struct param *p, SDL_PixelF
} }
} }
static void collect_size(CameraFormatAddData *data, struct param *p, SDL_PixelFormatEnum sdlfmt, SDL_Colorspace colorspace) static void collect_size(CameraFormatAddData *data, struct param *p, SDL_PixelFormat sdlfmt, SDL_Colorspace colorspace)
{ {
const struct spa_pod_prop *prop; const struct spa_pod_prop *prop;
struct spa_pod * values; struct spa_pod * values;
@ -670,7 +670,7 @@ static void collect_size(CameraFormatAddData *data, struct param *p, SDL_PixelFo
static void collect_format(CameraFormatAddData *data, struct param *p) static void collect_format(CameraFormatAddData *data, struct param *p)
{ {
const struct spa_pod_prop *prop; const struct spa_pod_prop *prop;
SDL_PixelFormatEnum sdlfmt; SDL_PixelFormat sdlfmt;
SDL_Colorspace colorspace; SDL_Colorspace colorspace;
struct spa_pod * values; struct spa_pod * values;
uint32_t i, n_vals, choice, *ids; uint32_t i, n_vals, choice, *ids;

View File

@ -391,7 +391,7 @@ static int AllocBufferUserPtr(SDL_CameraDevice *device, size_t buffer_size)
return 0; return 0;
} }
static void format_v4l2_to_sdl(Uint32 fmt, SDL_PixelFormatEnum *format, SDL_Colorspace *colorspace) static void format_v4l2_to_sdl(Uint32 fmt, SDL_PixelFormat *format, SDL_Colorspace *colorspace)
{ {
switch (fmt) { switch (fmt) {
#define CASE(x, y, z) case x: *format = y; *colorspace = z; return #define CASE(x, y, z) case x: *format = y; *colorspace = z; return
@ -407,7 +407,7 @@ static void format_v4l2_to_sdl(Uint32 fmt, SDL_PixelFormatEnum *format, SDL_Colo
*colorspace = SDL_COLORSPACE_UNKNOWN; *colorspace = SDL_COLORSPACE_UNKNOWN;
} }
static Uint32 format_sdl_to_v4l2(SDL_PixelFormatEnum fmt) static Uint32 format_sdl_to_v4l2(SDL_PixelFormat fmt)
{ {
switch (fmt) { switch (fmt) {
#define CASE(y, x) case x: return y #define CASE(y, x) case x: return y
@ -645,7 +645,7 @@ static SDL_bool FindV4L2CameraDeviceByBusInfoCallback(SDL_CameraDevice *device,
return (SDL_strcmp(handle->bus_info, (const char *) userdata) == 0); return (SDL_strcmp(handle->bus_info, (const char *) userdata) == 0);
} }
static int AddCameraFormat(const int fd, CameraFormatAddData *data, SDL_PixelFormatEnum sdlfmt, SDL_Colorspace colorspace, Uint32 v4l2fmt, int w, int h) static int AddCameraFormat(const int fd, CameraFormatAddData *data, SDL_PixelFormat sdlfmt, SDL_Colorspace colorspace, Uint32 v4l2fmt, int w, int h)
{ {
struct v4l2_frmivalenum frmivalenum; struct v4l2_frmivalenum frmivalenum;
SDL_zero(frmivalenum); SDL_zero(frmivalenum);
@ -729,7 +729,7 @@ static void MaybeAddDevice(const char *path)
SDL_zero(fmtdesc); SDL_zero(fmtdesc);
fmtdesc.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; fmtdesc.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
while (ioctl(fd, VIDIOC_ENUM_FMT, &fmtdesc) == 0) { while (ioctl(fd, VIDIOC_ENUM_FMT, &fmtdesc) == 0) {
SDL_PixelFormatEnum sdlfmt = SDL_PIXELFORMAT_UNKNOWN; SDL_PixelFormat sdlfmt = SDL_PIXELFORMAT_UNKNOWN;
SDL_Colorspace colorspace = SDL_COLORSPACE_UNKNOWN; SDL_Colorspace colorspace = SDL_COLORSPACE_UNKNOWN;
format_v4l2_to_sdl(fmtdesc.pixelformat, &sdlfmt, &colorspace); format_v4l2_to_sdl(fmtdesc.pixelformat, &sdlfmt, &colorspace);

View File

@ -58,8 +58,7 @@ SDL3_0.0.0 {
SDL_ConvertPixels; SDL_ConvertPixels;
SDL_ConvertPixelsAndColorspace; SDL_ConvertPixelsAndColorspace;
SDL_ConvertSurface; SDL_ConvertSurface;
SDL_ConvertSurfaceFormat; SDL_ConvertSurfaceAndColorspace;
SDL_ConvertSurfaceFormatAndColorspace;
SDL_CopyProperties; SDL_CopyProperties;
SDL_CreateAudioStream; SDL_CreateAudioStream;
SDL_CreateColorCursor; SDL_CreateColorCursor;
@ -330,7 +329,7 @@ SDL3_0.0.0 {
SDL_GetKeyboards; SDL_GetKeyboards;
SDL_GetLogOutputFunction; SDL_GetLogOutputFunction;
SDL_GetLogPriority; SDL_GetLogPriority;
SDL_GetMasksForPixelFormatEnum; SDL_GetMasksForPixelFormat;
SDL_GetMaxHapticEffects; SDL_GetMaxHapticEffects;
SDL_GetMaxHapticEffectsPlaying; SDL_GetMaxHapticEffectsPlaying;
SDL_GetMemoryFunctions; SDL_GetMemoryFunctions;
@ -364,7 +363,8 @@ SDL3_0.0.0 {
SDL_GetPens; SDL_GetPens;
SDL_GetPerformanceCounter; SDL_GetPerformanceCounter;
SDL_GetPerformanceFrequency; SDL_GetPerformanceFrequency;
SDL_GetPixelFormatEnumForMasks; SDL_GetPixelFormatDetails;
SDL_GetPixelFormatForMasks;
SDL_GetPixelFormatName; SDL_GetPixelFormatName;
SDL_GetPlatform; SDL_GetPlatform;
SDL_GetPowerInfo; SDL_GetPowerInfo;
@ -436,6 +436,7 @@ SDL3_0.0.0 {
SDL_GetSurfaceColorKey; SDL_GetSurfaceColorKey;
SDL_GetSurfaceColorMod; SDL_GetSurfaceColorMod;
SDL_GetSurfaceColorspace; SDL_GetSurfaceColorspace;
SDL_GetSurfacePalette;
SDL_GetSurfaceProperties; SDL_GetSurfaceProperties;
SDL_GetSystemRAM; SDL_GetSystemRAM;
SDL_GetSystemTheme; SDL_GetSystemTheme;
@ -568,6 +569,8 @@ SDL3_0.0.0 {
SDL_LogWarn; SDL_LogWarn;
SDL_MapRGB; SDL_MapRGB;
SDL_MapRGBA; SDL_MapRGBA;
SDL_MapSurfaceRGB;
SDL_MapSurfaceRGBA;
SDL_MaximizeWindow; SDL_MaximizeWindow;
SDL_MemoryBarrierAcquireFunction; SDL_MemoryBarrierAcquireFunction;
SDL_MemoryBarrierReleaseFunction; SDL_MemoryBarrierReleaseFunction;
@ -724,7 +727,6 @@ SDL3_0.0.0 {
SDL_SetModState; SDL_SetModState;
SDL_SetNumberProperty; SDL_SetNumberProperty;
SDL_SetPaletteColors; SDL_SetPaletteColors;
SDL_SetPixelFormatPalette;
SDL_SetPrimarySelectionText; SDL_SetPrimarySelectionText;
SDL_SetProperty; SDL_SetProperty;
SDL_SetPropertyWithCleanup; SDL_SetPropertyWithCleanup;

View File

@ -83,8 +83,7 @@
#define SDL_ConvertPixels SDL_ConvertPixels_REAL #define SDL_ConvertPixels SDL_ConvertPixels_REAL
#define SDL_ConvertPixelsAndColorspace SDL_ConvertPixelsAndColorspace_REAL #define SDL_ConvertPixelsAndColorspace SDL_ConvertPixelsAndColorspace_REAL
#define SDL_ConvertSurface SDL_ConvertSurface_REAL #define SDL_ConvertSurface SDL_ConvertSurface_REAL
#define SDL_ConvertSurfaceFormat SDL_ConvertSurfaceFormat_REAL #define SDL_ConvertSurfaceAndColorspace SDL_ConvertSurfaceAndColorspace_REAL
#define SDL_ConvertSurfaceFormatAndColorspace SDL_ConvertSurfaceFormatAndColorspace_REAL
#define SDL_CopyProperties SDL_CopyProperties_REAL #define SDL_CopyProperties SDL_CopyProperties_REAL
#define SDL_CreateAudioStream SDL_CreateAudioStream_REAL #define SDL_CreateAudioStream SDL_CreateAudioStream_REAL
#define SDL_CreateColorCursor SDL_CreateColorCursor_REAL #define SDL_CreateColorCursor SDL_CreateColorCursor_REAL
@ -94,7 +93,6 @@
#define SDL_CreateHapticEffect SDL_CreateHapticEffect_REAL #define SDL_CreateHapticEffect SDL_CreateHapticEffect_REAL
#define SDL_CreateMutex SDL_CreateMutex_REAL #define SDL_CreateMutex SDL_CreateMutex_REAL
#define SDL_CreatePalette SDL_CreatePalette_REAL #define SDL_CreatePalette SDL_CreatePalette_REAL
#define SDL_CreatePixelFormat SDL_CreatePixelFormat_REAL
#define SDL_CreatePopupWindow SDL_CreatePopupWindow_REAL #define SDL_CreatePopupWindow SDL_CreatePopupWindow_REAL
#define SDL_CreateProperties SDL_CreateProperties_REAL #define SDL_CreateProperties SDL_CreateProperties_REAL
#define SDL_CreateRWLock SDL_CreateRWLock_REAL #define SDL_CreateRWLock SDL_CreateRWLock_REAL
@ -191,8 +189,8 @@
#define SDL_GetAndroidSDKVersion SDL_GetAndroidSDKVersion_REAL #define SDL_GetAndroidSDKVersion SDL_GetAndroidSDKVersion_REAL
#define SDL_GetAssertionHandler SDL_GetAssertionHandler_REAL #define SDL_GetAssertionHandler SDL_GetAssertionHandler_REAL
#define SDL_GetAssertionReport SDL_GetAssertionReport_REAL #define SDL_GetAssertionReport SDL_GetAssertionReport_REAL
#define SDL_GetAudioDeviceGain SDL_GetAudioDeviceGain_REAL
#define SDL_GetAudioDeviceFormat SDL_GetAudioDeviceFormat_REAL #define SDL_GetAudioDeviceFormat SDL_GetAudioDeviceFormat_REAL
#define SDL_GetAudioDeviceGain SDL_GetAudioDeviceGain_REAL
#define SDL_GetAudioDeviceName SDL_GetAudioDeviceName_REAL #define SDL_GetAudioDeviceName SDL_GetAudioDeviceName_REAL
#define SDL_GetAudioDriver SDL_GetAudioDriver_REAL #define SDL_GetAudioDriver SDL_GetAudioDriver_REAL
#define SDL_GetAudioPlaybackDevices SDL_GetAudioPlaybackDevices_REAL #define SDL_GetAudioPlaybackDevices SDL_GetAudioPlaybackDevices_REAL
@ -355,7 +353,7 @@
#define SDL_GetKeyboards SDL_GetKeyboards_REAL #define SDL_GetKeyboards SDL_GetKeyboards_REAL
#define SDL_GetLogOutputFunction SDL_GetLogOutputFunction_REAL #define SDL_GetLogOutputFunction SDL_GetLogOutputFunction_REAL
#define SDL_GetLogPriority SDL_GetLogPriority_REAL #define SDL_GetLogPriority SDL_GetLogPriority_REAL
#define SDL_GetMasksForPixelFormatEnum SDL_GetMasksForPixelFormatEnum_REAL #define SDL_GetMasksForPixelFormat SDL_GetMasksForPixelFormat_REAL
#define SDL_GetMaxHapticEffects SDL_GetMaxHapticEffects_REAL #define SDL_GetMaxHapticEffects SDL_GetMaxHapticEffects_REAL
#define SDL_GetMaxHapticEffectsPlaying SDL_GetMaxHapticEffectsPlaying_REAL #define SDL_GetMaxHapticEffectsPlaying SDL_GetMaxHapticEffectsPlaying_REAL
#define SDL_GetMemoryFunctions SDL_GetMemoryFunctions_REAL #define SDL_GetMemoryFunctions SDL_GetMemoryFunctions_REAL
@ -389,7 +387,8 @@
#define SDL_GetPens SDL_GetPens_REAL #define SDL_GetPens SDL_GetPens_REAL
#define SDL_GetPerformanceCounter SDL_GetPerformanceCounter_REAL #define SDL_GetPerformanceCounter SDL_GetPerformanceCounter_REAL
#define SDL_GetPerformanceFrequency SDL_GetPerformanceFrequency_REAL #define SDL_GetPerformanceFrequency SDL_GetPerformanceFrequency_REAL
#define SDL_GetPixelFormatEnumForMasks SDL_GetPixelFormatEnumForMasks_REAL #define SDL_GetPixelFormatDetails SDL_GetPixelFormatDetails_REAL
#define SDL_GetPixelFormatForMasks SDL_GetPixelFormatForMasks_REAL
#define SDL_GetPixelFormatName SDL_GetPixelFormatName_REAL #define SDL_GetPixelFormatName SDL_GetPixelFormatName_REAL
#define SDL_GetPlatform SDL_GetPlatform_REAL #define SDL_GetPlatform SDL_GetPlatform_REAL
#define SDL_GetPowerInfo SDL_GetPowerInfo_REAL #define SDL_GetPowerInfo SDL_GetPowerInfo_REAL
@ -461,6 +460,7 @@
#define SDL_GetSurfaceColorKey SDL_GetSurfaceColorKey_REAL #define SDL_GetSurfaceColorKey SDL_GetSurfaceColorKey_REAL
#define SDL_GetSurfaceColorMod SDL_GetSurfaceColorMod_REAL #define SDL_GetSurfaceColorMod SDL_GetSurfaceColorMod_REAL
#define SDL_GetSurfaceColorspace SDL_GetSurfaceColorspace_REAL #define SDL_GetSurfaceColorspace SDL_GetSurfaceColorspace_REAL
#define SDL_GetSurfacePalette SDL_GetSurfacePalette_REAL
#define SDL_GetSurfaceProperties SDL_GetSurfaceProperties_REAL #define SDL_GetSurfaceProperties SDL_GetSurfaceProperties_REAL
#define SDL_GetSystemRAM SDL_GetSystemRAM_REAL #define SDL_GetSystemRAM SDL_GetSystemRAM_REAL
#define SDL_GetSystemTheme SDL_GetSystemTheme_REAL #define SDL_GetSystemTheme SDL_GetSystemTheme_REAL
@ -593,6 +593,8 @@
#define SDL_LogWarn SDL_LogWarn_REAL #define SDL_LogWarn SDL_LogWarn_REAL
#define SDL_MapRGB SDL_MapRGB_REAL #define SDL_MapRGB SDL_MapRGB_REAL
#define SDL_MapRGBA SDL_MapRGBA_REAL #define SDL_MapRGBA SDL_MapRGBA_REAL
#define SDL_MapSurfaceRGB SDL_MapSurfaceRGB_REAL
#define SDL_MapSurfaceRGBA SDL_MapSurfaceRGBA_REAL
#define SDL_MaximizeWindow SDL_MaximizeWindow_REAL #define SDL_MaximizeWindow SDL_MaximizeWindow_REAL
#define SDL_MemoryBarrierAcquireFunction SDL_MemoryBarrierAcquireFunction_REAL #define SDL_MemoryBarrierAcquireFunction SDL_MemoryBarrierAcquireFunction_REAL
#define SDL_MemoryBarrierReleaseFunction SDL_MemoryBarrierReleaseFunction_REAL #define SDL_MemoryBarrierReleaseFunction SDL_MemoryBarrierReleaseFunction_REAL
@ -749,7 +751,6 @@
#define SDL_SetModState SDL_SetModState_REAL #define SDL_SetModState SDL_SetModState_REAL
#define SDL_SetNumberProperty SDL_SetNumberProperty_REAL #define SDL_SetNumberProperty SDL_SetNumberProperty_REAL
#define SDL_SetPaletteColors SDL_SetPaletteColors_REAL #define SDL_SetPaletteColors SDL_SetPaletteColors_REAL
#define SDL_SetPixelFormatPalette SDL_SetPixelFormatPalette_REAL
#define SDL_SetPrimarySelectionText SDL_SetPrimarySelectionText_REAL #define SDL_SetPrimarySelectionText SDL_SetPrimarySelectionText_REAL
#define SDL_SetProperty SDL_SetProperty_REAL #define SDL_SetProperty SDL_SetProperty_REAL
#define SDL_SetPropertyWithCleanup SDL_SetPropertyWithCleanup_REAL #define SDL_SetPropertyWithCleanup SDL_SetPropertyWithCleanup_REAL

View File

@ -100,11 +100,10 @@ SDL_DYNAPI_PROC(int,SDL_CloseStorage,(SDL_Storage *a),(a),return)
SDL_DYNAPI_PROC(SDL_BlendMode,SDL_ComposeCustomBlendMode,(SDL_BlendFactor a, SDL_BlendFactor b, SDL_BlendOperation c, SDL_BlendFactor d, SDL_BlendFactor e, SDL_BlendOperation f),(a,b,c,d,e,f),return) SDL_DYNAPI_PROC(SDL_BlendMode,SDL_ComposeCustomBlendMode,(SDL_BlendFactor a, SDL_BlendFactor b, SDL_BlendOperation c, SDL_BlendFactor d, SDL_BlendFactor e, SDL_BlendOperation f),(a,b,c,d,e,f),return)
SDL_DYNAPI_PROC(int,SDL_ConvertAudioSamples,(const SDL_AudioSpec *a, const Uint8 *b, int c, const SDL_AudioSpec *d, Uint8 **e, int *f),(a,b,c,d,e,f),return) SDL_DYNAPI_PROC(int,SDL_ConvertAudioSamples,(const SDL_AudioSpec *a, const Uint8 *b, int c, const SDL_AudioSpec *d, Uint8 **e, int *f),(a,b,c,d,e,f),return)
SDL_DYNAPI_PROC(int,SDL_ConvertEventToRenderCoordinates,(SDL_Renderer *a, SDL_Event *b),(a,b),return) SDL_DYNAPI_PROC(int,SDL_ConvertEventToRenderCoordinates,(SDL_Renderer *a, SDL_Event *b),(a,b),return)
SDL_DYNAPI_PROC(int,SDL_ConvertPixels,(int a, int b, SDL_PixelFormatEnum c, const void *d, int e, SDL_PixelFormatEnum f, void *g, int h),(a,b,c,d,e,f,g,h),return) SDL_DYNAPI_PROC(int,SDL_ConvertPixels,(int a, int b, SDL_PixelFormat c, const void *d, int e, SDL_PixelFormat f, void *g, int h),(a,b,c,d,e,f,g,h),return)
SDL_DYNAPI_PROC(int,SDL_ConvertPixelsAndColorspace,(int a, int b, SDL_PixelFormatEnum c, SDL_Colorspace d, SDL_PropertiesID e, const void *f, int g, SDL_PixelFormatEnum h, SDL_Colorspace i, SDL_PropertiesID j, void *k, int l),(a,b,c,d,e,f,g,h,i,j,k,l),return) SDL_DYNAPI_PROC(int,SDL_ConvertPixelsAndColorspace,(int a, int b, SDL_PixelFormat c, SDL_Colorspace d, SDL_PropertiesID e, const void *f, int g, SDL_PixelFormat h, SDL_Colorspace i, SDL_PropertiesID j, void *k, int l),(a,b,c,d,e,f,g,h,i,j,k,l),return)
SDL_DYNAPI_PROC(SDL_Surface*,SDL_ConvertSurface,(SDL_Surface *a, const SDL_PixelFormat *b),(a,b),return) SDL_DYNAPI_PROC(SDL_Surface*,SDL_ConvertSurface,(SDL_Surface *a, SDL_PixelFormat b),(a,b),return)
SDL_DYNAPI_PROC(SDL_Surface*,SDL_ConvertSurfaceFormat,(SDL_Surface *a, SDL_PixelFormatEnum b),(a,b),return) SDL_DYNAPI_PROC(SDL_Surface*,SDL_ConvertSurfaceAndColorspace,(SDL_Surface *a, SDL_PixelFormat b, const SDL_Palette *c, SDL_Colorspace d, SDL_PropertiesID e),(a,b,c,d,e),return)
SDL_DYNAPI_PROC(SDL_Surface*,SDL_ConvertSurfaceFormatAndColorspace,(SDL_Surface *a, SDL_PixelFormatEnum b, SDL_Colorspace c, SDL_PropertiesID d),(a,b,c,d),return)
SDL_DYNAPI_PROC(int,SDL_CopyProperties,(SDL_PropertiesID a, SDL_PropertiesID b),(a,b),return) SDL_DYNAPI_PROC(int,SDL_CopyProperties,(SDL_PropertiesID a, SDL_PropertiesID b),(a,b),return)
SDL_DYNAPI_PROC(SDL_AudioStream*,SDL_CreateAudioStream,(const SDL_AudioSpec *a, const SDL_AudioSpec *b),(a,b),return) SDL_DYNAPI_PROC(SDL_AudioStream*,SDL_CreateAudioStream,(const SDL_AudioSpec *a, const SDL_AudioSpec *b),(a,b),return)
SDL_DYNAPI_PROC(SDL_Cursor*,SDL_CreateColorCursor,(SDL_Surface *a, int b, int c),(a,b,c),return) SDL_DYNAPI_PROC(SDL_Cursor*,SDL_CreateColorCursor,(SDL_Surface *a, int b, int c),(a,b,c),return)
@ -114,7 +113,6 @@ SDL_DYNAPI_PROC(int,SDL_CreateDirectory,(const char *a),(a),return)
SDL_DYNAPI_PROC(int,SDL_CreateHapticEffect,(SDL_Haptic *a, const SDL_HapticEffect *b),(a,b),return) SDL_DYNAPI_PROC(int,SDL_CreateHapticEffect,(SDL_Haptic *a, const SDL_HapticEffect *b),(a,b),return)
SDL_DYNAPI_PROC(SDL_Mutex*,SDL_CreateMutex,(void),(),return) SDL_DYNAPI_PROC(SDL_Mutex*,SDL_CreateMutex,(void),(),return)
SDL_DYNAPI_PROC(SDL_Palette*,SDL_CreatePalette,(int a),(a),return) SDL_DYNAPI_PROC(SDL_Palette*,SDL_CreatePalette,(int a),(a),return)
SDL_DYNAPI_PROC(SDL_PixelFormat*,SDL_CreatePixelFormat,(SDL_PixelFormatEnum a),(a),return)
SDL_DYNAPI_PROC(SDL_Window*,SDL_CreatePopupWindow,(SDL_Window *a, int b, int c, int d, int e, SDL_WindowFlags f),(a,b,c,d,e,f),return) SDL_DYNAPI_PROC(SDL_Window*,SDL_CreatePopupWindow,(SDL_Window *a, int b, int c, int d, int e, SDL_WindowFlags f),(a,b,c,d,e,f),return)
SDL_DYNAPI_PROC(SDL_PropertiesID,SDL_CreateProperties,(void),(),return) SDL_DYNAPI_PROC(SDL_PropertiesID,SDL_CreateProperties,(void),(),return)
SDL_DYNAPI_PROC(SDL_RWLock*,SDL_CreateRWLock,(void),(),return) SDL_DYNAPI_PROC(SDL_RWLock*,SDL_CreateRWLock,(void),(),return)
@ -123,11 +121,11 @@ SDL_DYNAPI_PROC(SDL_Renderer*,SDL_CreateRendererWithProperties,(SDL_PropertiesID
SDL_DYNAPI_PROC(SDL_Semaphore*,SDL_CreateSemaphore,(Uint32 a),(a),return) SDL_DYNAPI_PROC(SDL_Semaphore*,SDL_CreateSemaphore,(Uint32 a),(a),return)
SDL_DYNAPI_PROC(SDL_Renderer*,SDL_CreateSoftwareRenderer,(SDL_Surface *a),(a),return) SDL_DYNAPI_PROC(SDL_Renderer*,SDL_CreateSoftwareRenderer,(SDL_Surface *a),(a),return)
SDL_DYNAPI_PROC(int,SDL_CreateStorageDirectory,(SDL_Storage *a, const char *b),(a,b),return) SDL_DYNAPI_PROC(int,SDL_CreateStorageDirectory,(SDL_Storage *a, const char *b),(a,b),return)
SDL_DYNAPI_PROC(SDL_Surface*,SDL_CreateSurface,(int a, int b, SDL_PixelFormatEnum c),(a,b,c),return) SDL_DYNAPI_PROC(SDL_Surface*,SDL_CreateSurface,(int a, int b, SDL_PixelFormat c),(a,b,c),return)
SDL_DYNAPI_PROC(SDL_Surface*,SDL_CreateSurfaceFrom,(void *a, int b, int c, int d, SDL_PixelFormatEnum e),(a,b,c,d,e),return) SDL_DYNAPI_PROC(SDL_Surface*,SDL_CreateSurfaceFrom,(int a, int b, SDL_PixelFormat c, void *d, int e),(a,b,c,d,e),return)
SDL_DYNAPI_PROC(SDL_Cursor*,SDL_CreateSystemCursor,(SDL_SystemCursor a),(a),return) SDL_DYNAPI_PROC(SDL_Cursor*,SDL_CreateSystemCursor,(SDL_SystemCursor a),(a),return)
SDL_DYNAPI_PROC(SDL_TLSID,SDL_CreateTLS,(void),(),return) SDL_DYNAPI_PROC(SDL_TLSID,SDL_CreateTLS,(void),(),return)
SDL_DYNAPI_PROC(SDL_Texture*,SDL_CreateTexture,(SDL_Renderer *a, SDL_PixelFormatEnum b, int c, int d, int e),(a,b,c,d,e),return) SDL_DYNAPI_PROC(SDL_Texture*,SDL_CreateTexture,(SDL_Renderer *a, SDL_PixelFormat b, int c, int d, int e),(a,b,c,d,e),return)
SDL_DYNAPI_PROC(SDL_Texture*,SDL_CreateTextureFromSurface,(SDL_Renderer *a, SDL_Surface *b),(a,b),return) SDL_DYNAPI_PROC(SDL_Texture*,SDL_CreateTextureFromSurface,(SDL_Renderer *a, SDL_Surface *b),(a,b),return)
SDL_DYNAPI_PROC(SDL_Texture*,SDL_CreateTextureWithProperties,(SDL_Renderer *a, SDL_PropertiesID b),(a,b),return) SDL_DYNAPI_PROC(SDL_Texture*,SDL_CreateTextureWithProperties,(SDL_Renderer *a, SDL_PropertiesID b),(a,b),return)
SDL_DYNAPI_PROC(SDL_Thread*,SDL_CreateThreadRuntime,(SDL_ThreadFunction a, const char *b, void *c, SDL_FunctionPointer d, SDL_FunctionPointer e),(a,b,c,d,e),return) SDL_DYNAPI_PROC(SDL_Thread*,SDL_CreateThreadRuntime,(SDL_ThreadFunction a, const char *b, void *c, SDL_FunctionPointer d, SDL_FunctionPointer e),(a,b,c,d,e),return)
@ -148,7 +146,6 @@ SDL_DYNAPI_PROC(void,SDL_DestroyCursor,(SDL_Cursor *a),(a),)
SDL_DYNAPI_PROC(void,SDL_DestroyHapticEffect,(SDL_Haptic *a, int b),(a,b),) SDL_DYNAPI_PROC(void,SDL_DestroyHapticEffect,(SDL_Haptic *a, int b),(a,b),)
SDL_DYNAPI_PROC(void,SDL_DestroyMutex,(SDL_Mutex *a),(a),) SDL_DYNAPI_PROC(void,SDL_DestroyMutex,(SDL_Mutex *a),(a),)
SDL_DYNAPI_PROC(void,SDL_DestroyPalette,(SDL_Palette *a),(a),) SDL_DYNAPI_PROC(void,SDL_DestroyPalette,(SDL_Palette *a),(a),)
SDL_DYNAPI_PROC(void,SDL_DestroyPixelFormat,(SDL_PixelFormat *a),(a),)
SDL_DYNAPI_PROC(void,SDL_DestroyProperties,(SDL_PropertiesID a),(a),) SDL_DYNAPI_PROC(void,SDL_DestroyProperties,(SDL_PropertiesID a),(a),)
SDL_DYNAPI_PROC(void,SDL_DestroyRWLock,(SDL_RWLock *a),(a),) SDL_DYNAPI_PROC(void,SDL_DestroyRWLock,(SDL_RWLock *a),(a),)
SDL_DYNAPI_PROC(void,SDL_DestroyRenderer,(SDL_Renderer *a),(a),) SDL_DYNAPI_PROC(void,SDL_DestroyRenderer,(SDL_Renderer *a),(a),)
@ -375,7 +372,7 @@ SDL_DYNAPI_PROC(const Uint8*,SDL_GetKeyboardState,(int *a),(a),return)
SDL_DYNAPI_PROC(SDL_KeyboardID*,SDL_GetKeyboards,(int *a),(a),return) SDL_DYNAPI_PROC(SDL_KeyboardID*,SDL_GetKeyboards,(int *a),(a),return)
SDL_DYNAPI_PROC(void,SDL_GetLogOutputFunction,(SDL_LogOutputFunction *a, void **b),(a,b),) SDL_DYNAPI_PROC(void,SDL_GetLogOutputFunction,(SDL_LogOutputFunction *a, void **b),(a,b),)
SDL_DYNAPI_PROC(SDL_LogPriority,SDL_GetLogPriority,(int a),(a),return) SDL_DYNAPI_PROC(SDL_LogPriority,SDL_GetLogPriority,(int a),(a),return)
SDL_DYNAPI_PROC(SDL_bool,SDL_GetMasksForPixelFormatEnum,(SDL_PixelFormatEnum a, int *b, Uint32 *c, Uint32 *d, Uint32 *e, Uint32 *f),(a,b,c,d,e,f),return) SDL_DYNAPI_PROC(int,SDL_GetMasksForPixelFormat,(SDL_PixelFormat a, int *b, Uint32 *c, Uint32 *d, Uint32 *e, Uint32 *f),(a,b,c,d,e,f),return)
SDL_DYNAPI_PROC(int,SDL_GetMaxHapticEffects,(SDL_Haptic *a),(a),return) SDL_DYNAPI_PROC(int,SDL_GetMaxHapticEffects,(SDL_Haptic *a),(a),return)
SDL_DYNAPI_PROC(int,SDL_GetMaxHapticEffectsPlaying,(SDL_Haptic *a),(a),return) SDL_DYNAPI_PROC(int,SDL_GetMaxHapticEffectsPlaying,(SDL_Haptic *a),(a),return)
SDL_DYNAPI_PROC(void,SDL_GetMemoryFunctions,(SDL_malloc_func *a, SDL_calloc_func *b, SDL_realloc_func *c, SDL_free_func *d),(a,b,c,d),) SDL_DYNAPI_PROC(void,SDL_GetMemoryFunctions,(SDL_malloc_func *a, SDL_calloc_func *b, SDL_realloc_func *c, SDL_free_func *d),(a,b,c,d),)
@ -409,8 +406,9 @@ SDL_DYNAPI_PROC(SDL_PenSubtype,SDL_GetPenType,(SDL_PenID a),(a),return)
SDL_DYNAPI_PROC(SDL_PenID*,SDL_GetPens,(int *a),(a),return) SDL_DYNAPI_PROC(SDL_PenID*,SDL_GetPens,(int *a),(a),return)
SDL_DYNAPI_PROC(Uint64,SDL_GetPerformanceCounter,(void),(),return) SDL_DYNAPI_PROC(Uint64,SDL_GetPerformanceCounter,(void),(),return)
SDL_DYNAPI_PROC(Uint64,SDL_GetPerformanceFrequency,(void),(),return) SDL_DYNAPI_PROC(Uint64,SDL_GetPerformanceFrequency,(void),(),return)
SDL_DYNAPI_PROC(SDL_PixelFormatEnum,SDL_GetPixelFormatEnumForMasks,(int a, Uint32 b, Uint32 c, Uint32 d, Uint32 e),(a,b,c,d,e),return) SDL_DYNAPI_PROC(const SDL_PixelFormatDetails*,SDL_GetPixelFormatDetails,(SDL_PixelFormat a),(a),return)
SDL_DYNAPI_PROC(const char*,SDL_GetPixelFormatName,(SDL_PixelFormatEnum a),(a),return) SDL_DYNAPI_PROC(SDL_PixelFormat,SDL_GetPixelFormatForMasks,(int a, Uint32 b, Uint32 c, Uint32 d, Uint32 e),(a,b,c,d,e),return)
SDL_DYNAPI_PROC(const char*,SDL_GetPixelFormatName,(SDL_PixelFormat a),(a),return)
SDL_DYNAPI_PROC(const char*,SDL_GetPlatform,(void),(),return) SDL_DYNAPI_PROC(const char*,SDL_GetPlatform,(void),(),return)
SDL_DYNAPI_PROC(SDL_PowerState,SDL_GetPowerInfo,(int *a, int *b),(a,b),return) SDL_DYNAPI_PROC(SDL_PowerState,SDL_GetPowerInfo,(int *a, int *b),(a,b),return)
SDL_DYNAPI_PROC(char*,SDL_GetPrefPath,(const char *a, const char *b),(a,b),return) SDL_DYNAPI_PROC(char*,SDL_GetPrefPath,(const char *a, const char *b),(a,b),return)
@ -419,8 +417,8 @@ SDL_DYNAPI_PROC(SDL_DisplayID,SDL_GetPrimaryDisplay,(void),(),return)
SDL_DYNAPI_PROC(char*,SDL_GetPrimarySelectionText,(void),(),return) SDL_DYNAPI_PROC(char*,SDL_GetPrimarySelectionText,(void),(),return)
SDL_DYNAPI_PROC(void*,SDL_GetProperty,(SDL_PropertiesID a, const char *b, void *c),(a,b,c),return) SDL_DYNAPI_PROC(void*,SDL_GetProperty,(SDL_PropertiesID a, const char *b, void *c),(a,b,c),return)
SDL_DYNAPI_PROC(SDL_PropertyType,SDL_GetPropertyType,(SDL_PropertiesID a, const char *b),(a,b),return) SDL_DYNAPI_PROC(SDL_PropertyType,SDL_GetPropertyType,(SDL_PropertiesID a, const char *b),(a,b),return)
SDL_DYNAPI_PROC(void,SDL_GetRGB,(Uint32 a, const SDL_PixelFormat *b, Uint8 *c, Uint8 *d, Uint8 *e),(a,b,c,d,e),) SDL_DYNAPI_PROC(void,SDL_GetRGB,(Uint32 a, const SDL_PixelFormatDetails *b, const SDL_Palette *c, Uint8 *d, Uint8 *e, Uint8 *f),(a,b,c,d,e,f),)
SDL_DYNAPI_PROC(void,SDL_GetRGBA,(Uint32 a, const SDL_PixelFormat *b, Uint8 *c, Uint8 *d, Uint8 *e, Uint8 *f),(a,b,c,d,e,f),) SDL_DYNAPI_PROC(void,SDL_GetRGBA,(Uint32 a, const SDL_PixelFormatDetails *b, const SDL_Palette *c, Uint8 *d, Uint8 *e, Uint8 *f, Uint8 *g),(a,b,c,d,e,f,g),)
SDL_DYNAPI_PROC(SDL_GamepadType,SDL_GetRealGamepadInstanceType,(SDL_JoystickID a),(a),return) SDL_DYNAPI_PROC(SDL_GamepadType,SDL_GetRealGamepadInstanceType,(SDL_JoystickID a),(a),return)
SDL_DYNAPI_PROC(SDL_GamepadType,SDL_GetRealGamepadType,(SDL_Gamepad *a),(a),return) SDL_DYNAPI_PROC(SDL_GamepadType,SDL_GetRealGamepadType,(SDL_Gamepad *a),(a),return)
SDL_DYNAPI_PROC(SDL_bool,SDL_GetRectAndLineIntersection,(const SDL_Rect *a, int *b, int *c, int *d, int *e),(a,b,c,d,e),return) SDL_DYNAPI_PROC(SDL_bool,SDL_GetRectAndLineIntersection,(const SDL_Rect *a, int *b, int *c, int *d, int *e),(a,b,c,d,e),return)
@ -480,7 +478,8 @@ SDL_DYNAPI_PROC(int,SDL_GetSurfaceBlendMode,(SDL_Surface *a, SDL_BlendMode *b),(
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(int,SDL_GetSurfaceColorKey,(SDL_Surface *a, Uint32 *b),(a,b),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(int,SDL_GetSurfaceColorspace,(SDL_Surface *a, SDL_Colorspace *b),(a,b),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_PropertiesID,SDL_GetSurfaceProperties,(SDL_Surface *a),(a),return) SDL_DYNAPI_PROC(SDL_PropertiesID,SDL_GetSurfaceProperties,(SDL_Surface *a),(a),return)
SDL_DYNAPI_PROC(int,SDL_GetSystemRAM,(void),(),return) SDL_DYNAPI_PROC(int,SDL_GetSystemRAM,(void),(),return)
SDL_DYNAPI_PROC(SDL_SystemTheme,SDL_GetSystemTheme,(void),(),return) SDL_DYNAPI_PROC(SDL_SystemTheme,SDL_GetSystemTheme,(void),(),return)
@ -602,8 +601,10 @@ SDL_DYNAPI_PROC(int,SDL_LockSurface,(SDL_Surface *a),(a),return)
SDL_DYNAPI_PROC(int,SDL_LockTexture,(SDL_Texture *a, const SDL_Rect *b, void **c, int *d),(a,b,c,d),return) SDL_DYNAPI_PROC(int,SDL_LockTexture,(SDL_Texture *a, const SDL_Rect *b, void **c, int *d),(a,b,c,d),return)
SDL_DYNAPI_PROC(int,SDL_LockTextureToSurface,(SDL_Texture *a, const SDL_Rect *b, SDL_Surface **c),(a,b,c),return) SDL_DYNAPI_PROC(int,SDL_LockTextureToSurface,(SDL_Texture *a, const SDL_Rect *b, SDL_Surface **c),(a,b,c),return)
SDL_DYNAPI_PROC(void,SDL_LogMessageV,(int a, SDL_LogPriority b, SDL_PRINTF_FORMAT_STRING const char *c, va_list d),(a,b,c,d),) SDL_DYNAPI_PROC(void,SDL_LogMessageV,(int a, SDL_LogPriority b, SDL_PRINTF_FORMAT_STRING const char *c, va_list d),(a,b,c,d),)
SDL_DYNAPI_PROC(Uint32,SDL_MapRGB,(const SDL_PixelFormat *a, Uint8 b, Uint8 c, Uint8 d),(a,b,c,d),return) SDL_DYNAPI_PROC(Uint32,SDL_MapRGB,(const SDL_PixelFormatDetails *a, const SDL_Palette *b, Uint8 c, Uint8 d, Uint8 e),(a,b,c,d,e),return)
SDL_DYNAPI_PROC(Uint32,SDL_MapRGBA,(const SDL_PixelFormat *a, Uint8 b, Uint8 c, Uint8 d, Uint8 e),(a,b,c,d,e),return) SDL_DYNAPI_PROC(Uint32,SDL_MapRGBA,(const SDL_PixelFormatDetails *a, const SDL_Palette *b, Uint8 c, Uint8 d, Uint8 e, Uint8 f),(a,b,c,d,e,f),return)
SDL_DYNAPI_PROC(Uint32,SDL_MapSurfaceRGB,(SDL_Surface *a, Uint8 b, Uint8 c, Uint8 d),(a,b,c,d),return)
SDL_DYNAPI_PROC(Uint32,SDL_MapSurfaceRGBA,(SDL_Surface *a, Uint8 b, Uint8 c, Uint8 d, Uint8 e),(a,b,c,d,e),return)
SDL_DYNAPI_PROC(int,SDL_MaximizeWindow,(SDL_Window *a),(a),return) SDL_DYNAPI_PROC(int,SDL_MaximizeWindow,(SDL_Window *a),(a),return)
SDL_DYNAPI_PROC(void,SDL_MemoryBarrierAcquireFunction,(void),(),) SDL_DYNAPI_PROC(void,SDL_MemoryBarrierAcquireFunction,(void),(),)
SDL_DYNAPI_PROC(void,SDL_MemoryBarrierReleaseFunction,(void),(),) SDL_DYNAPI_PROC(void,SDL_MemoryBarrierReleaseFunction,(void),(),)
@ -643,7 +644,7 @@ SDL_DYNAPI_PROC(SDL_bool,SDL_PenConnected,(SDL_PenID a),(a),return)
SDL_DYNAPI_PROC(int,SDL_PlayHapticRumble,(SDL_Haptic *a, float b, Uint32 c),(a,b,c),return) SDL_DYNAPI_PROC(int,SDL_PlayHapticRumble,(SDL_Haptic *a, float b, Uint32 c),(a,b,c),return)
SDL_DYNAPI_PROC(SDL_bool,SDL_PollEvent,(SDL_Event *a),(a),return) SDL_DYNAPI_PROC(SDL_bool,SDL_PollEvent,(SDL_Event *a),(a),return)
SDL_DYNAPI_PROC(int,SDL_PostSemaphore,(SDL_Semaphore *a),(a),return) SDL_DYNAPI_PROC(int,SDL_PostSemaphore,(SDL_Semaphore *a),(a),return)
SDL_DYNAPI_PROC(int,SDL_PremultiplyAlpha,(int a, int b, SDL_PixelFormatEnum c, const void *d, int e, SDL_PixelFormatEnum f, void *g, int h),(a,b,c,d,e,f,g,h),return) SDL_DYNAPI_PROC(int,SDL_PremultiplyAlpha,(int a, int b, SDL_PixelFormat c, const void *d, int e, SDL_PixelFormat f, void *g, int h),(a,b,c,d,e,f,g,h),return)
SDL_DYNAPI_PROC(void,SDL_PumpEvents,(void),(),) SDL_DYNAPI_PROC(void,SDL_PumpEvents,(void),(),)
SDL_DYNAPI_PROC(int,SDL_PushEvent,(SDL_Event *a),(a),return) SDL_DYNAPI_PROC(int,SDL_PushEvent,(SDL_Event *a),(a),return)
SDL_DYNAPI_PROC(int,SDL_PutAudioStreamData,(SDL_AudioStream *a, const void *b, int c),(a,b,c),return) SDL_DYNAPI_PROC(int,SDL_PutAudioStreamData,(SDL_AudioStream *a, const void *b, int c),(a,b,c),return)
@ -759,7 +760,6 @@ SDL_DYNAPI_PROC(int,SDL_SetMemoryFunctions,(SDL_malloc_func a, SDL_calloc_func b
SDL_DYNAPI_PROC(void,SDL_SetModState,(SDL_Keymod a),(a),) SDL_DYNAPI_PROC(void,SDL_SetModState,(SDL_Keymod a),(a),)
SDL_DYNAPI_PROC(int,SDL_SetNumberProperty,(SDL_PropertiesID a, const char *b, Sint64 c),(a,b,c),return) SDL_DYNAPI_PROC(int,SDL_SetNumberProperty,(SDL_PropertiesID a, const char *b, Sint64 c),(a,b,c),return)
SDL_DYNAPI_PROC(int,SDL_SetPaletteColors,(SDL_Palette *a, const SDL_Color *b, int c, int d),(a,b,c,d),return) SDL_DYNAPI_PROC(int,SDL_SetPaletteColors,(SDL_Palette *a, const SDL_Color *b, int c, int d),(a,b,c,d),return)
SDL_DYNAPI_PROC(int,SDL_SetPixelFormatPalette,(SDL_PixelFormat *a, SDL_Palette *b),(a,b),return)
SDL_DYNAPI_PROC(int,SDL_SetPrimarySelectionText,(const char *a),(a),return) SDL_DYNAPI_PROC(int,SDL_SetPrimarySelectionText,(const char *a),(a),return)
SDL_DYNAPI_PROC(int,SDL_SetProperty,(SDL_PropertiesID a, const char *b, void *c),(a,b,c),return) SDL_DYNAPI_PROC(int,SDL_SetProperty,(SDL_PropertiesID a, const char *b, void *c),(a,b,c),return)
SDL_DYNAPI_PROC(int,SDL_SetPropertyWithCleanup,(SDL_PropertiesID a, const char *b, void *c, SDL_CleanupPropertyCallback d, void *e),(a,b,c,d,e),return) SDL_DYNAPI_PROC(int,SDL_SetPropertyWithCleanup,(SDL_PropertiesID a, const char *b, void *c, SDL_CleanupPropertyCallback d, void *e),(a,b,c,d,e),return)
@ -783,7 +783,7 @@ SDL_DYNAPI_PROC(int,SDL_SetSurfaceColorKey,(SDL_Surface *a, int b, Uint32 c),(a,
SDL_DYNAPI_PROC(int,SDL_SetSurfaceColorMod,(SDL_Surface *a, Uint8 b, Uint8 c, Uint8 d),(a,b,c,d),return) SDL_DYNAPI_PROC(int,SDL_SetSurfaceColorMod,(SDL_Surface *a, Uint8 b, Uint8 c, Uint8 d),(a,b,c,d),return)
SDL_DYNAPI_PROC(int,SDL_SetSurfaceColorspace,(SDL_Surface *a, SDL_Colorspace b),(a,b),return) SDL_DYNAPI_PROC(int,SDL_SetSurfaceColorspace,(SDL_Surface *a, SDL_Colorspace b),(a,b),return)
SDL_DYNAPI_PROC(int,SDL_SetSurfacePalette,(SDL_Surface *a, SDL_Palette *b),(a,b),return) SDL_DYNAPI_PROC(int,SDL_SetSurfacePalette,(SDL_Surface *a, SDL_Palette *b),(a,b),return)
SDL_DYNAPI_PROC(int,SDL_SetSurfaceRLE,(SDL_Surface *a, int b),(a,b),return) SDL_DYNAPI_PROC(int,SDL_SetSurfaceRLE,(SDL_Surface *a, SDL_bool b),(a,b),return)
SDL_DYNAPI_PROC(int,SDL_SetTLS,(SDL_TLSID a, const void *b, SDL_TLSDestructorCallback c),(a,b,c),return) SDL_DYNAPI_PROC(int,SDL_SetTLS,(SDL_TLSID a, const void *b, SDL_TLSDestructorCallback c),(a,b,c),return)
SDL_DYNAPI_PROC(int,SDL_SetTextInputArea,(SDL_Window *a, const SDL_Rect *b, int c),(a,b,c),return) SDL_DYNAPI_PROC(int,SDL_SetTextInputArea,(SDL_Window *a, const SDL_Rect *b, int c),(a,b,c),return)
SDL_DYNAPI_PROC(int,SDL_SetTextureAlphaMod,(SDL_Texture *a, Uint8 b),(a,b),return) SDL_DYNAPI_PROC(int,SDL_SetTextureAlphaMod,(SDL_Texture *a, Uint8 b),(a,b),return)

View File

@ -1493,8 +1493,8 @@ SDL_Cursor *SDL_CreateColorCursor(SDL_Surface *surface, int hot_x, int hot_y)
return NULL; return NULL;
} }
if (surface->format->format != SDL_PIXELFORMAT_ARGB8888) { if (surface->format != SDL_PIXELFORMAT_ARGB8888) {
temp = SDL_ConvertSurfaceFormat(surface, SDL_PIXELFORMAT_ARGB8888); temp = SDL_ConvertSurface(surface, SDL_PIXELFORMAT_ARGB8888);
if (!temp) { if (!temp) {
return NULL; return NULL;
} }

View File

@ -142,9 +142,9 @@ void SDL_QuitRender(void)
} }
} }
int SDL_AddSupportedTextureFormat(SDL_Renderer *renderer, SDL_PixelFormatEnum format) int SDL_AddSupportedTextureFormat(SDL_Renderer *renderer, SDL_PixelFormat format)
{ {
SDL_PixelFormatEnum *texture_formats = (SDL_PixelFormatEnum *)SDL_realloc((void *)renderer->texture_formats, (renderer->num_texture_formats + 2) * sizeof(SDL_PixelFormatEnum)); SDL_PixelFormat *texture_formats = (SDL_PixelFormat *)SDL_realloc((void *)renderer->texture_formats, (renderer->num_texture_formats + 2) * sizeof(SDL_PixelFormat));
if (!texture_formats) { if (!texture_formats) {
return -1; return -1;
} }
@ -1244,7 +1244,7 @@ static SDL_bool IsSupportedBlendMode(SDL_Renderer *renderer, SDL_BlendMode blend
} }
} }
static SDL_bool IsSupportedFormat(SDL_Renderer *renderer, SDL_PixelFormatEnum format) static SDL_bool IsSupportedFormat(SDL_Renderer *renderer, SDL_PixelFormat format)
{ {
int i; int i;
@ -1256,7 +1256,7 @@ static SDL_bool IsSupportedFormat(SDL_Renderer *renderer, SDL_PixelFormatEnum fo
return SDL_FALSE; return SDL_FALSE;
} }
static Uint32 GetClosestSupportedFormat(SDL_Renderer *renderer, SDL_PixelFormatEnum format) static Uint32 GetClosestSupportedFormat(SDL_Renderer *renderer, SDL_PixelFormat format)
{ {
int i; int i;
@ -1297,7 +1297,7 @@ static Uint32 GetClosestSupportedFormat(SDL_Renderer *renderer, SDL_PixelFormatE
SDL_Texture *SDL_CreateTextureWithProperties(SDL_Renderer *renderer, SDL_PropertiesID props) SDL_Texture *SDL_CreateTextureWithProperties(SDL_Renderer *renderer, SDL_PropertiesID props)
{ {
SDL_Texture *texture; SDL_Texture *texture;
SDL_PixelFormatEnum format = (SDL_PixelFormatEnum)SDL_GetNumberProperty(props, SDL_PROP_TEXTURE_CREATE_FORMAT_NUMBER, SDL_PIXELFORMAT_UNKNOWN); SDL_PixelFormat format = (SDL_PixelFormat)SDL_GetNumberProperty(props, SDL_PROP_TEXTURE_CREATE_FORMAT_NUMBER, SDL_PIXELFORMAT_UNKNOWN);
int access = (int)SDL_GetNumberProperty(props, SDL_PROP_TEXTURE_CREATE_ACCESS_NUMBER, SDL_TEXTUREACCESS_STATIC); int access = (int)SDL_GetNumberProperty(props, SDL_PROP_TEXTURE_CREATE_ACCESS_NUMBER, SDL_TEXTUREACCESS_STATIC);
int w = (int)SDL_GetNumberProperty(props, SDL_PROP_TEXTURE_CREATE_WIDTH_NUMBER, 0); int w = (int)SDL_GetNumberProperty(props, SDL_PROP_TEXTURE_CREATE_WIDTH_NUMBER, 0);
int h = (int)SDL_GetNumberProperty(props, SDL_PROP_TEXTURE_CREATE_HEIGHT_NUMBER, 0); int h = (int)SDL_GetNumberProperty(props, SDL_PROP_TEXTURE_CREATE_HEIGHT_NUMBER, 0);
@ -1451,7 +1451,7 @@ SDL_Texture *SDL_CreateTextureWithProperties(SDL_Renderer *renderer, SDL_Propert
return texture; return texture;
} }
SDL_Texture *SDL_CreateTexture(SDL_Renderer *renderer, SDL_PixelFormatEnum format, int access, int w, int h) SDL_Texture *SDL_CreateTexture(SDL_Renderer *renderer, SDL_PixelFormat format, int access, int w, int h)
{ {
SDL_Texture *texture; SDL_Texture *texture;
SDL_PropertiesID props = SDL_CreateProperties(); SDL_PropertiesID props = SDL_CreateProperties();
@ -1466,56 +1466,53 @@ SDL_Texture *SDL_CreateTexture(SDL_Renderer *renderer, SDL_PixelFormatEnum forma
SDL_Texture *SDL_CreateTextureFromSurface(SDL_Renderer *renderer, SDL_Surface *surface) SDL_Texture *SDL_CreateTextureFromSurface(SDL_Renderer *renderer, SDL_Surface *surface)
{ {
const SDL_PixelFormat *fmt;
SDL_bool needAlpha; SDL_bool needAlpha;
SDL_bool direct_update; SDL_bool direct_update;
int i; int i;
SDL_PixelFormatEnum format = SDL_PIXELFORMAT_UNKNOWN; SDL_PixelFormat format = SDL_PIXELFORMAT_UNKNOWN;
SDL_Palette *palette;
SDL_Texture *texture; SDL_Texture *texture;
SDL_PropertiesID surface_props, props; SDL_PropertiesID props;
SDL_Colorspace surface_colorspace = SDL_COLORSPACE_UNKNOWN; SDL_Colorspace surface_colorspace = SDL_COLORSPACE_UNKNOWN;
SDL_Colorspace texture_colorspace = SDL_COLORSPACE_UNKNOWN; SDL_Colorspace texture_colorspace = SDL_COLORSPACE_UNKNOWN;
CHECK_RENDERER_MAGIC(renderer, NULL); CHECK_RENDERER_MAGIC(renderer, NULL);
if (!surface) { if (!SDL_SurfaceValid(surface)) {
SDL_InvalidParamError("SDL_CreateTextureFromSurface(): surface"); SDL_InvalidParamError("SDL_CreateTextureFromSurface(): surface");
return NULL; return NULL;
} }
/* See what the best texture format is */ /* See what the best texture format is */
fmt = surface->format; if (SDL_ISPIXELFORMAT_ALPHA(surface->format) || SDL_SurfaceHasColorKey(surface)) {
if (fmt->Amask || SDL_SurfaceHasColorKey(surface)) {
needAlpha = SDL_TRUE; needAlpha = SDL_TRUE;
} else { } else {
needAlpha = SDL_FALSE; needAlpha = SDL_FALSE;
} }
/* If Palette contains alpha values, promotes to alpha format */ /* If Palette contains alpha values, promotes to alpha format */
if (fmt->palette) { palette = SDL_GetSurfacePalette(surface);
if (palette) {
SDL_bool is_opaque, has_alpha_channel; SDL_bool is_opaque, has_alpha_channel;
SDL_DetectPalette(fmt->palette, &is_opaque, &has_alpha_channel); SDL_DetectPalette(palette, &is_opaque, &has_alpha_channel);
if (!is_opaque) { if (!is_opaque) {
needAlpha = SDL_TRUE; needAlpha = SDL_TRUE;
} }
} }
if (SDL_GetSurfaceColorspace(surface, &surface_colorspace) < 0) { texture_colorspace = SDL_GetSurfaceColorspace(surface);
return NULL;
}
texture_colorspace = surface_colorspace;
/* Try to have the best pixel format for the texture */ /* Try to have the best pixel format for the texture */
/* No alpha, but a colorkey => promote to alpha */ /* No alpha, but a colorkey => promote to alpha */
if (!fmt->Amask && SDL_SurfaceHasColorKey(surface)) { if (!SDL_ISPIXELFORMAT_ALPHA(surface->format) && SDL_SurfaceHasColorKey(surface)) {
if (fmt->format == SDL_PIXELFORMAT_XRGB8888) { if (surface->format == SDL_PIXELFORMAT_XRGB8888) {
for (i = 0; i < renderer->num_texture_formats; ++i) { for (i = 0; i < renderer->num_texture_formats; ++i) {
if (renderer->texture_formats[i] == SDL_PIXELFORMAT_ARGB8888) { if (renderer->texture_formats[i] == SDL_PIXELFORMAT_ARGB8888) {
format = SDL_PIXELFORMAT_ARGB8888; format = SDL_PIXELFORMAT_ARGB8888;
break; break;
} }
} }
} else if (fmt->format == SDL_PIXELFORMAT_XBGR8888) { } else if (surface->format == SDL_PIXELFORMAT_XBGR8888) {
for (i = 0; i < renderer->num_texture_formats; ++i) { for (i = 0; i < renderer->num_texture_formats; ++i) {
if (renderer->texture_formats[i] == SDL_PIXELFORMAT_ABGR8888) { if (renderer->texture_formats[i] == SDL_PIXELFORMAT_ABGR8888) {
format = SDL_PIXELFORMAT_ABGR8888; format = SDL_PIXELFORMAT_ABGR8888;
@ -1526,15 +1523,15 @@ SDL_Texture *SDL_CreateTextureFromSurface(SDL_Renderer *renderer, SDL_Surface *s
} else { } else {
/* Exact match would be fine */ /* Exact match would be fine */
for (i = 0; i < renderer->num_texture_formats; ++i) { for (i = 0; i < renderer->num_texture_formats; ++i) {
if (renderer->texture_formats[i] == fmt->format) { if (renderer->texture_formats[i] == surface->format) {
format = fmt->format; format = surface->format;
break; break;
} }
} }
} }
/* Look for 10-bit pixel formats if needed */ /* Look for 10-bit pixel formats if needed */
if (format == SDL_PIXELFORMAT_UNKNOWN && SDL_ISPIXELFORMAT_10BIT(fmt->format)) { if (format == SDL_PIXELFORMAT_UNKNOWN && SDL_ISPIXELFORMAT_10BIT(surface->format)) {
for (i = 0; i < renderer->num_texture_formats; ++i) { for (i = 0; i < renderer->num_texture_formats; ++i) {
if (SDL_ISPIXELFORMAT_10BIT(renderer->texture_formats[i])) { if (SDL_ISPIXELFORMAT_10BIT(renderer->texture_formats[i])) {
format = renderer->texture_formats[i]; format = renderer->texture_formats[i];
@ -1545,7 +1542,7 @@ SDL_Texture *SDL_CreateTextureFromSurface(SDL_Renderer *renderer, SDL_Surface *s
/* Look for floating point pixel formats if needed */ /* Look for floating point pixel formats if needed */
if (format == SDL_PIXELFORMAT_UNKNOWN && if (format == SDL_PIXELFORMAT_UNKNOWN &&
(SDL_ISPIXELFORMAT_10BIT(fmt->format) || SDL_ISPIXELFORMAT_FLOAT(fmt->format))) { (SDL_ISPIXELFORMAT_10BIT(surface->format) || SDL_ISPIXELFORMAT_FLOAT(surface->format))) {
for (i = 0; i < renderer->num_texture_formats; ++i) { for (i = 0; i < renderer->num_texture_formats; ++i) {
if (SDL_ISPIXELFORMAT_FLOAT(renderer->texture_formats[i])) { if (SDL_ISPIXELFORMAT_FLOAT(renderer->texture_formats[i])) {
format = renderer->texture_formats[i]; format = renderer->texture_formats[i];
@ -1577,8 +1574,8 @@ SDL_Texture *SDL_CreateTextureFromSurface(SDL_Renderer *renderer, SDL_Surface *s
} }
} }
if (format == surface->format->format && texture_colorspace == surface_colorspace) { if (format == surface->format && texture_colorspace == surface_colorspace) {
if (surface->format->Amask && SDL_SurfaceHasColorKey(surface)) { if (SDL_ISPIXELFORMAT_ALPHA(surface->format) && SDL_SurfaceHasColorKey(surface)) {
/* Surface and Renderer formats are identical. /* Surface and Renderer formats are identical.
* Intermediate conversion is needed to convert color key to alpha (SDL_ConvertColorkeyToAlpha()). */ * Intermediate conversion is needed to convert color key to alpha (SDL_ConvertColorkeyToAlpha()). */
direct_update = SDL_FALSE; direct_update = SDL_FALSE;
@ -1591,12 +1588,6 @@ SDL_Texture *SDL_CreateTextureFromSurface(SDL_Renderer *renderer, SDL_Surface *s
direct_update = SDL_FALSE; direct_update = SDL_FALSE;
} }
if (surface->flags & SDL_SURFACE_USES_PROPERTIES) {
surface_props = SDL_GetSurfaceProperties(surface);
} else {
surface_props = 0;
}
props = SDL_CreateProperties(); props = SDL_CreateProperties();
SDL_SetNumberProperty(props, SDL_PROP_TEXTURE_CREATE_COLORSPACE_NUMBER, texture_colorspace); SDL_SetNumberProperty(props, SDL_PROP_TEXTURE_CREATE_COLORSPACE_NUMBER, texture_colorspace);
if (surface_colorspace == texture_colorspace) { if (surface_colorspace == texture_colorspace) {
@ -1627,7 +1618,7 @@ SDL_Texture *SDL_CreateTextureFromSurface(SDL_Renderer *renderer, SDL_Surface *s
SDL_Surface *temp = NULL; SDL_Surface *temp = NULL;
/* Set up a destination surface for the texture update */ /* Set up a destination surface for the texture update */
temp = SDL_ConvertSurfaceFormatAndColorspace(surface, format, texture_colorspace, surface_props); temp = SDL_ConvertSurfaceAndColorspace(surface, format, NULL, texture_colorspace, surface->internal->props);
if (temp) { if (temp) {
SDL_UpdateTexture(texture, NULL, temp->pixels, temp->pitch); SDL_UpdateTexture(texture, NULL, temp->pixels, temp->pitch);
SDL_DestroySurface(temp); SDL_DestroySurface(temp);
@ -2283,7 +2274,7 @@ int SDL_LockTextureToSurface(SDL_Texture *texture, const SDL_Rect *rect, SDL_Sur
return ret; return ret;
} }
texture->locked_surface = SDL_CreateSurfaceFrom(pixels, real_rect.w, real_rect.h, pitch, texture->format); texture->locked_surface = SDL_CreateSurfaceFrom(real_rect.w, real_rect.h, texture->format, pixels, pitch);
if (!texture->locked_surface) { if (!texture->locked_surface) {
SDL_UnlockTexture(texture); SDL_UnlockTexture(texture);
return -1; return -1;

View File

@ -65,7 +65,7 @@ struct SDL_Texture
SDL_Colorspace colorspace; /**< The colorspace of the texture */ SDL_Colorspace colorspace; /**< The colorspace of the texture */
float SDR_white_point; /**< The SDR white point for this content */ float SDR_white_point; /**< The SDR white point for this content */
float HDR_headroom; /**< The HDR headroom needed by this content */ float HDR_headroom; /**< The HDR headroom needed by this content */
SDL_PixelFormatEnum format; /**< The pixel format of the texture */ SDL_PixelFormat format; /**< The pixel format of the texture */
int access; /**< SDL_TextureAccess */ int access; /**< SDL_TextureAccess */
int w; /**< The width of the texture */ int w; /**< The width of the texture */
int h; /**< The height of the texture */ int h; /**< The height of the texture */
@ -217,7 +217,7 @@ struct SDL_Renderer
/* The current renderer info */ /* The current renderer info */
const char *name; const char *name;
SDL_PixelFormatEnum *texture_formats; SDL_PixelFormat *texture_formats;
int num_texture_formats; int num_texture_formats;
SDL_bool software; SDL_bool software;
@ -320,7 +320,7 @@ extern SDL_RenderDriver VITA_GXM_RenderDriver;
extern void SDL_QuitRender(void); extern void SDL_QuitRender(void);
/* Add a supported texture format to a renderer */ /* Add a supported texture format to a renderer */
extern int SDL_AddSupportedTextureFormat(SDL_Renderer *renderer, SDL_PixelFormatEnum format); extern int SDL_AddSupportedTextureFormat(SDL_Renderer *renderer, SDL_PixelFormat format);
/* Setup colorspace conversion */ /* Setup colorspace conversion */
extern void SDL_SetupRendererColorspace(SDL_Renderer *renderer, SDL_PropertiesID props); extern void SDL_SetupRendererColorspace(SDL_Renderer *renderer, SDL_PropertiesID props);

View File

@ -27,7 +27,7 @@
#include "SDL_yuv_sw_c.h" #include "SDL_yuv_sw_c.h"
#include "../video/SDL_yuv_c.h" #include "../video/SDL_yuv_c.h"
SDL_SW_YUVTexture *SDL_SW_CreateYUVTexture(SDL_PixelFormatEnum format, int w, int h) SDL_SW_YUVTexture *SDL_SW_CreateYUVTexture(SDL_PixelFormat format, int w, int h)
{ {
SDL_SW_YUVTexture *swdata; SDL_SW_YUVTexture *swdata;
@ -336,7 +336,7 @@ void SDL_SW_UnlockYUVTexture(SDL_SW_YUVTexture *swdata)
} }
int SDL_SW_CopyYUVToRGB(SDL_SW_YUVTexture *swdata, const SDL_Rect *srcrect, int SDL_SW_CopyYUVToRGB(SDL_SW_YUVTexture *swdata, const SDL_Rect *srcrect,
SDL_PixelFormatEnum target_format, int w, int h, void *pixels, SDL_PixelFormat target_format, int w, int h, void *pixels,
int pitch) int pitch)
{ {
int stretch; int stretch;
@ -365,7 +365,7 @@ int SDL_SW_CopyYUVToRGB(SDL_SW_YUVTexture *swdata, const SDL_Rect *srcrect,
swdata->display->pixels = pixels; swdata->display->pixels = pixels;
swdata->display->pitch = pitch; swdata->display->pitch = pitch;
} else { } else {
swdata->display = SDL_CreateSurfaceFrom(pixels, w, h, pitch, target_format); swdata->display = SDL_CreateSurfaceFrom(w, h, target_format, pixels, pitch);
if (!swdata->display) { if (!swdata->display) {
return -1; return -1;
} }

View File

@ -28,8 +28,8 @@
struct SDL_SW_YUVTexture struct SDL_SW_YUVTexture
{ {
SDL_PixelFormatEnum format; SDL_PixelFormat format;
SDL_PixelFormatEnum target_format; SDL_PixelFormat target_format;
int w, h; int w, h;
Uint8 *pixels; Uint8 *pixels;
@ -44,7 +44,7 @@ struct SDL_SW_YUVTexture
typedef struct SDL_SW_YUVTexture SDL_SW_YUVTexture; typedef struct SDL_SW_YUVTexture SDL_SW_YUVTexture;
SDL_SW_YUVTexture *SDL_SW_CreateYUVTexture(SDL_PixelFormatEnum format, int w, int h); SDL_SW_YUVTexture *SDL_SW_CreateYUVTexture(SDL_PixelFormat format, int w, int h);
int SDL_SW_QueryYUVTexturePixels(SDL_SW_YUVTexture *swdata, void **pixels, int SDL_SW_QueryYUVTexturePixels(SDL_SW_YUVTexture *swdata, void **pixels,
int *pitch); int *pitch);
int SDL_SW_UpdateYUVTexture(SDL_SW_YUVTexture *swdata, const SDL_Rect *rect, int SDL_SW_UpdateYUVTexture(SDL_SW_YUVTexture *swdata, const SDL_Rect *rect,
@ -60,7 +60,7 @@ int SDL_SW_LockYUVTexture(SDL_SW_YUVTexture *swdata, const SDL_Rect *rect,
void **pixels, int *pitch); void **pixels, int *pitch);
void SDL_SW_UnlockYUVTexture(SDL_SW_YUVTexture *swdata); void SDL_SW_UnlockYUVTexture(SDL_SW_YUVTexture *swdata);
int SDL_SW_CopyYUVToRGB(SDL_SW_YUVTexture *swdata, const SDL_Rect *srcrect, int SDL_SW_CopyYUVToRGB(SDL_SW_YUVTexture *swdata, const SDL_Rect *srcrect,
SDL_PixelFormatEnum target_format, int w, int h, void *pixels, SDL_PixelFormat target_format, int w, int h, void *pixels,
int pitch); int pitch);
void SDL_SW_DestroyYUVTexture(SDL_SW_YUVTexture *swdata); void SDL_SW_DestroyYUVTexture(SDL_SW_YUVTexture *swdata);

View File

@ -209,7 +209,7 @@ static D3DFORMAT PixelFormatToD3DFMT(Uint32 format)
} }
} }
static SDL_PixelFormatEnum D3DFMTToPixelFormat(D3DFORMAT format) static SDL_PixelFormat D3DFMTToPixelFormat(D3DFORMAT format)
{ {
switch (format) { switch (format) {
case D3DFMT_R5G6B5: case D3DFMT_R5G6B5:

View File

@ -244,7 +244,7 @@ static const GUID SDL_DXGI_DEBUG_ALL = { 0xe48ae283, 0xda80, 0x490b, { 0x87, 0xe
#pragma GCC diagnostic pop #pragma GCC diagnostic pop
#endif #endif
SDL_PixelFormatEnum D3D11_DXGIFormatToSDLPixelFormat(DXGI_FORMAT dxgiFormat) SDL_PixelFormat D3D11_DXGIFormatToSDLPixelFormat(DXGI_FORMAT dxgiFormat)
{ {
switch (dxgiFormat) { switch (dxgiFormat) {
case DXGI_FORMAT_B8G8R8A8_UNORM: case DXGI_FORMAT_B8G8R8A8_UNORM:

View File

@ -361,7 +361,7 @@ static UINT D3D12_Align(UINT location, UINT alignment)
return (location + (alignment - 1)) & ~(alignment - 1); return (location + (alignment - 1)) & ~(alignment - 1);
} }
static SDL_PixelFormatEnum D3D12_DXGIFormatToSDLPixelFormat(DXGI_FORMAT dxgiFormat) static SDL_PixelFormat D3D12_DXGIFormatToSDLPixelFormat(DXGI_FORMAT dxgiFormat)
{ {
switch (dxgiFormat) { switch (dxgiFormat) {
case DXGI_FORMAT_B8G8R8A8_UNORM: case DXGI_FORMAT_B8G8R8A8_UNORM:

View File

@ -1450,7 +1450,7 @@ static int GL_RunCommandQueue(SDL_Renderer *renderer, SDL_RenderCommand *cmd, vo
static SDL_Surface *GL_RenderReadPixels(SDL_Renderer *renderer, const SDL_Rect *rect) static SDL_Surface *GL_RenderReadPixels(SDL_Renderer *renderer, const SDL_Rect *rect)
{ {
GL_RenderData *data = (GL_RenderData *)renderer->driverdata; GL_RenderData *data = (GL_RenderData *)renderer->driverdata;
SDL_PixelFormatEnum format = renderer->target ? renderer->target->format : SDL_PIXELFORMAT_ARGB8888; SDL_PixelFormat format = renderer->target ? renderer->target->format : SDL_PIXELFORMAT_ARGB8888;
GLint internalFormat; GLint internalFormat;
GLenum targetFormat, type; GLenum targetFormat, type;
int w, h; int w, h;

View File

@ -1966,7 +1966,7 @@ static void GLES2_DestroyTexture(SDL_Renderer *renderer, SDL_Texture *texture)
static SDL_Surface *GLES2_RenderReadPixels(SDL_Renderer *renderer, const SDL_Rect *rect) static SDL_Surface *GLES2_RenderReadPixels(SDL_Renderer *renderer, const SDL_Rect *rect)
{ {
GLES2_RenderData *data = (GLES2_RenderData *)renderer->driverdata; GLES2_RenderData *data = (GLES2_RenderData *)renderer->driverdata;
SDL_PixelFormatEnum format = renderer->target ? renderer->target->format : SDL_PIXELFORMAT_RGBA32; SDL_PixelFormat format = renderer->target ? renderer->target->format : SDL_PIXELFORMAT_RGBA32;
int w, h; int w, h;
SDL_Surface *surface; SDL_Surface *surface;

View File

@ -128,7 +128,7 @@ static int SDL_BlendFillRect_ARGB8888(SDL_Surface *dst, const SDL_Rect *rect,
static int SDL_BlendFillRect_RGB(SDL_Surface *dst, const SDL_Rect *rect, static int SDL_BlendFillRect_RGB(SDL_Surface *dst, const SDL_Rect *rect,
SDL_BlendMode blendMode, Uint8 r, Uint8 g, Uint8 b, Uint8 a) SDL_BlendMode blendMode, Uint8 r, Uint8 g, Uint8 b, Uint8 a)
{ {
SDL_PixelFormat *fmt = dst->format; const SDL_PixelFormatDetails *fmt = dst->internal->format;
unsigned inva = 0xff - a; unsigned inva = 0xff - a;
switch (fmt->bytes_per_pixel) { switch (fmt->bytes_per_pixel) {
@ -178,7 +178,7 @@ static int SDL_BlendFillRect_RGB(SDL_Surface *dst, const SDL_Rect *rect,
static int SDL_BlendFillRect_RGBA(SDL_Surface *dst, const SDL_Rect *rect, static int SDL_BlendFillRect_RGBA(SDL_Surface *dst, const SDL_Rect *rect,
SDL_BlendMode blendMode, Uint8 r, Uint8 g, Uint8 b, Uint8 a) SDL_BlendMode blendMode, Uint8 r, Uint8 g, Uint8 b, Uint8 a)
{ {
SDL_PixelFormat *fmt = dst->format; const SDL_PixelFormatDetails *fmt = dst->internal->format;
unsigned inva = 0xff - a; unsigned inva = 0xff - a;
switch (fmt->bytes_per_pixel) { switch (fmt->bytes_per_pixel) {
@ -211,24 +211,24 @@ int SDL_BlendFillRect(SDL_Surface *dst, const SDL_Rect *rect,
{ {
SDL_Rect clipped; SDL_Rect clipped;
if (!dst) { if (!SDL_SurfaceValid(dst)) {
return SDL_InvalidParamError("SDL_BlendFillRect(): dst"); return SDL_InvalidParamError("SDL_BlendFillRect(): dst");
} }
/* This function doesn't work on surfaces < 8 bpp */ /* This function doesn't work on surfaces < 8 bpp */
if (dst->format->bits_per_pixel < 8) { if (SDL_BITSPERPIXEL(dst->format) < 8) {
return SDL_SetError("SDL_BlendFillRect(): Unsupported surface format"); return SDL_SetError("SDL_BlendFillRect(): Unsupported surface format");
} }
/* If 'rect' == NULL, then fill the whole surface */ /* If 'rect' == NULL, then fill the whole surface */
if (rect) { if (rect) {
/* Perform clipping */ /* Perform clipping */
if (!SDL_GetRectIntersection(rect, &dst->clip_rect, &clipped)) { if (!SDL_GetRectIntersection(rect, &dst->internal->clip_rect, &clipped)) {
return 0; return 0;
} }
rect = &clipped; rect = &clipped;
} else { } else {
rect = &dst->clip_rect; rect = &dst->internal->clip_rect;
} }
if (blendMode == SDL_BLENDMODE_BLEND || blendMode == SDL_BLENDMODE_ADD) { if (blendMode == SDL_BLENDMODE_BLEND || blendMode == SDL_BLENDMODE_ADD) {
@ -237,23 +237,23 @@ int SDL_BlendFillRect(SDL_Surface *dst, const SDL_Rect *rect,
b = DRAW_MUL(b, a); b = DRAW_MUL(b, a);
} }
switch (dst->format->bits_per_pixel) { switch (dst->internal->format->bits_per_pixel) {
case 15: case 15:
switch (dst->format->Rmask) { switch (dst->internal->format->Rmask) {
case 0x7C00: case 0x7C00:
return SDL_BlendFillRect_RGB555(dst, rect, blendMode, r, g, b, a); return SDL_BlendFillRect_RGB555(dst, rect, blendMode, r, g, b, a);
} }
break; break;
case 16: case 16:
switch (dst->format->Rmask) { switch (dst->internal->format->Rmask) {
case 0xF800: case 0xF800:
return SDL_BlendFillRect_RGB565(dst, rect, blendMode, r, g, b, a); return SDL_BlendFillRect_RGB565(dst, rect, blendMode, r, g, b, a);
} }
break; break;
case 32: case 32:
switch (dst->format->Rmask) { switch (dst->internal->format->Rmask) {
case 0x00FF0000: case 0x00FF0000:
if (!dst->format->Amask) { if (!dst->internal->format->Amask) {
return SDL_BlendFillRect_XRGB8888(dst, rect, blendMode, r, g, b, a); return SDL_BlendFillRect_XRGB8888(dst, rect, blendMode, r, g, b, a);
} else { } else {
return SDL_BlendFillRect_ARGB8888(dst, rect, blendMode, r, g, b, a); return SDL_BlendFillRect_ARGB8888(dst, rect, blendMode, r, g, b, a);
@ -265,7 +265,7 @@ int SDL_BlendFillRect(SDL_Surface *dst, const SDL_Rect *rect,
break; break;
} }
if (!dst->format->Amask) { if (!dst->internal->format->Amask) {
return SDL_BlendFillRect_RGB(dst, rect, blendMode, r, g, b, a); return SDL_BlendFillRect_RGB(dst, rect, blendMode, r, g, b, a);
} else { } else {
return SDL_BlendFillRect_RGBA(dst, rect, blendMode, r, g, b, a); return SDL_BlendFillRect_RGBA(dst, rect, blendMode, r, g, b, a);
@ -281,12 +281,12 @@ int SDL_BlendFillRects(SDL_Surface *dst, const SDL_Rect *rects, int count,
SDL_BlendMode blendMode, Uint8 r, Uint8 g, Uint8 b, Uint8 a) = NULL; SDL_BlendMode blendMode, Uint8 r, Uint8 g, Uint8 b, Uint8 a) = NULL;
int status = 0; int status = 0;
if (!dst) { if (!SDL_SurfaceValid(dst)) {
return SDL_InvalidParamError("SDL_BlendFillRects(): dst"); return SDL_InvalidParamError("SDL_BlendFillRects(): dst");
} }
/* This function doesn't work on surfaces < 8 bpp */ /* This function doesn't work on surfaces < 8 bpp */
if (dst->format->bits_per_pixel < 8) { if (dst->internal->format->bits_per_pixel < 8) {
return SDL_SetError("SDL_BlendFillRects(): Unsupported surface format"); return SDL_SetError("SDL_BlendFillRects(): Unsupported surface format");
} }
@ -297,23 +297,23 @@ int SDL_BlendFillRects(SDL_Surface *dst, const SDL_Rect *rects, int count,
} }
/* FIXME: Does this function pointer slow things down significantly? */ /* FIXME: Does this function pointer slow things down significantly? */
switch (dst->format->bits_per_pixel) { switch (dst->internal->format->bits_per_pixel) {
case 15: case 15:
switch (dst->format->Rmask) { switch (dst->internal->format->Rmask) {
case 0x7C00: case 0x7C00:
func = SDL_BlendFillRect_RGB555; func = SDL_BlendFillRect_RGB555;
} }
break; break;
case 16: case 16:
switch (dst->format->Rmask) { switch (dst->internal->format->Rmask) {
case 0xF800: case 0xF800:
func = SDL_BlendFillRect_RGB565; func = SDL_BlendFillRect_RGB565;
} }
break; break;
case 32: case 32:
switch (dst->format->Rmask) { switch (dst->internal->format->Rmask) {
case 0x00FF0000: case 0x00FF0000:
if (!dst->format->Amask) { if (!dst->internal->format->Amask) {
func = SDL_BlendFillRect_XRGB8888; func = SDL_BlendFillRect_XRGB8888;
} else { } else {
func = SDL_BlendFillRect_ARGB8888; func = SDL_BlendFillRect_ARGB8888;
@ -326,7 +326,7 @@ int SDL_BlendFillRects(SDL_Surface *dst, const SDL_Rect *rects, int count,
} }
if (!func) { if (!func) {
if (!dst->format->Amask) { if (!dst->internal->format->Amask) {
func = SDL_BlendFillRect_RGB; func = SDL_BlendFillRect_RGB;
} else { } else {
func = SDL_BlendFillRect_RGBA; func = SDL_BlendFillRect_RGBA;
@ -335,7 +335,7 @@ int SDL_BlendFillRects(SDL_Surface *dst, const SDL_Rect *rects, int count,
for (i = 0; i < count; ++i) { for (i = 0; i < count; ++i) {
/* Perform clipping */ /* Perform clipping */
if (!SDL_GetRectIntersection(&rects[i], &dst->clip_rect, &rect)) { if (!SDL_GetRectIntersection(&rects[i], &dst->internal->clip_rect, &rect)) {
continue; continue;
} }
status = func(dst, &rect, blendMode, r, g, b, a); status = func(dst, &rect, blendMode, r, g, b, a);

View File

@ -30,7 +30,7 @@ static void SDL_BlendLine_RGB2(SDL_Surface *dst, int x1, int y1, int x2, int y2,
SDL_BlendMode blendMode, Uint8 _r, Uint8 _g, Uint8 _b, Uint8 _a, SDL_BlendMode blendMode, Uint8 _r, Uint8 _g, Uint8 _b, Uint8 _a,
SDL_bool draw_end) SDL_bool draw_end)
{ {
const SDL_PixelFormat *fmt = dst->format; const SDL_PixelFormatDetails *fmt = dst->internal->format;
unsigned r, g, b, a, inva; unsigned r, g, b, a, inva;
if (blendMode == SDL_BLENDMODE_BLEND || blendMode == SDL_BLENDMODE_ADD) { if (blendMode == SDL_BLENDMODE_BLEND || blendMode == SDL_BLENDMODE_ADD) {
@ -343,7 +343,7 @@ static void SDL_BlendLine_RGB4(SDL_Surface *dst, int x1, int y1, int x2, int y2,
SDL_BlendMode blendMode, Uint8 _r, Uint8 _g, Uint8 _b, Uint8 _a, SDL_BlendMode blendMode, Uint8 _r, Uint8 _g, Uint8 _b, Uint8 _a,
SDL_bool draw_end) SDL_bool draw_end)
{ {
const SDL_PixelFormat *fmt = dst->format; const SDL_PixelFormatDetails *fmt = dst->internal->format;
unsigned r, g, b, a, inva; unsigned r, g, b, a, inva;
if (blendMode == SDL_BLENDMODE_BLEND || blendMode == SDL_BLENDMODE_ADD) { if (blendMode == SDL_BLENDMODE_BLEND || blendMode == SDL_BLENDMODE_ADD) {
@ -448,7 +448,7 @@ static void SDL_BlendLine_RGBA4(SDL_Surface *dst, int x1, int y1, int x2, int y2
SDL_BlendMode blendMode, Uint8 _r, Uint8 _g, Uint8 _b, Uint8 _a, SDL_BlendMode blendMode, Uint8 _r, Uint8 _g, Uint8 _b, Uint8 _a,
SDL_bool draw_end) SDL_bool draw_end)
{ {
const SDL_PixelFormat *fmt = dst->format; const SDL_PixelFormatDetails *fmt = dst->internal->format;
unsigned r, g, b, a, inva; unsigned r, g, b, a, inva;
if (blendMode == SDL_BLENDMODE_BLEND || blendMode == SDL_BLENDMODE_ADD) { if (blendMode == SDL_BLENDMODE_BLEND || blendMode == SDL_BLENDMODE_ADD) {
@ -763,7 +763,7 @@ typedef void (*BlendLineFunc)(SDL_Surface *dst,
Uint8 r, Uint8 g, Uint8 b, Uint8 a, Uint8 r, Uint8 g, Uint8 b, Uint8 a,
SDL_bool draw_end); SDL_bool draw_end);
static BlendLineFunc SDL_CalculateBlendLineFunc(const SDL_PixelFormat *fmt) static BlendLineFunc SDL_CalculateBlendLineFunc(const SDL_PixelFormatDetails *fmt)
{ {
switch (fmt->bytes_per_pixel) { switch (fmt->bytes_per_pixel) {
case 2: case 2:
@ -798,18 +798,18 @@ int SDL_BlendLine(SDL_Surface *dst, int x1, int y1, int x2, int y2,
{ {
BlendLineFunc func; BlendLineFunc func;
if (!dst) { if (!SDL_SurfaceValid(dst)) {
return SDL_InvalidParamError("SDL_BlendLine(): dst"); return SDL_InvalidParamError("SDL_BlendLine(): dst");
} }
func = SDL_CalculateBlendLineFunc(dst->format); func = SDL_CalculateBlendLineFunc(dst->internal->format);
if (!func) { if (!func) {
return SDL_SetError("SDL_BlendLine(): Unsupported surface format"); return SDL_SetError("SDL_BlendLine(): Unsupported surface format");
} }
/* Perform clipping */ /* Perform clipping */
/* FIXME: We don't actually want to clip, as it may change line slope */ /* FIXME: We don't actually want to clip, as it may change line slope */
if (!SDL_GetRectAndLineIntersection(&dst->clip_rect, &x1, &y1, &x2, &y2)) { if (!SDL_GetRectAndLineIntersection(&dst->internal->clip_rect, &x1, &y1, &x2, &y2)) {
return 0; return 0;
} }
@ -826,11 +826,11 @@ int SDL_BlendLines(SDL_Surface *dst, const SDL_Point *points, int count,
SDL_bool draw_end; SDL_bool draw_end;
BlendLineFunc func; BlendLineFunc func;
if (!dst) { if (!SDL_SurfaceValid(dst)) {
return SDL_SetError("SDL_BlendLines(): Passed NULL destination surface"); return SDL_SetError("SDL_BlendLines(): Passed NULL destination surface");
} }
func = SDL_CalculateBlendLineFunc(dst->format); func = SDL_CalculateBlendLineFunc(dst->internal->format);
if (!func) { if (!func) {
return SDL_SetError("SDL_BlendLines(): Unsupported surface format"); return SDL_SetError("SDL_BlendLines(): Unsupported surface format");
} }
@ -843,7 +843,7 @@ int SDL_BlendLines(SDL_Surface *dst, const SDL_Point *points, int count,
/* Perform clipping */ /* Perform clipping */
/* FIXME: We don't actually want to clip, as it may change line slope */ /* FIXME: We don't actually want to clip, as it may change line slope */
if (!SDL_GetRectAndLineIntersection(&dst->clip_rect, &x1, &y1, &x2, &y2)) { if (!SDL_GetRectAndLineIntersection(&dst->internal->clip_rect, &x1, &y1, &x2, &y2)) {
continue; continue;
} }

View File

@ -128,7 +128,7 @@ static int SDL_BlendPoint_ARGB8888(SDL_Surface *dst, int x, int y, SDL_BlendMode
static int SDL_BlendPoint_RGB(SDL_Surface *dst, int x, int y, SDL_BlendMode blendMode, Uint8 r, static int SDL_BlendPoint_RGB(SDL_Surface *dst, int x, int y, SDL_BlendMode blendMode, Uint8 r,
Uint8 g, Uint8 b, Uint8 a) Uint8 g, Uint8 b, Uint8 a)
{ {
SDL_PixelFormat *fmt = dst->format; const SDL_PixelFormatDetails *fmt = dst->internal->format;
unsigned inva = 0xff - a; unsigned inva = 0xff - a;
switch (fmt->bytes_per_pixel) { switch (fmt->bytes_per_pixel) {
@ -178,7 +178,7 @@ static int SDL_BlendPoint_RGB(SDL_Surface *dst, int x, int y, SDL_BlendMode blen
static int SDL_BlendPoint_RGBA(SDL_Surface *dst, int x, int y, SDL_BlendMode blendMode, Uint8 r, static int SDL_BlendPoint_RGBA(SDL_Surface *dst, int x, int y, SDL_BlendMode blendMode, Uint8 r,
Uint8 g, Uint8 b, Uint8 a) Uint8 g, Uint8 b, Uint8 a)
{ {
SDL_PixelFormat *fmt = dst->format; const SDL_PixelFormatDetails *fmt = dst->internal->format;
unsigned inva = 0xff - a; unsigned inva = 0xff - a;
switch (fmt->bytes_per_pixel) { switch (fmt->bytes_per_pixel) {
@ -209,19 +209,19 @@ static int SDL_BlendPoint_RGBA(SDL_Surface *dst, int x, int y, SDL_BlendMode ble
int SDL_BlendPoint(SDL_Surface *dst, int x, int y, SDL_BlendMode blendMode, Uint8 r, int SDL_BlendPoint(SDL_Surface *dst, int x, int y, SDL_BlendMode blendMode, Uint8 r,
Uint8 g, Uint8 b, Uint8 a) Uint8 g, Uint8 b, Uint8 a)
{ {
if (!dst) { if (!SDL_SurfaceValid(dst)) {
return SDL_InvalidParamError("SDL_BlendPoint(): dst"); return SDL_InvalidParamError("SDL_BlendPoint(): dst");
} }
/* This function doesn't work on surfaces < 8 bpp */ /* This function doesn't work on surfaces < 8 bpp */
if (dst->format->bits_per_pixel < 8) { if (SDL_BITSPERPIXEL(dst->format) < 8) {
return SDL_SetError("SDL_BlendPoint(): Unsupported surface format"); return SDL_SetError("SDL_BlendPoint(): Unsupported surface format");
} }
/* Perform clipping */ /* Perform clipping */
if (x < dst->clip_rect.x || y < dst->clip_rect.y || if (x < dst->internal->clip_rect.x || y < dst->internal->clip_rect.y ||
x >= (dst->clip_rect.x + dst->clip_rect.w) || x >= (dst->internal->clip_rect.x + dst->internal->clip_rect.w) ||
y >= (dst->clip_rect.y + dst->clip_rect.h)) { y >= (dst->internal->clip_rect.y + dst->internal->clip_rect.h)) {
return 0; return 0;
} }
@ -231,23 +231,23 @@ int SDL_BlendPoint(SDL_Surface *dst, int x, int y, SDL_BlendMode blendMode, Uint
b = DRAW_MUL(b, a); b = DRAW_MUL(b, a);
} }
switch (dst->format->bits_per_pixel) { switch (dst->internal->format->bits_per_pixel) {
case 15: case 15:
switch (dst->format->Rmask) { switch (dst->internal->format->Rmask) {
case 0x7C00: case 0x7C00:
return SDL_BlendPoint_RGB555(dst, x, y, blendMode, r, g, b, a); return SDL_BlendPoint_RGB555(dst, x, y, blendMode, r, g, b, a);
} }
break; break;
case 16: case 16:
switch (dst->format->Rmask) { switch (dst->internal->format->Rmask) {
case 0xF800: case 0xF800:
return SDL_BlendPoint_RGB565(dst, x, y, blendMode, r, g, b, a); return SDL_BlendPoint_RGB565(dst, x, y, blendMode, r, g, b, a);
} }
break; break;
case 32: case 32:
switch (dst->format->Rmask) { switch (dst->internal->format->Rmask) {
case 0x00FF0000: case 0x00FF0000:
if (!dst->format->Amask) { if (!dst->internal->format->Amask) {
return SDL_BlendPoint_XRGB8888(dst, x, y, blendMode, r, g, b, a); return SDL_BlendPoint_XRGB8888(dst, x, y, blendMode, r, g, b, a);
} else { } else {
return SDL_BlendPoint_ARGB8888(dst, x, y, blendMode, r, g, b, a); return SDL_BlendPoint_ARGB8888(dst, x, y, blendMode, r, g, b, a);
@ -259,7 +259,7 @@ int SDL_BlendPoint(SDL_Surface *dst, int x, int y, SDL_BlendMode blendMode, Uint
break; break;
} }
if (!dst->format->Amask) { if (!dst->internal->format->Amask) {
return SDL_BlendPoint_RGB(dst, x, y, blendMode, r, g, b, a); return SDL_BlendPoint_RGB(dst, x, y, blendMode, r, g, b, a);
} else { } else {
return SDL_BlendPoint_RGBA(dst, x, y, blendMode, r, g, b, a); return SDL_BlendPoint_RGBA(dst, x, y, blendMode, r, g, b, a);
@ -277,12 +277,12 @@ int SDL_BlendPoints(SDL_Surface *dst, const SDL_Point *points, int count,
SDL_BlendMode blendMode, Uint8 r, Uint8 g, Uint8 b, Uint8 a) = NULL; SDL_BlendMode blendMode, Uint8 r, Uint8 g, Uint8 b, Uint8 a) = NULL;
int status = 0; int status = 0;
if (!dst) { if (!SDL_SurfaceValid(dst)) {
return SDL_InvalidParamError("SDL_BlendPoints(): dst"); return SDL_InvalidParamError("SDL_BlendPoints(): dst");
} }
/* This function doesn't work on surfaces < 8 bpp */ /* This function doesn't work on surfaces < 8 bpp */
if (dst->format->bits_per_pixel < 8) { if (dst->internal->format->bits_per_pixel < 8) {
return SDL_SetError("SDL_BlendPoints(): Unsupported surface format"); return SDL_SetError("SDL_BlendPoints(): Unsupported surface format");
} }
@ -293,25 +293,25 @@ int SDL_BlendPoints(SDL_Surface *dst, const SDL_Point *points, int count,
} }
/* FIXME: Does this function pointer slow things down significantly? */ /* FIXME: Does this function pointer slow things down significantly? */
switch (dst->format->bits_per_pixel) { switch (dst->internal->format->bits_per_pixel) {
case 15: case 15:
switch (dst->format->Rmask) { switch (dst->internal->format->Rmask) {
case 0x7C00: case 0x7C00:
func = SDL_BlendPoint_RGB555; func = SDL_BlendPoint_RGB555;
break; break;
} }
break; break;
case 16: case 16:
switch (dst->format->Rmask) { switch (dst->internal->format->Rmask) {
case 0xF800: case 0xF800:
func = SDL_BlendPoint_RGB565; func = SDL_BlendPoint_RGB565;
break; break;
} }
break; break;
case 32: case 32:
switch (dst->format->Rmask) { switch (dst->internal->format->Rmask) {
case 0x00FF0000: case 0x00FF0000:
if (!dst->format->Amask) { if (!dst->internal->format->Amask) {
func = SDL_BlendPoint_XRGB8888; func = SDL_BlendPoint_XRGB8888;
} else { } else {
func = SDL_BlendPoint_ARGB8888; func = SDL_BlendPoint_ARGB8888;
@ -324,17 +324,17 @@ int SDL_BlendPoints(SDL_Surface *dst, const SDL_Point *points, int count,
} }
if (!func) { if (!func) {
if (!dst->format->Amask) { if (!dst->internal->format->Amask) {
func = SDL_BlendPoint_RGB; func = SDL_BlendPoint_RGB;
} else { } else {
func = SDL_BlendPoint_RGBA; func = SDL_BlendPoint_RGBA;
} }
} }
minx = dst->clip_rect.x; minx = dst->internal->clip_rect.x;
maxx = dst->clip_rect.x + dst->clip_rect.w - 1; maxx = dst->internal->clip_rect.x + dst->internal->clip_rect.w - 1;
miny = dst->clip_rect.y; miny = dst->internal->clip_rect.y;
maxy = dst->clip_rect.y + dst->clip_rect.h - 1; maxy = dst->internal->clip_rect.y + dst->internal->clip_rect.h - 1;
for (i = 0; i < count; ++i) { for (i = 0; i < count; ++i) {
x = points[i].x; x = points[i].x;

View File

@ -364,7 +364,7 @@
#define HLINE(type, op, draw_end) \ #define HLINE(type, op, draw_end) \
{ \ { \
int length; \ int length; \
int pitch = (dst->pitch / dst->format->bytes_per_pixel); \ int pitch = (dst->pitch / dst->internal->format->bytes_per_pixel); \
type *pixel; \ type *pixel; \
if (x1 <= x2) { \ if (x1 <= x2) { \
pixel = (type *)dst->pixels + y1 * pitch + x1; \ pixel = (type *)dst->pixels + y1 * pitch + x1; \
@ -386,7 +386,7 @@
#define VLINE(type, op, draw_end) \ #define VLINE(type, op, draw_end) \
{ \ { \
int length; \ int length; \
int pitch = (dst->pitch / dst->format->bytes_per_pixel); \ int pitch = (dst->pitch / dst->internal->format->bytes_per_pixel); \
type *pixel; \ type *pixel; \
if (y1 <= y2) { \ if (y1 <= y2) { \
pixel = (type *)dst->pixels + y1 * pitch + x1; \ pixel = (type *)dst->pixels + y1 * pitch + x1; \
@ -408,7 +408,7 @@
#define DLINE(type, op, draw_end) \ #define DLINE(type, op, draw_end) \
{ \ { \
int length; \ int length; \
int pitch = (dst->pitch / dst->format->bytes_per_pixel); \ int pitch = (dst->pitch / dst->internal->format->bytes_per_pixel); \
type *pixel; \ type *pixel; \
if (y1 <= y2) { \ if (y1 <= y2) { \
pixel = (type *)dst->pixels + y1 * pitch + x1; \ pixel = (type *)dst->pixels + y1 * pitch + x1; \
@ -628,7 +628,7 @@
do { \ do { \
int width = rect->w; \ int width = rect->w; \
int height = rect->h; \ int height = rect->h; \
int pitch = (dst->pitch / dst->format->bytes_per_pixel); \ int pitch = (dst->pitch / dst->internal->format->bytes_per_pixel); \
int skip = pitch - width; \ int skip = pitch - width; \
type *pixel = (type *)dst->pixels + rect->y * pitch + rect->x; \ type *pixel = (type *)dst->pixels + rect->y * pitch + rect->x; \
while (height--) { \ while (height--) { \

View File

@ -31,7 +31,7 @@ static void SDL_DrawLine1(SDL_Surface *dst, int x1, int y1, int x2, int y2, Uint
{ {
if (y1 == y2) { if (y1 == y2) {
int length; int length;
int pitch = (dst->pitch / dst->format->bytes_per_pixel); int pitch = (dst->pitch / dst->internal->format->bytes_per_pixel);
Uint8 *pixel; Uint8 *pixel;
if (x1 <= x2) { if (x1 <= x2) {
pixel = (Uint8 *)dst->pixels + y1 * pitch + x1; pixel = (Uint8 *)dst->pixels + y1 * pitch + x1;
@ -64,8 +64,8 @@ static void SDL_DrawLine2(SDL_Surface *dst, int x1, int y1, int x2, int y2, Uint
DLINE(Uint16, DRAW_FASTSETPIXEL2, draw_end); DLINE(Uint16, DRAW_FASTSETPIXEL2, draw_end);
} else { } else {
Uint8 _r, _g, _b, _a; Uint8 _r, _g, _b, _a;
const SDL_PixelFormat *fmt = dst->format; const SDL_PixelFormatDetails *fmt = dst->internal->format;
SDL_GetRGBA(color, fmt, &_r, &_g, &_b, &_a); SDL_GetRGBA(color, fmt, dst->internal->palette, &_r, &_g, &_b, &_a);
if (fmt->Rmask == 0x7C00) { if (fmt->Rmask == 0x7C00) {
AALINE(x1, y1, x2, y2, AALINE(x1, y1, x2, y2,
DRAW_FASTSETPIXELXY2, DRAW_SETPIXELXY_BLEND_RGB555, DRAW_FASTSETPIXELXY2, DRAW_SETPIXELXY_BLEND_RGB555,
@ -93,8 +93,8 @@ static void SDL_DrawLine4(SDL_Surface *dst, int x1, int y1, int x2, int y2, Uint
DLINE(Uint32, DRAW_FASTSETPIXEL4, draw_end); DLINE(Uint32, DRAW_FASTSETPIXEL4, draw_end);
} else { } else {
Uint8 _r, _g, _b, _a; Uint8 _r, _g, _b, _a;
const SDL_PixelFormat *fmt = dst->format; const SDL_PixelFormatDetails *fmt = dst->internal->format;
SDL_GetRGBA(color, fmt, &_r, &_g, &_b, &_a); SDL_GetRGBA(color, fmt, dst->internal->palette, &_r, &_g, &_b, &_a);
if (fmt->Rmask == 0x00FF0000) { if (fmt->Rmask == 0x00FF0000) {
if (!fmt->Amask) { if (!fmt->Amask) {
AALINE(x1, y1, x2, y2, AALINE(x1, y1, x2, y2,
@ -117,7 +117,7 @@ typedef void (*DrawLineFunc)(SDL_Surface *dst,
int x1, int y1, int x2, int y2, int x1, int y1, int x2, int y2,
Uint32 color, SDL_bool draw_end); Uint32 color, SDL_bool draw_end);
static DrawLineFunc SDL_CalculateDrawLineFunc(const SDL_PixelFormat *fmt) static DrawLineFunc SDL_CalculateDrawLineFunc(const SDL_PixelFormatDetails *fmt)
{ {
switch (fmt->bytes_per_pixel) { switch (fmt->bytes_per_pixel) {
case 1: case 1:
@ -137,18 +137,18 @@ int SDL_DrawLine(SDL_Surface *dst, int x1, int y1, int x2, int y2, Uint32 color)
{ {
DrawLineFunc func; DrawLineFunc func;
if (!dst) { if (!SDL_SurfaceValid(dst)) {
return SDL_InvalidParamError("SDL_DrawLine(): dst"); return SDL_InvalidParamError("SDL_DrawLine(): dst");
} }
func = SDL_CalculateDrawLineFunc(dst->format); func = SDL_CalculateDrawLineFunc(dst->internal->format);
if (!func) { if (!func) {
return SDL_SetError("SDL_DrawLine(): Unsupported surface format"); return SDL_SetError("SDL_DrawLine(): Unsupported surface format");
} }
/* Perform clipping */ /* Perform clipping */
/* FIXME: We don't actually want to clip, as it may change line slope */ /* FIXME: We don't actually want to clip, as it may change line slope */
if (!SDL_GetRectAndLineIntersection(&dst->clip_rect, &x1, &y1, &x2, &y2)) { if (!SDL_GetRectAndLineIntersection(&dst->internal->clip_rect, &x1, &y1, &x2, &y2)) {
return 0; return 0;
} }
@ -165,11 +165,11 @@ int SDL_DrawLines(SDL_Surface *dst, const SDL_Point *points, int count,
SDL_bool draw_end; SDL_bool draw_end;
DrawLineFunc func; DrawLineFunc func;
if (!dst) { if (!SDL_SurfaceValid(dst)) {
return SDL_InvalidParamError("SDL_DrawLines(): dst"); return SDL_InvalidParamError("SDL_DrawLines(): dst");
} }
func = SDL_CalculateDrawLineFunc(dst->format); func = SDL_CalculateDrawLineFunc(dst->internal->format);
if (!func) { if (!func) {
return SDL_SetError("SDL_DrawLines(): Unsupported surface format"); return SDL_SetError("SDL_DrawLines(): Unsupported surface format");
} }
@ -182,7 +182,7 @@ int SDL_DrawLines(SDL_Surface *dst, const SDL_Point *points, int count,
/* Perform clipping */ /* Perform clipping */
/* FIXME: We don't actually want to clip, as it may change line slope */ /* FIXME: We don't actually want to clip, as it may change line slope */
if (!SDL_GetRectAndLineIntersection(&dst->clip_rect, &x1, &y1, &x2, &y2)) { if (!SDL_GetRectAndLineIntersection(&dst->internal->clip_rect, &x1, &y1, &x2, &y2)) {
continue; continue;
} }

View File

@ -27,23 +27,23 @@
int SDL_DrawPoint(SDL_Surface *dst, int x, int y, Uint32 color) int SDL_DrawPoint(SDL_Surface *dst, int x, int y, Uint32 color)
{ {
if (!dst) { if (!SDL_SurfaceValid(dst)) {
return SDL_InvalidParamError("SDL_DrawPoint(): dst"); return SDL_InvalidParamError("SDL_DrawPoint(): dst");
} }
/* This function doesn't work on surfaces < 8 bpp */ /* This function doesn't work on surfaces < 8 bpp */
if (dst->format->bits_per_pixel < 8) { if (dst->internal->format->bits_per_pixel < 8) {
return SDL_SetError("SDL_DrawPoint(): Unsupported surface format"); return SDL_SetError("SDL_DrawPoint(): Unsupported surface format");
} }
/* Perform clipping */ /* Perform clipping */
if (x < dst->clip_rect.x || y < dst->clip_rect.y || if (x < dst->internal->clip_rect.x || y < dst->internal->clip_rect.y ||
x >= (dst->clip_rect.x + dst->clip_rect.w) || x >= (dst->internal->clip_rect.x + dst->internal->clip_rect.w) ||
y >= (dst->clip_rect.y + dst->clip_rect.h)) { y >= (dst->internal->clip_rect.y + dst->internal->clip_rect.h)) {
return 0; return 0;
} }
switch (dst->format->bytes_per_pixel) { switch (dst->internal->format->bytes_per_pixel) {
case 1: case 1:
DRAW_FASTSETPIXELXY1(x, y); DRAW_FASTSETPIXELXY1(x, y);
break; break;
@ -67,19 +67,19 @@ int SDL_DrawPoints(SDL_Surface *dst, const SDL_Point *points, int count,
int i; int i;
int x, y; int x, y;
if (!dst) { if (!SDL_SurfaceValid(dst)) {
return SDL_InvalidParamError("SDL_DrawPoints(): dst"); return SDL_InvalidParamError("SDL_DrawPoints(): dst");
} }
/* This function doesn't work on surfaces < 8 bpp */ /* This function doesn't work on surfaces < 8 bpp */
if (dst->format->bits_per_pixel < 8) { if (dst->internal->format->bits_per_pixel < 8) {
return SDL_SetError("SDL_DrawPoints(): Unsupported surface format"); return SDL_SetError("SDL_DrawPoints(): Unsupported surface format");
} }
minx = dst->clip_rect.x; minx = dst->internal->clip_rect.x;
maxx = dst->clip_rect.x + dst->clip_rect.w - 1; maxx = dst->internal->clip_rect.x + dst->internal->clip_rect.w - 1;
miny = dst->clip_rect.y; miny = dst->internal->clip_rect.y;
maxy = dst->clip_rect.y + dst->clip_rect.h - 1; maxy = dst->internal->clip_rect.y + dst->internal->clip_rect.h - 1;
for (i = 0; i < count; ++i) { for (i = 0; i < count; ++i) {
x = points[i].x; x = points[i].x;
@ -89,7 +89,7 @@ int SDL_DrawPoints(SDL_Surface *dst, const SDL_Point *points, int count,
continue; continue;
} }
switch (dst->format->bytes_per_pixel) { switch (dst->internal->format->bytes_per_pixel) {
case 1: case 1:
DRAW_FASTSETPIXELXY1(x, y); DRAW_FASTSETPIXELXY1(x, y);
break; break;

View File

@ -104,7 +104,7 @@ static int SW_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture, SDL_Pr
SDL_Surface *surface = SDL_CreateSurface(texture->w, texture->h, texture->format); SDL_Surface *surface = SDL_CreateSurface(texture->w, texture->h, texture->format);
Uint8 r, g, b, a; Uint8 r, g, b, a;
if (!surface) { if (!SDL_SurfaceValid(surface)) {
return SDL_SetError("Cannot create surface"); return SDL_SetError("Cannot create surface");
} }
texture->driverdata = surface; texture->driverdata = surface;
@ -119,7 +119,7 @@ static int SW_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture, SDL_Pr
/* Only RLE encode textures without an alpha channel since the RLE coder /* Only RLE encode textures without an alpha channel since the RLE coder
* discards the color values of pixels with an alpha value of zero. * discards the color values of pixels with an alpha value of zero.
*/ */
if (texture->access == SDL_TEXTUREACCESS_STATIC && !surface->format->Amask) { if (texture->access == SDL_TEXTUREACCESS_STATIC && !SDL_ISPIXELFORMAT_ALPHA(surface->format)) {
SDL_SetSurfaceRLE(surface, 1); SDL_SetSurfaceRLE(surface, 1);
} }
@ -140,8 +140,8 @@ static int SW_UpdateTexture(SDL_Renderer *renderer, SDL_Texture *texture,
src = (Uint8 *)pixels; src = (Uint8 *)pixels;
dst = (Uint8 *)surface->pixels + dst = (Uint8 *)surface->pixels +
rect->y * surface->pitch + rect->y * surface->pitch +
rect->x * surface->format->bytes_per_pixel; rect->x * surface->internal->format->bytes_per_pixel;
length = (size_t)rect->w * surface->format->bytes_per_pixel; length = (size_t)rect->w * surface->internal->format->bytes_per_pixel;
for (row = 0; row < rect->h; ++row) { for (row = 0; row < rect->h; ++row) {
SDL_memcpy(dst, src, length); SDL_memcpy(dst, src, length);
src += pitch; src += pitch;
@ -160,7 +160,7 @@ static int SW_LockTexture(SDL_Renderer *renderer, SDL_Texture *texture,
*pixels = *pixels =
(void *)((Uint8 *)surface->pixels + rect->y * surface->pitch + (void *)((Uint8 *)surface->pixels + rect->y * surface->pitch +
rect->x * surface->format->bytes_per_pixel); rect->x * surface->internal->format->bytes_per_pixel);
*pitch = surface->pitch; *pitch = surface->pitch;
return 0; return 0;
} }
@ -328,7 +328,7 @@ static int SW_RenderCopyEx(SDL_Renderer *renderer, SDL_Surface *surface, SDL_Tex
int blitRequired = SDL_FALSE; int blitRequired = SDL_FALSE;
int isOpaque = SDL_FALSE; int isOpaque = SDL_FALSE;
if (!surface) { if (!SDL_SurfaceValid(surface)) {
return -1; return -1;
} }
@ -347,7 +347,7 @@ static int SW_RenderCopyEx(SDL_Renderer *renderer, SDL_Surface *surface, SDL_Tex
/* Clone the source surface but use its pixel buffer directly. /* Clone the source surface but use its pixel buffer directly.
* The original source surface must be treated as read-only. * The original source surface must be treated as read-only.
*/ */
src_clone = SDL_CreateSurfaceFrom(src->pixels, src->w, src->h, src->pitch, src->format->format); src_clone = SDL_CreateSurfaceFrom(src->w, src->h, src->format, src->pixels, src->pitch);
if (!src_clone) { if (!src_clone) {
if (SDL_MUSTLOCK(src)) { if (SDL_MUSTLOCK(src)) {
SDL_UnlockSurface(src); SDL_UnlockSurface(src);
@ -360,7 +360,7 @@ static int SW_RenderCopyEx(SDL_Renderer *renderer, SDL_Surface *surface, SDL_Tex
SDL_GetSurfaceColorMod(src, &rMod, &gMod, &bMod); SDL_GetSurfaceColorMod(src, &rMod, &gMod, &bMod);
/* SDLgfx_rotateSurface only accepts 32-bit surfaces with a 8888 layout. Everything else has to be converted. */ /* SDLgfx_rotateSurface only accepts 32-bit surfaces with a 8888 layout. Everything else has to be converted. */
if (src->format->bits_per_pixel != 32 || SDL_PIXELLAYOUT(src->format->format) != SDL_PACKEDLAYOUT_8888 || !src->format->Amask) { if (src->internal->format->bits_per_pixel != 32 || SDL_PIXELLAYOUT(src->format) != SDL_PACKEDLAYOUT_8888 || !SDL_ISPIXELFORMAT_ALPHA(src->format)) {
blitRequired = SDL_TRUE; blitRequired = SDL_TRUE;
} }
@ -382,7 +382,7 @@ static int SW_RenderCopyEx(SDL_Renderer *renderer, SDL_Surface *surface, SDL_Tex
} }
/* Opaque surfaces are much easier to handle with the NONE blend mode. */ /* Opaque surfaces are much easier to handle with the NONE blend mode. */
if (blendmode == SDL_BLENDMODE_NONE && !src->format->Amask && alphaMod == 255) { if (blendmode == SDL_BLENDMODE_NONE && !SDL_ISPIXELFORMAT_ALPHA(src->format) && alphaMod == 255) {
isOpaque = SDL_TRUE; isOpaque = SDL_TRUE;
} }
@ -482,15 +482,7 @@ static int SW_RenderCopyEx(SDL_Renderer *renderer, SDL_Surface *surface, SDL_Tex
* mode modulates the colors with the alpha channel, a surface without an alpha mask needs * mode modulates the colors with the alpha channel, a surface without an alpha mask needs
* to be created. This makes all source pixels opaque and the colors get copied correctly. * to be created. This makes all source pixels opaque and the colors get copied correctly.
*/ */
SDL_Surface *src_rotated_rgb; SDL_Surface *src_rotated_rgb = SDL_CreateSurfaceFrom(src_rotated->w, src_rotated->h, src_rotated->format, src_rotated->pixels, src_rotated->pitch);
SDL_PixelFormatEnum f = SDL_GetPixelFormatEnumForMasks(src_rotated->format->bits_per_pixel,
src_rotated->format->Rmask,
src_rotated->format->Gmask,
src_rotated->format->Bmask,
0);
src_rotated_rgb = SDL_CreateSurfaceFrom(src_rotated->pixels, src_rotated->w, src_rotated->h,
src_rotated->pitch, f);
if (!src_rotated_rgb) { if (!src_rotated_rgb) {
retval = -1; retval = -1;
} else { } else {
@ -680,7 +672,7 @@ static int SW_RunCommandQueue(SDL_Renderer *renderer, SDL_RenderCommand *cmd, vo
SDL_Surface *surface = SW_ActivateRenderer(renderer); SDL_Surface *surface = SW_ActivateRenderer(renderer);
SW_DrawStateCache drawstate; SW_DrawStateCache drawstate;
if (!surface) { if (!SDL_SurfaceValid(surface)) {
return -1; return -1;
} }
@ -725,7 +717,7 @@ static int SW_RunCommandQueue(SDL_Renderer *renderer, SDL_RenderCommand *cmd, vo
const Uint8 a = (Uint8)SDL_roundf(SDL_clamp(cmd->data.color.color.a, 0.0f, 1.0f) * 255.0f); const Uint8 a = (Uint8)SDL_roundf(SDL_clamp(cmd->data.color.color.a, 0.0f, 1.0f) * 255.0f);
/* By definition the clear ignores the clip rect */ /* By definition the clear ignores the clip rect */
SDL_SetSurfaceClipRect(surface, NULL); SDL_SetSurfaceClipRect(surface, NULL);
SDL_FillSurfaceRect(surface, NULL, SDL_MapRGBA(surface->format, r, g, b, a)); SDL_FillSurfaceRect(surface, NULL, SDL_MapSurfaceRGBA(surface, r, g, b, a));
drawstate.surface_cliprect_dirty = SDL_TRUE; drawstate.surface_cliprect_dirty = SDL_TRUE;
break; break;
} }
@ -751,7 +743,7 @@ static int SW_RunCommandQueue(SDL_Renderer *renderer, SDL_RenderCommand *cmd, vo
} }
if (blend == SDL_BLENDMODE_NONE) { if (blend == SDL_BLENDMODE_NONE) {
SDL_DrawPoints(surface, verts, count, SDL_MapRGBA(surface->format, r, g, b, a)); SDL_DrawPoints(surface, verts, count, SDL_MapSurfaceRGBA(surface, r, g, b, a));
} else { } else {
SDL_BlendPoints(surface, verts, count, blend, r, g, b, a); SDL_BlendPoints(surface, verts, count, blend, r, g, b, a);
} }
@ -779,7 +771,7 @@ static int SW_RunCommandQueue(SDL_Renderer *renderer, SDL_RenderCommand *cmd, vo
} }
if (blend == SDL_BLENDMODE_NONE) { if (blend == SDL_BLENDMODE_NONE) {
SDL_DrawLines(surface, verts, count, SDL_MapRGBA(surface->format, r, g, b, a)); SDL_DrawLines(surface, verts, count, SDL_MapSurfaceRGBA(surface, r, g, b, a));
} else { } else {
SDL_BlendLines(surface, verts, count, blend, r, g, b, a); SDL_BlendLines(surface, verts, count, blend, r, g, b, a);
} }
@ -807,7 +799,7 @@ static int SW_RunCommandQueue(SDL_Renderer *renderer, SDL_RenderCommand *cmd, vo
} }
if (blend == SDL_BLENDMODE_NONE) { if (blend == SDL_BLENDMODE_NONE) {
SDL_FillSurfaceRects(surface, verts, count, SDL_MapRGBA(surface->format, r, g, b, a)); SDL_FillSurfaceRects(surface, verts, count, SDL_MapSurfaceRGBA(surface, r, g, b, a));
} else { } else {
SDL_BlendFillRects(surface, verts, count, blend, r, g, b, a); SDL_BlendFillRects(surface, verts, count, blend, r, g, b, a);
} }
@ -842,7 +834,7 @@ static int SW_RunCommandQueue(SDL_Renderer *renderer, SDL_RenderCommand *cmd, vo
/* Prevent to do scaling + clipping on viewport boundaries as it may lose proportion */ /* Prevent to do scaling + clipping on viewport boundaries as it may lose proportion */
if (dstrect->x < 0 || dstrect->y < 0 || dstrect->x + dstrect->w > surface->w || dstrect->y + dstrect->h > surface->h) { if (dstrect->x < 0 || dstrect->y < 0 || dstrect->x + dstrect->w > surface->w || dstrect->y + dstrect->h > surface->h) {
SDL_Surface *tmp = SDL_CreateSurface(dstrect->w, dstrect->h, src->format->format); SDL_Surface *tmp = SDL_CreateSurface(dstrect->w, dstrect->h, src->format);
/* Scale to an intermediate surface, then blit */ /* Scale to an intermediate surface, then blit */
if (tmp) { if (tmp) {
SDL_Rect r; SDL_Rect r;
@ -971,7 +963,7 @@ static SDL_Surface *SW_RenderReadPixels(SDL_Renderer *renderer, const SDL_Rect *
SDL_Surface *surface = SW_ActivateRenderer(renderer); SDL_Surface *surface = SW_ActivateRenderer(renderer);
void *pixels; void *pixels;
if (!surface) { if (!SDL_SurfaceValid(surface)) {
return NULL; return NULL;
} }
@ -987,9 +979,9 @@ static SDL_Surface *SW_RenderReadPixels(SDL_Renderer *renderer, const SDL_Rect *
pixels = (void *)((Uint8 *)surface->pixels + pixels = (void *)((Uint8 *)surface->pixels +
rect->y * surface->pitch + rect->y * surface->pitch +
rect->x * surface->format->bytes_per_pixel); rect->x * surface->internal->format->bytes_per_pixel);
return SDL_DuplicatePixels(rect->w, rect->h, surface->format->format, SDL_COLORSPACE_SRGB, pixels, surface->pitch); return SDL_DuplicatePixels(rect->w, rect->h, surface->format, SDL_COLORSPACE_SRGB, pixels, surface->pitch);
} }
static int SW_RenderPresent(SDL_Renderer *renderer) static int SW_RenderPresent(SDL_Renderer *renderer)
@ -1020,7 +1012,7 @@ static void SW_DestroyRenderer(SDL_Renderer *renderer)
SDL_free(data); SDL_free(data);
} }
static void SW_SelectBestFormats(SDL_Renderer *renderer, SDL_PixelFormatEnum format) static void SW_SelectBestFormats(SDL_Renderer *renderer, SDL_PixelFormat format)
{ {
/* Prefer the format used by the framebuffer by default. */ /* Prefer the format used by the framebuffer by default. */
SDL_AddSupportedTextureFormat(renderer, format); SDL_AddSupportedTextureFormat(renderer, format);
@ -1119,7 +1111,7 @@ int SW_CreateRendererForSurface(SDL_Renderer *renderer, SDL_Surface *surface, SD
{ {
SW_RenderData *data; SW_RenderData *data;
if (!surface) { if (!SDL_SurfaceValid(surface)) {
return SDL_InvalidParamError("surface"); return SDL_InvalidParamError("surface");
} }
@ -1160,7 +1152,7 @@ int SW_CreateRendererForSurface(SDL_Renderer *renderer, SDL_Surface *surface, SD
renderer->name = SW_RenderDriver.name; renderer->name = SW_RenderDriver.name;
SW_SelectBestFormats(renderer, surface->format->format); SW_SelectBestFormats(renderer, surface->format);
SDL_SetupRendererColorspace(renderer, create_props); SDL_SetupRendererColorspace(renderer, create_props);
@ -1193,7 +1185,7 @@ static int SW_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window, SDL_Pro
SDL_SetHint(SDL_HINT_RENDER_VSYNC, ""); SDL_SetHint(SDL_HINT_RENDER_VSYNC, "");
} }
if (!surface) { if (!SDL_SurfaceValid(surface)) {
return -1; return -1;
} }

View File

@ -36,11 +36,10 @@ Andreas Schiffler -- aschiffler at ferzkopp dot net
#include "../../core/windows/SDL_windows.h" #include "../../core/windows/SDL_windows.h"
#endif #endif
#include <stdlib.h>
#include <string.h>
#include "SDL_rotate.h" #include "SDL_rotate.h"
#include "../../video/SDL_blit.h"
/* ---- Internally used structures */ /* ---- Internally used structures */
/** /**
@ -491,14 +490,13 @@ SDL_Surface *SDLgfx_rotateSurface(SDL_Surface *src, double angle, int smooth, in
{ {
SDL_Surface *rz_dst; SDL_Surface *rz_dst;
int is8bit, angle90; int is8bit, angle90;
int i;
SDL_BlendMode blendmode; SDL_BlendMode blendmode;
Uint32 colorkey = 0; Uint32 colorkey = 0;
int colorKeyAvailable = SDL_FALSE; int colorKeyAvailable = SDL_FALSE;
double sangleinv, cangleinv; double sangleinv, cangleinv;
/* Sanity check */ /* Sanity check */
if (!src) { if (!SDL_SurfaceValid(src)) {
return NULL; return NULL;
} }
@ -508,8 +506,8 @@ SDL_Surface *SDLgfx_rotateSurface(SDL_Surface *src, double angle, int smooth, in
} }
} }
/* 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->format->bits_per_pixel == 8 && colorKeyAvailable; is8bit = src->internal->format->bits_per_pixel == 8 && colorKeyAvailable;
if (!(is8bit || (src->format->bits_per_pixel == 32 && src->format->Amask))) { if (!(is8bit || (src->internal->format->bits_per_pixel == 32 && SDL_ISPIXELFORMAT_ALPHA(src->format)))) {
return NULL; return NULL;
} }
@ -521,18 +519,13 @@ SDL_Surface *SDLgfx_rotateSurface(SDL_Surface *src, double angle, int smooth, in
rz_dst = NULL; rz_dst = NULL;
if (is8bit) { if (is8bit) {
/* Target surface is 8 bit */ /* Target surface is 8 bit */
rz_dst = SDL_CreateSurface(rect_dest->w, rect_dest->h + GUARD_ROWS, src->format->format); rz_dst = SDL_CreateSurface(rect_dest->w, rect_dest->h + GUARD_ROWS, src->format);
if (rz_dst) { if (rz_dst) {
if (src->format->palette) { SDL_SetSurfacePalette(rz_dst, src->internal->palette);
for (i = 0; i < src->format->palette->ncolors; i++) {
rz_dst->format->palette->colors[i] = src->format->palette->colors[i];
}
rz_dst->format->palette->ncolors = src->format->palette->ncolors;
}
} }
} else { } else {
/* Target surface is 32 bit with source RGBA ordering */ /* Target surface is 32 bit with source RGBA ordering */
rz_dst = SDL_CreateSurface(rect_dest->w, rect_dest->h + GUARD_ROWS, src->format->format); rz_dst = SDL_CreateSurface(rect_dest->w, rect_dest->h + GUARD_ROWS, src->format);
} }
/* Check target */ /* Check target */
@ -555,7 +548,7 @@ SDL_Surface *SDLgfx_rotateSurface(SDL_Surface *src, double angle, int smooth, in
/* Without a colorkey, the target texture has to be white for the MOD and MUL blend mode so /* Without a colorkey, the target texture has to be white for the MOD and MUL blend mode so
* that the pixels outside the rotated area don't affect the destination surface. * that the pixels outside the rotated area don't affect the destination surface.
*/ */
colorkey = SDL_MapRGBA(rz_dst->format, 255, 255, 255, 0); colorkey = SDL_MapSurfaceRGBA(rz_dst, 255, 255, 255, 0);
SDL_FillSurfaceRect(rz_dst, NULL, colorkey); SDL_FillSurfaceRect(rz_dst, NULL, colorkey);
/* Setting a white colorkey for the destination surface makes the final blit discard /* Setting a white colorkey for the destination surface makes the final blit discard
* all pixels outside of the rotated area. This doesn't interfere with anything because * all pixels outside of the rotated area. This doesn't interfere with anything because

View File

@ -190,7 +190,7 @@ static void bounding_rect(const SDL_Point *a, const SDL_Point *b, const SDL_Poin
Uint8 g = (Uint8)(((Sint64)w0 * c0.g + (Sint64)w1 * c1.g + (Sint64)w2 * c2.g) / area); \ Uint8 g = (Uint8)(((Sint64)w0 * c0.g + (Sint64)w1 * c1.g + (Sint64)w2 * c2.g) / area); \
Uint8 b = (Uint8)(((Sint64)w0 * c0.b + (Sint64)w1 * c1.b + (Sint64)w2 * c2.b) / area); \ Uint8 b = (Uint8)(((Sint64)w0 * c0.b + (Sint64)w1 * c1.b + (Sint64)w2 * c2.b) / area); \
Uint8 a = (Uint8)(((Sint64)w0 * c0.a + (Sint64)w1 * c1.a + (Sint64)w2 * c2.a) / area); \ Uint8 a = (Uint8)(((Sint64)w0 * c0.a + (Sint64)w1 * c1.a + (Sint64)w2 * c2.a) / area); \
Uint32 color = SDL_MapRGBA(format, r, g, b, a); Uint32 color = SDL_MapRGBA(format, palette, r, g, b, a);
#define TRIANGLE_GET_COLOR \ #define TRIANGLE_GET_COLOR \
int r = (int)(((Sint64)w0 * c0.r + (Sint64)w1 * c1.r + (Sint64)w2 * c2.r) / area); \ int r = (int)(((Sint64)w0 * c0.r + (Sint64)w1 * c1.r + (Sint64)w2 * c2.r) / area); \
@ -235,7 +235,7 @@ int SDL_SW_FillTriangle(SDL_Surface *dst, SDL_Point *d0, SDL_Point *d1, SDL_Poin
SDL_Surface *tmp = NULL; SDL_Surface *tmp = NULL;
if (!dst) { if (!SDL_SurfaceValid(dst)) {
return -1; return -1;
} }
@ -278,10 +278,10 @@ int SDL_SW_FillTriangle(SDL_Surface *dst, SDL_Point *d0, SDL_Point *d1, SDL_Poin
} }
if (blend != SDL_BLENDMODE_NONE) { if (blend != SDL_BLENDMODE_NONE) {
SDL_PixelFormatEnum format = dst->format->format; SDL_PixelFormat format = dst->format;
/* need an alpha format */ /* need an alpha format */
if (!dst->format->Amask) { if (!SDL_ISPIXELFORMAT_ALPHA(format)) {
format = SDL_PIXELFORMAT_ARGB8888; format = SDL_PIXELFORMAT_ARGB8888;
} }
@ -293,19 +293,19 @@ int SDL_SW_FillTriangle(SDL_Surface *dst, SDL_Point *d0, SDL_Point *d1, SDL_Poin
} }
if (blend == SDL_BLENDMODE_MOD) { if (blend == SDL_BLENDMODE_MOD) {
Uint32 c = SDL_MapRGBA(tmp->format, 255, 255, 255, 255); Uint32 c = SDL_MapSurfaceRGBA(tmp, 255, 255, 255, 255);
SDL_FillSurfaceRect(tmp, NULL, c); SDL_FillSurfaceRect(tmp, NULL, c);
} }
SDL_SetSurfaceBlendMode(tmp, blend); SDL_SetSurfaceBlendMode(tmp, blend);
dstbpp = tmp->format->bytes_per_pixel; dstbpp = tmp->internal->format->bytes_per_pixel;
dst_ptr = (Uint8 *)tmp->pixels; dst_ptr = (Uint8 *)tmp->pixels;
dst_pitch = tmp->pitch; dst_pitch = tmp->pitch;
} else { } else {
/* Write directly to destination surface */ /* Write directly to destination surface */
dstbpp = dst->format->bytes_per_pixel; dstbpp = dst->internal->format->bytes_per_pixel;
dst_ptr = (Uint8 *)dst->pixels + dstrect.x * dstbpp + dstrect.y * dst->pitch; dst_ptr = (Uint8 *)dst->pixels + dstrect.x * dstbpp + dstrect.y * dst->pitch;
dst_pitch = dst->pitch; dst_pitch = dst->pitch;
} }
@ -359,9 +359,9 @@ int SDL_SW_FillTriangle(SDL_Surface *dst, SDL_Point *d0, SDL_Point *d1, SDL_Poin
if (is_uniform) { if (is_uniform) {
Uint32 color; Uint32 color;
if (tmp) { if (tmp) {
color = SDL_MapRGBA(tmp->format, c0.r, c0.g, c0.b, c0.a); color = SDL_MapSurfaceRGBA(tmp, c0.r, c0.g, c0.b, c0.a);
} else { } else {
color = SDL_MapRGBA(dst->format, c0.r, c0.g, c0.b, c0.a); color = SDL_MapSurfaceRGBA(dst, c0.r, c0.g, c0.b, c0.a);
} }
if (dstbpp == 4) { if (dstbpp == 4) {
@ -393,9 +393,14 @@ int SDL_SW_FillTriangle(SDL_Surface *dst, SDL_Point *d0, SDL_Point *d1, SDL_Poin
TRIANGLE_END_LOOP TRIANGLE_END_LOOP
} }
} else { } else {
SDL_PixelFormat *format = dst->format; const SDL_PixelFormatDetails *format;
SDL_Palette *palette;
if (tmp) { if (tmp) {
format = tmp->format; format = tmp->internal->format;
palette = tmp->internal->palette;
} else {
format = dst->internal->format;
palette = dst->internal->palette;
} }
if (dstbpp == 4) { if (dstbpp == 4) {
TRIANGLE_BEGIN_LOOP TRIANGLE_BEGIN_LOOP
@ -481,10 +486,10 @@ int SDL_SW_BlitTriangle(
int has_modulation; int has_modulation;
if (!src) { if (!SDL_SurfaceValid(src)) {
return SDL_InvalidParamError("src"); return SDL_InvalidParamError("src");
} }
if (!src) { if (!SDL_SurfaceValid(dst)) {
return SDL_InvalidParamError("dst"); return SDL_InvalidParamError("dst");
} }
@ -578,7 +583,7 @@ int SDL_SW_BlitTriangle(
} }
/* Set destination pointer */ /* Set destination pointer */
dstbpp = dst->format->bytes_per_pixel; dstbpp = dst->internal->format->bytes_per_pixel;
dst_ptr = (Uint8 *)dst->pixels + dstrect.x * dstbpp + dstrect.y * dst->pitch; dst_ptr = (Uint8 *)dst->pixels + dstrect.x * dstbpp + dstrect.y * dst->pitch;
dst_pitch = dst->pitch; dst_pitch = dst->pitch;
@ -653,16 +658,16 @@ int SDL_SW_BlitTriangle(
goto end; goto end;
} }
if (blend != SDL_BLENDMODE_NONE || src->format->format != dst->format->format || has_modulation || !is_uniform) { if (blend != SDL_BLENDMODE_NONE || src->format != dst->format || has_modulation || !is_uniform) {
/* Use SDL_BlitTriangle_Slow */ /* Use SDL_BlitTriangle_Slow */
SDL_BlitInfo *info = &src->map->info; SDL_BlitInfo *info = &src->internal->map.info;
SDL_BlitInfo tmp_info; SDL_BlitInfo tmp_info;
SDL_zero(tmp_info); SDL_zero(tmp_info);
tmp_info.src_fmt = src->format; tmp_info.src_fmt = src->internal->format;
tmp_info.dst_fmt = dst->format; tmp_info.dst_fmt = dst->internal->format;
tmp_info.flags = info->flags; tmp_info.flags = info->flags;
/* /*
tmp_info.r = info->r; tmp_info.r = info->r;
@ -766,7 +771,7 @@ end:
#define FORMAT_2101010 1 #define FORMAT_2101010 1
#define FORMAT_HAS_ALPHA(format) format == 0 #define FORMAT_HAS_ALPHA(format) format == 0
#define FORMAT_HAS_NO_ALPHA(format) format < 0 #define FORMAT_HAS_NO_ALPHA(format) format < 0
static int detect_format(SDL_PixelFormat *pf) static int detect_format(const SDL_PixelFormatDetails *pf)
{ {
if (pf->format == SDL_PIXELFORMAT_ARGB2101010) { if (pf->format == SDL_PIXELFORMAT_ARGB2101010) {
return FORMAT_2101010; return FORMAT_2101010;
@ -792,8 +797,8 @@ static void SDL_BlitTriangle_Slow(SDL_BlitInfo *info,
Uint32 srcR, srcG, srcB, srcA; Uint32 srcR, srcG, srcB, srcA;
Uint32 dstpixel; Uint32 dstpixel;
Uint32 dstR, dstG, dstB, dstA; Uint32 dstR, dstG, dstB, dstA;
SDL_PixelFormat *src_fmt = info->src_fmt; const SDL_PixelFormatDetails *src_fmt = info->src_fmt;
SDL_PixelFormat *dst_fmt = info->dst_fmt; const SDL_PixelFormatDetails *dst_fmt = info->dst_fmt;
int srcbpp = src_fmt->bytes_per_pixel; int srcbpp = src_fmt->bytes_per_pixel;
int dstbpp = dst_fmt->bytes_per_pixel; int dstbpp = dst_fmt->bytes_per_pixel;
int srcfmt_val; int srcfmt_val;

View File

@ -367,7 +367,7 @@ typedef struct
SDL_bool issueBatch; SDL_bool issueBatch;
} VULKAN_RenderData; } VULKAN_RenderData;
static SDL_PixelFormatEnum VULKAN_VkFormatToSDLPixelFormat(VkFormat vkFormat) static SDL_PixelFormat VULKAN_VkFormatToSDLPixelFormat(VkFormat vkFormat)
{ {
switch (vkFormat) { switch (vkFormat) {
case VK_FORMAT_B8G8R8A8_UNORM: case VK_FORMAT_B8G8R8A8_UNORM:

View File

@ -1038,14 +1038,14 @@ static void SDLTest_PrintRenderer(SDL_Renderer *renderer)
int i; int i;
char text[1024]; char text[1024];
int max_texture_size; int max_texture_size;
const SDL_PixelFormatEnum *texture_formats; const SDL_PixelFormat *texture_formats;
name = SDL_GetRendererName(renderer); name = SDL_GetRendererName(renderer);
SDL_Log(" Renderer %s:\n", name); SDL_Log(" Renderer %s:\n", name);
SDL_Log(" VSync: %d\n", (int)SDL_GetNumberProperty(SDL_GetRendererProperties(renderer), SDL_PROP_RENDERER_VSYNC_NUMBER, 0)); SDL_Log(" VSync: %d\n", (int)SDL_GetNumberProperty(SDL_GetRendererProperties(renderer), SDL_PROP_RENDERER_VSYNC_NUMBER, 0));
texture_formats = (const SDL_PixelFormatEnum *)SDL_GetProperty(SDL_GetRendererProperties(renderer), SDL_PROP_RENDERER_TEXTURE_FORMATS_POINTER, NULL); texture_formats = (const SDL_PixelFormat *)SDL_GetProperty(SDL_GetRendererProperties(renderer), SDL_PROP_RENDERER_TEXTURE_FORMATS_POINTER, NULL);
if (texture_formats) { if (texture_formats) {
(void)SDL_snprintf(text, sizeof(text), " Texture formats: "); (void)SDL_snprintf(text, sizeof(text), " Texture formats: ");
for (i = 0; texture_formats[i]; ++i) { for (i = 0; texture_formats[i]; ++i) {
@ -1074,7 +1074,7 @@ static SDL_Surface *SDLTest_LoadIcon(const char *file)
return NULL; return NULL;
} }
if (icon->format->palette) { if (icon->format == SDL_PIXELFORMAT_INDEX8) {
/* Set the colorkey */ /* Set the colorkey */
SDL_SetSurfaceColorKey(icon, 1, *((Uint8 *)icon->pixels)); SDL_SetSurfaceColorKey(icon, 1, *((Uint8 *)icon->pixels));
} }
@ -1218,7 +1218,7 @@ SDL_bool SDLTest_CommonInit(SDLTest_CommonState *state)
SDL_Log("Usable bounds: %dx%d at %d,%d\n", usablebounds.w, usablebounds.h, usablebounds.x, usablebounds.y); SDL_Log("Usable bounds: %dx%d at %d,%d\n", usablebounds.w, usablebounds.h, usablebounds.x, usablebounds.y);
mode = SDL_GetDesktopDisplayMode(displayID); mode = SDL_GetDesktopDisplayMode(displayID);
SDL_GetMasksForPixelFormatEnum(mode->format, &bpp, &Rmask, &Gmask, SDL_GetMasksForPixelFormat(mode->format, &bpp, &Rmask, &Gmask,
&Bmask, &Amask); &Bmask, &Amask);
SDL_Log(" Desktop mode: %dx%d@%gx %gHz, %d bits-per-pixel (%s)\n", SDL_Log(" Desktop mode: %dx%d@%gx %gHz, %d bits-per-pixel (%s)\n",
mode->w, mode->h, mode->pixel_density, mode->refresh_rate, bpp, mode->w, mode->h, mode->pixel_density, mode->refresh_rate, bpp,
@ -1240,7 +1240,7 @@ SDL_bool SDLTest_CommonInit(SDLTest_CommonState *state)
SDL_Log(" Fullscreen video modes:\n"); SDL_Log(" Fullscreen video modes:\n");
for (j = 0; j < m; ++j) { for (j = 0; j < m; ++j) {
mode = modes[j]; mode = modes[j];
SDL_GetMasksForPixelFormatEnum(mode->format, &bpp, &Rmask, SDL_GetMasksForPixelFormat(mode->format, &bpp, &Rmask,
&Gmask, &Bmask, &Amask); &Gmask, &Bmask, &Amask);
SDL_Log(" Mode %d: %dx%d@%gx %gHz, %d bits-per-pixel (%s)\n", SDL_Log(" Mode %d: %dx%d@%gx %gHz, %d bits-per-pixel (%s)\n",
j, mode->w, mode->h, mode->pixel_density, mode->refresh_rate, bpp, j, mode->w, mode->h, mode->pixel_density, mode->refresh_rate, bpp,

View File

@ -33,17 +33,6 @@
/* Counter for _CompareSurface calls; used for filename creation when comparisons fail */ /* Counter for _CompareSurface calls; used for filename creation when comparisons fail */
static int _CompareSurfaceCount = 0; static int _CompareSurfaceCount = 0;
static void
LogErrorFormat(const char *name, const SDL_PixelFormat *format)
{
SDLTest_LogError("%s: %08d %s, %u bits/%u bytes per pixel", name, format->format, SDL_GetPixelFormatName(format->format),
format->bits_per_pixel, format->bytes_per_pixel);
SDLTest_LogError("%s: R mask %08" SDL_PRIx32 ", loss %u, shift %u", name, format->Rmask, format->Rloss, format->Rshift);
SDLTest_LogError("%s: G mask %08" SDL_PRIx32 ", loss %u, shift %u", name, format->Gmask, format->Gloss, format->Gshift);
SDLTest_LogError("%s: B mask %08" SDL_PRIx32 ", loss %u, shift %u", name, format->Bmask, format->Bloss, format->Bshift);
SDLTest_LogError("%s: A mask %08" SDL_PRIx32 ", loss %u, shift %u", name, format->Amask, format->Aloss, format->Ashift);
}
/* Compare surfaces */ /* Compare surfaces */
int SDLTest_CompareSurfaces(SDL_Surface *surface, SDL_Surface *referenceSurface, int allowable_error) int SDLTest_CompareSurfaces(SDL_Surface *surface, SDL_Surface *referenceSurface, int allowable_error)
{ {
@ -135,8 +124,8 @@ int SDLTest_CompareSurfaces(SDL_Surface *surface, SDL_Surface *referenceSurface,
_CompareSurfaceCount++; _CompareSurfaceCount++;
if (ret != 0) { if (ret != 0) {
SDLTest_LogError("Comparison of pixels with allowable error of %i failed %i times.", allowable_error, ret); SDLTest_LogError("Comparison of pixels with allowable error of %i failed %i times.", allowable_error, ret);
LogErrorFormat("Reference surface format", referenceSurface->format); SDLTest_LogError("Reference surface format: %s", SDL_GetPixelFormatName(referenceSurface->format));
LogErrorFormat("Actual surface format ", surface->format); SDLTest_LogError("Actual surface format: %s", SDL_GetPixelFormatName(surface->format));
SDLTest_LogError("First detected occurrence at position %i,%i with a squared RGB-difference of %i.", sampleErrorX, sampleErrorY, sampleDist); SDLTest_LogError("First detected occurrence at position %i,%i with a squared RGB-difference of %i.", sampleErrorX, sampleErrorY, sampleDist);
SDLTest_LogError("Reference pixel: R=%u G=%u B=%u A=%u", sampleReference.r, sampleReference.g, sampleReference.b, sampleReference.a); SDLTest_LogError("Reference pixel: R=%u G=%u B=%u A=%u", sampleReference.r, sampleReference.g, sampleReference.b, sampleReference.a);
SDLTest_LogError("Actual pixel : R=%u G=%u B=%u A=%u", sampleActual.r, sampleActual.g, sampleActual.b, sampleActual.a); SDLTest_LogError("Actual pixel : R=%u G=%u B=%u A=%u", sampleActual.r, sampleActual.g, sampleActual.b, sampleActual.a);

View File

@ -62,7 +62,7 @@
* *
* Encoding of surfaces with per-pixel alpha: * Encoding of surfaces with per-pixel alpha:
* *
* The sequence begins with a struct RLEDestFormat describing the target * The sequence begins with a struct SDL_PixelFormatDetails describing the target
* pixel format, to provide reliable un-encoding. * pixel format, to provide reliable un-encoding.
* *
* Each scan line is encoded twice: First all completely opaque pixels, * Each scan line is encoded twice: First all completely opaque pixels,
@ -375,9 +375,9 @@
*/ */
#define RLEPIXEL_FROM_RGBA(Pixel, fmt, r, g, b, a) \ #define RLEPIXEL_FROM_RGBA(Pixel, fmt, r, g, b, a) \
{ \ { \
Pixel = ((r >> fmt->Rloss) << fmt->Rshift) | \ Pixel = ((r >> (8 - fmt->Rbits)) << fmt->Rshift) | \
((g >> fmt->Gloss) << fmt->Gshift) | \ ((g >> (8 - fmt->Gbits)) << fmt->Gshift) | \
((b >> fmt->Bloss) << fmt->Bshift) | \ ((b >> (8 - fmt->Bbits)) << fmt->Bshift) | \
(a << 24); \ (a << 24); \
} }
@ -434,7 +434,7 @@
static void RLEClipBlit(int w, Uint8 *srcbuf, SDL_Surface *surf_dst, static void RLEClipBlit(int w, Uint8 *srcbuf, SDL_Surface *surf_dst,
Uint8 *dstbuf, const SDL_Rect *srcrect, unsigned alpha) Uint8 *dstbuf, const SDL_Rect *srcrect, unsigned alpha)
{ {
SDL_PixelFormat *fmt = surf_dst->format; const SDL_PixelFormatDetails *fmt = surf_dst->internal->format;
CHOOSE_BLIT(RLECLIPBLIT, alpha, fmt); CHOOSE_BLIT(RLECLIPBLIT, alpha, fmt);
} }
@ -461,8 +461,8 @@ static int SDLCALL SDL_RLEBlit(SDL_Surface *surf_src, const SDL_Rect *srcrect,
/* Set up the source and destination pointers */ /* Set up the source and destination pointers */
x = dstrect->x; x = dstrect->x;
y = dstrect->y; y = dstrect->y;
dstbuf = (Uint8 *)surf_dst->pixels + y * surf_dst->pitch + x * surf_src->format->bytes_per_pixel; dstbuf = (Uint8 *)surf_dst->pixels + y * surf_dst->pitch + x * surf_src->internal->format->bytes_per_pixel;
srcbuf = (Uint8 *)surf_src->map->data; srcbuf = (Uint8 *)surf_src->internal->map.data + sizeof(SDL_PixelFormat);
{ {
/* skip lines at the top if necessary */ /* skip lines at the top if necessary */
@ -488,7 +488,7 @@ static int SDLCALL SDL_RLEBlit(SDL_Surface *surf_src, const SDL_Rect *srcrect,
} \ } \
} }
switch (surf_src->format->bytes_per_pixel) { switch (surf_src->internal->format->bytes_per_pixel) {
case 1: case 1:
RLESKIP(1, Uint8); RLESKIP(1, Uint8);
break; break;
@ -507,12 +507,12 @@ static int SDLCALL SDL_RLEBlit(SDL_Surface *surf_src, const SDL_Rect *srcrect,
} }
} }
alpha = surf_src->map->info.a; alpha = surf_src->internal->map.info.a;
/* if left or right edge clipping needed, call clip blit */ /* if left or right edge clipping needed, call clip blit */
if (srcrect->x || srcrect->w != surf_src->w) { if (srcrect->x || srcrect->w != surf_src->w) {
RLEClipBlit(w, srcbuf, surf_dst, dstbuf, srcrect, alpha); RLEClipBlit(w, srcbuf, surf_dst, dstbuf, srcrect, alpha);
} else { } else {
SDL_PixelFormat *fmt = surf_src->format; const SDL_PixelFormatDetails *fmt = surf_src->internal->format;
#define RLEBLIT(bpp, Type, do_blit) \ #define RLEBLIT(bpp, Type, do_blit) \
do { \ do { \
@ -604,31 +604,11 @@ done:
dst = (Uint16)(d | d >> 16); \ dst = (Uint16)(d | d >> 16); \
} while (0) } while (0)
/* used to save the destination format in the encoding. Designed to be
macro-compatible with SDL_PixelFormat but without the unneeded fields */
typedef struct
{
Uint8 bytes_per_pixel;
Uint8 padding[3];
Uint32 Rmask;
Uint32 Gmask;
Uint32 Bmask;
Uint32 Amask;
Uint8 Rloss;
Uint8 Gloss;
Uint8 Bloss;
Uint8 Aloss;
Uint8 Rshift;
Uint8 Gshift;
Uint8 Bshift;
Uint8 Ashift;
} RLEDestFormat;
/* blit a pixel-alpha RLE surface clipped at the right and/or left edges */ /* blit a pixel-alpha RLE surface clipped at the right and/or left edges */
static void RLEAlphaClipBlit(int w, Uint8 *srcbuf, SDL_Surface *surf_dst, static void RLEAlphaClipBlit(int w, Uint8 *srcbuf, SDL_Surface *surf_dst,
Uint8 *dstbuf, const SDL_Rect *srcrect) Uint8 *dstbuf, const SDL_Rect *srcrect)
{ {
SDL_PixelFormat *df = surf_dst->format; const SDL_PixelFormatDetails *df = surf_dst->internal->format;
/* /*
* clipped blitter: Ptype is the destination pixel type, * clipped blitter: Ptype is the destination pixel type,
* Ctype the translucent count type, and do_blend the macro * Ctype the translucent count type, and do_blend the macro
@ -723,7 +703,7 @@ static int SDLCALL SDL_RLEAlphaBlit(SDL_Surface *surf_src, const SDL_Rect *srcre
int x, y; int x, y;
int w = surf_src->w; int w = surf_src->w;
Uint8 *srcbuf, *dstbuf; Uint8 *srcbuf, *dstbuf;
SDL_PixelFormat *df = surf_dst->format; const SDL_PixelFormatDetails *df = surf_dst->internal->format;
/* Lock the destination if necessary */ /* Lock the destination if necessary */
if (SDL_MUSTLOCK(surf_dst)) { if (SDL_MUSTLOCK(surf_dst)) {
@ -735,7 +715,7 @@ static int SDLCALL SDL_RLEAlphaBlit(SDL_Surface *surf_src, const SDL_Rect *srcre
x = dstrect->x; x = dstrect->x;
y = dstrect->y; y = dstrect->y;
dstbuf = (Uint8 *)surf_dst->pixels + y * surf_dst->pitch + x * df->bytes_per_pixel; dstbuf = (Uint8 *)surf_dst->pixels + y * surf_dst->pitch + x * df->bytes_per_pixel;
srcbuf = (Uint8 *)surf_src->map->data + sizeof(RLEDestFormat); srcbuf = (Uint8 *)surf_src->internal->map.data + sizeof(SDL_PixelFormat);
{ {
/* skip lines at the top if necessary */ /* skip lines at the top if necessary */
@ -884,7 +864,7 @@ done:
/* encode 32bpp rgb + a into 16bpp rgb, losing alpha */ /* encode 32bpp rgb + a into 16bpp rgb, losing alpha */
static int copy_opaque_16(void *dst, const Uint32 *src, int n, static int copy_opaque_16(void *dst, const Uint32 *src, int n,
SDL_PixelFormat *sfmt, SDL_PixelFormat *dfmt) const SDL_PixelFormatDetails *sfmt, const SDL_PixelFormatDetails *dfmt)
{ {
int i; int i;
Uint16 *d = (Uint16 *)dst; Uint16 *d = (Uint16 *)dst;
@ -900,7 +880,7 @@ static int copy_opaque_16(void *dst, const Uint32 *src, int n,
/* decode opaque pixels from 16bpp to 32bpp rgb + a */ /* decode opaque pixels from 16bpp to 32bpp rgb + a */
static int uncopy_opaque_16(Uint32 *dst, const void *src, int n, static int uncopy_opaque_16(Uint32 *dst, const void *src, int n,
RLEDestFormat *sfmt, SDL_PixelFormat *dfmt) const SDL_PixelFormatDetails *sfmt, const SDL_PixelFormatDetails *dfmt)
{ {
int i; int i;
const Uint16 *s = (const Uint16 *)src; const Uint16 *s = (const Uint16 *)src;
@ -917,7 +897,7 @@ static int uncopy_opaque_16(Uint32 *dst, const void *src, int n,
/* encode 32bpp rgb + a into 32bpp G0RAB format for blitting into 565 */ /* encode 32bpp rgb + a into 32bpp G0RAB format for blitting into 565 */
static int copy_transl_565(void *dst, const Uint32 *src, int n, static int copy_transl_565(void *dst, const Uint32 *src, int n,
SDL_PixelFormat *sfmt, SDL_PixelFormat *dfmt) const SDL_PixelFormatDetails *sfmt, const SDL_PixelFormatDetails *dfmt)
{ {
int i; int i;
Uint32 *d = (Uint32 *)dst; Uint32 *d = (Uint32 *)dst;
@ -935,7 +915,7 @@ static int copy_transl_565(void *dst, const Uint32 *src, int n,
/* encode 32bpp rgb + a into 32bpp G0RAB format for blitting into 555 */ /* encode 32bpp rgb + a into 32bpp G0RAB format for blitting into 555 */
static int copy_transl_555(void *dst, const Uint32 *src, int n, static int copy_transl_555(void *dst, const Uint32 *src, int n,
SDL_PixelFormat *sfmt, SDL_PixelFormat *dfmt) const SDL_PixelFormatDetails *sfmt, const SDL_PixelFormatDetails *dfmt)
{ {
int i; int i;
Uint32 *d = (Uint32 *)dst; Uint32 *d = (Uint32 *)dst;
@ -953,7 +933,7 @@ static int copy_transl_555(void *dst, const Uint32 *src, int n,
/* decode translucent pixels from 32bpp GORAB to 32bpp rgb + a */ /* decode translucent pixels from 32bpp GORAB to 32bpp rgb + a */
static int uncopy_transl_16(Uint32 *dst, const void *src, int n, static int uncopy_transl_16(Uint32 *dst, const void *src, int n,
RLEDestFormat *sfmt, SDL_PixelFormat *dfmt) const SDL_PixelFormatDetails *sfmt, const SDL_PixelFormatDetails *dfmt)
{ {
int i; int i;
const Uint32 *s = (const Uint32 *)src; const Uint32 *s = (const Uint32 *)src;
@ -971,7 +951,7 @@ static int uncopy_transl_16(Uint32 *dst, const void *src, int n,
/* encode 32bpp rgba into 32bpp rgba, keeping alpha (dual purpose) */ /* encode 32bpp rgba into 32bpp rgba, keeping alpha (dual purpose) */
static int copy_32(void *dst, const Uint32 *src, int n, static int copy_32(void *dst, const Uint32 *src, int n,
SDL_PixelFormat *sfmt, SDL_PixelFormat *dfmt) const SDL_PixelFormatDetails *sfmt, const SDL_PixelFormatDetails *dfmt)
{ {
int i; int i;
Uint32 *d = (Uint32 *)dst; Uint32 *d = (Uint32 *)dst;
@ -987,7 +967,7 @@ static int copy_32(void *dst, const Uint32 *src, int n,
/* decode 32bpp rgba into 32bpp rgba, keeping alpha (dual purpose) */ /* decode 32bpp rgba into 32bpp rgba, keeping alpha (dual purpose) */
static int uncopy_32(Uint32 *dst, const void *src, int n, static int uncopy_32(Uint32 *dst, const void *src, int n,
RLEDestFormat *sfmt, SDL_PixelFormat *dfmt) const SDL_PixelFormatDetails *sfmt, const SDL_PixelFormatDetails *dfmt)
{ {
int i; int i;
const Uint32 *s = (const Uint32 *)src; const Uint32 *s = (const Uint32 *)src;
@ -1011,23 +991,23 @@ static int uncopy_32(Uint32 *dst, const void *src, int n,
static int RLEAlphaSurface(SDL_Surface *surface) static int RLEAlphaSurface(SDL_Surface *surface)
{ {
SDL_Surface *dest; SDL_Surface *dest;
SDL_PixelFormat *df; const SDL_PixelFormatDetails *df;
int maxsize = 0; int maxsize = 0;
int max_opaque_run; int max_opaque_run;
int max_transl_run = 65535; int max_transl_run = 65535;
unsigned masksum; unsigned masksum;
Uint8 *rlebuf, *dst; Uint8 *rlebuf, *dst;
int (*copy_opaque)(void *, const Uint32 *, int, int (*copy_opaque)(void *, const Uint32 *, int,
SDL_PixelFormat *, SDL_PixelFormat *); const SDL_PixelFormatDetails *, const SDL_PixelFormatDetails *);
int (*copy_transl)(void *, const Uint32 *, int, int (*copy_transl)(void *, const Uint32 *, int,
SDL_PixelFormat *, SDL_PixelFormat *); const SDL_PixelFormatDetails *, const SDL_PixelFormatDetails *);
dest = surface->map->dst; dest = surface->internal->map.dst;
if (!dest) { if (!dest) {
return -1; return -1;
} }
df = dest->format; df = dest->internal->format;
if (surface->format->bits_per_pixel != 32) { if (surface->internal->format->bits_per_pixel != 32) {
return -1; /* only 32bpp source supported */ return -1; /* only 32bpp source supported */
} }
@ -1078,35 +1058,20 @@ static int RLEAlphaSurface(SDL_Surface *surface)
return -1; /* anything else unsupported right now */ return -1; /* anything else unsupported right now */
} }
maxsize += sizeof(RLEDestFormat); maxsize += sizeof(SDL_PixelFormat);
rlebuf = (Uint8 *)SDL_malloc(maxsize); rlebuf = (Uint8 *)SDL_malloc(maxsize);
if (!rlebuf) { if (!rlebuf) {
return -1; return -1;
} }
{ /* save the destination format so we can undo the encoding later */
/* save the destination format so we can undo the encoding later */ *(SDL_PixelFormat *)rlebuf = df->format;
RLEDestFormat *r = (RLEDestFormat *)rlebuf; dst = rlebuf + sizeof(SDL_PixelFormat);
r->bytes_per_pixel = df->bytes_per_pixel;
r->Rmask = df->Rmask;
r->Gmask = df->Gmask;
r->Bmask = df->Bmask;
r->Amask = df->Amask;
r->Rloss = df->Rloss;
r->Gloss = df->Gloss;
r->Bloss = df->Bloss;
r->Aloss = df->Aloss;
r->Rshift = df->Rshift;
r->Gshift = df->Gshift;
r->Bshift = df->Bshift;
r->Ashift = df->Ashift;
}
dst = rlebuf + sizeof(RLEDestFormat);
/* Do the actual encoding */ /* Do the actual encoding */
{ {
int x, y; int x, y;
int h = surface->h, w = surface->w; int h = surface->h, w = surface->w;
SDL_PixelFormat *sf = surface->format; const SDL_PixelFormatDetails *sf = surface->internal->format;
Uint32 *src = (Uint32 *)surface->pixels; Uint32 *src = (Uint32 *)surface->pixels;
Uint8 *lastline = dst; /* end of last non-blank line */ Uint8 *lastline = dst; /* end of last non-blank line */
@ -1213,10 +1178,10 @@ static int RLEAlphaSurface(SDL_Surface *surface)
#undef ADD_TRANSL_COUNTS #undef ADD_TRANSL_COUNTS
/* Now that we have it encoded, release the original pixels */ /* Now that we have it encoded, release the original pixels */
if (!(surface->flags & SDL_PREALLOC)) { if (!(surface->flags & SDL_SURFACE_PREALLOCATED)) {
if (surface->flags & SDL_SIMD_ALIGNED) { if (surface->flags & SDL_SURFACE_SIMD_ALIGNED) {
SDL_aligned_free(surface->pixels); SDL_aligned_free(surface->pixels);
surface->flags &= ~SDL_SIMD_ALIGNED; surface->flags &= ~SDL_SURFACE_SIMD_ALIGNED;
} else { } else {
SDL_free(surface->pixels); SDL_free(surface->pixels);
} }
@ -1229,7 +1194,7 @@ static int RLEAlphaSurface(SDL_Surface *surface)
if (!p) { if (!p) {
p = rlebuf; p = rlebuf;
} }
surface->map->data = p; surface->internal->map.data = p;
} }
return 0; return 0;
@ -1272,7 +1237,7 @@ static int RLEColorkeySurface(SDL_Surface *surface)
int y; int y;
Uint8 *srcbuf, *lastline; Uint8 *srcbuf, *lastline;
int maxsize = 0; int maxsize = 0;
const int bpp = surface->format->bytes_per_pixel; const int bpp = surface->internal->format->bytes_per_pixel;
getpix_func getpix; getpix_func getpix;
Uint32 ckey, rgbmask; Uint32 ckey, rgbmask;
int w, h; int w, h;
@ -1307,8 +1272,8 @@ static int RLEColorkeySurface(SDL_Surface *surface)
srcbuf = (Uint8 *)surface->pixels; srcbuf = (Uint8 *)surface->pixels;
maxn = bpp == 4 ? 65535 : 255; maxn = bpp == 4 ? 65535 : 255;
dst = rlebuf; dst = rlebuf;
rgbmask = ~surface->format->Amask; rgbmask = ~surface->internal->format->Amask;
ckey = surface->map->info.colorkey & rgbmask; ckey = surface->internal->map.info.colorkey & rgbmask;
lastline = dst; lastline = dst;
getpix = getpixes[bpp - 1]; getpix = getpixes[bpp - 1];
w = surface->w; w = surface->w;
@ -1380,10 +1345,10 @@ static int RLEColorkeySurface(SDL_Surface *surface)
#undef ADD_COUNTS #undef ADD_COUNTS
/* Now that we have it encoded, release the original pixels */ /* Now that we have it encoded, release the original pixels */
if (!(surface->flags & SDL_PREALLOC)) { if (!(surface->flags & SDL_SURFACE_PREALLOCATED)) {
if (surface->flags & SDL_SIMD_ALIGNED) { if (surface->flags & SDL_SURFACE_SIMD_ALIGNED) {
SDL_aligned_free(surface->pixels); SDL_aligned_free(surface->pixels);
surface->flags &= ~SDL_SIMD_ALIGNED; surface->flags &= ~SDL_SURFACE_SIMD_ALIGNED;
} else { } else {
SDL_free(surface->pixels); SDL_free(surface->pixels);
} }
@ -1397,7 +1362,7 @@ static int RLEColorkeySurface(SDL_Surface *surface)
if (!p) { if (!p) {
p = rlebuf; p = rlebuf;
} }
surface->map->data = p; surface->internal->map.data = p;
} }
return 0; return 0;
@ -1408,12 +1373,12 @@ int SDL_RLESurface(SDL_Surface *surface)
int flags; int flags;
/* Clear any previous RLE conversion */ /* Clear any previous RLE conversion */
if ((surface->flags & SDL_RLEACCEL) == SDL_RLEACCEL) { if (surface->internal->flags & SDL_INTERNAL_SURFACE_RLEACCEL) {
SDL_UnRLESurface(surface, 1); SDL_UnRLESurface(surface, SDL_TRUE);
} }
/* We don't support RLE encoding of bitmaps */ /* We don't support RLE encoding of bitmaps */
if (surface->format->bits_per_pixel < 8) { if (SDL_BITSPERPIXEL(surface->format) < 8) {
return -1; return -1;
} }
@ -1422,10 +1387,10 @@ int SDL_RLESurface(SDL_Surface *surface)
return -1; return -1;
} }
flags = surface->map->info.flags; flags = surface->internal->map.info.flags;
if (flags & SDL_COPY_COLORKEY) { if (flags & SDL_COPY_COLORKEY) {
/* ok */ /* ok */
} else if ((flags & SDL_COPY_BLEND) && surface->format->Amask) { } else if ((flags & SDL_COPY_BLEND) && SDL_ISPIXELFORMAT_ALPHA(surface->format)) {
/* ok */ /* ok */
} else { } else {
/* If we don't have colorkey or blending, nothing to do... */ /* If we don't have colorkey or blending, nothing to do... */
@ -1434,32 +1399,33 @@ int SDL_RLESurface(SDL_Surface *surface)
/* Pass on combinations not supported */ /* Pass on combinations not supported */
if ((flags & SDL_COPY_MODULATE_COLOR) || if ((flags & SDL_COPY_MODULATE_COLOR) ||
((flags & SDL_COPY_MODULATE_ALPHA) && surface->format->Amask) || ((flags & SDL_COPY_MODULATE_ALPHA) && SDL_ISPIXELFORMAT_ALPHA(surface->format)) ||
(flags & (SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL)) || (flags & (SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL)) ||
(flags & SDL_COPY_NEAREST)) { (flags & SDL_COPY_NEAREST)) {
return -1; return -1;
} }
/* Encode and set up the blit */ /* Encode and set up the blit */
if (!surface->format->Amask || !(flags & SDL_COPY_BLEND)) { if (!SDL_ISPIXELFORMAT_ALPHA(surface->format) || !(flags & SDL_COPY_BLEND)) {
if (!surface->map->identity) { if (!surface->internal->map.identity) {
return -1; return -1;
} }
if (RLEColorkeySurface(surface) < 0) { if (RLEColorkeySurface(surface) < 0) {
return -1; return -1;
} }
surface->map->blit = SDL_RLEBlit; surface->internal->map.blit = SDL_RLEBlit;
surface->map->info.flags |= SDL_COPY_RLE_COLORKEY; surface->internal->map.info.flags |= SDL_COPY_RLE_COLORKEY;
} else { } else {
if (RLEAlphaSurface(surface) < 0) { if (RLEAlphaSurface(surface) < 0) {
return -1; return -1;
} }
surface->map->blit = SDL_RLEAlphaBlit; surface->internal->map.blit = SDL_RLEAlphaBlit;
surface->map->info.flags |= SDL_COPY_RLE_ALPHAKEY; surface->internal->map.info.flags |= SDL_COPY_RLE_ALPHAKEY;
} }
/* The surface is now accelerated */ /* The surface is now accelerated */
surface->flags |= SDL_RLEACCEL; surface->internal->flags |= SDL_INTERNAL_SURFACE_RLEACCEL;
SDL_UpdateSurfaceLockFlag(surface);
return 0; return 0;
} }
@ -1474,12 +1440,12 @@ static SDL_bool UnRLEAlpha(SDL_Surface *surface)
{ {
Uint8 *srcbuf; Uint8 *srcbuf;
Uint32 *dst; Uint32 *dst;
SDL_PixelFormat *sf = surface->format; const SDL_PixelFormatDetails *sf = surface->internal->format;
RLEDestFormat *df = (RLEDestFormat *)surface->map->data; const SDL_PixelFormatDetails *df = SDL_GetPixelFormatDetails(*(SDL_PixelFormat *)surface->internal->map.data);
int (*uncopy_opaque)(Uint32 *, const void *, int, int (*uncopy_opaque)(Uint32 *, const void *, int,
RLEDestFormat *, SDL_PixelFormat *); const SDL_PixelFormatDetails *, const SDL_PixelFormatDetails *);
int (*uncopy_transl)(Uint32 *, const void *, int, int (*uncopy_transl)(Uint32 *, const void *, int,
RLEDestFormat *, SDL_PixelFormat *); const SDL_PixelFormatDetails *, const SDL_PixelFormatDetails *);
int w = surface->w; int w = surface->w;
int bpp = df->bytes_per_pixel; int bpp = df->bytes_per_pixel;
size_t size; size_t size;
@ -1499,12 +1465,12 @@ static SDL_bool UnRLEAlpha(SDL_Surface *surface)
if (!surface->pixels) { if (!surface->pixels) {
return SDL_FALSE; return SDL_FALSE;
} }
surface->flags |= SDL_SIMD_ALIGNED; surface->flags |= SDL_SURFACE_SIMD_ALIGNED;
/* fill background with transparent pixels */ /* fill background with transparent pixels */
SDL_memset(surface->pixels, 0, (size_t)surface->h * surface->pitch); SDL_memset(surface->pixels, 0, (size_t)surface->h * surface->pitch);
dst = (Uint32 *)surface->pixels; dst = (Uint32 *)surface->pixels;
srcbuf = (Uint8 *)(df + 1); srcbuf = (Uint8 *)surface->internal->map.data + sizeof(SDL_PixelFormat);
for (;;) { for (;;) {
/* copy opaque pixels */ /* copy opaque pixels */
int ofs = 0; int ofs = 0;
@ -1551,32 +1517,35 @@ end_function:
return SDL_TRUE; return SDL_TRUE;
} }
void SDL_UnRLESurface(SDL_Surface *surface, int recode) void SDL_UnRLESurface(SDL_Surface *surface, SDL_bool recode)
{ {
if (surface->flags & SDL_RLEACCEL) { if (surface->internal->flags & SDL_INTERNAL_SURFACE_RLEACCEL) {
surface->flags &= ~SDL_RLEACCEL; surface->internal->flags &= ~SDL_INTERNAL_SURFACE_RLEACCEL;
SDL_UpdateSurfaceLockFlag(surface);
if (recode && !(surface->flags & SDL_PREALLOC)) { if (recode && !(surface->flags & SDL_SURFACE_PREALLOCATED)) {
if (surface->map->info.flags & SDL_COPY_RLE_COLORKEY) { if (surface->internal->map.info.flags & SDL_COPY_RLE_COLORKEY) {
SDL_Rect full; SDL_Rect full;
size_t size; size_t size;
/* re-create the original surface */ /* re-create the original surface */
if (SDL_size_mul_overflow(surface->h, surface->pitch, &size)) { if (SDL_size_mul_overflow(surface->h, surface->pitch, &size)) {
/* Memory corruption? */ /* Memory corruption? */
surface->flags |= SDL_RLEACCEL; surface->internal->flags |= SDL_INTERNAL_SURFACE_RLEACCEL;
SDL_UpdateSurfaceLockFlag(surface);
return; return;
} }
surface->pixels = SDL_aligned_alloc(SDL_GetSIMDAlignment(), size); surface->pixels = SDL_aligned_alloc(SDL_GetSIMDAlignment(), size);
if (!surface->pixels) { if (!surface->pixels) {
/* Oh crap... */ /* Oh crap... */
surface->flags |= SDL_RLEACCEL; surface->internal->flags |= SDL_INTERNAL_SURFACE_RLEACCEL;
SDL_UpdateSurfaceLockFlag(surface);
return; return;
} }
surface->flags |= SDL_SIMD_ALIGNED; surface->flags |= SDL_SURFACE_SIMD_ALIGNED;
/* fill it with the background color */ /* fill it with the background color */
SDL_FillSurfaceRect(surface, NULL, surface->map->info.colorkey); SDL_FillSurfaceRect(surface, NULL, surface->internal->map.info.colorkey);
/* now render the encoded surface */ /* now render the encoded surface */
full.x = full.y = 0; full.x = full.y = 0;
@ -1586,16 +1555,17 @@ void SDL_UnRLESurface(SDL_Surface *surface, int recode)
} else { } else {
if (!UnRLEAlpha(surface)) { if (!UnRLEAlpha(surface)) {
/* Oh crap... */ /* Oh crap... */
surface->flags |= SDL_RLEACCEL; surface->internal->flags |= SDL_INTERNAL_SURFACE_RLEACCEL;
SDL_UpdateSurfaceLockFlag(surface);
return; return;
} }
} }
} }
surface->map->info.flags &= surface->internal->map.info.flags &=
~(SDL_COPY_RLE_COLORKEY | SDL_COPY_RLE_ALPHAKEY); ~(SDL_COPY_RLE_COLORKEY | SDL_COPY_RLE_ALPHAKEY);
SDL_free(surface->map->data); SDL_free(surface->internal->map.data);
surface->map->data = NULL; surface->internal->map.data = NULL;
} }
} }

View File

@ -61,7 +61,7 @@ static int SDLCALL SDL_SoftBlit(SDL_Surface *src, const SDL_Rect *srcrect,
/* Set up source and destination buffer pointers, and BLIT! */ /* Set up source and destination buffer pointers, and BLIT! */
if (okay && !SDL_RectEmpty(srcrect)) { if (okay && !SDL_RectEmpty(srcrect)) {
SDL_BlitFunc RunBlit; SDL_BlitFunc RunBlit;
SDL_BlitInfo *info = &src->map->info; SDL_BlitInfo *info = &src->internal->map.info;
/* Set up the blit information */ /* Set up the blit information */
info->src = (Uint8 *)src->pixels + info->src = (Uint8 *)src->pixels +
@ -80,7 +80,7 @@ static int SDLCALL SDL_SoftBlit(SDL_Surface *src, const SDL_Rect *srcrect,
info->dst_pitch = dst->pitch; info->dst_pitch = dst->pitch;
info->dst_skip = info->dst_skip =
info->dst_pitch - info->dst_w * info->dst_fmt->bytes_per_pixel; info->dst_pitch - info->dst_w * info->dst_fmt->bytes_per_pixel;
RunBlit = (SDL_BlitFunc)src->map->data; RunBlit = (SDL_BlitFunc)src->internal->map.data;
/* Run the actual software blit */ /* Run the actual software blit */
RunBlit(info); RunBlit(info);
@ -122,7 +122,7 @@ static SDL_bool SDL_UseAltivecPrefetch(void)
} }
#endif /* SDL_PLATFORM_MACOS */ #endif /* SDL_PLATFORM_MACOS */
static SDL_BlitFunc SDL_ChooseBlitFunc(Uint32 src_format, Uint32 dst_format, int flags, static SDL_BlitFunc SDL_ChooseBlitFunc(SDL_PixelFormat src_format, SDL_PixelFormat dst_format, int flags,
SDL_BlitFuncEntry *entries) SDL_BlitFuncEntry *entries)
{ {
int i, flagcheck = (flags & (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL | SDL_COPY_COLORKEY | SDL_COPY_NEAREST)); int i, flagcheck = (flags & (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL | SDL_COPY_COLORKEY | SDL_COPY_NEAREST));
@ -179,37 +179,39 @@ static SDL_BlitFunc SDL_ChooseBlitFunc(Uint32 src_format, Uint32 dst_format, int
int SDL_CalculateBlit(SDL_Surface *surface) int SDL_CalculateBlit(SDL_Surface *surface)
{ {
SDL_BlitFunc blit = NULL; SDL_BlitFunc blit = NULL;
SDL_BlitMap *map = surface->map; SDL_BlitMap *map = &surface->internal->map;
SDL_Surface *dst = map->dst; SDL_Surface *dst = map->dst;
SDL_Colorspace src_colorspace = SDL_COLORSPACE_UNKNOWN; SDL_Colorspace src_colorspace = SDL_GetSurfaceColorspace(surface);
SDL_Colorspace dst_colorspace = SDL_COLORSPACE_UNKNOWN; SDL_Colorspace dst_colorspace = SDL_GetSurfaceColorspace(dst);
if (SDL_GetSurfaceColorspace(surface, &src_colorspace) < 0) { if (src_colorspace == SDL_COLORSPACE_UNKNOWN) {
return -1; return -1;
} }
if (SDL_GetSurfaceColorspace(dst, &dst_colorspace) < 0) { if (dst_colorspace == SDL_COLORSPACE_UNKNOWN) {
return -1; return -1;
} }
/* We don't currently support blitting to < 8 bpp surfaces */ /* We don't currently support blitting to < 8 bpp surfaces */
if (dst->format->bits_per_pixel < 8) { if (SDL_BITSPERPIXEL(dst->format) < 8) {
SDL_InvalidateMap(map); SDL_InvalidateMap(map);
return SDL_SetError("Blit combination not supported"); return SDL_SetError("Blit combination not supported");
} }
#if SDL_HAVE_RLE #if SDL_HAVE_RLE
/* Clean everything out to start */ /* Clean everything out to start */
if ((surface->flags & SDL_RLEACCEL) == SDL_RLEACCEL) { if (surface->flags & SDL_INTERNAL_SURFACE_RLEACCEL) {
SDL_UnRLESurface(surface, 1); SDL_UnRLESurface(surface, SDL_TRUE);
} }
#endif #endif
map->blit = SDL_SoftBlit; map->blit = SDL_SoftBlit;
map->info.src_surface = surface; map->info.src_surface = surface;
map->info.src_fmt = surface->format; map->info.src_fmt = surface->internal->format;
map->info.src_pal = surface->internal->palette;
map->info.src_pitch = surface->pitch; map->info.src_pitch = surface->pitch;
map->info.dst_surface = dst; map->info.dst_surface = dst;
map->info.dst_fmt = dst->format; map->info.dst_fmt = dst->internal->format;
map->info.dst_pal = dst->internal->palette;
map->info.dst_pitch = dst->pitch; map->info.dst_pitch = dst->pitch;
#if SDL_HAVE_RLE #if SDL_HAVE_RLE
@ -224,26 +226,27 @@ int SDL_CalculateBlit(SDL_Surface *surface)
/* Choose a standard blit function */ /* Choose a standard blit function */
if (!blit) { if (!blit) {
if (src_colorspace != dst_colorspace || if (src_colorspace != dst_colorspace ||
surface->format->bytes_per_pixel > 4 || SDL_BYTESPERPIXEL(surface->format) > 4 ||
dst->format->bytes_per_pixel > 4) { SDL_BYTESPERPIXEL(dst->format) > 4) {
blit = SDL_Blit_Slow_Float; blit = SDL_Blit_Slow_Float;
} }
} }
if (!blit) { if (!blit) {
if (map->identity && !(map->info.flags & ~SDL_COPY_RLE_DESIRED)) { if (map->identity && !(map->info.flags & ~SDL_COPY_RLE_DESIRED)) {
blit = SDL_BlitCopy; blit = SDL_BlitCopy;
} else if (surface->format->Rloss > 8 || dst->format->Rloss > 8) { } else if (SDL_ISPIXELFORMAT_10BIT(surface->format) ||
SDL_ISPIXELFORMAT_10BIT(dst->format)) {
blit = SDL_Blit_Slow; blit = SDL_Blit_Slow;
} }
#if SDL_HAVE_BLIT_0 #if SDL_HAVE_BLIT_0
else if (surface->format->bits_per_pixel < 8 && else if (SDL_BITSPERPIXEL(surface->format) < 8 &&
SDL_ISPIXELFORMAT_INDEXED(surface->format->format)) { SDL_ISPIXELFORMAT_INDEXED(surface->format)) {
blit = SDL_CalculateBlit0(surface); blit = SDL_CalculateBlit0(surface);
} }
#endif #endif
#if SDL_HAVE_BLIT_1 #if SDL_HAVE_BLIT_1
else if (surface->format->bytes_per_pixel == 1 && else if (SDL_BYTESPERPIXEL(surface->format) == 1 &&
SDL_ISPIXELFORMAT_INDEXED(surface->format->format)) { SDL_ISPIXELFORMAT_INDEXED(surface->format)) {
blit = SDL_CalculateBlit1(surface); blit = SDL_CalculateBlit1(surface);
} }
#endif #endif
@ -260,8 +263,8 @@ int SDL_CalculateBlit(SDL_Surface *surface)
} }
#if SDL_HAVE_BLIT_AUTO #if SDL_HAVE_BLIT_AUTO
if (!blit) { if (!blit) {
Uint32 src_format = surface->format->format; SDL_PixelFormat src_format = surface->format;
Uint32 dst_format = dst->format->format; SDL_PixelFormat dst_format = dst->format;
blit = blit =
SDL_ChooseBlitFunc(src_format, dst_format, map->info.flags, SDL_ChooseBlitFunc(src_format, dst_format, map->info.flags,
@ -273,8 +276,8 @@ int SDL_CalculateBlit(SDL_Surface *surface)
if (!blit) if (!blit)
#endif #endif
{ {
Uint32 src_format = surface->format->format; SDL_PixelFormat src_format = surface->format;
Uint32 dst_format = dst->format->format; SDL_PixelFormat dst_format = dst->format;
if (!SDL_ISPIXELFORMAT_INDEXED(src_format) && if (!SDL_ISPIXELFORMAT_INDEXED(src_format) &&
!SDL_ISPIXELFORMAT_FOURCC(src_format) && !SDL_ISPIXELFORMAT_FOURCC(src_format) &&

View File

@ -61,8 +61,10 @@ typedef struct
int dst_w, dst_h; int dst_w, dst_h;
int dst_pitch; int dst_pitch;
int dst_skip; int dst_skip;
SDL_PixelFormat *src_fmt; const SDL_PixelFormatDetails *src_fmt;
SDL_PixelFormat *dst_fmt; const SDL_Palette *src_pal;
const SDL_PixelFormatDetails *dst_fmt;
const SDL_Palette *dst_pal;
Uint8 *table; Uint8 *table;
int flags; int flags;
Uint32 colorkey; Uint32 colorkey;
@ -73,8 +75,8 @@ typedef void (*SDL_BlitFunc)(SDL_BlitInfo *info);
typedef struct typedef struct
{ {
Uint32 src_format; SDL_PixelFormat src_format;
Uint32 dst_format; SDL_PixelFormat dst_format;
int flags; int flags;
unsigned int cpu; unsigned int cpu;
SDL_BlitFunc func; SDL_BlitFunc func;
@ -83,8 +85,7 @@ typedef struct
typedef int (SDLCALL *SDL_Blit) (struct SDL_Surface *src, const SDL_Rect *srcrect, struct SDL_Surface *dst, const SDL_Rect *dstrect); typedef int (SDLCALL *SDL_Blit) (struct SDL_Surface *src, const SDL_Rect *srcrect, struct SDL_Surface *dst, const SDL_Rect *dstrect);
/* Blit mapping definition */ /* Blit mapping definition */
/* typedef'ed in SDL_surface.h */ typedef struct SDL_BlitMap
struct SDL_BlitMap
{ {
SDL_Surface *dst; SDL_Surface *dst;
int identity; int identity;
@ -96,7 +97,7 @@ struct SDL_BlitMap
an invalid mapping */ an invalid mapping */
Uint32 dst_palette_version; Uint32 dst_palette_version;
Uint32 src_palette_version; Uint32 src_palette_version;
}; } SDL_BlitMap;
/* Functions found in SDL_blit.c */ /* Functions found in SDL_blit.c */
extern int SDL_CalculateBlit(SDL_Surface *surface); extern int SDL_CalculateBlit(SDL_Surface *surface);
@ -122,9 +123,9 @@ extern SDL_BlitFunc SDL_CalculateBlitA(SDL_Surface *surface);
/* Load pixel of the specified format from a buffer and get its R-G-B values */ /* Load pixel of the specified format from a buffer and get its R-G-B values */
#define RGB_FROM_PIXEL(Pixel, fmt, r, g, b) \ #define RGB_FROM_PIXEL(Pixel, fmt, r, g, b) \
{ \ { \
r = SDL_expand_byte[fmt->Rloss][((Pixel & fmt->Rmask) >> fmt->Rshift)]; \ r = SDL_expand_byte[fmt->Rbits][((Pixel & fmt->Rmask) >> fmt->Rshift)]; \
g = SDL_expand_byte[fmt->Gloss][((Pixel & fmt->Gmask) >> fmt->Gshift)]; \ g = SDL_expand_byte[fmt->Gbits][((Pixel & fmt->Gmask) >> fmt->Gshift)]; \
b = SDL_expand_byte[fmt->Bloss][((Pixel & fmt->Bmask) >> fmt->Bshift)]; \ b = SDL_expand_byte[fmt->Bbits][((Pixel & fmt->Bmask) >> fmt->Bshift)]; \
} }
#define RGB_FROM_RGB565(Pixel, r, g, b) \ #define RGB_FROM_RGB565(Pixel, r, g, b) \
{ \ { \
@ -216,12 +217,12 @@ extern SDL_BlitFunc SDL_CalculateBlitA(SDL_Surface *surface);
} while (0) } while (0)
/* Assemble R-G-B values into a specified pixel format and store them */ /* Assemble R-G-B values into a specified pixel format and store them */
#define PIXEL_FROM_RGB(Pixel, fmt, r, g, b) \ #define PIXEL_FROM_RGB(Pixel, fmt, r, g, b) \
{ \ { \
Pixel = ((r >> fmt->Rloss) << fmt->Rshift) | \ Pixel = ((r >> (8 - fmt->Rbits)) << fmt->Rshift) | \
((g >> fmt->Gloss) << fmt->Gshift) | \ ((g >> (8 - fmt->Gbits)) << fmt->Gshift) | \
((b >> fmt->Bloss) << fmt->Bshift) | \ ((b >> (8 - fmt->Bbits)) << fmt->Bshift) | \
fmt->Amask; \ fmt->Amask; \
} }
#define RGB565_FROM_RGB(Pixel, r, g, b) \ #define RGB565_FROM_RGB(Pixel, r, g, b) \
{ \ { \
@ -334,10 +335,10 @@ extern SDL_BlitFunc SDL_CalculateBlitA(SDL_Surface *surface);
/* FIXME: Should we rescale alpha into 0..255 here? */ /* FIXME: Should we rescale alpha into 0..255 here? */
#define RGBA_FROM_PIXEL(Pixel, fmt, r, g, b, a) \ #define RGBA_FROM_PIXEL(Pixel, fmt, r, g, b, a) \
{ \ { \
r = SDL_expand_byte[fmt->Rloss][((Pixel & fmt->Rmask) >> fmt->Rshift)]; \ r = SDL_expand_byte[fmt->Rbits][((Pixel & fmt->Rmask) >> fmt->Rshift)]; \
g = SDL_expand_byte[fmt->Gloss][((Pixel & fmt->Gmask) >> fmt->Gshift)]; \ g = SDL_expand_byte[fmt->Gbits][((Pixel & fmt->Gmask) >> fmt->Gshift)]; \
b = SDL_expand_byte[fmt->Bloss][((Pixel & fmt->Bmask) >> fmt->Bshift)]; \ b = SDL_expand_byte[fmt->Bbits][((Pixel & fmt->Bmask) >> fmt->Bshift)]; \
a = SDL_expand_byte[fmt->Aloss][((Pixel & fmt->Amask) >> fmt->Ashift)]; \ a = SDL_expand_byte[fmt->Abits][((Pixel & fmt->Amask) >> fmt->Ashift)]; \
} }
#define RGBA_FROM_8888(Pixel, fmt, r, g, b, a) \ #define RGBA_FROM_8888(Pixel, fmt, r, g, b, a) \
{ \ { \
@ -444,12 +445,12 @@ extern SDL_BlitFunc SDL_CalculateBlitA(SDL_Surface *surface);
} while (0) } while (0)
/* FIXME: this isn't correct, especially for Alpha (maximum != 255) */ /* FIXME: this isn't correct, especially for Alpha (maximum != 255) */
#define PIXEL_FROM_RGBA(Pixel, fmt, r, g, b, a) \ #define PIXEL_FROM_RGBA(Pixel, fmt, r, g, b, a) \
{ \ { \
Pixel = ((r >> fmt->Rloss) << fmt->Rshift) | \ Pixel = ((r >> (8 - fmt->Rbits)) << fmt->Rshift) | \
((g >> fmt->Gloss) << fmt->Gshift) | \ ((g >> (8 - fmt->Gbits)) << fmt->Gshift) | \
((b >> fmt->Bloss) << fmt->Bshift) | \ ((b >> (8 - fmt->Bbits)) << fmt->Bshift) | \
((a >> fmt->Aloss) << fmt->Ashift); \ ((a >> (8 - fmt->Abits)) << fmt->Ashift); \
} }
#define ASSEMBLE_RGBA(buf, bpp, fmt, r, g, b, a) \ #define ASSEMBLE_RGBA(buf, bpp, fmt, r, g, b, a) \
{ \ { \
@ -713,4 +714,6 @@ extern SDL_BlitFunc SDL_CalculateBlitA(SDL_Surface *surface);
#pragma warning(disable : 4244) /* '=': conversion from 'X' to 'Y', possible loss of data */ #pragma warning(disable : 4244) /* '=': conversion from 'X' to 'Y', possible loss of data */
#endif #endif
#include "SDL_surface_c.h"
#endif /* SDL_blit_h_ */ #endif /* SDL_blit_h_ */

View File

@ -615,8 +615,8 @@ SDL_FORCE_INLINE void BlitBtoNAlpha(SDL_BlitInfo *info, const Uint32 srcbpp)
Uint8 *dst = info->dst; Uint8 *dst = info->dst;
int srcskip = info->src_skip; int srcskip = info->src_skip;
int dstskip = info->dst_skip; int dstskip = info->dst_skip;
const SDL_Color *srcpal = info->src_fmt->palette->colors; const SDL_Color *srcpal = info->src_pal->colors;
SDL_PixelFormat *dstfmt = info->dst_fmt; const SDL_PixelFormatDetails *dstfmt = info->dst_fmt;
int dstbpp; int dstbpp;
int c; int c;
Uint32 pixel; Uint32 pixel;
@ -691,9 +691,8 @@ SDL_FORCE_INLINE void BlitBtoNAlphaKey(SDL_BlitInfo *info, const Uint32 srcbpp)
Uint8 *dst = info->dst; Uint8 *dst = info->dst;
int srcskip = info->src_skip; int srcskip = info->src_skip;
int dstskip = info->dst_skip; int dstskip = info->dst_skip;
SDL_PixelFormat *srcfmt = info->src_fmt; const SDL_PixelFormatDetails *dstfmt = info->dst_fmt;
SDL_PixelFormat *dstfmt = info->dst_fmt; const SDL_Color *srcpal = info->src_pal->colors;
const SDL_Color *srcpal = srcfmt->palette->colors;
int dstbpp; int dstbpp;
int c; int c;
Uint32 pixel; Uint32 pixel;
@ -920,14 +919,14 @@ SDL_BlitFunc SDL_CalculateBlit0(SDL_Surface *surface)
{ {
int which; int which;
if (surface->map->dst->format->bits_per_pixel < 8) { if (SDL_BITSPERPIXEL(surface->internal->map.dst->format) < 8) {
which = 0; which = 0;
} else { } else {
which = surface->map->dst->format->bytes_per_pixel; which = SDL_BYTESPERPIXEL(surface->internal->map.dst->format);
} }
if (SDL_PIXELTYPE(surface->format->format) == SDL_PIXELTYPE_INDEX1) { if (SDL_PIXELTYPE(surface->format) == SDL_PIXELTYPE_INDEX1) {
switch (surface->map->info.flags & ~SDL_COPY_RLE_MASK) { switch (surface->internal->map.info.flags & ~SDL_COPY_RLE_MASK) {
case 0: case 0:
return bitmap_blit_1b[which]; return bitmap_blit_1b[which];
@ -943,8 +942,8 @@ SDL_BlitFunc SDL_CalculateBlit0(SDL_Surface *surface)
return NULL; return NULL;
} }
if (SDL_PIXELTYPE(surface->format->format) == SDL_PIXELTYPE_INDEX2) { if (SDL_PIXELTYPE(surface->format) == SDL_PIXELTYPE_INDEX2) {
switch (surface->map->info.flags & ~SDL_COPY_RLE_MASK) { switch (surface->internal->map.info.flags & ~SDL_COPY_RLE_MASK) {
case 0: case 0:
return bitmap_blit_2b[which]; return bitmap_blit_2b[which];
@ -960,8 +959,8 @@ SDL_BlitFunc SDL_CalculateBlit0(SDL_Surface *surface)
return NULL; return NULL;
} }
if (SDL_PIXELTYPE(surface->format->format) == SDL_PIXELTYPE_INDEX4) { if (SDL_PIXELTYPE(surface->format) == SDL_PIXELTYPE_INDEX4) {
switch (surface->map->info.flags & ~SDL_COPY_RLE_MASK) { switch (surface->internal->map.info.flags & ~SDL_COPY_RLE_MASK) {
case 0: case 0:
return bitmap_blit_4b[which]; return bitmap_blit_4b[which];

View File

@ -431,8 +431,8 @@ static void Blit1toNAlpha(SDL_BlitInfo *info)
int srcskip = info->src_skip; int srcskip = info->src_skip;
Uint8 *dst = info->dst; Uint8 *dst = info->dst;
int dstskip = info->dst_skip; int dstskip = info->dst_skip;
SDL_PixelFormat *dstfmt = info->dst_fmt; const SDL_PixelFormatDetails *dstfmt = info->dst_fmt;
const SDL_Color *srcpal = info->src_fmt->palette->colors; const SDL_Color *srcpal = info->src_pal->colors;
int dstbpp; int dstbpp;
Uint32 pixel; Uint32 pixel;
unsigned sR, sG, sB, sA; unsigned sR, sG, sB, sA;
@ -471,8 +471,8 @@ static void Blit1toNAlphaKey(SDL_BlitInfo *info)
int srcskip = info->src_skip; int srcskip = info->src_skip;
Uint8 *dst = info->dst; Uint8 *dst = info->dst;
int dstskip = info->dst_skip; int dstskip = info->dst_skip;
SDL_PixelFormat *dstfmt = info->dst_fmt; const SDL_PixelFormatDetails *dstfmt = info->dst_fmt;
const SDL_Color *srcpal = info->src_fmt->palette->colors; const SDL_Color *srcpal = info->src_pal->colors;
Uint32 ckey = info->colorkey; Uint32 ckey = info->colorkey;
int dstbpp; int dstbpp;
Uint32 pixel; Uint32 pixel;
@ -517,15 +517,14 @@ static const SDL_BlitFunc one_blitkey[] = {
SDL_BlitFunc SDL_CalculateBlit1(SDL_Surface *surface) SDL_BlitFunc SDL_CalculateBlit1(SDL_Surface *surface)
{ {
int which; int which;
SDL_PixelFormat *dstfmt;
dstfmt = surface->map->dst->format; if (SDL_BITSPERPIXEL(surface->internal->map.dst->format) < 8) {
if (dstfmt->bits_per_pixel < 8) {
which = 0; which = 0;
} else { } else {
which = dstfmt->bytes_per_pixel; which = SDL_BYTESPERPIXEL(surface->internal->map.dst->format);
} }
switch (surface->map->info.flags & ~SDL_COPY_RLE_MASK) {
switch (surface->internal->map.info.flags & ~SDL_COPY_RLE_MASK) {
case 0: case 0:
return one_blit[which]; return one_blit[which];
@ -533,7 +532,7 @@ SDL_BlitFunc SDL_CalculateBlit1(SDL_Surface *surface)
return one_blitkey[which]; return one_blitkey[which];
case SDL_COPY_COLORKEY | SDL_COPY_BLEND: /* this is not super-robust but handles a specific case we found sdl12-compat. */ case SDL_COPY_COLORKEY | SDL_COPY_BLEND: /* this is not super-robust but handles a specific case we found sdl12-compat. */
return (surface->map->info.a == 255) ? one_blitkey[which] : return (surface->internal->map.info.a == 255) ? one_blitkey[which] :
which >= 2 ? Blit1toNAlphaKey : (SDL_BlitFunc)NULL; which >= 2 ? Blit1toNAlphaKey : (SDL_BlitFunc)NULL;
case SDL_COPY_BLEND: case SDL_COPY_BLEND:

View File

@ -36,8 +36,8 @@ static void BlitNto1SurfaceAlpha(SDL_BlitInfo *info)
Uint8 *dst = info->dst; Uint8 *dst = info->dst;
int dstskip = info->dst_skip; int dstskip = info->dst_skip;
Uint8 *palmap = info->table; Uint8 *palmap = info->table;
SDL_PixelFormat *srcfmt = info->src_fmt; const SDL_PixelFormatDetails *srcfmt = info->src_fmt;
SDL_PixelFormat *dstfmt = info->dst_fmt; const SDL_Color *dstpal = info->dst_pal->colors;
int srcbpp = srcfmt->bytes_per_pixel; int srcbpp = srcfmt->bytes_per_pixel;
Uint32 Pixel; Uint32 Pixel;
unsigned sR, sG, sB; unsigned sR, sG, sB;
@ -49,9 +49,9 @@ static void BlitNto1SurfaceAlpha(SDL_BlitInfo *info)
DUFFS_LOOP4( DUFFS_LOOP4(
{ {
DISEMBLE_RGB(src, srcbpp, srcfmt, Pixel, sR, sG, sB); DISEMBLE_RGB(src, srcbpp, srcfmt, Pixel, sR, sG, sB);
dR = dstfmt->palette->colors[*dst].r; dR = dstpal[*dst].r;
dG = dstfmt->palette->colors[*dst].g; dG = dstpal[*dst].g;
dB = dstfmt->palette->colors[*dst].b; dB = dstpal[*dst].b;
ALPHA_BLEND_RGB(sR, sG, sB, A, dR, dG, dB); ALPHA_BLEND_RGB(sR, sG, sB, A, dR, dG, dB);
dR &= 0xff; dR &= 0xff;
dG &= 0xff; dG &= 0xff;
@ -82,8 +82,8 @@ static void BlitNto1PixelAlpha(SDL_BlitInfo *info)
Uint8 *dst = info->dst; Uint8 *dst = info->dst;
int dstskip = info->dst_skip; int dstskip = info->dst_skip;
Uint8 *palmap = info->table; Uint8 *palmap = info->table;
SDL_PixelFormat *srcfmt = info->src_fmt; const SDL_PixelFormatDetails *srcfmt = info->src_fmt;
SDL_PixelFormat *dstfmt = info->dst_fmt; const SDL_Color *dstpal = info->dst_pal->colors;
int srcbpp = srcfmt->bytes_per_pixel; int srcbpp = srcfmt->bytes_per_pixel;
Uint32 Pixel; Uint32 Pixel;
unsigned sR, sG, sB, sA; unsigned sR, sG, sB, sA;
@ -94,9 +94,9 @@ static void BlitNto1PixelAlpha(SDL_BlitInfo *info)
DUFFS_LOOP4( DUFFS_LOOP4(
{ {
DISEMBLE_RGBA(src,srcbpp,srcfmt,Pixel,sR,sG,sB,sA); DISEMBLE_RGBA(src,srcbpp,srcfmt,Pixel,sR,sG,sB,sA);
dR = dstfmt->palette->colors[*dst].r; dR = dstpal[*dst].r;
dG = dstfmt->palette->colors[*dst].g; dG = dstpal[*dst].g;
dB = dstfmt->palette->colors[*dst].b; dB = dstpal[*dst].b;
ALPHA_BLEND_RGB(sR, sG, sB, sA, dR, dG, dB); ALPHA_BLEND_RGB(sR, sG, sB, sA, dR, dG, dB);
dR &= 0xff; dR &= 0xff;
dG &= 0xff; dG &= 0xff;
@ -127,8 +127,8 @@ static void BlitNto1SurfaceAlphaKey(SDL_BlitInfo *info)
Uint8 *dst = info->dst; Uint8 *dst = info->dst;
int dstskip = info->dst_skip; int dstskip = info->dst_skip;
Uint8 *palmap = info->table; Uint8 *palmap = info->table;
SDL_PixelFormat *srcfmt = info->src_fmt; const SDL_PixelFormatDetails *srcfmt = info->src_fmt;
SDL_PixelFormat *dstfmt = info->dst_fmt; const SDL_Color *dstpal = info->dst_pal->colors;
int srcbpp = srcfmt->bytes_per_pixel; int srcbpp = srcfmt->bytes_per_pixel;
Uint32 ckey = info->colorkey; Uint32 ckey = info->colorkey;
Uint32 Pixel; Uint32 Pixel;
@ -142,9 +142,9 @@ static void BlitNto1SurfaceAlphaKey(SDL_BlitInfo *info)
{ {
DISEMBLE_RGB(src, srcbpp, srcfmt, Pixel, sR, sG, sB); DISEMBLE_RGB(src, srcbpp, srcfmt, Pixel, sR, sG, sB);
if ( Pixel != ckey ) { if ( Pixel != ckey ) {
dR = dstfmt->palette->colors[*dst].r; dR = dstpal[*dst].r;
dG = dstfmt->palette->colors[*dst].g; dG = dstpal[*dst].g;
dB = dstfmt->palette->colors[*dst].b; dB = dstpal[*dst].b;
ALPHA_BLEND_RGB(sR, sG, sB, A, dR, dG, dB); ALPHA_BLEND_RGB(sR, sG, sB, A, dR, dG, dB);
dR &= 0xff; dR &= 0xff;
dG &= 0xff; dG &= 0xff;
@ -864,8 +864,8 @@ static void BlitNtoNSurfaceAlpha(SDL_BlitInfo *info)
int srcskip = info->src_skip; int srcskip = info->src_skip;
Uint8 *dst = info->dst; Uint8 *dst = info->dst;
int dstskip = info->dst_skip; int dstskip = info->dst_skip;
SDL_PixelFormat *srcfmt = info->src_fmt; const SDL_PixelFormatDetails *srcfmt = info->src_fmt;
SDL_PixelFormat *dstfmt = info->dst_fmt; const SDL_PixelFormatDetails *dstfmt = info->dst_fmt;
int srcbpp = srcfmt->bytes_per_pixel; int srcbpp = srcfmt->bytes_per_pixel;
int dstbpp = dstfmt->bytes_per_pixel; int dstbpp = dstfmt->bytes_per_pixel;
Uint32 Pixel; Uint32 Pixel;
@ -902,8 +902,8 @@ static void BlitNtoNSurfaceAlphaKey(SDL_BlitInfo *info)
int srcskip = info->src_skip; int srcskip = info->src_skip;
Uint8 *dst = info->dst; Uint8 *dst = info->dst;
int dstskip = info->dst_skip; int dstskip = info->dst_skip;
SDL_PixelFormat *srcfmt = info->src_fmt; const SDL_PixelFormatDetails *srcfmt = info->src_fmt;
SDL_PixelFormat *dstfmt = info->dst_fmt; const SDL_PixelFormatDetails *dstfmt = info->dst_fmt;
Uint32 ckey = info->colorkey; Uint32 ckey = info->colorkey;
int srcbpp = srcfmt->bytes_per_pixel; int srcbpp = srcfmt->bytes_per_pixel;
int dstbpp = dstfmt->bytes_per_pixel; int dstbpp = dstfmt->bytes_per_pixel;
@ -942,7 +942,7 @@ static void Blit8888to8888PixelAlpha(SDL_BlitInfo *info)
int srcskip = info->src_skip; int srcskip = info->src_skip;
Uint8 *dst = info->dst; Uint8 *dst = info->dst;
int dstskip = info->dst_skip; int dstskip = info->dst_skip;
SDL_PixelFormat *srcfmt = info->src_fmt; const SDL_PixelFormatDetails *srcfmt = info->src_fmt;
while (height--) { while (height--) {
int i = 0; int i = 0;
@ -970,8 +970,8 @@ static void Blit8888to8888PixelAlphaSwizzle(SDL_BlitInfo *info)
int srcskip = info->src_skip; int srcskip = info->src_skip;
Uint8 *dst = info->dst; Uint8 *dst = info->dst;
int dstskip = info->dst_skip; int dstskip = info->dst_skip;
SDL_PixelFormat *srcfmt = info->src_fmt; const SDL_PixelFormatDetails *srcfmt = info->src_fmt;
SDL_PixelFormat *dstfmt = info->dst_fmt; const SDL_PixelFormatDetails *dstfmt = info->dst_fmt;
while (height--) { while (height--) {
int i = 0; int i = 0;
@ -1000,8 +1000,8 @@ static void SDL_TARGETING("sse4.1") Blit8888to8888PixelAlphaSwizzleSSE41(SDL_Bli
int srcskip = info->src_skip; int srcskip = info->src_skip;
Uint8 *dst = info->dst; Uint8 *dst = info->dst;
int dstskip = info->dst_skip; int dstskip = info->dst_skip;
SDL_PixelFormat *srcfmt = info->src_fmt; const SDL_PixelFormatDetails *srcfmt = info->src_fmt;
SDL_PixelFormat *dstfmt = info->dst_fmt; const SDL_PixelFormatDetails *dstfmt = info->dst_fmt;
// The byte offsets for the start of each pixel // The byte offsets for the start of each pixel
const __m128i mask_offsets = _mm_set_epi8( const __m128i mask_offsets = _mm_set_epi8(
@ -1092,8 +1092,8 @@ static void SDL_TARGETING("avx2") Blit8888to8888PixelAlphaSwizzleAVX2(SDL_BlitIn
int srcskip = info->src_skip; int srcskip = info->src_skip;
Uint8 *dst = info->dst; Uint8 *dst = info->dst;
int dstskip = info->dst_skip; int dstskip = info->dst_skip;
SDL_PixelFormat *srcfmt = info->src_fmt; const SDL_PixelFormatDetails *srcfmt = info->src_fmt;
SDL_PixelFormat *dstfmt = info->dst_fmt; const SDL_PixelFormatDetails *dstfmt = info->dst_fmt;
// The byte offsets for the start of each pixel // The byte offsets for the start of each pixel
const __m256i mask_offsets = _mm256_set_epi8( const __m256i mask_offsets = _mm256_set_epi8(
@ -1183,8 +1183,8 @@ static void BlitNtoNPixelAlpha(SDL_BlitInfo *info)
int srcskip = info->src_skip; int srcskip = info->src_skip;
Uint8 *dst = info->dst; Uint8 *dst = info->dst;
int dstskip = info->dst_skip; int dstskip = info->dst_skip;
SDL_PixelFormat *srcfmt = info->src_fmt; const SDL_PixelFormatDetails *srcfmt = info->src_fmt;
SDL_PixelFormat *dstfmt = info->dst_fmt; const SDL_PixelFormatDetails *dstfmt = info->dst_fmt;
int srcbpp; int srcbpp;
int dstbpp; int dstbpp;
Uint32 Pixel; Uint32 Pixel;
@ -1216,15 +1216,15 @@ static void BlitNtoNPixelAlpha(SDL_BlitInfo *info)
SDL_BlitFunc SDL_CalculateBlitA(SDL_Surface *surface) SDL_BlitFunc SDL_CalculateBlitA(SDL_Surface *surface)
{ {
SDL_PixelFormat *sf = surface->format; const SDL_PixelFormatDetails *sf = surface->internal->format;
SDL_PixelFormat *df = surface->map->dst->format; const SDL_PixelFormatDetails *df = surface->internal->map.dst->internal->format;
switch (surface->map->info.flags & ~SDL_COPY_RLE_MASK) { switch (surface->internal->map.info.flags & ~SDL_COPY_RLE_MASK) {
case SDL_COPY_BLEND: case SDL_COPY_BLEND:
/* Per-pixel alpha blits */ /* Per-pixel alpha blits */
switch (df->bytes_per_pixel) { switch (df->bytes_per_pixel) {
case 1: case 1:
if (df->palette) { if (surface->internal->map.info.dst_pal) {
return BlitNto1PixelAlpha; return BlitNto1PixelAlpha;
} else { } else {
/* RGB332 has no palette ! */ /* RGB332 has no palette ! */
@ -1273,7 +1273,7 @@ SDL_BlitFunc SDL_CalculateBlitA(SDL_Surface *surface)
/* Per-surface alpha blits */ /* Per-surface alpha blits */
switch (df->bytes_per_pixel) { switch (df->bytes_per_pixel) {
case 1: case 1:
if (df->palette) { if (surface->internal->map.info.dst_pal) {
return BlitNto1SurfaceAlpha; return BlitNto1SurfaceAlpha;
} else { } else {
/* RGB332 has no palette ! */ /* RGB332 has no palette ! */
@ -1281,7 +1281,7 @@ SDL_BlitFunc SDL_CalculateBlitA(SDL_Surface *surface)
} }
case 2: case 2:
if (surface->map->identity) { if (surface->internal->map.identity) {
if (df->Gmask == 0x7e0) { if (df->Gmask == 0x7e0) {
#ifdef SDL_MMX_INTRINSICS #ifdef SDL_MMX_INTRINSICS
if (SDL_HasMMX()) { if (SDL_HasMMX()) {
@ -1328,7 +1328,7 @@ SDL_BlitFunc SDL_CalculateBlitA(SDL_Surface *surface)
if (sf->Amask == 0) { if (sf->Amask == 0) {
if (df->bytes_per_pixel == 1) { if (df->bytes_per_pixel == 1) {
if (df->palette) { if (surface->internal->map.info.dst_pal) {
return BlitNto1SurfaceAlphaKey; return BlitNto1SurfaceAlphaKey;
} else { } else {
/* RGB332 has no palette ! */ /* RGB332 has no palette ! */

View File

@ -117,7 +117,7 @@ static size_t GetL3CacheSize(void)
: vec_add(vec_lvsl(8, src), vec_splat_u8(8))) : vec_add(vec_lvsl(8, src), vec_splat_u8(8)))
/* Calculate the permute vector used for 32->32 swizzling */ /* Calculate the permute vector used for 32->32 swizzling */
static vector unsigned char calc_swizzle32(const SDL_PixelFormat *srcfmt, const SDL_PixelFormat *dstfmt) static vector unsigned char calc_swizzle32(const SDL_PixelFormatDetails *srcfmt, const SDL_PixelFormatDetails *dstfmt)
{ {
/* /*
* We have to assume that the bits that aren't used by other * We have to assume that the bits that aren't used by other
@ -125,8 +125,8 @@ static vector unsigned char calc_swizzle32(const SDL_PixelFormat *srcfmt, const
* leave alpha with a zero mask, but we should still swizzle the bits. * leave alpha with a zero mask, but we should still swizzle the bits.
*/ */
/* ARGB */ /* ARGB */
static const struct SDL_PixelFormat default_pixel_format = { static const SDL_PixelFormatDetails default_pixel_format = {
0, NULL, 0, 0, { 0, 0 }, 0x00FF0000, 0x0000FF00, 0x000000FF, 0xFF000000, 0, 0, 0, 0, 16, 8, 0, 24, 0, NULL SDL_PIXELFORMAT_ARGB8888, 0, 0, { 0, 0 }, 0x00FF0000, 0x0000FF00, 0x000000FF, 0xFF000000, 8, 8, 8, 8, 16, 8, 0, 24
}; };
const vector unsigned char plus = VECUINT8_LITERAL(0x00, 0x00, 0x00, 0x00, const vector unsigned char plus = VECUINT8_LITERAL(0x00, 0x00, 0x00, 0x00,
0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
@ -201,7 +201,7 @@ static void Blit_XRGB8888_RGB565Altivec(SDL_BlitInfo *info)
int srcskip = info->src_skip; int srcskip = info->src_skip;
Uint8 *dst = (Uint8 *)info->dst; Uint8 *dst = (Uint8 *)info->dst;
int dstskip = info->dst_skip; int dstskip = info->dst_skip;
SDL_PixelFormat *srcfmt = info->src_fmt; const SDL_PixelFormatDetails *srcfmt = info->src_fmt;
vector unsigned char valpha = vec_splat_u8(0); vector unsigned char valpha = vec_splat_u8(0);
vector unsigned char vpermute = calc_swizzle32(srcfmt, NULL); vector unsigned char vpermute = calc_swizzle32(srcfmt, NULL);
vector unsigned char vgmerge = VECUINT8_LITERAL(0x00, 0x02, 0x00, 0x06, vector unsigned char vgmerge = VECUINT8_LITERAL(0x00, 0x02, 0x00, 0x06,
@ -302,8 +302,8 @@ static void Blit_RGB565_32Altivec(SDL_BlitInfo *info)
int srcskip = info->src_skip; int srcskip = info->src_skip;
Uint8 *dst = (Uint8 *)info->dst; Uint8 *dst = (Uint8 *)info->dst;
int dstskip = info->dst_skip; int dstskip = info->dst_skip;
SDL_PixelFormat *srcfmt = info->src_fmt; const SDL_PixelFormatDetails *srcfmt = info->src_fmt;
SDL_PixelFormat *dstfmt = info->dst_fmt; const SDL_PixelFormatDetails *dstfmt = info->dst_fmt;
unsigned alpha; unsigned alpha;
vector unsigned char valpha; vector unsigned char valpha;
vector unsigned char vpermute; vector unsigned char vpermute;
@ -440,8 +440,8 @@ static void Blit_RGB555_32Altivec(SDL_BlitInfo *info)
int srcskip = info->src_skip; int srcskip = info->src_skip;
Uint8 *dst = (Uint8 *)info->dst; Uint8 *dst = (Uint8 *)info->dst;
int dstskip = info->dst_skip; int dstskip = info->dst_skip;
SDL_PixelFormat *srcfmt = info->src_fmt; const SDL_PixelFormatDetails *srcfmt = info->src_fmt;
SDL_PixelFormat *dstfmt = info->dst_fmt; const SDL_PixelFormatDetails *dstfmt = info->dst_fmt;
unsigned alpha; unsigned alpha;
vector unsigned char valpha; vector unsigned char valpha;
vector unsigned char vpermute; vector unsigned char vpermute;
@ -580,9 +580,9 @@ static void Blit32to32KeyAltivec(SDL_BlitInfo *info)
int srcskip = info->src_skip / 4; int srcskip = info->src_skip / 4;
Uint32 *dstp = (Uint32 *)info->dst; Uint32 *dstp = (Uint32 *)info->dst;
int dstskip = info->dst_skip / 4; int dstskip = info->dst_skip / 4;
SDL_PixelFormat *srcfmt = info->src_fmt; const SDL_PixelFormatDetails *srcfmt = info->src_fmt;
int srcbpp = srcfmt->bytes_per_pixel; int srcbpp = srcfmt->bytes_per_pixel;
SDL_PixelFormat *dstfmt = info->dst_fmt; const SDL_PixelFormatDetails *dstfmt = info->dst_fmt;
int dstbpp = dstfmt->bytes_per_pixel; int dstbpp = dstfmt->bytes_per_pixel;
int copy_alpha = (srcfmt->Amask && dstfmt->Amask); int copy_alpha = (srcfmt->Amask && dstfmt->Amask);
unsigned alpha = dstfmt->Amask ? info->a : 0; unsigned alpha = dstfmt->Amask ? info->a : 0;
@ -702,8 +702,8 @@ static void ConvertAltivec32to32_noprefetch(SDL_BlitInfo *info)
int srcskip = info->src_skip / 4; int srcskip = info->src_skip / 4;
Uint32 *dst = (Uint32 *)info->dst; Uint32 *dst = (Uint32 *)info->dst;
int dstskip = info->dst_skip / 4; int dstskip = info->dst_skip / 4;
SDL_PixelFormat *srcfmt = info->src_fmt; const SDL_PixelFormatDetails *srcfmt = info->src_fmt;
SDL_PixelFormat *dstfmt = info->dst_fmt; const SDL_PixelFormatDetails *dstfmt = info->dst_fmt;
vector unsigned int vzero = vec_splat_u32(0); vector unsigned int vzero = vec_splat_u32(0);
vector unsigned char vpermute = calc_swizzle32(srcfmt, dstfmt); vector unsigned char vpermute = calc_swizzle32(srcfmt, dstfmt);
if (dstfmt->Amask && !srcfmt->Amask) { if (dstfmt->Amask && !srcfmt->Amask) {
@ -788,8 +788,8 @@ static void ConvertAltivec32to32_prefetch(SDL_BlitInfo *info)
int srcskip = info->src_skip / 4; int srcskip = info->src_skip / 4;
Uint32 *dst = (Uint32 *)info->dst; Uint32 *dst = (Uint32 *)info->dst;
int dstskip = info->dst_skip / 4; int dstskip = info->dst_skip / 4;
SDL_PixelFormat *srcfmt = info->src_fmt; const SDL_PixelFormatDetails *srcfmt = info->src_fmt;
SDL_PixelFormat *dstfmt = info->dst_fmt; const SDL_PixelFormatDetails *dstfmt = info->dst_fmt;
vector unsigned int vzero = vec_splat_u32(0); vector unsigned int vzero = vec_splat_u32(0);
vector unsigned char vpermute = calc_swizzle32(srcfmt, dstfmt); vector unsigned char vpermute = calc_swizzle32(srcfmt, dstfmt);
if (dstfmt->Amask && !srcfmt->Amask) { if (dstfmt->Amask && !srcfmt->Amask) {
@ -2064,9 +2064,9 @@ static void Blit_RGB555_ARGB1555(SDL_BlitInfo *info)
int srcskip = info->src_skip; int srcskip = info->src_skip;
Uint16 *dst = (Uint16 *)info->dst; Uint16 *dst = (Uint16 *)info->dst;
int dstskip = info->dst_skip; int dstskip = info->dst_skip;
SDL_PixelFormat *dstfmt = info->dst_fmt; const SDL_PixelFormatDetails *dstfmt = info->dst_fmt;
Uint16 mask = ((Uint32)info->a >> dstfmt->Aloss) << dstfmt->Ashift; Uint16 mask = ((Uint32)info->a >> (8 - dstfmt->Abits)) << dstfmt->Ashift;
while (height--) { while (height--) {
/* *INDENT-OFF* */ /* clang-format off */ /* *INDENT-OFF* */ /* clang-format off */
@ -2096,7 +2096,7 @@ static void BlitNto1(SDL_BlitInfo *info)
int srcbpp; int srcbpp;
Uint32 Pixel; Uint32 Pixel;
int sR, sG, sB; int sR, sG, sB;
SDL_PixelFormat *srcfmt; const SDL_PixelFormatDetails *srcfmt;
/* Set up some basic variables */ /* Set up some basic variables */
width = info->dst_w; width = info->dst_w;
@ -2183,12 +2183,12 @@ static void Blit4to4MaskAlpha(SDL_BlitInfo *info)
int srcskip = info->src_skip; int srcskip = info->src_skip;
Uint32 *dst = (Uint32 *)info->dst; Uint32 *dst = (Uint32 *)info->dst;
int dstskip = info->dst_skip; int dstskip = info->dst_skip;
SDL_PixelFormat *srcfmt = info->src_fmt; const SDL_PixelFormatDetails *srcfmt = info->src_fmt;
SDL_PixelFormat *dstfmt = info->dst_fmt; const SDL_PixelFormatDetails *dstfmt = info->dst_fmt;
if (dstfmt->Amask) { if (dstfmt->Amask) {
/* RGB->RGBA, SET_ALPHA */ /* RGB->RGBA, SET_ALPHA */
Uint32 mask = ((Uint32)info->a >> dstfmt->Aloss) << dstfmt->Ashift; Uint32 mask = ((Uint32)info->a >> (8 - dstfmt->Abits)) << dstfmt->Ashift;
while (height--) { while (height--) {
/* *INDENT-OFF* */ /* clang-format off */ /* *INDENT-OFF* */ /* clang-format off */
@ -2224,7 +2224,7 @@ static void Blit4to4MaskAlpha(SDL_BlitInfo *info)
} }
/* permutation for mapping srcfmt to dstfmt, overloading or not the alpha channel */ /* permutation for mapping srcfmt to dstfmt, overloading or not the alpha channel */
static void get_permutation(SDL_PixelFormat *srcfmt, SDL_PixelFormat *dstfmt, static void get_permutation(const SDL_PixelFormatDetails *srcfmt, const SDL_PixelFormatDetails *dstfmt,
int *_p0, int *_p1, int *_p2, int *_p3, int *_alpha_channel) int *_p0, int *_p1, int *_p2, int *_p3, int *_alpha_channel)
{ {
int alpha_channel = 0, p0, p1, p2, p3; int alpha_channel = 0, p0, p1, p2, p3;
@ -2318,9 +2318,9 @@ static void BlitNtoN(SDL_BlitInfo *info)
int srcskip = info->src_skip; int srcskip = info->src_skip;
Uint8 *dst = info->dst; Uint8 *dst = info->dst;
int dstskip = info->dst_skip; int dstskip = info->dst_skip;
SDL_PixelFormat *srcfmt = info->src_fmt; const SDL_PixelFormatDetails *srcfmt = info->src_fmt;
int srcbpp = srcfmt->bytes_per_pixel; int srcbpp = srcfmt->bytes_per_pixel;
SDL_PixelFormat *dstfmt = info->dst_fmt; const SDL_PixelFormatDetails *dstfmt = info->dst_fmt;
int dstbpp = dstfmt->bytes_per_pixel; int dstbpp = dstfmt->bytes_per_pixel;
unsigned alpha = dstfmt->Amask ? info->a : 0; unsigned alpha = dstfmt->Amask ? info->a : 0;
@ -2436,9 +2436,9 @@ static void BlitNtoNCopyAlpha(SDL_BlitInfo *info)
int srcskip = info->src_skip; int srcskip = info->src_skip;
Uint8 *dst = info->dst; Uint8 *dst = info->dst;
int dstskip = info->dst_skip; int dstskip = info->dst_skip;
SDL_PixelFormat *srcfmt = info->src_fmt; const SDL_PixelFormatDetails *srcfmt = info->src_fmt;
int srcbpp = srcfmt->bytes_per_pixel; int srcbpp = srcfmt->bytes_per_pixel;
SDL_PixelFormat *dstfmt = info->dst_fmt; const SDL_PixelFormatDetails *dstfmt = info->dst_fmt;
int dstbpp = dstfmt->bytes_per_pixel; int dstbpp = dstfmt->bytes_per_pixel;
int c; int c;
@ -2493,7 +2493,7 @@ static void BlitNto1Key(SDL_BlitInfo *info)
int srcskip = info->src_skip; int srcskip = info->src_skip;
Uint8 *dst = info->dst; Uint8 *dst = info->dst;
int dstskip = info->dst_skip; int dstskip = info->dst_skip;
SDL_PixelFormat *srcfmt = info->src_fmt; const SDL_PixelFormatDetails *srcfmt = info->src_fmt;
const Uint8 *palmap = info->table; const Uint8 *palmap = info->table;
Uint32 ckey = info->colorkey; Uint32 ckey = info->colorkey;
Uint32 rgbmask = ~srcfmt->Amask; Uint32 rgbmask = ~srcfmt->Amask;
@ -2592,8 +2592,8 @@ static void BlitNtoNKey(SDL_BlitInfo *info)
Uint8 *dst = info->dst; Uint8 *dst = info->dst;
int dstskip = info->dst_skip; int dstskip = info->dst_skip;
Uint32 ckey = info->colorkey; Uint32 ckey = info->colorkey;
SDL_PixelFormat *srcfmt = info->src_fmt; const SDL_PixelFormatDetails *srcfmt = info->src_fmt;
SDL_PixelFormat *dstfmt = info->dst_fmt; const SDL_PixelFormatDetails *dstfmt = info->dst_fmt;
int srcbpp = srcfmt->bytes_per_pixel; int srcbpp = srcfmt->bytes_per_pixel;
int dstbpp = dstfmt->bytes_per_pixel; int dstbpp = dstfmt->bytes_per_pixel;
unsigned alpha = dstfmt->Amask ? info->a : 0; unsigned alpha = dstfmt->Amask ? info->a : 0;
@ -2863,8 +2863,8 @@ static void BlitNtoNKeyCopyAlpha(SDL_BlitInfo *info)
Uint8 *dst = info->dst; Uint8 *dst = info->dst;
int dstskip = info->dst_skip; int dstskip = info->dst_skip;
Uint32 ckey = info->colorkey; Uint32 ckey = info->colorkey;
SDL_PixelFormat *srcfmt = info->src_fmt; const SDL_PixelFormatDetails *srcfmt = info->src_fmt;
SDL_PixelFormat *dstfmt = info->dst_fmt; const SDL_PixelFormatDetails *dstfmt = info->dst_fmt;
Uint32 rgbmask = ~srcfmt->Amask; Uint32 rgbmask = ~srcfmt->Amask;
Uint8 srcbpp; Uint8 srcbpp;
@ -2965,7 +2965,7 @@ static void Blit2101010toN(SDL_BlitInfo *info)
int srcskip = info->src_skip; int srcskip = info->src_skip;
Uint8 *dst = info->dst; Uint8 *dst = info->dst;
int dstskip = info->dst_skip; int dstskip = info->dst_skip;
SDL_PixelFormat *dstfmt = info->dst_fmt; const SDL_PixelFormatDetails *dstfmt = info->dst_fmt;
int dstbpp = dstfmt->bytes_per_pixel; int dstbpp = dstfmt->bytes_per_pixel;
Uint32 Pixel; Uint32 Pixel;
unsigned sR, sG, sB, sA; unsigned sR, sG, sB, sA;
@ -2996,7 +2996,7 @@ static void BlitNto2101010(SDL_BlitInfo *info)
int srcskip = info->src_skip; int srcskip = info->src_skip;
Uint8 *dst = info->dst; Uint8 *dst = info->dst;
int dstskip = info->dst_skip; int dstskip = info->dst_skip;
SDL_PixelFormat *srcfmt = info->src_fmt; const SDL_PixelFormatDetails *srcfmt = info->src_fmt;
int srcbpp = srcfmt->bytes_per_pixel; int srcbpp = srcfmt->bytes_per_pixel;
Uint32 Pixel; Uint32 Pixel;
unsigned sR, sG, sB, sA; unsigned sR, sG, sB, sA;
@ -3027,9 +3027,9 @@ static void Blit_3or4_to_3or4__same_rgb(SDL_BlitInfo *info)
int srcskip = info->src_skip; int srcskip = info->src_skip;
Uint8 *dst = info->dst; Uint8 *dst = info->dst;
int dstskip = info->dst_skip; int dstskip = info->dst_skip;
SDL_PixelFormat *srcfmt = info->src_fmt; const SDL_PixelFormatDetails *srcfmt = info->src_fmt;
int srcbpp = srcfmt->bytes_per_pixel; int srcbpp = srcfmt->bytes_per_pixel;
SDL_PixelFormat *dstfmt = info->dst_fmt; const SDL_PixelFormatDetails *dstfmt = info->dst_fmt;
int dstbpp = dstfmt->bytes_per_pixel; int dstbpp = dstfmt->bytes_per_pixel;
if (dstfmt->Amask) { if (dstfmt->Amask) {
@ -3100,9 +3100,9 @@ static void Blit_3or4_to_3or4__inversed_rgb(SDL_BlitInfo *info)
int srcskip = info->src_skip; int srcskip = info->src_skip;
Uint8 *dst = info->dst; Uint8 *dst = info->dst;
int dstskip = info->dst_skip; int dstskip = info->dst_skip;
SDL_PixelFormat *srcfmt = info->src_fmt; const SDL_PixelFormatDetails *srcfmt = info->src_fmt;
int srcbpp = srcfmt->bytes_per_pixel; int srcbpp = srcfmt->bytes_per_pixel;
SDL_PixelFormat *dstfmt = info->dst_fmt; const SDL_PixelFormatDetails *dstfmt = info->dst_fmt;
int dstbpp = dstfmt->bytes_per_pixel; int dstbpp = dstfmt->bytes_per_pixel;
if (dstfmt->Amask) { if (dstfmt->Amask) {
@ -3336,22 +3336,22 @@ static const struct blit_table *const normal_blit[] = {
SDL_BlitFunc SDL_CalculateBlitN(SDL_Surface *surface) SDL_BlitFunc SDL_CalculateBlitN(SDL_Surface *surface)
{ {
SDL_PixelFormat *srcfmt; const SDL_PixelFormatDetails *srcfmt;
SDL_PixelFormat *dstfmt; const SDL_PixelFormatDetails *dstfmt;
const struct blit_table *table; const struct blit_table *table;
int which; int which;
SDL_BlitFunc blitfun; SDL_BlitFunc blitfun;
/* Set up data for choosing the blit */ /* Set up data for choosing the blit */
srcfmt = surface->format; srcfmt = surface->internal->format;
dstfmt = surface->map->dst->format; dstfmt = surface->internal->map.dst->internal->format;
/* We don't support destinations less than 8-bits */ /* We don't support destinations less than 8-bits */
if (dstfmt->bits_per_pixel < 8) { if (dstfmt->bits_per_pixel < 8) {
return NULL; return NULL;
} }
switch (surface->map->info.flags & ~SDL_COPY_RLE_MASK) { switch (surface->internal->map.info.flags & ~SDL_COPY_RLE_MASK) {
case 0: case 0:
blitfun = NULL; blitfun = NULL;
if (dstfmt->bits_per_pixel == 8) { if (dstfmt->bits_per_pixel == 8) {
@ -3427,7 +3427,7 @@ SDL_BlitFunc SDL_CalculateBlitN(SDL_Surface *surface)
because RLE is the preferred fast way to deal with this. because RLE is the preferred fast way to deal with this.
If a particular case turns out to be useful we'll add it. */ If a particular case turns out to be useful we'll add it. */
if (srcfmt->bytes_per_pixel == 2 && surface->map->identity != 0) { if (srcfmt->bytes_per_pixel == 2 && surface->internal->map.identity != 0) {
return Blit2to2Key; return Blit2to2Key;
} else if (dstfmt->bytes_per_pixel == 1) { } else if (dstfmt->bytes_per_pixel == 1) {
return BlitNto1Key; return BlitNto1Key;

View File

@ -32,13 +32,13 @@ typedef enum
SlowBlitPixelAccess_Large, SlowBlitPixelAccess_Large,
} SlowBlitPixelAccess; } SlowBlitPixelAccess;
static SlowBlitPixelAccess GetPixelAccessMethod(SDL_PixelFormat *pf) static SlowBlitPixelAccess GetPixelAccessMethod(SDL_PixelFormat format)
{ {
if (pf->bytes_per_pixel > 4) { if (SDL_BYTESPERPIXEL(format) > 4) {
return SlowBlitPixelAccess_Large; return SlowBlitPixelAccess_Large;
} else if (SDL_ISPIXELFORMAT_10BIT(pf->format)) { } else if (SDL_ISPIXELFORMAT_10BIT(format)) {
return SlowBlitPixelAccess_10Bit; return SlowBlitPixelAccess_10Bit;
} else if (pf->Amask) { } else if (SDL_ISPIXELFORMAT_ALPHA(format)) {
return SlowBlitPixelAccess_RGBA; return SlowBlitPixelAccess_RGBA;
} else { } else {
return SlowBlitPixelAccess_RGB; return SlowBlitPixelAccess_RGB;
@ -62,8 +62,8 @@ void SDL_Blit_Slow(SDL_BlitInfo *info)
Uint64 srcy, srcx; Uint64 srcy, srcx;
Uint64 posy, posx; Uint64 posy, posx;
Uint64 incy, incx; Uint64 incy, incx;
SDL_PixelFormat *src_fmt = info->src_fmt; const SDL_PixelFormatDetails *src_fmt = info->src_fmt;
SDL_PixelFormat *dst_fmt = info->dst_fmt; const SDL_PixelFormatDetails *dst_fmt = info->dst_fmt;
int srcbpp = src_fmt->bytes_per_pixel; int srcbpp = src_fmt->bytes_per_pixel;
int dstbpp = dst_fmt->bytes_per_pixel; int dstbpp = dst_fmt->bytes_per_pixel;
SlowBlitPixelAccess src_access; SlowBlitPixelAccess src_access;
@ -71,8 +71,8 @@ void SDL_Blit_Slow(SDL_BlitInfo *info)
Uint32 rgbmask = ~src_fmt->Amask; Uint32 rgbmask = ~src_fmt->Amask;
Uint32 ckey = info->colorkey & rgbmask; Uint32 ckey = info->colorkey & rgbmask;
src_access = GetPixelAccessMethod(src_fmt); src_access = GetPixelAccessMethod(src_fmt->format);
dst_access = GetPixelAccessMethod(dst_fmt); dst_access = GetPixelAccessMethod(dst_fmt->format);
incy = ((Uint64)info->src_h << 16) / info->dst_h; incy = ((Uint64)info->src_h << 16) / info->dst_h;
incx = ((Uint64)info->src_w << 16) / info->dst_w; incx = ((Uint64)info->src_w << 16) / info->dst_w;
@ -370,7 +370,7 @@ static Uint16 float_to_half(float a)
return ir; return ir;
} }
static void ReadFloatPixel(Uint8 *pixels, SlowBlitPixelAccess access, SDL_PixelFormat *fmt, SDL_Colorspace colorspace, float SDR_white_point, static void ReadFloatPixel(Uint8 *pixels, SlowBlitPixelAccess access, const SDL_PixelFormatDetails *fmt, SDL_Colorspace colorspace, float SDR_white_point,
float *outR, float *outG, float *outB, float *outA) float *outR, float *outG, float *outB, float *outA)
{ {
Uint32 pixel; Uint32 pixel;
@ -525,7 +525,7 @@ static void ReadFloatPixel(Uint8 *pixels, SlowBlitPixelAccess access, SDL_PixelF
*outA = fA; *outA = fA;
} }
static void WriteFloatPixel(Uint8 *pixels, SlowBlitPixelAccess access, SDL_PixelFormat *fmt, SDL_Colorspace colorspace, float SDR_white_point, static void WriteFloatPixel(Uint8 *pixels, SlowBlitPixelAccess access, const SDL_PixelFormatDetails *fmt, SDL_Colorspace colorspace, float SDR_white_point,
float fR, float fG, float fB, float fA) float fR, float fG, float fB, float fA)
{ {
Uint32 R, G, B, A; Uint32 R, G, B, A;
@ -755,8 +755,8 @@ void SDL_Blit_Slow_Float(SDL_BlitInfo *info)
Uint64 srcy, srcx; Uint64 srcy, srcx;
Uint64 posy, posx; Uint64 posy, posx;
Uint64 incy, incx; Uint64 incy, incx;
SDL_PixelFormat *src_fmt = info->src_fmt; const SDL_PixelFormatDetails *src_fmt = info->src_fmt;
SDL_PixelFormat *dst_fmt = info->dst_fmt; const SDL_PixelFormatDetails *dst_fmt = info->dst_fmt;
int srcbpp = src_fmt->bytes_per_pixel; int srcbpp = src_fmt->bytes_per_pixel;
int dstbpp = dst_fmt->bytes_per_pixel; int dstbpp = dst_fmt->bytes_per_pixel;
SlowBlitPixelAccess src_access; SlowBlitPixelAccess src_access;
@ -772,8 +772,10 @@ void SDL_Blit_Slow_Float(SDL_BlitInfo *info)
float src_headroom; float src_headroom;
SDL_TonemapContext tonemap; SDL_TonemapContext tonemap;
if (SDL_GetSurfaceColorspace(info->src_surface, &src_colorspace) < 0 || src_colorspace = SDL_GetSurfaceColorspace(info->src_surface);
SDL_GetSurfaceColorspace(info->dst_surface, &dst_colorspace) < 0) { dst_colorspace = SDL_GetSurfaceColorspace(info->dst_surface);
if (src_colorspace == SDL_COLORSPACE_UNKNOWN ||
dst_colorspace == SDL_COLORSPACE_UNKNOWN) {
return; return;
} }
src_primaries = SDL_COLORSPACEPRIMARIES(src_colorspace); src_primaries = SDL_COLORSPACEPRIMARIES(src_colorspace);
@ -821,8 +823,8 @@ void SDL_Blit_Slow_Float(SDL_BlitInfo *info)
color_primaries_matrix = SDL_GetColorPrimariesConversionMatrix(src_primaries, dst_primaries); color_primaries_matrix = SDL_GetColorPrimariesConversionMatrix(src_primaries, dst_primaries);
} }
src_access = GetPixelAccessMethod(src_fmt); src_access = GetPixelAccessMethod(src_fmt->format);
dst_access = GetPixelAccessMethod(dst_fmt); dst_access = GetPixelAccessMethod(dst_fmt->format);
incy = ((Uint64)info->src_h << 16) / info->dst_h; incy = ((Uint64)info->src_h << 16) / info->dst_h;
incx = ((Uint64)info->src_w << 16) / info->dst_w; incx = ((Uint64)info->src_w << 16) / info->dst_w;

View File

@ -427,10 +427,10 @@ SDL_Surface *SDL_LoadBMP_IO(SDL_IOStream *src, SDL_bool closeio)
/* Create a compatible surface, note that the colors are RGB ordered */ /* Create a compatible surface, note that the colors are RGB ordered */
{ {
SDL_PixelFormatEnum format; SDL_PixelFormat format;
/* Get the pixel format */ /* Get the pixel format */
format = SDL_GetPixelFormatEnumForMasks(biBitCount, Rmask, Gmask, Bmask, Amask); format = SDL_GetPixelFormatForMasks(biBitCount, Rmask, Gmask, Bmask, Amask);
surface = SDL_CreateSurface(biWidth, biHeight, format); surface = SDL_CreateSurface(biWidth, biHeight, format);
if (!surface) { if (!surface) {
@ -439,7 +439,7 @@ SDL_Surface *SDL_LoadBMP_IO(SDL_IOStream *src, SDL_bool closeio)
} }
/* Load the palette, if any */ /* Load the palette, if any */
palette = (surface->format)->palette; palette = SDL_GetSurfacePalette(surface);
if (palette) { if (palette) {
if (SDL_SeekIO(src, fp_offset + 14 + biSize, SDL_IO_SEEK_SET) < 0) { if (SDL_SeekIO(src, fp_offset + 14 + biSize, SDL_IO_SEEK_SET) < 0) {
SDL_SetError("Error seeking in datastream"); SDL_SetError("Error seeking in datastream");
@ -632,42 +632,42 @@ int SDL_SaveBMP_IO(SDL_Surface *surface, SDL_IOStream *dst, SDL_bool closeio)
/* Make sure we have somewhere to save */ /* Make sure we have somewhere to save */
intermediate_surface = NULL; intermediate_surface = NULL;
if (dst) { if (dst) {
if (!surface) { if (!SDL_SurfaceValid(surface)) {
SDL_InvalidParamError("surface"); SDL_InvalidParamError("surface");
goto done; goto done;
} }
#ifdef SAVE_32BIT_BMP #ifdef SAVE_32BIT_BMP
/* We can save alpha information in a 32-bit BMP */ /* We can save alpha information in a 32-bit BMP */
if (surface->format->bits_per_pixel >= 8 && if (SDL_BITSPERPIXEL(surface->format) >= 8 &&
(surface->format->Amask != 0 || (SDL_ISPIXELFORMAT_ALPHA(surface->format) ||
surface->map->info.flags & SDL_COPY_COLORKEY)) { surface->internal->map.info.flags & SDL_COPY_COLORKEY)) {
save32bit = SDL_TRUE; save32bit = SDL_TRUE;
} }
#endif /* SAVE_32BIT_BMP */ #endif /* SAVE_32BIT_BMP */
if (surface->format->palette && !save32bit) { if (surface->internal->palette && !save32bit) {
if (surface->format->bits_per_pixel == 8) { if (SDL_BITSPERPIXEL(surface->format) == 8) {
intermediate_surface = surface; intermediate_surface = surface;
} else { } else {
SDL_SetError("%u bpp BMP files not supported", SDL_SetError("%u bpp BMP files not supported",
surface->format->bits_per_pixel); SDL_BITSPERPIXEL(surface->format));
goto done; goto done;
} }
} else if ((surface->format->bits_per_pixel == 24) && !save32bit && } else if ((SDL_BITSPERPIXEL(surface->format) == 24) && !save32bit &&
#if SDL_BYTEORDER == SDL_LIL_ENDIAN #if SDL_BYTEORDER == SDL_LIL_ENDIAN
(surface->format->Rmask == 0x00FF0000) && (surface->internal->format->Rmask == 0x00FF0000) &&
(surface->format->Gmask == 0x0000FF00) && (surface->internal->format->Gmask == 0x0000FF00) &&
(surface->format->Bmask == 0x000000FF) (surface->internal->format->Bmask == 0x000000FF)
#else #else
(surface->format->Rmask == 0x000000FF) && (surface->internal->format->Rmask == 0x000000FF) &&
(surface->format->Gmask == 0x0000FF00) && (surface->internal->format->Gmask == 0x0000FF00) &&
(surface->format->Bmask == 0x00FF0000) (surface->internal->format->Bmask == 0x00FF0000)
#endif #endif
) { ) {
intermediate_surface = surface; intermediate_surface = surface;
} else { } else {
SDL_PixelFormatEnum pixel_format; SDL_PixelFormat pixel_format;
/* If the surface has a colorkey or alpha channel we'll save a /* If the surface has a colorkey or alpha channel we'll save a
32-bit BMP with alpha channel, otherwise save a 24-bit BMP. */ 32-bit BMP with alpha channel, otherwise save a 24-bit BMP. */
@ -676,7 +676,7 @@ int SDL_SaveBMP_IO(SDL_Surface *surface, SDL_IOStream *dst, SDL_bool closeio)
} else { } else {
pixel_format = SDL_PIXELFORMAT_BGR24; pixel_format = SDL_PIXELFORMAT_BGR24;
} }
intermediate_surface = SDL_ConvertSurfaceFormat(surface, pixel_format); intermediate_surface = SDL_ConvertSurface(surface, pixel_format);
if (!intermediate_surface) { if (!intermediate_surface) {
SDL_SetError("Couldn't convert image to %d bpp", SDL_SetError("Couldn't convert image to %d bpp",
(int)SDL_BITSPERPIXEL(pixel_format)); (int)SDL_BITSPERPIXEL(pixel_format));
@ -694,7 +694,7 @@ int SDL_SaveBMP_IO(SDL_Surface *surface, SDL_IOStream *dst, SDL_bool closeio)
} }
if (SDL_LockSurface(intermediate_surface) == 0) { if (SDL_LockSurface(intermediate_surface) == 0) {
const size_t bw = intermediate_surface->w * intermediate_surface->format->bytes_per_pixel; const size_t bw = intermediate_surface->w * intermediate_surface->internal->format->bytes_per_pixel;
/* Set the BMP file header values */ /* Set the BMP file header values */
bfSize = 0; /* We'll write this when we're done */ bfSize = 0; /* We'll write this when we're done */
@ -720,13 +720,13 @@ int SDL_SaveBMP_IO(SDL_Surface *surface, SDL_IOStream *dst, SDL_bool closeio)
biWidth = intermediate_surface->w; biWidth = intermediate_surface->w;
biHeight = intermediate_surface->h; biHeight = intermediate_surface->h;
biPlanes = 1; biPlanes = 1;
biBitCount = intermediate_surface->format->bits_per_pixel; biBitCount = intermediate_surface->internal->format->bits_per_pixel;
biCompression = BI_RGB; biCompression = BI_RGB;
biSizeImage = intermediate_surface->h * intermediate_surface->pitch; biSizeImage = intermediate_surface->h * intermediate_surface->pitch;
biXPelsPerMeter = 0; biXPelsPerMeter = 0;
biYPelsPerMeter = 0; biYPelsPerMeter = 0;
if (intermediate_surface->format->palette) { if (intermediate_surface->internal->palette) {
biClrUsed = intermediate_surface->format->palette->ncolors; biClrUsed = intermediate_surface->internal->palette->ncolors;
} else { } else {
biClrUsed = 0; biClrUsed = 0;
} }
@ -784,12 +784,12 @@ int SDL_SaveBMP_IO(SDL_Surface *surface, SDL_IOStream *dst, SDL_bool closeio)
} }
/* Write the palette (in BGR color order) */ /* Write the palette (in BGR color order) */
if (intermediate_surface->format->palette) { if (intermediate_surface->internal->palette) {
SDL_Color *colors; SDL_Color *colors;
int ncolors; int ncolors;
colors = intermediate_surface->format->palette->colors; colors = intermediate_surface->internal->palette->colors;
ncolors = intermediate_surface->format->palette->ncolors; ncolors = intermediate_surface->internal->palette->ncolors;
for (i = 0; i < ncolors; ++i) { for (i = 0; i < ncolors; ++i) {
if (!SDL_WriteU8(dst, colors[i].b) || if (!SDL_WriteU8(dst, colors[i].b) ||
!SDL_WriteU8(dst, colors[i].g) || !SDL_WriteU8(dst, colors[i].g) ||

View File

@ -231,13 +231,13 @@ static void SDL_FillSurfaceRect4(Uint8 *pixels, int pitch, Uint32 color, int w,
*/ */
int SDL_FillSurfaceRect(SDL_Surface *dst, const SDL_Rect *rect, Uint32 color) int SDL_FillSurfaceRect(SDL_Surface *dst, const SDL_Rect *rect, Uint32 color)
{ {
if (!dst) { if (!SDL_SurfaceValid(dst)) {
return SDL_InvalidParamError("SDL_FillSurfaceRect(): dst"); return SDL_InvalidParamError("SDL_FillSurfaceRect(): dst");
} }
/* If 'rect' == NULL, then fill the whole surface */ /* If 'rect' == NULL, then fill the whole surface */
if (!rect) { if (!rect) {
rect = &dst->clip_rect; rect = &dst->internal->clip_rect;
/* Don't attempt to fill if the surface's clip_rect is empty */ /* Don't attempt to fill if the surface's clip_rect is empty */
if (SDL_RectEmpty(rect)) { if (SDL_RectEmpty(rect)) {
return 0; return 0;
@ -256,7 +256,7 @@ int SDL_FillSurfaceRects(SDL_Surface *dst, const SDL_Rect *rects, int count,
void (*fill_function)(Uint8 * pixels, int pitch, Uint32 color, int w, int h) = NULL; void (*fill_function)(Uint8 * pixels, int pitch, Uint32 color, int w, int h) = NULL;
int i; int i;
if (!dst) { if (!SDL_SurfaceValid(dst)) {
return SDL_InvalidParamError("SDL_FillSurfaceRects(): dst"); return SDL_InvalidParamError("SDL_FillSurfaceRects(): dst");
} }
@ -277,11 +277,11 @@ int SDL_FillSurfaceRects(SDL_Surface *dst, const SDL_Rect *rects, int count,
/* This function doesn't usually work on surfaces < 8 bpp /* This function doesn't usually work on surfaces < 8 bpp
* Except: support for 4bits, when filling full size. * Except: support for 4bits, when filling full size.
*/ */
if (dst->format->bits_per_pixel < 8) { if (SDL_BITSPERPIXEL(dst->format) < 8) {
if (count == 1) { if (count == 1) {
const SDL_Rect *r = &rects[0]; const SDL_Rect *r = &rects[0];
if (r->x == 0 && r->y == 0 && r->w == dst->w && r->h == dst->h) { if (r->x == 0 && r->y == 0 && r->w == dst->w && r->h == dst->h) {
if (dst->format->bits_per_pixel == 4) { if (SDL_BITSPERPIXEL(dst->format) == 4) {
Uint8 b = (((Uint8)color << 4) | (Uint8)color); Uint8 b = (((Uint8)color << 4) | (Uint8)color);
SDL_memset(dst->pixels, b, (size_t)dst->h * dst->pitch); SDL_memset(dst->pixels, b, (size_t)dst->h * dst->pitch);
return 1; return 1;
@ -292,7 +292,7 @@ int SDL_FillSurfaceRects(SDL_Surface *dst, const SDL_Rect *rects, int count,
} }
if (fill_function == NULL) { if (fill_function == NULL) {
switch (dst->format->bytes_per_pixel) { switch (SDL_BYTESPERPIXEL(dst->format)) {
case 1: case 1:
{ {
color |= (color << 8); color |= (color << 8);
@ -347,13 +347,13 @@ int SDL_FillSurfaceRects(SDL_Surface *dst, const SDL_Rect *rects, int count,
for (i = 0; i < count; ++i) { for (i = 0; i < count; ++i) {
rect = &rects[i]; rect = &rects[i];
/* Perform clipping */ /* Perform clipping */
if (!SDL_GetRectIntersection(rect, &dst->clip_rect, &clipped)) { if (!SDL_GetRectIntersection(rect, &dst->internal->clip_rect, &clipped)) {
continue; continue;
} }
rect = &clipped; rect = &clipped;
pixels = (Uint8 *)dst->pixels + rect->y * dst->pitch + pixels = (Uint8 *)dst->pixels + rect->y * dst->pitch +
rect->x * dst->format->bytes_per_pixel; rect->x * SDL_BYTESPERPIXEL(dst->format);
fill_function(pixels, dst->pitch, color, rect->w, rect->h); fill_function(pixels, dst->pitch, color, rect->w, rect->h);
} }

View File

@ -26,24 +26,25 @@
#include "SDL_blit.h" #include "SDL_blit.h"
#include "SDL_pixels_c.h" #include "SDL_pixels_c.h"
#include "SDL_RLEaccel_c.h" #include "SDL_RLEaccel_c.h"
#include "../SDL_hashtable.h"
#include "../SDL_list.h" #include "../SDL_list.h"
/* Lookup tables to expand partial bytes to the full 0..255 range */ /* Lookup tables to expand partial bytes to the full 0..255 range */
static const Uint8 lookup_0[] = { static const Uint8 lookup_0[] = {
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255 255
}; };
static const Uint8 lookup_1[] = { static const Uint8 lookup_1[] = {
0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 184, 186, 188, 190, 192, 194, 196, 198, 200, 202, 204, 206, 208, 210, 212, 214, 216, 218, 220, 222, 224, 226, 228, 230, 232, 234, 236, 238, 240, 242, 244, 246, 248, 250, 252, 255 0, 255
}; };
static const Uint8 lookup_2[] = { static const Uint8 lookup_2[] = {
0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 60, 64, 68, 72, 76, 80, 85, 89, 93, 97, 101, 105, 109, 113, 117, 121, 125, 129, 133, 137, 141, 145, 149, 153, 157, 161, 165, 170, 174, 178, 182, 186, 190, 194, 198, 202, 206, 210, 214, 218, 222, 226, 230, 234, 238, 242, 246, 250, 255 0, 85, 170, 255
}; };
static const Uint8 lookup_3[] = { static const Uint8 lookup_3[] = {
0, 8, 16, 24, 32, 41, 49, 57, 65, 74, 82, 90, 98, 106, 115, 123, 131, 139, 148, 156, 164, 172, 180, 189, 197, 205, 213, 222, 230, 238, 246, 255 0, 36, 72, 109, 145, 182, 218, 255
}; };
static const Uint8 lookup_4[] = { static const Uint8 lookup_4[] = {
@ -51,19 +52,19 @@ static const Uint8 lookup_4[] = {
}; };
static const Uint8 lookup_5[] = { static const Uint8 lookup_5[] = {
0, 36, 72, 109, 145, 182, 218, 255 0, 8, 16, 24, 32, 41, 49, 57, 65, 74, 82, 90, 98, 106, 115, 123, 131, 139, 148, 156, 164, 172, 180, 189, 197, 205, 213, 222, 230, 238, 246, 255
}; };
static const Uint8 lookup_6[] = { static const Uint8 lookup_6[] = {
0, 85, 170, 255 0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 60, 64, 68, 72, 76, 80, 85, 89, 93, 97, 101, 105, 109, 113, 117, 121, 125, 129, 133, 137, 141, 145, 149, 153, 157, 161, 165, 170, 174, 178, 182, 186, 190, 194, 198, 202, 206, 210, 214, 218, 222, 226, 230, 234, 238, 242, 246, 250, 255
}; };
static const Uint8 lookup_7[] = { static const Uint8 lookup_7[] = {
0, 255 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 184, 186, 188, 190, 192, 194, 196, 198, 200, 202, 204, 206, 208, 210, 212, 214, 216, 218, 220, 222, 224, 226, 228, 230, 232, 234, 236, 238, 240, 242, 244, 246, 248, 250, 252, 255
}; };
static const Uint8 lookup_8[] = { static const Uint8 lookup_8[] = {
255 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255
}; };
const Uint8 *SDL_expand_byte[9] = { const Uint8 *SDL_expand_byte[9] = {
@ -91,7 +92,7 @@ SDL_COMPILE_TIME_ASSERT(SDL_expand_byte_10_size, SDL_arraysize(SDL_expand_byte_1
#define CASE(X) \ #define CASE(X) \
case X: \ case X: \
return #X; return #X;
const char *SDL_GetPixelFormatName(SDL_PixelFormatEnum format) const char *SDL_GetPixelFormatName(SDL_PixelFormat format)
{ {
switch (format) { switch (format) {
@ -165,8 +166,7 @@ const char *SDL_GetPixelFormatName(SDL_PixelFormatEnum format)
} }
#undef CASE #undef CASE
SDL_bool SDL_GetMasksForPixelFormatEnum(SDL_PixelFormatEnum format, int *bpp, Uint32 *Rmask, int SDL_GetMasksForPixelFormat(SDL_PixelFormat format, int *bpp, Uint32 *Rmask, Uint32 *Gmask, Uint32 *Bmask, Uint32 *Amask)
Uint32 *Gmask, Uint32 *Bmask, Uint32 *Amask)
{ {
Uint32 masks[4]; Uint32 masks[4];
@ -185,12 +185,11 @@ SDL_bool SDL_GetMasksForPixelFormatEnum(SDL_PixelFormatEnum format, int *bpp, Ui
default: default:
*bpp = 0; // oh well. *bpp = 0; // oh well.
} }
return SDL_TRUE; return 0;
} }
#else #else
if (SDL_ISPIXELFORMAT_FOURCC(format)) { if (SDL_ISPIXELFORMAT_FOURCC(format)) {
SDL_SetError("SDL not built with YUV support"); return SDL_SetError("SDL not built with YUV support");
return SDL_FALSE;
} }
#endif #endif
@ -212,7 +211,7 @@ SDL_bool SDL_GetMasksForPixelFormatEnum(SDL_PixelFormatEnum format, int *bpp, Ui
*Gmask = 0x0000FF00; *Gmask = 0x0000FF00;
*Bmask = 0x00FF0000; *Bmask = 0x00FF0000;
#endif #endif
return SDL_TRUE; return 0;
} }
if (format == SDL_PIXELFORMAT_BGR24) { if (format == SDL_PIXELFORMAT_BGR24) {
@ -225,14 +224,14 @@ SDL_bool SDL_GetMasksForPixelFormatEnum(SDL_PixelFormatEnum format, int *bpp, Ui
*Gmask = 0x0000FF00; *Gmask = 0x0000FF00;
*Bmask = 0x000000FF; *Bmask = 0x000000FF;
#endif #endif
return SDL_TRUE; return 0;
} }
if (SDL_PIXELTYPE(format) != SDL_PIXELTYPE_PACKED8 && if (SDL_PIXELTYPE(format) != SDL_PIXELTYPE_PACKED8 &&
SDL_PIXELTYPE(format) != SDL_PIXELTYPE_PACKED16 && SDL_PIXELTYPE(format) != SDL_PIXELTYPE_PACKED16 &&
SDL_PIXELTYPE(format) != SDL_PIXELTYPE_PACKED32) { SDL_PIXELTYPE(format) != SDL_PIXELTYPE_PACKED32) {
/* Not a format that uses masks */ /* Not a format that uses masks */
return SDL_TRUE; return 0;
} }
switch (SDL_PIXELLAYOUT(format)) { switch (SDL_PIXELLAYOUT(format)) {
@ -285,8 +284,7 @@ SDL_bool SDL_GetMasksForPixelFormatEnum(SDL_PixelFormatEnum format, int *bpp, Ui
masks[3] = 0x00000003; masks[3] = 0x00000003;
break; break;
default: default:
SDL_SetError("Unknown pixel format"); return SDL_SetError("Unknown pixel format");
return SDL_FALSE;
} }
switch (SDL_PIXELORDER(format)) { switch (SDL_PIXELORDER(format)) {
@ -335,13 +333,12 @@ SDL_bool SDL_GetMasksForPixelFormatEnum(SDL_PixelFormatEnum format, int *bpp, Ui
*Rmask = masks[3]; *Rmask = masks[3];
break; break;
default: default:
SDL_SetError("Unknown pixel format"); return SDL_SetError("Unknown pixel format");
return SDL_FALSE;
} }
return SDL_TRUE; return 0;
} }
SDL_PixelFormatEnum SDL_GetPixelFormatEnumForMasks(int bpp, Uint32 Rmask, Uint32 Gmask, Uint32 Bmask, Uint32 Amask) SDL_PixelFormat SDL_GetPixelFormatForMasks(int bpp, Uint32 Rmask, Uint32 Gmask, Uint32 Bmask, Uint32 Amask)
{ {
switch (bpp) { switch (bpp) {
case 1: case 1:
@ -579,156 +576,133 @@ SDL_PixelFormatEnum SDL_GetPixelFormatEnumForMasks(int bpp, Uint32 Rmask, Uint32
return SDL_PIXELFORMAT_UNKNOWN; return SDL_PIXELFORMAT_UNKNOWN;
} }
static SDL_PixelFormat *formats; static SDL_HashTable *SDL_format_details;
static SDL_SpinLock formats_lock = 0; static SDL_Mutex *SDL_format_details_lock;
SDL_PixelFormat *SDL_CreatePixelFormat(SDL_PixelFormatEnum pixel_format) static int SDL_InitPixelFormatDetails(SDL_PixelFormatDetails *details, SDL_PixelFormat format)
{
SDL_PixelFormat *format;
SDL_LockSpinlock(&formats_lock);
/* Look it up in our list of previously allocated formats */
for (format = formats; format; format = format->next) {
if (pixel_format == format->format) {
++format->refcount;
SDL_UnlockSpinlock(&formats_lock);
return format;
}
}
/* Allocate an empty pixel format structure, and initialize it */
format = (SDL_PixelFormat *)SDL_malloc(sizeof(*format));
if (!format) {
SDL_UnlockSpinlock(&formats_lock);
return NULL;
}
if (SDL_InitFormat(format, pixel_format) < 0) {
SDL_UnlockSpinlock(&formats_lock);
SDL_free(format);
return NULL;
}
if (!SDL_ISPIXELFORMAT_INDEXED(pixel_format)) {
/* Cache the RGB formats */
format->next = formats;
formats = format;
}
SDL_UnlockSpinlock(&formats_lock);
return format;
}
int SDL_InitFormat(SDL_PixelFormat *format, SDL_PixelFormatEnum pixel_format)
{ {
int bpp; int bpp;
Uint32 Rmask, Gmask, Bmask, Amask; Uint32 Rmask, Gmask, Bmask, Amask;
Uint32 mask; Uint32 mask;
if (!SDL_GetMasksForPixelFormatEnum(pixel_format, &bpp, if (SDL_GetMasksForPixelFormat(format, &bpp, &Rmask, &Gmask, &Bmask, &Amask) < 0) {
&Rmask, &Gmask, &Bmask, &Amask)) {
return -1; return -1;
} }
/* Set up the format */ /* Set up the format */
SDL_zerop(format); SDL_zerop(details);
format->format = pixel_format; details->format = format;
format->bits_per_pixel = (Uint8)bpp; details->bits_per_pixel = (Uint8)bpp;
format->bytes_per_pixel = (Uint8)((bpp + 7) / 8); SDL_assert(SDL_BITSPERPIXEL(format) == details->bits_per_pixel);
details->bytes_per_pixel = (Uint8)((bpp + 7) / 8);
SDL_assert(SDL_BYTESPERPIXEL(format) == details->bytes_per_pixel);
format->Rmask = Rmask; details->Rmask = Rmask;
format->Rshift = 0; details->Rshift = 0;
format->Rloss = 8; details->Rbits = 0;
if (Rmask) { if (Rmask) {
for (mask = Rmask; !(mask & 0x01); mask >>= 1) { for (mask = Rmask; !(mask & 0x01); mask >>= 1) {
++format->Rshift; ++details->Rshift;
} }
for (; (mask & 0x01) && format->Rloss; mask >>= 1) { for (; (mask & 0x01); mask >>= 1) {
--format->Rloss; ++details->Rbits;
} }
} }
format->Gmask = Gmask; details->Gmask = Gmask;
format->Gshift = 0; details->Gshift = 0;
format->Gloss = 8; details->Gbits = 0;
if (Gmask) { if (Gmask) {
for (mask = Gmask; !(mask & 0x01); mask >>= 1) { for (mask = Gmask; !(mask & 0x01); mask >>= 1) {
++format->Gshift; ++details->Gshift;
} }
for (; (mask & 0x01) && format->Gloss; mask >>= 1) { for (; (mask & 0x01); mask >>= 1) {
--format->Gloss; ++details->Gbits;
} }
} }
format->Bmask = Bmask; details->Bmask = Bmask;
format->Bshift = 0; details->Bshift = 0;
format->Bloss = 8; details->Bbits = 0;
if (Bmask) { if (Bmask) {
for (mask = Bmask; !(mask & 0x01); mask >>= 1) { for (mask = Bmask; !(mask & 0x01); mask >>= 1) {
++format->Bshift; ++details->Bshift;
} }
for (; (mask & 0x01) && format->Bloss; mask >>= 1) { for (; (mask & 0x01); mask >>= 1) {
--format->Bloss; ++details->Bbits;
} }
} }
format->Amask = Amask; details->Amask = Amask;
format->Ashift = 0; details->Ashift = 0;
format->Aloss = 8; details->Abits = 0;
if (Amask) { if (Amask) {
for (mask = Amask; !(mask & 0x01); mask >>= 1) { for (mask = Amask; !(mask & 0x01); mask >>= 1) {
++format->Ashift; ++details->Ashift;
} }
for (; (mask & 0x01) && format->Aloss; mask >>= 1) { for (; (mask & 0x01); mask >>= 1) {
--format->Aloss; ++details->Abits;
} }
} }
format->palette = NULL;
format->refcount = 1;
format->next = NULL;
return 0; return 0;
} }
void SDL_DestroyPixelFormat(SDL_PixelFormat *format) const SDL_PixelFormatDetails *SDL_GetPixelFormatDetails(SDL_PixelFormat format)
{ {
SDL_PixelFormat *prev; SDL_PixelFormatDetails *details;
if (!format) { if (!SDL_format_details_lock) {
return; SDL_format_details_lock = SDL_CreateMutex();
} }
SDL_LockSpinlock(&formats_lock); SDL_LockMutex(SDL_format_details_lock);
if (--format->refcount > 0) { if (!SDL_format_details) {
SDL_UnlockSpinlock(&formats_lock); SDL_format_details = SDL_CreateHashTable(NULL, 8, SDL_HashID, SDL_KeyMatchID, SDL_NukeFreeValue, SDL_FALSE);
return;
} }
/* Remove this format from our list */ if (SDL_FindInHashTable(SDL_format_details, (const void *)(uintptr_t)format, (const void **)&details)) {
if (format == formats) { return details;
formats = format->next;
} else if (formats) {
for (prev = formats; prev->next; prev = prev->next) {
if (prev->next == format) {
prev->next = format->next;
break;
}
}
} }
SDL_UnlockSpinlock(&formats_lock); /* Allocate an empty pixel format structure, and initialize it */
details = (SDL_PixelFormatDetails *)SDL_malloc(sizeof(*details));
if (format->palette) { if (!details) {
SDL_DestroyPalette(format->palette); goto done;
} }
SDL_free(format);
return; if (SDL_InitPixelFormatDetails(details, format) < 0) {
SDL_free(details);
details = NULL;
goto done;
}
if (!SDL_InsertIntoHashTable(SDL_format_details, (const void *)(uintptr_t)format, (void *)details)) {
SDL_free(details);
details = NULL;
goto done;
}
done:
SDL_UnlockMutex(SDL_format_details_lock);
return details;
} }
SDL_Colorspace SDL_GetDefaultColorspaceForFormat(SDL_PixelFormatEnum format) void SDL_QuitPixelFormatDetails(void)
{
if (SDL_format_details) {
SDL_DestroyHashTable(SDL_format_details);
SDL_format_details = NULL;
}
if (SDL_format_details_lock) {
SDL_DestroyMutex(SDL_format_details_lock);
SDL_format_details_lock = NULL;
}
}
SDL_Colorspace SDL_GetDefaultColorspaceForFormat(SDL_PixelFormat format)
{ {
if (SDL_ISPIXELFORMAT_FOURCC(format)) { if (SDL_ISPIXELFORMAT_FOURCC(format)) {
if (format == SDL_PIXELFORMAT_P010) { if (format == SDL_PIXELFORMAT_P010) {
@ -1065,33 +1039,6 @@ SDL_Palette *SDL_CreatePalette(int ncolors)
return palette; return palette;
} }
int SDL_SetPixelFormatPalette(SDL_PixelFormat *format, SDL_Palette *palette)
{
if (!format) {
return SDL_InvalidParamError("SDL_SetPixelFormatPalette(): format");
}
if (palette && palette->ncolors > (1 << format->bits_per_pixel)) {
return SDL_SetError("SDL_SetPixelFormatPalette() passed a palette that doesn't match the format");
}
if (format->palette == palette) {
return 0;
}
if (format->palette) {
SDL_DestroyPalette(format->palette);
}
format->palette = palette;
if (format->palette) {
++format->palette->refcount;
}
return 0;
}
int SDL_SetPaletteColors(SDL_Palette *palette, const SDL_Color *colors, int SDL_SetPaletteColors(SDL_Palette *palette, const SDL_Color *colors,
int firstcolor, int ncolors) int firstcolor, int ncolors)
{ {
@ -1161,7 +1108,7 @@ void SDL_DitherColors(SDL_Color *colors, int bpp)
/* /*
* Match an RGB value to a particular palette index * Match an RGB value to a particular palette index
*/ */
Uint8 SDL_FindColor(SDL_Palette *pal, Uint8 r, Uint8 g, Uint8 b, Uint8 a) Uint8 SDL_FindColor(const SDL_Palette *pal, Uint8 r, Uint8 g, Uint8 b, Uint8 a)
{ {
/* Do colorspace distance matching */ /* Do colorspace distance matching */
unsigned int smallest; unsigned int smallest;
@ -1189,7 +1136,7 @@ Uint8 SDL_FindColor(SDL_Palette *pal, Uint8 r, Uint8 g, Uint8 b, Uint8 a)
} }
/* Tell whether palette is opaque, and if it has an alpha_channel */ /* Tell whether palette is opaque, and if it has an alpha_channel */
void SDL_DetectPalette(SDL_Palette *pal, SDL_bool *is_opaque, SDL_bool *has_alpha_channel) void SDL_DetectPalette(const SDL_Palette *pal, SDL_bool *is_opaque, SDL_bool *has_alpha_channel)
{ {
int i; int i;
@ -1235,56 +1182,94 @@ void SDL_DetectPalette(SDL_Palette *pal, SDL_bool *is_opaque, SDL_bool *has_alph
} }
/* Find the opaque pixel value corresponding to an RGB triple */ /* Find the opaque pixel value corresponding to an RGB triple */
Uint32 SDL_MapRGB(const SDL_PixelFormat *format, Uint8 r, Uint8 g, Uint8 b) Uint32 SDL_MapRGB(const SDL_PixelFormatDetails *format, const SDL_Palette *palette, Uint8 r, Uint8 g, Uint8 b)
{ {
if (!format) { if (!format) {
SDL_InvalidParamError("format"); SDL_InvalidParamError("format");
return 0; return 0;
} }
if (format->palette) {
return SDL_FindColor(format->palette, r, g, b, SDL_ALPHA_OPAQUE); if (SDL_ISPIXELFORMAT_INDEXED(format->format)) {
} else if (SDL_ISPIXELFORMAT_10BIT(format->format)) { if (!palette) {
SDL_InvalidParamError("palette");
return 0;
}
return SDL_FindColor(palette, r, g, b, SDL_ALPHA_OPAQUE);
}
if (SDL_ISPIXELFORMAT_10BIT(format->format)) {
return (((Uint32)SDL_expand_byte_10[r]) << format->Rshift) | return (((Uint32)SDL_expand_byte_10[r]) << format->Rshift) |
(((Uint32)SDL_expand_byte_10[g]) << format->Gshift) | (((Uint32)SDL_expand_byte_10[g]) << format->Gshift) |
(((Uint32)SDL_expand_byte_10[b]) << format->Bshift) | (((Uint32)SDL_expand_byte_10[b]) << format->Bshift) |
format->Amask; format->Amask;
} else { } else {
return (r >> format->Rloss) << format->Rshift | (g >> format->Gloss) << format->Gshift | (b >> format->Bloss) << format->Bshift | format->Amask; return ((Uint32)(r >> (8 - format->Rbits))) << format->Rshift |
((Uint32)(g >> (8 - format->Gbits))) << format->Gshift |
((Uint32)(b >> (8 - format->Bbits))) << format->Bshift |
format->Amask;
} }
} }
/* Find the pixel value corresponding to an RGBA quadruple */ /* Find the pixel value corresponding to an RGBA quadruple */
Uint32 SDL_MapRGBA(const SDL_PixelFormat *format, Uint8 r, Uint8 g, Uint8 b, Uint32 SDL_MapRGBA(const SDL_PixelFormatDetails *format, const SDL_Palette *palette, Uint8 r, Uint8 g, Uint8 b, Uint8 a)
Uint8 a)
{ {
if (!format) { if (!format) {
SDL_InvalidParamError("format"); SDL_InvalidParamError("format");
return 0; return 0;
} }
if (format->palette) {
return SDL_FindColor(format->palette, r, g, b, a); if (SDL_ISPIXELFORMAT_INDEXED(format->format)) {
} else if (SDL_ISPIXELFORMAT_10BIT(format->format)) { if (!palette) {
SDL_InvalidParamError("palette");
return 0;
}
return SDL_FindColor(palette, r, g, b, a);
}
if (SDL_ISPIXELFORMAT_10BIT(format->format)) {
return (((Uint32)SDL_expand_byte_10[r]) << format->Rshift) | return (((Uint32)SDL_expand_byte_10[r]) << format->Rshift) |
(((Uint32)SDL_expand_byte_10[g]) << format->Gshift) | (((Uint32)SDL_expand_byte_10[g]) << format->Gshift) |
(((Uint32)SDL_expand_byte_10[b]) << format->Bshift) | (((Uint32)SDL_expand_byte_10[b]) << format->Bshift) |
((Uint32)(a >> format->Aloss) << format->Ashift & format->Amask); ((((Uint32)(a >> (8 - format->Abits))) << format->Ashift) & format->Amask);
} else { } else {
return (r >> format->Rloss) << format->Rshift | (g >> format->Gloss) << format->Gshift | (b >> format->Bloss) << format->Bshift | ((Uint32)(a >> format->Aloss) << format->Ashift & format->Amask); return ((Uint32)(r >> (8 - format->Rbits))) << format->Rshift |
((Uint32)(g >> (8 - format->Gbits))) << format->Gshift |
((Uint32)(b >> (8 - format->Bbits))) << format->Bshift |
((((Uint32)(a >> (8 - format->Abits))) << format->Ashift) & format->Amask);
} }
} }
void SDL_GetRGB(Uint32 pixel, const SDL_PixelFormat *format, Uint8 *r, Uint8 *g, void SDL_GetRGB(Uint32 pixel, const SDL_PixelFormatDetails *format, const SDL_Palette *palette, Uint8 *r, Uint8 *g, Uint8 *b)
Uint8 *b)
{ {
if (format->palette) { Uint8 unused;
if (pixel < (unsigned)format->palette->ncolors) {
*r = format->palette->colors[pixel].r; if (!r) {
*g = format->palette->colors[pixel].g; r = &unused;
*b = format->palette->colors[pixel].b; }
if (!g) {
g = &unused;
}
if (!b) {
b = &unused;
}
if (!format) {
*r = *g = *b = 0;
return;
}
if (SDL_ISPIXELFORMAT_INDEXED(format->format)) {
if (palette && pixel < (unsigned)palette->ncolors) {
*r = palette->colors[pixel].r;
*g = palette->colors[pixel].g;
*b = palette->colors[pixel].b;
} else { } else {
*r = *g = *b = 0; *r = *g = *b = 0;
} }
} else if (SDL_ISPIXELFORMAT_10BIT(format->format)) { return;
}
if (SDL_ISPIXELFORMAT_10BIT(format->format)) {
unsigned v; unsigned v;
v = (pixel & format->Rmask) >> format->Rshift; v = (pixel & format->Rmask) >> format->Rshift;
*r = (Uint8)(v >> 2); *r = (Uint8)(v >> 2);
@ -1295,27 +1280,49 @@ void SDL_GetRGB(Uint32 pixel, const SDL_PixelFormat *format, Uint8 *r, Uint8 *g,
} else { } else {
unsigned v; unsigned v;
v = (pixel & format->Rmask) >> format->Rshift; v = (pixel & format->Rmask) >> format->Rshift;
*r = SDL_expand_byte[format->Rloss][v]; *r = SDL_expand_byte[format->Rbits][v];
v = (pixel & format->Gmask) >> format->Gshift; v = (pixel & format->Gmask) >> format->Gshift;
*g = SDL_expand_byte[format->Gloss][v]; *g = SDL_expand_byte[format->Gbits][v];
v = (pixel & format->Bmask) >> format->Bshift; v = (pixel & format->Bmask) >> format->Bshift;
*b = SDL_expand_byte[format->Bloss][v]; *b = SDL_expand_byte[format->Bbits][v];
} }
} }
void SDL_GetRGBA(Uint32 pixel, const SDL_PixelFormat *format, void SDL_GetRGBA(Uint32 pixel, const SDL_PixelFormatDetails *format, const SDL_Palette *palette, Uint8 *r, Uint8 *g, Uint8 *b, Uint8 *a)
Uint8 *r, Uint8 *g, Uint8 *b, Uint8 *a)
{ {
if (format->palette) { Uint8 unused;
if (pixel < (unsigned)format->palette->ncolors) {
*r = format->palette->colors[pixel].r; if (!r) {
*g = format->palette->colors[pixel].g; r = &unused;
*b = format->palette->colors[pixel].b; }
*a = format->palette->colors[pixel].a; if (!g) {
g = &unused;
}
if (!b) {
b = &unused;
}
if (!a) {
a = &unused;
}
if (!format) {
*r = *g = *b = *a = 0;
return;
}
if (SDL_ISPIXELFORMAT_INDEXED(format->format)) {
if (palette && pixel < (unsigned)palette->ncolors) {
*r = palette->colors[pixel].r;
*g = palette->colors[pixel].g;
*b = palette->colors[pixel].b;
*a = palette->colors[pixel].a;
} else { } else {
*r = *g = *b = *a = 0; *r = *g = *b = *a = 0;
} }
} else if (SDL_ISPIXELFORMAT_10BIT(format->format)) { return;
}
if (SDL_ISPIXELFORMAT_10BIT(format->format)) {
unsigned v; unsigned v;
v = (pixel & format->Rmask) >> format->Rshift; v = (pixel & format->Rmask) >> format->Rshift;
*r = (Uint8)(v >> 2); *r = (Uint8)(v >> 2);
@ -1324,22 +1331,22 @@ void SDL_GetRGBA(Uint32 pixel, const SDL_PixelFormat *format,
v = (pixel & format->Bmask) >> format->Bshift; v = (pixel & format->Bmask) >> format->Bshift;
*b = (Uint8)(v >> 2); *b = (Uint8)(v >> 2);
v = (pixel & format->Amask) >> format->Ashift; v = (pixel & format->Amask) >> format->Ashift;
*a = SDL_expand_byte[format->Aloss][v]; *a = SDL_expand_byte[format->Abits][v];
} else { } else {
unsigned v; unsigned v;
v = (pixel & format->Rmask) >> format->Rshift; v = (pixel & format->Rmask) >> format->Rshift;
*r = SDL_expand_byte[format->Rloss][v]; *r = SDL_expand_byte[format->Rbits][v];
v = (pixel & format->Gmask) >> format->Gshift; v = (pixel & format->Gmask) >> format->Gshift;
*g = SDL_expand_byte[format->Gloss][v]; *g = SDL_expand_byte[format->Gbits][v];
v = (pixel & format->Bmask) >> format->Bshift; v = (pixel & format->Bmask) >> format->Bshift;
*b = SDL_expand_byte[format->Bloss][v]; *b = SDL_expand_byte[format->Bbits][v];
v = (pixel & format->Amask) >> format->Ashift; v = (pixel & format->Amask) >> format->Ashift;
*a = SDL_expand_byte[format->Aloss][v]; *a = SDL_expand_byte[format->Abits][v];
} }
} }
/* Map from Palette to Palette */ /* Map from Palette to Palette */
static Uint8 *Map1to1(SDL_Palette *src, SDL_Palette *dst, int *identical) static Uint8 *Map1to1(const SDL_Palette *src, const SDL_Palette *dst, int *identical)
{ {
Uint8 *map; Uint8 *map;
int i; int i;
@ -1369,15 +1376,13 @@ static Uint8 *Map1to1(SDL_Palette *src, SDL_Palette *dst, int *identical)
} }
/* Map from Palette to BitField */ /* Map from Palette to BitField */
static Uint8 *Map1toN(SDL_PixelFormat *src, Uint8 Rmod, Uint8 Gmod, Uint8 Bmod, Uint8 Amod, static Uint8 *Map1toN(const SDL_Palette *pal, Uint8 Rmod, Uint8 Gmod, Uint8 Bmod, Uint8 Amod, const SDL_PixelFormatDetails *dst)
SDL_PixelFormat *dst)
{ {
Uint8 *map; Uint8 *map;
int i; int i;
int bpp; int bpp;
SDL_Palette *pal = src->palette;
bpp = ((dst->bytes_per_pixel == 3) ? 4 : dst->bytes_per_pixel); bpp = ((SDL_BYTESPERPIXEL(dst->format) == 3) ? 4 : SDL_BYTESPERPIXEL(dst->format));
map = (Uint8 *)SDL_calloc(256, bpp); map = (Uint8 *)SDL_calloc(256, bpp);
if (!map) { if (!map) {
return NULL; return NULL;
@ -1389,19 +1394,18 @@ static Uint8 *Map1toN(SDL_PixelFormat *src, Uint8 Rmod, Uint8 Gmod, Uint8 Bmod,
Uint8 G = (Uint8)((pal->colors[i].g * Gmod) / 255); Uint8 G = (Uint8)((pal->colors[i].g * Gmod) / 255);
Uint8 B = (Uint8)((pal->colors[i].b * Bmod) / 255); Uint8 B = (Uint8)((pal->colors[i].b * Bmod) / 255);
Uint8 A = (Uint8)((pal->colors[i].a * Amod) / 255); Uint8 A = (Uint8)((pal->colors[i].a * Amod) / 255);
ASSEMBLE_RGBA(&map[i * bpp], dst->bytes_per_pixel, dst, (Uint32)R, ASSEMBLE_RGBA(&map[i * bpp], SDL_BYTESPERPIXEL(dst->format), dst, (Uint32)R,
(Uint32)G, (Uint32)B, (Uint32)A); (Uint32)G, (Uint32)B, (Uint32)A);
} }
return map; return map;
} }
/* Map from BitField to Dithered-Palette to Palette */ /* Map from BitField to Dithered-Palette to Palette */
static Uint8 *MapNto1(SDL_PixelFormat *src, SDL_PixelFormat *dst, int *identical) static Uint8 *MapNto1(const SDL_PixelFormatDetails *src, const SDL_Palette *pal, int *identical)
{ {
/* Generate a 256 color dither palette */ /* Generate a 256 color dither palette */
SDL_Palette dithered; SDL_Palette dithered;
SDL_Color colors[256]; SDL_Color colors[256];
SDL_Palette *pal = dst->palette;
dithered.ncolors = 256; dithered.ncolors = 256;
SDL_DitherColors(colors, 8); SDL_DitherColors(colors, 8);
@ -1409,29 +1413,11 @@ static Uint8 *MapNto1(SDL_PixelFormat *src, SDL_PixelFormat *dst, int *identical
return Map1to1(&dithered, pal, identical); return Map1to1(&dithered, pal, identical);
} }
SDL_BlitMap *SDL_AllocBlitMap(void)
{
SDL_BlitMap *map;
/* Allocate the empty map */
map = (SDL_BlitMap *)SDL_calloc(1, sizeof(*map));
if (!map) {
return NULL;
}
map->info.r = 0xFF;
map->info.g = 0xFF;
map->info.b = 0xFF;
map->info.a = 0xFF;
/* It's ready to go */
return map;
}
void SDL_InvalidateAllBlitMap(SDL_Surface *surface) void SDL_InvalidateAllBlitMap(SDL_Surface *surface)
{ {
SDL_ListNode *l = (SDL_ListNode *)surface->list_blitmap; SDL_ListNode *l = surface->internal->list_blitmap;
surface->list_blitmap = NULL; surface->internal->list_blitmap = NULL;
while (l) { while (l) {
SDL_ListNode *tmp = l; SDL_ListNode *tmp = l;
@ -1448,7 +1434,7 @@ void SDL_InvalidateMap(SDL_BlitMap *map)
} }
if (map->dst) { if (map->dst) {
/* Un-register from the destination surface */ /* Un-register from the destination surface */
SDL_ListRemove((SDL_ListNode **)&(map->dst->list_blitmap), map); SDL_ListRemove(&map->dst->internal->list_blitmap, map);
} }
map->dst = NULL; map->dst = NULL;
map->src_palette_version = 0; map->src_palette_version = 0;
@ -1459,28 +1445,32 @@ void SDL_InvalidateMap(SDL_BlitMap *map)
int SDL_MapSurface(SDL_Surface *src, SDL_Surface *dst) int SDL_MapSurface(SDL_Surface *src, SDL_Surface *dst)
{ {
SDL_PixelFormat *srcfmt; const SDL_PixelFormatDetails *srcfmt;
SDL_PixelFormat *dstfmt; const SDL_Palette *srcpal;
const SDL_PixelFormatDetails *dstfmt;
const SDL_Palette *dstpal;
SDL_BlitMap *map; SDL_BlitMap *map;
/* Clear out any previous mapping */ /* Clear out any previous mapping */
map = src->map; map = &src->internal->map;
#if SDL_HAVE_RLE #if SDL_HAVE_RLE
if ((src->flags & SDL_RLEACCEL) == SDL_RLEACCEL) { if (src->internal->flags & SDL_INTERNAL_SURFACE_RLEACCEL) {
SDL_UnRLESurface(src, 1); SDL_UnRLESurface(src, SDL_TRUE);
} }
#endif #endif
SDL_InvalidateMap(map); SDL_InvalidateMap(map);
/* Figure out what kind of mapping we're doing */ /* Figure out what kind of mapping we're doing */
map->identity = 0; map->identity = 0;
srcfmt = src->format; srcfmt = src->internal->format;
dstfmt = dst->format; srcpal = src->internal->palette;
dstfmt = dst->internal->format;
dstpal = dst->internal->palette;
if (SDL_ISPIXELFORMAT_INDEXED(srcfmt->format)) { if (SDL_ISPIXELFORMAT_INDEXED(srcfmt->format)) {
if (SDL_ISPIXELFORMAT_INDEXED(dstfmt->format)) { if (SDL_ISPIXELFORMAT_INDEXED(dstfmt->format)) {
/* Palette --> Palette */ /* Palette --> Palette */
map->info.table = map->info.table =
Map1to1(srcfmt->palette, dstfmt->palette, &map->identity); Map1to1(srcpal, dstpal, &map->identity);
if (!map->identity) { if (!map->identity) {
if (!map->info.table) { if (!map->info.table) {
return -1; return -1;
@ -1492,8 +1482,8 @@ int SDL_MapSurface(SDL_Surface *src, SDL_Surface *dst)
} else { } else {
/* Palette --> BitField */ /* Palette --> BitField */
map->info.table = map->info.table =
Map1toN(srcfmt, src->map->info.r, src->map->info.g, Map1toN(srcpal, src->internal->map.info.r, src->internal->map.info.g,
src->map->info.b, src->map->info.a, dstfmt); src->internal->map.info.b, src->internal->map.info.a, dstfmt);
if (!map->info.table) { if (!map->info.table) {
return -1; return -1;
} }
@ -1501,7 +1491,7 @@ int SDL_MapSurface(SDL_Surface *src, SDL_Surface *dst)
} else { } else {
if (SDL_ISPIXELFORMAT_INDEXED(dstfmt->format)) { if (SDL_ISPIXELFORMAT_INDEXED(dstfmt->format)) {
/* BitField --> Palette */ /* BitField --> Palette */
map->info.table = MapNto1(srcfmt, dstfmt, &map->identity); map->info.table = MapNto1(srcfmt, dstpal, &map->identity);
if (!map->identity) { if (!map->identity) {
if (!map->info.table) { if (!map->info.table) {
return -1; return -1;
@ -1520,17 +1510,17 @@ int SDL_MapSurface(SDL_Surface *src, SDL_Surface *dst)
if (map->dst) { if (map->dst) {
/* Register BlitMap to the destination surface, to be invalidated when needed */ /* Register BlitMap to the destination surface, to be invalidated when needed */
SDL_ListAdd((SDL_ListNode **)&(map->dst->list_blitmap), map); SDL_ListAdd(&map->dst->internal->list_blitmap, map);
} }
if (dstfmt->palette) { if (dstpal) {
map->dst_palette_version = dstfmt->palette->version; map->dst_palette_version = dstpal->version;
} else { } else {
map->dst_palette_version = 0; map->dst_palette_version = 0;
} }
if (srcfmt->palette) { if (srcpal) {
map->src_palette_version = srcfmt->palette->version; map->src_palette_version = srcpal->version;
} else { } else {
map->src_palette_version = 0; map->src_palette_version = 0;
} }
@ -1539,11 +1529,3 @@ int SDL_MapSurface(SDL_Surface *src, SDL_Surface *dst)
return SDL_CalculateBlit(src); return SDL_CalculateBlit(src);
} }
void SDL_FreeBlitMap(SDL_BlitMap *map)
{
if (map) {
SDL_InvalidateMap(map);
SDL_free(map);
}
}

View File

@ -18,20 +18,20 @@
misrepresented as being the original software. misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution. 3. This notice may not be removed or altered from any source distribution.
*/ */
#include "SDL_internal.h"
#ifndef SDL_pixels_c_h_ #ifndef SDL_pixels_c_h_
#define SDL_pixels_c_h_ #define SDL_pixels_c_h_
#include "SDL_internal.h"
/* Useful functions and variables from SDL_pixel.c */ /* Useful functions and variables from SDL_pixel.c */
#include "SDL_blit.h" #include "SDL_blit.h"
/* Pixel format functions */ /* Pixel format functions */
extern int SDL_InitFormat(SDL_PixelFormat *format, SDL_PixelFormatEnum pixel_format); extern int SDL_CalculateSurfaceSize(SDL_PixelFormat format, int width, int height, size_t *size, size_t *pitch, SDL_bool minimalPitch);
extern int SDL_CalculateSurfaceSize(SDL_PixelFormatEnum format, int width, int height, size_t *size, size_t *pitch, SDL_bool minimalPitch); extern SDL_Colorspace SDL_GetDefaultColorspaceForFormat(SDL_PixelFormat pixel_format);
extern SDL_Colorspace SDL_GetDefaultColorspaceForFormat(SDL_PixelFormatEnum pixel_format); extern void SDL_QuitPixelFormatDetails(void);
/* Colorspace conversion functions */ /* Colorspace conversion functions */
extern float SDL_sRGBtoLinear(float v); extern float SDL_sRGBtoLinear(float v);
@ -43,23 +43,14 @@ extern const float *SDL_GetColorPrimariesConversionMatrix(SDL_ColorPrimaries src
extern void SDL_ConvertColorPrimaries(float *fR, float *fG, float *fB, const float *matrix); extern void SDL_ConvertColorPrimaries(float *fR, float *fG, float *fB, const float *matrix);
/* Blit mapping functions */ /* Blit mapping functions */
extern SDL_BlitMap *SDL_AllocBlitMap(void);
extern void SDL_InvalidateMap(SDL_BlitMap *map); extern void SDL_InvalidateMap(SDL_BlitMap *map);
extern int SDL_MapSurface(SDL_Surface *src, SDL_Surface *dst); extern int SDL_MapSurface(SDL_Surface *src, SDL_Surface *dst);
extern void SDL_FreeBlitMap(SDL_BlitMap *map);
extern void SDL_InvalidateAllBlitMap(SDL_Surface *surface); extern void SDL_InvalidateAllBlitMap(SDL_Surface *surface);
/* Surface functions */
extern float SDL_GetDefaultSDRWhitePoint(SDL_Colorspace colorspace);
extern float SDL_GetSurfaceSDRWhitePoint(SDL_Surface *surface, SDL_Colorspace colorspace);
extern float SDL_GetDefaultHDRHeadroom(SDL_Colorspace colorspace);
extern float SDL_GetSurfaceHDRHeadroom(SDL_Surface *surface, SDL_Colorspace colorspace);
/* Miscellaneous functions */ /* Miscellaneous functions */
extern void SDL_DitherColors(SDL_Color *colors, int bpp); extern void SDL_DitherColors(SDL_Color *colors, int bpp);
extern Uint8 SDL_FindColor(SDL_Palette *pal, Uint8 r, Uint8 g, Uint8 b, Uint8 a); extern Uint8 SDL_FindColor(const SDL_Palette *pal, Uint8 r, Uint8 g, Uint8 b, Uint8 a);
extern void SDL_DetectPalette(SDL_Palette *pal, SDL_bool *is_opaque, SDL_bool *has_alpha_channel); extern void SDL_DetectPalette(const SDL_Palette *pal, SDL_bool *is_opaque, SDL_bool *has_alpha_channel);
extern SDL_Surface *SDL_DuplicatePixels(int width, int height, SDL_PixelFormatEnum format, SDL_Colorspace colorspace, void *pixels, int pitch); extern SDL_Surface *SDL_DuplicatePixels(int width, int height, SDL_PixelFormat format, SDL_Colorspace colorspace, void *pixels, int pitch);
#endif /* SDL_pixels_c_h_ */ #endif /* SDL_pixels_c_h_ */

View File

@ -42,9 +42,9 @@ int SDL_SoftStretch(SDL_Surface *src, const SDL_Rect *srcrect,
return SDL_InvalidParamError("dst"); return SDL_InvalidParamError("dst");
} }
if (src->format->format != dst->format->format) { if (src->format != dst->format) {
// Slow! // Slow!
SDL_Surface *src_tmp = SDL_ConvertSurfaceFormat(src, dst->format->format); SDL_Surface *src_tmp = SDL_ConvertSurfaceAndColorspace(src, dst->format, dst->internal->palette, SDL_GetSurfaceColorspace(dst), dst->internal->props);
if (!src_tmp) { if (!src_tmp) {
return -1; return -1;
} }
@ -53,7 +53,7 @@ int SDL_SoftStretch(SDL_Surface *src, const SDL_Rect *srcrect,
return ret; return ret;
} }
if (SDL_ISPIXELFORMAT_FOURCC(src->format->format)) { if (SDL_ISPIXELFORMAT_FOURCC(src->format)) {
// Slow! // Slow!
if (!dstrect) { if (!dstrect) {
full_dst.x = 0; full_dst.x = 0;
@ -63,18 +63,17 @@ int SDL_SoftStretch(SDL_Surface *src, const SDL_Rect *srcrect,
dstrect = &full_dst; dstrect = &full_dst;
} }
SDL_Surface *src_tmp = SDL_ConvertSurfaceFormat(src, SDL_PIXELFORMAT_XRGB8888); SDL_Surface *src_tmp = SDL_ConvertSurface(src, SDL_PIXELFORMAT_XRGB8888);
SDL_Surface *dst_tmp = SDL_CreateSurface(dstrect->w, dstrect->h, SDL_PIXELFORMAT_XRGB8888); SDL_Surface *dst_tmp = SDL_CreateSurface(dstrect->w, dstrect->h, SDL_PIXELFORMAT_XRGB8888);
if (src_tmp && dst_tmp) { if (src_tmp && dst_tmp) {
ret = SDL_SoftStretch(src_tmp, srcrect, dst_tmp, NULL, scaleMode); ret = SDL_SoftStretch(src_tmp, srcrect, dst_tmp, NULL, scaleMode);
if (ret == 0) { if (ret == 0) {
SDL_Colorspace dst_colorspace = SDL_COLORSPACE_UNKNOWN; SDL_Colorspace dst_colorspace = SDL_GetSurfaceColorspace(dst);
SDL_GetSurfaceColorspace(dst, &dst_colorspace);
SDL_ConvertPixelsAndColorspace(dstrect->w, dstrect->h, SDL_ConvertPixelsAndColorspace(dstrect->w, dstrect->h,
dst_tmp->format->format, SDL_COLORSPACE_SRGB, 0, dst_tmp->format, SDL_COLORSPACE_SRGB, 0,
dst_tmp->pixels, dst_tmp->pitch, dst_tmp->pixels, dst_tmp->pitch,
dst->format->format, dst_colorspace, SDL_GetSurfaceProperties(dst), dst->format, dst_colorspace, SDL_GetSurfaceProperties(dst),
(Uint8 *)dst->pixels + dstrect->y * dst->pitch + dstrect->x * dst->format->bytes_per_pixel, dst->pitch); (Uint8 *)dst->pixels + dstrect->y * dst->pitch + dstrect->x * SDL_BYTESPERPIXEL(dst->format), dst->pitch);
} }
} else { } else {
ret = -1; ret = -1;
@ -93,7 +92,7 @@ int SDL_SoftStretch(SDL_Surface *src, const SDL_Rect *srcrect,
} }
if (scaleMode == SDL_SCALEMODE_LINEAR) { if (scaleMode == SDL_SCALEMODE_LINEAR) {
if (src->format->bytes_per_pixel != 4 || src->format->format == SDL_PIXELFORMAT_ARGB2101010) { if (SDL_BYTESPERPIXEL(src->format) != 4 || src->format == SDL_PIXELFORMAT_ARGB2101010) {
return SDL_SetError("Wrong format"); return SDL_SetError("Wrong format");
} }
} }
@ -972,8 +971,7 @@ int SDL_LowerSoftStretchNearest(SDL_Surface *s, const SDL_Rect *srcrect,
int dst_h = dstrect->h; int dst_h = dstrect->h;
int src_pitch = s->pitch; int src_pitch = s->pitch;
int dst_pitch = d->pitch; int dst_pitch = d->pitch;
int bpp = SDL_BYTESPERPIXEL(d->format);
const int bpp = d->format->bytes_per_pixel;
Uint32 *src = (Uint32 *)((Uint8 *)s->pixels + srcrect->x * bpp + srcrect->y * src_pitch); Uint32 *src = (Uint32 *)((Uint8 *)s->pixels + srcrect->x * bpp + srcrect->y * src_pitch);
Uint32 *dst = (Uint32 *)((Uint8 *)d->pixels + dstrect->x * bpp + dstrect->y * dst_pitch); Uint32 *dst = (Uint32 *)((Uint8 *)d->pixels + dstrect->x * bpp + dstrect->y * dst_pitch);

File diff suppressed because it is too large Load Diff

80
src/video/SDL_surface_c.h Normal file
View File

@ -0,0 +1,80 @@
/*
Simple DirectMedia Layer
Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
*/
#include "SDL_internal.h"
#ifndef SDL_surface_c_h_
#define SDL_surface_c_h_
/* Useful functions and variables from SDL_surface.c */
#include "../SDL_list.h"
/* Surface internal flags */
typedef Uint32 SDL_SurfaceDataFlags;
#define SDL_INTERNAL_SURFACE_DONTFREE 0x00000001u /**< Surface is referenced internally */
#define SDL_INTERNAL_SURFACE_STACK 0x00000002u /**< Surface is allocated on the stack */
#define SDL_INTERNAL_SURFACE_RLEACCEL 0x00000004u /**< Surface is RLE encoded */
/* Surface internal data definition */
struct SDL_SurfaceData
{
/** flags for this surface */
SDL_SurfaceDataFlags flags;
/** properties for this surface */
SDL_PropertiesID props;
/** detailed format for this surface */
const SDL_PixelFormatDetails *format;
/** palette for indexed surfaces */
SDL_Palette *palette;
/** information needed for surfaces requiring locks */
int locked;
/** clipping information */
SDL_Rect clip_rect;
/** info for fast blit mapping to other surfaces */
SDL_BlitMap map;
/** list of BlitMap that hold a reference to this surface */
SDL_ListNode *list_blitmap;
};
typedef struct SDL_InternalSurface
{
SDL_Surface surface;
SDL_SurfaceData internal;
} SDL_InternalSurface;
/* Surface functions */
extern SDL_bool SDL_SurfaceValid(SDL_Surface *surface);
extern void SDL_UpdateSurfaceLockFlag(SDL_Surface *surface);
extern float SDL_GetDefaultSDRWhitePoint(SDL_Colorspace colorspace);
extern float SDL_GetSurfaceSDRWhitePoint(SDL_Surface *surface, SDL_Colorspace colorspace);
extern float SDL_GetDefaultHDRHeadroom(SDL_Colorspace colorspace);
extern float SDL_GetSurfaceHDRHeadroom(SDL_Surface *surface, SDL_Colorspace colorspace);
#endif /* SDL_surface_c_h_ */

View File

@ -268,7 +268,7 @@ struct SDL_VideoDevice
int (*SetWindowMouseGrab)(SDL_VideoDevice *_this, SDL_Window *window, SDL_bool grabbed); int (*SetWindowMouseGrab)(SDL_VideoDevice *_this, SDL_Window *window, SDL_bool grabbed);
int (*SetWindowKeyboardGrab)(SDL_VideoDevice *_this, SDL_Window *window, SDL_bool grabbed); int (*SetWindowKeyboardGrab)(SDL_VideoDevice *_this, SDL_Window *window, SDL_bool grabbed);
void (*DestroyWindow)(SDL_VideoDevice *_this, SDL_Window *window); void (*DestroyWindow)(SDL_VideoDevice *_this, SDL_Window *window);
int (*CreateWindowFramebuffer)(SDL_VideoDevice *_this, SDL_Window *window, SDL_PixelFormatEnum *format, void **pixels, int *pitch); int (*CreateWindowFramebuffer)(SDL_VideoDevice *_this, SDL_Window *window, SDL_PixelFormat *format, void **pixels, int *pitch);
int (*SetWindowFramebufferVSync)(SDL_VideoDevice *_this, SDL_Window *window, int vsync); int (*SetWindowFramebufferVSync)(SDL_VideoDevice *_this, SDL_Window *window, int vsync);
int (*GetWindowFramebufferVSync)(SDL_VideoDevice *_this, SDL_Window *window, int *vsync); int (*GetWindowFramebufferVSync)(SDL_VideoDevice *_this, SDL_Window *window, int *vsync);
int (*UpdateWindowFramebuffer)(SDL_VideoDevice *_this, SDL_Window *window, const SDL_Rect *rects, int numrects); int (*UpdateWindowFramebuffer)(SDL_VideoDevice *_this, SDL_Window *window, const SDL_Rect *rects, int numrects);

View File

@ -284,14 +284,14 @@ static void SDLCALL SDL_CleanupWindowTextureData(void *userdata, void *value)
SDL_free(data); SDL_free(data);
} }
static int SDL_CreateWindowTexture(SDL_VideoDevice *_this, SDL_Window *window, SDL_PixelFormatEnum *format, void **pixels, int *pitch) static int SDL_CreateWindowTexture(SDL_VideoDevice *_this, SDL_Window *window, SDL_PixelFormat *format, void **pixels, int *pitch)
{ {
SDL_PropertiesID props = SDL_GetWindowProperties(window); SDL_PropertiesID props = SDL_GetWindowProperties(window);
SDL_WindowTextureData *data = (SDL_WindowTextureData *)SDL_GetProperty(props, SDL_PROP_WINDOW_TEXTUREDATA_POINTER, NULL); SDL_WindowTextureData *data = (SDL_WindowTextureData *)SDL_GetProperty(props, SDL_PROP_WINDOW_TEXTUREDATA_POINTER, NULL);
const SDL_bool transparent = (window->flags & SDL_WINDOW_TRANSPARENT) ? SDL_TRUE : SDL_FALSE; const SDL_bool transparent = (window->flags & SDL_WINDOW_TRANSPARENT) ? SDL_TRUE : SDL_FALSE;
int i; int i;
int w, h; int w, h;
const SDL_PixelFormatEnum *texture_formats; const SDL_PixelFormat *texture_formats;
SDL_GetWindowSizeInPixels(window, &w, &h); SDL_GetWindowSizeInPixels(window, &w, &h);
@ -355,7 +355,7 @@ static int SDL_CreateWindowTexture(SDL_VideoDevice *_this, SDL_Window *window, S
data->renderer = renderer; data->renderer = renderer;
} }
texture_formats = (const SDL_PixelFormatEnum *)SDL_GetProperty(SDL_GetRendererProperties(data->renderer), SDL_PROP_RENDERER_TEXTURE_FORMATS_POINTER, NULL); texture_formats = (const SDL_PixelFormat *)SDL_GetProperty(SDL_GetRendererProperties(data->renderer), SDL_PROP_RENDERER_TEXTURE_FORMATS_POINTER, NULL);
if (!texture_formats) { if (!texture_formats) {
return -1; return -1;
} }
@ -372,7 +372,7 @@ static int SDL_CreateWindowTexture(SDL_VideoDevice *_this, SDL_Window *window, S
*format = texture_formats[0]; *format = texture_formats[0];
for (i = 0; texture_formats[i] != SDL_PIXELFORMAT_UNKNOWN; ++i) { for (i = 0; texture_formats[i] != SDL_PIXELFORMAT_UNKNOWN; ++i) {
SDL_PixelFormatEnum texture_format = texture_formats[i]; SDL_PixelFormat texture_format = texture_formats[i];
if (!SDL_ISPIXELFORMAT_FOURCC(texture_format) && if (!SDL_ISPIXELFORMAT_FOURCC(texture_format) &&
!SDL_ISPIXELFORMAT_10BIT(texture_format) && !SDL_ISPIXELFORMAT_10BIT(texture_format) &&
!SDL_ISPIXELFORMAT_FLOAT(texture_format) && !SDL_ISPIXELFORMAT_FLOAT(texture_format) &&
@ -2657,7 +2657,7 @@ int SDL_SetWindowIcon(SDL_Window *window, SDL_Surface *icon)
SDL_DestroySurface(window->icon); SDL_DestroySurface(window->icon);
/* Convert the icon into ARGB8888 */ /* Convert the icon into ARGB8888 */
window->icon = SDL_ConvertSurfaceFormat(icon, SDL_PIXELFORMAT_ARGB8888); window->icon = SDL_ConvertSurface(icon, SDL_PIXELFORMAT_ARGB8888);
if (!window->icon) { if (!window->icon) {
return -1; return -1;
} }
@ -3292,7 +3292,7 @@ static SDL_bool ShouldAttemptTextureFramebuffer(void)
static SDL_Surface *SDL_CreateWindowFramebuffer(SDL_Window *window) static SDL_Surface *SDL_CreateWindowFramebuffer(SDL_Window *window)
{ {
SDL_PixelFormatEnum format = SDL_PIXELFORMAT_UNKNOWN; SDL_PixelFormat format = SDL_PIXELFORMAT_UNKNOWN;
void *pixels = NULL; void *pixels = NULL;
int pitch = 0; int pitch = 0;
SDL_bool created_framebuffer = SDL_FALSE; SDL_bool created_framebuffer = SDL_FALSE;
@ -3343,7 +3343,7 @@ static SDL_Surface *SDL_CreateWindowFramebuffer(SDL_Window *window)
return window->surface; return window->surface;
} }
return SDL_CreateSurfaceFrom(pixels, w, h, pitch, format); return SDL_CreateSurfaceFrom(w, h, format, pixels, pitch);
} }
SDL_bool SDL_WindowHasSurface(SDL_Window *window) SDL_bool SDL_WindowHasSurface(SDL_Window *window)
@ -3359,7 +3359,7 @@ SDL_Surface *SDL_GetWindowSurface(SDL_Window *window)
if (!window->surface_valid) { if (!window->surface_valid) {
if (window->surface) { if (window->surface) {
window->surface->flags &= ~SDL_DONTFREE; window->surface->internal->flags &= ~SDL_INTERNAL_SURFACE_DONTFREE;
SDL_DestroySurface(window->surface); SDL_DestroySurface(window->surface);
window->surface = NULL; window->surface = NULL;
} }
@ -3367,7 +3367,7 @@ SDL_Surface *SDL_GetWindowSurface(SDL_Window *window)
window->surface = SDL_CreateWindowFramebuffer(window); window->surface = SDL_CreateWindowFramebuffer(window);
if (window->surface) { if (window->surface) {
window->surface_valid = SDL_TRUE; window->surface_valid = SDL_TRUE;
window->surface->flags |= SDL_DONTFREE; window->surface->internal->flags |= SDL_INTERNAL_SURFACE_DONTFREE;
} }
} }
return window->surface; return window->surface;
@ -3425,7 +3425,7 @@ int SDL_DestroyWindowSurface(SDL_Window *window)
CHECK_WINDOW_MAGIC(window, -1); CHECK_WINDOW_MAGIC(window, -1);
if (window->surface) { if (window->surface) {
window->surface->flags &= ~SDL_DONTFREE; window->surface->internal->flags &= ~SDL_INTERNAL_SURFACE_DONTFREE;
SDL_DestroySurface(window->surface); SDL_DestroySurface(window->surface);
window->surface = NULL; window->surface = NULL;
window->surface_valid = SDL_FALSE; window->surface_valid = SDL_FALSE;
@ -4949,7 +4949,7 @@ static void CreateMaskFromColorKeyOrAlpha(SDL_Surface *icon, Uint8 *mask, int fl
mask[(y * ((icon->w + 7) / 8)) + (x / 8)] &= ~(0x01 << (7 - (x % 8))) mask[(y * ((icon->w + 7) / 8)) + (x / 8)] &= ~(0x01 << (7 - (x % 8)))
colorkey = icon->format->colorkey; colorkey = icon->format->colorkey;
switch (icon->format->bytes_per_pixel) { switch (SDL_BYTESPERPIXEL(icon->format)) {
case 1: case 1:
{ {
Uint8 *pixels; Uint8 *pixels;
@ -5370,7 +5370,7 @@ int SDL_SetWindowShape(SDL_Window *window, SDL_Surface *shape)
return -1; return -1;
} }
surface = SDL_ConvertSurfaceFormat(shape, SDL_PIXELFORMAT_ARGB32); surface = SDL_ConvertSurface(shape, SDL_PIXELFORMAT_ARGB32);
if (!surface) { if (!surface) {
return -1; return -1;
} }

View File

@ -27,7 +27,7 @@
#if SDL_HAVE_YUV #if SDL_HAVE_YUV
static SDL_bool IsPlanar2x2Format(SDL_PixelFormatEnum format); static SDL_bool IsPlanar2x2Format(SDL_PixelFormat format);
#endif #endif
/* /*
@ -36,7 +36,7 @@ static SDL_bool IsPlanar2x2Format(SDL_PixelFormatEnum format);
* *
* return 0 on success, -1 on error * return 0 on success, -1 on error
*/ */
int SDL_CalculateYUVSize(SDL_PixelFormatEnum format, int w, int h, size_t *size, size_t *pitch) int SDL_CalculateYUVSize(SDL_PixelFormat format, int w, int h, size_t *size, size_t *pitch)
{ {
#if SDL_HAVE_YUV #if SDL_HAVE_YUV
int sz_plane = 0, sz_plane_chroma = 0, sz_plane_packed = 0; int sz_plane = 0, sz_plane_chroma = 0, sz_plane_packed = 0;
@ -187,7 +187,7 @@ static int GetYUVConversionType(SDL_Colorspace colorspace, YCbCrType *yuv_type)
return SDL_SetError("Unsupported YUV colorspace"); return SDL_SetError("Unsupported YUV colorspace");
} }
static SDL_bool IsPlanar2x2Format(SDL_PixelFormatEnum format) static SDL_bool IsPlanar2x2Format(SDL_PixelFormat format)
{ {
return format == SDL_PIXELFORMAT_YV12 || format == SDL_PIXELFORMAT_IYUV || format == SDL_PIXELFORMAT_NV12 || format == SDL_PIXELFORMAT_NV21 || format == SDL_PIXELFORMAT_P010; return format == SDL_PIXELFORMAT_YV12 || format == SDL_PIXELFORMAT_IYUV || format == SDL_PIXELFORMAT_NV12 || format == SDL_PIXELFORMAT_NV21 || format == SDL_PIXELFORMAT_P010;
} }
@ -197,7 +197,7 @@ static SDL_bool IsPacked4Format(Uint32 format)
return format == SDL_PIXELFORMAT_YUY2 || format == SDL_PIXELFORMAT_UYVY || format == SDL_PIXELFORMAT_YVYU; return format == SDL_PIXELFORMAT_YUY2 || format == SDL_PIXELFORMAT_UYVY || format == SDL_PIXELFORMAT_YVYU;
} }
static int GetYUVPlanes(int width, int height, SDL_PixelFormatEnum format, const void *yuv, int yuv_pitch, static int GetYUVPlanes(int width, int height, SDL_PixelFormat format, const void *yuv, int yuv_pitch,
const Uint8 **y, const Uint8 **u, const Uint8 **v, Uint32 *y_stride, Uint32 *uv_stride) const Uint8 **y, const Uint8 **u, const Uint8 **v, Uint32 *y_stride, Uint32 *uv_stride)
{ {
const Uint8 *planes[3] = { NULL, NULL, NULL }; const Uint8 *planes[3] = { NULL, NULL, NULL };
@ -304,7 +304,7 @@ static int GetYUVPlanes(int width, int height, SDL_PixelFormatEnum format, const
#ifdef SDL_SSE2_INTRINSICS #ifdef SDL_SSE2_INTRINSICS
static SDL_bool SDL_TARGETING("sse2") yuv_rgb_sse( static SDL_bool SDL_TARGETING("sse2") yuv_rgb_sse(
SDL_PixelFormatEnum src_format, SDL_PixelFormatEnum dst_format, SDL_PixelFormat src_format, SDL_PixelFormat dst_format,
Uint32 width, Uint32 height, Uint32 width, Uint32 height,
const Uint8 *y, const Uint8 *u, const Uint8 *v, Uint32 y_stride, Uint32 uv_stride, const Uint8 *y, const Uint8 *u, const Uint8 *v, Uint32 y_stride, Uint32 uv_stride,
Uint8 *rgb, Uint32 rgb_stride, Uint8 *rgb, Uint32 rgb_stride,
@ -411,7 +411,7 @@ static SDL_bool SDL_TARGETING("sse2") yuv_rgb_sse(
} }
#else #else
static SDL_bool yuv_rgb_sse( static SDL_bool yuv_rgb_sse(
SDL_PixelFormatEnum src_format, SDL_PixelFormatEnum dst_format, SDL_PixelFormat src_format, SDL_PixelFormat dst_format,
Uint32 width, Uint32 height, Uint32 width, Uint32 height,
const Uint8 *y, const Uint8 *u, const Uint8 *v, Uint32 y_stride, Uint32 uv_stride, const Uint8 *y, const Uint8 *u, const Uint8 *v, Uint32 y_stride, Uint32 uv_stride,
Uint8 *rgb, Uint32 rgb_stride, Uint8 *rgb, Uint32 rgb_stride,
@ -423,7 +423,7 @@ static SDL_bool yuv_rgb_sse(
#ifdef SDL_LSX_INTRINSICS #ifdef SDL_LSX_INTRINSICS
static SDL_bool yuv_rgb_lsx( static SDL_bool yuv_rgb_lsx(
SDL_PixelFormatEnum src_format, SDL_PixelFormatEnum dst_format, SDL_PixelFormat src_format, SDL_PixelFormat dst_format,
Uint32 width, Uint32 height, Uint32 width, Uint32 height,
const Uint8 *y, const Uint8 *u, const Uint8 *v, Uint32 y_stride, Uint32 uv_stride, const Uint8 *y, const Uint8 *u, const Uint8 *v, Uint32 y_stride, Uint32 uv_stride,
Uint8 *rgb, Uint32 rgb_stride, Uint8 *rgb, Uint32 rgb_stride,
@ -463,7 +463,7 @@ static SDL_bool yuv_rgb_lsx(
} }
#else #else
static SDL_bool yuv_rgb_lsx( static SDL_bool yuv_rgb_lsx(
SDL_PixelFormatEnum src_format, SDL_PixelFormatEnum dst_format, SDL_PixelFormat src_format, SDL_PixelFormat dst_format,
Uint32 width, Uint32 height, Uint32 width, Uint32 height,
const Uint8 *y, const Uint8 *u, const Uint8 *v, Uint32 y_stride, Uint32 uv_stride, const Uint8 *y, const Uint8 *u, const Uint8 *v, Uint32 y_stride, Uint32 uv_stride,
Uint8 *rgb, Uint32 rgb_stride, Uint8 *rgb, Uint32 rgb_stride,
@ -474,7 +474,7 @@ static SDL_bool yuv_rgb_lsx(
#endif #endif
static SDL_bool yuv_rgb_std( static SDL_bool yuv_rgb_std(
SDL_PixelFormatEnum src_format, SDL_PixelFormatEnum dst_format, SDL_PixelFormat src_format, SDL_PixelFormat dst_format,
Uint32 width, Uint32 height, Uint32 width, Uint32 height,
const Uint8 *y, const Uint8 *u, const Uint8 *v, Uint32 y_stride, Uint32 uv_stride, const Uint8 *y, const Uint8 *u, const Uint8 *v, Uint32 y_stride, Uint32 uv_stride,
Uint8 *rgb, Uint32 rgb_stride, Uint8 *rgb, Uint32 rgb_stride,
@ -587,8 +587,8 @@ static SDL_bool yuv_rgb_std(
} }
int SDL_ConvertPixels_YUV_to_RGB(int width, int height, int SDL_ConvertPixels_YUV_to_RGB(int width, int height,
SDL_PixelFormatEnum src_format, SDL_Colorspace src_colorspace, SDL_PropertiesID src_properties, const void *src, int src_pitch, SDL_PixelFormat src_format, SDL_Colorspace src_colorspace, SDL_PropertiesID src_properties, const void *src, int src_pitch,
SDL_PixelFormatEnum dst_format, SDL_Colorspace dst_colorspace, SDL_PropertiesID dst_properties, void *dst, int dst_pitch) SDL_PixelFormat dst_format, SDL_Colorspace dst_colorspace, SDL_PropertiesID dst_properties, void *dst, int dst_pitch)
{ {
const Uint8 *y = NULL; const Uint8 *y = NULL;
const Uint8 *u = NULL; const Uint8 *u = NULL;
@ -709,7 +709,7 @@ static struct RGB2YUVFactors RGB2YUVFactorTables[] = {
}, },
}; };
static int SDL_ConvertPixels_ARGB8888_to_YUV(int width, int height, const void *src, int src_pitch, SDL_PixelFormatEnum dst_format, void *dst, int dst_pitch, YCbCrType yuv_type) static int SDL_ConvertPixels_ARGB8888_to_YUV(int width, int height, const void *src, int src_pitch, SDL_PixelFormat dst_format, void *dst, int dst_pitch, YCbCrType yuv_type)
{ {
const int src_pitch_x_2 = src_pitch * 2; const int src_pitch_x_2 = src_pitch * 2;
const int height_half = height / 2; const int height_half = height / 2;
@ -1000,7 +1000,7 @@ static int SDL_ConvertPixels_ARGB8888_to_YUV(int width, int height, const void *
return 0; return 0;
} }
static int SDL_ConvertPixels_XBGR2101010_to_P010(int width, int height, const void *src, int src_pitch, SDL_PixelFormatEnum dst_format, void *dst, int dst_pitch, YCbCrType yuv_type) static int SDL_ConvertPixels_XBGR2101010_to_P010(int width, int height, const void *src, int src_pitch, SDL_PixelFormat dst_format, void *dst, int dst_pitch, YCbCrType yuv_type)
{ {
const int src_pitch_x_2 = src_pitch * 2; const int src_pitch_x_2 = src_pitch * 2;
const int height_half = height / 2; const int height_half = height / 2;
@ -1123,8 +1123,8 @@ static int SDL_ConvertPixels_XBGR2101010_to_P010(int width, int height, const vo
} }
int SDL_ConvertPixels_RGB_to_YUV(int width, int height, int SDL_ConvertPixels_RGB_to_YUV(int width, int height,
SDL_PixelFormatEnum src_format, SDL_Colorspace src_colorspace, SDL_PropertiesID src_properties, const void *src, int src_pitch, SDL_PixelFormat src_format, SDL_Colorspace src_colorspace, SDL_PropertiesID src_properties, const void *src, int src_pitch,
SDL_PixelFormatEnum dst_format, SDL_Colorspace dst_colorspace, SDL_PropertiesID dst_properties, void *dst, int dst_pitch) SDL_PixelFormat dst_format, SDL_Colorspace dst_colorspace, SDL_PropertiesID dst_properties, void *dst, int dst_pitch)
{ {
YCbCrType yuv_type = YCBCR_601_LIMITED; YCbCrType yuv_type = YCBCR_601_LIMITED;
@ -1210,7 +1210,7 @@ int SDL_ConvertPixels_RGB_to_YUV(int width, int height,
} }
} }
static int SDL_ConvertPixels_YUV_to_YUV_Copy(int width, int height, SDL_PixelFormatEnum format, static int SDL_ConvertPixels_YUV_to_YUV_Copy(int width, int height, SDL_PixelFormat format,
const void *src, int src_pitch, void *dst, int dst_pitch) const void *src, int src_pitch, void *dst, int dst_pitch)
{ {
int i; int i;
@ -1677,8 +1677,8 @@ static int SDL_ConvertPixels_SwapNV(int width, int height, const void *src, int
} }
static int SDL_ConvertPixels_Planar2x2_to_Planar2x2(int width, int height, static int SDL_ConvertPixels_Planar2x2_to_Planar2x2(int width, int height,
SDL_PixelFormatEnum src_format, const void *src, int src_pitch, SDL_PixelFormat src_format, const void *src, int src_pitch,
SDL_PixelFormatEnum dst_format, void *dst, int dst_pitch) SDL_PixelFormat dst_format, void *dst, int dst_pitch)
{ {
if (src != dst) { if (src != dst) {
/* Copy Y plane */ /* Copy Y plane */
@ -2235,8 +2235,8 @@ static int SDL_ConvertPixels_YVYU_to_UYVY(int width, int height, const void *src
} }
static int SDL_ConvertPixels_Packed4_to_Packed4(int width, int height, static int SDL_ConvertPixels_Packed4_to_Packed4(int width, int height,
SDL_PixelFormatEnum src_format, const void *src, int src_pitch, SDL_PixelFormat src_format, const void *src, int src_pitch,
SDL_PixelFormatEnum dst_format, void *dst, int dst_pitch) SDL_PixelFormat dst_format, void *dst, int dst_pitch)
{ {
switch (src_format) { switch (src_format) {
case SDL_PIXELFORMAT_YUY2: case SDL_PIXELFORMAT_YUY2:
@ -2277,8 +2277,8 @@ static int SDL_ConvertPixels_Packed4_to_Packed4(int width, int height,
} }
static int SDL_ConvertPixels_Planar2x2_to_Packed4(int width, int height, static int SDL_ConvertPixels_Planar2x2_to_Packed4(int width, int height,
SDL_PixelFormatEnum src_format, const void *src, int src_pitch, SDL_PixelFormat src_format, const void *src, int src_pitch,
SDL_PixelFormatEnum dst_format, void *dst, int dst_pitch) SDL_PixelFormat dst_format, void *dst, int dst_pitch)
{ {
int x, y; int x, y;
const Uint8 *srcY1, *srcY2, *srcU, *srcV; const Uint8 *srcY1, *srcY2, *srcU, *srcV;
@ -2419,8 +2419,8 @@ static int SDL_ConvertPixels_Planar2x2_to_Packed4(int width, int height,
} }
static int SDL_ConvertPixels_Packed4_to_Planar2x2(int width, int height, static int SDL_ConvertPixels_Packed4_to_Planar2x2(int width, int height,
SDL_PixelFormatEnum src_format, const void *src, int src_pitch, SDL_PixelFormat src_format, const void *src, int src_pitch,
SDL_PixelFormatEnum dst_format, void *dst, int dst_pitch) SDL_PixelFormat dst_format, void *dst, int dst_pitch)
{ {
int x, y; int x, y;
const Uint8 *srcY1, *srcY2, *srcU1, *srcU2, *srcV1, *srcV2; const Uint8 *srcY1, *srcY2, *srcU1, *srcU2, *srcV1, *srcV2;
@ -2552,8 +2552,8 @@ static int SDL_ConvertPixels_Packed4_to_Planar2x2(int width, int height,
#endif /* SDL_HAVE_YUV */ #endif /* SDL_HAVE_YUV */
int SDL_ConvertPixels_YUV_to_YUV(int width, int height, int SDL_ConvertPixels_YUV_to_YUV(int width, int height,
SDL_PixelFormatEnum src_format, SDL_Colorspace src_colorspace, SDL_PropertiesID src_properties, const void *src, int src_pitch, SDL_PixelFormat src_format, SDL_Colorspace src_colorspace, SDL_PropertiesID src_properties, const void *src, int src_pitch,
SDL_PixelFormatEnum dst_format, SDL_Colorspace dst_colorspace, SDL_PropertiesID dst_properties, void *dst, int dst_pitch) SDL_PixelFormat dst_format, SDL_Colorspace dst_colorspace, SDL_PropertiesID dst_properties, void *dst, int dst_pitch)
{ {
#if SDL_HAVE_YUV #if SDL_HAVE_YUV
if (src_colorspace != dst_colorspace) { if (src_colorspace != dst_colorspace) {

View File

@ -26,11 +26,11 @@
/* YUV conversion functions */ /* YUV conversion functions */
extern int SDL_ConvertPixels_YUV_to_RGB(int width, int height, SDL_PixelFormatEnum src_format, SDL_Colorspace src_colorspace, SDL_PropertiesID src_properties, const void *src, int src_pitch, SDL_PixelFormatEnum dst_format, SDL_Colorspace dst_colorspace, SDL_PropertiesID dst_properties, void *dst, int dst_pitch); extern int SDL_ConvertPixels_YUV_to_RGB(int width, int height, SDL_PixelFormat src_format, SDL_Colorspace src_colorspace, SDL_PropertiesID src_properties, const void *src, int src_pitch, SDL_PixelFormat dst_format, SDL_Colorspace dst_colorspace, SDL_PropertiesID dst_properties, void *dst, int dst_pitch);
extern int SDL_ConvertPixels_RGB_to_YUV(int width, int height, SDL_PixelFormatEnum src_format, SDL_Colorspace src_colorspace, SDL_PropertiesID src_properties, const void *src, int src_pitch, SDL_PixelFormatEnum dst_format, SDL_Colorspace dst_colorspace, SDL_PropertiesID dst_properties, void *dst, int dst_pitch); extern int SDL_ConvertPixels_RGB_to_YUV(int width, int height, SDL_PixelFormat src_format, SDL_Colorspace src_colorspace, SDL_PropertiesID src_properties, const void *src, int src_pitch, SDL_PixelFormat dst_format, SDL_Colorspace dst_colorspace, SDL_PropertiesID dst_properties, void *dst, int dst_pitch);
extern int SDL_ConvertPixels_YUV_to_YUV(int width, int height, SDL_PixelFormatEnum src_format, SDL_Colorspace src_colorspace, SDL_PropertiesID src_properties, const void *src, int src_pitch, SDL_PixelFormatEnum dst_format, SDL_Colorspace dst_colorspace, SDL_PropertiesID dst_properties, void *dst, int dst_pitch); extern int SDL_ConvertPixels_YUV_to_YUV(int width, int height, SDL_PixelFormat src_format, SDL_Colorspace src_colorspace, SDL_PropertiesID src_properties, const void *src, int src_pitch, SDL_PixelFormat dst_format, SDL_Colorspace dst_colorspace, SDL_PropertiesID dst_properties, void *dst, int dst_pitch);
extern int SDL_CalculateYUVSize(SDL_PixelFormatEnum format, int w, int h, size_t *size, size_t *pitch); extern int SDL_CalculateYUVSize(SDL_PixelFormat format, int w, int h, size_t *size, size_t *pitch);
#endif /* SDL_yuv_c_h_ */ #endif /* SDL_yuv_c_h_ */

View File

@ -84,7 +84,7 @@ static SDL_Cursor *Android_CreateCursor(SDL_Surface *surface, int hot_x, int hot
int custom_cursor; int custom_cursor;
SDL_Surface *converted; SDL_Surface *converted;
converted = SDL_ConvertSurfaceFormat(surface, SDL_PIXELFORMAT_ARGB8888); converted = SDL_ConvertSurface(surface, SDL_PIXELFORMAT_ARGB8888);
if (!converted) { if (!converted) {
return NULL; return NULL;
} }

View File

@ -256,7 +256,7 @@ NSImage *Cocoa_CreateImage(SDL_Surface *surface)
int i; int i;
NSImage *img; NSImage *img;
converted = SDL_ConvertSurfaceFormat(surface, SDL_PIXELFORMAT_RGBA32); converted = SDL_ConvertSurface(surface, SDL_PIXELFORMAT_RGBA32);
if (!converted) { if (!converted) {
return nil; return nil;
} }
@ -270,7 +270,7 @@ NSImage *Cocoa_CreateImage(SDL_Surface *surface)
isPlanar:NO isPlanar:NO
colorSpaceName:NSDeviceRGBColorSpace colorSpaceName:NSDeviceRGBColorSpace
bytesPerRow:converted->pitch bytesPerRow:converted->pitch
bitsPerPixel:converted->format->bits_per_pixel]; bitsPerPixel:SDL_BITSPERPIXEL(converted->format)];
if (imgrep == nil) { if (imgrep == nil) {
SDL_DestroySurface(converted); SDL_DestroySurface(converted);
return nil; return nil;

View File

@ -29,10 +29,10 @@
#define DUMMY_SURFACE "SDL.internal.window.surface" #define DUMMY_SURFACE "SDL.internal.window.surface"
int SDL_DUMMY_CreateWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window *window, SDL_PixelFormatEnum *format, void **pixels, int *pitch) int SDL_DUMMY_CreateWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window *window, SDL_PixelFormat *format, void **pixels, int *pitch)
{ {
SDL_Surface *surface; SDL_Surface *surface;
const SDL_PixelFormatEnum surface_format = SDL_PIXELFORMAT_XRGB8888; const SDL_PixelFormat surface_format = SDL_PIXELFORMAT_XRGB8888;
int w, h; int w, h;
/* Create a new framebuffer */ /* Create a new framebuffer */

View File

@ -24,7 +24,7 @@
#include "SDL_internal.h" #include "SDL_internal.h"
extern int SDL_DUMMY_CreateWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window *window, SDL_PixelFormatEnum *format, void **pixels, int *pitch); extern int SDL_DUMMY_CreateWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window *window, SDL_PixelFormat *format, void **pixels, int *pitch);
extern int SDL_DUMMY_UpdateWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window *window, const SDL_Rect *rects, int numrects); extern int SDL_DUMMY_UpdateWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window *window, const SDL_Rect *rects, int numrects);
extern void SDL_DUMMY_DestroyWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window *window); extern void SDL_DUMMY_DestroyWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window *window);

View File

@ -27,10 +27,10 @@
#include <emscripten/threading.h> #include <emscripten/threading.h>
int Emscripten_CreateWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window *window, SDL_PixelFormatEnum *format, void **pixels, int *pitch) int Emscripten_CreateWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window *window, SDL_PixelFormat *format, void **pixels, int *pitch)
{ {
SDL_Surface *surface; SDL_Surface *surface;
const SDL_PixelFormatEnum surface_format = SDL_PIXELFORMAT_XBGR8888; const SDL_PixelFormat surface_format = SDL_PIXELFORMAT_XBGR8888;
int w, h; int w, h;
/* Free the old framebuffer surface */ /* Free the old framebuffer surface */

View File

@ -23,7 +23,7 @@
#ifndef SDL_emscriptenframebuffer_h_ #ifndef SDL_emscriptenframebuffer_h_
#define SDL_emscriptenframebuffer_h_ #define SDL_emscriptenframebuffer_h_
extern int Emscripten_CreateWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window *window, SDL_PixelFormatEnum *format, void **pixels, int *pitch); extern int Emscripten_CreateWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window *window, SDL_PixelFormat *format, void **pixels, int *pitch);
extern int Emscripten_UpdateWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window *window, const SDL_Rect *rects, int numrects); extern int Emscripten_UpdateWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window *window, const SDL_Rect *rects, int numrects);
extern void Emscripten_DestroyWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window *window); extern void Emscripten_DestroyWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window *window);

View File

@ -72,7 +72,7 @@ static SDL_Cursor *Emscripten_CreateCursor(SDL_Surface *surface, int hot_x, int
const char *cursor_url = NULL; const char *cursor_url = NULL;
SDL_Surface *conv_surf; SDL_Surface *conv_surf;
conv_surf = SDL_ConvertSurfaceFormat(surface, SDL_PIXELFORMAT_ABGR8888); conv_surf = SDL_ConvertSurface(surface, SDL_PIXELFORMAT_ABGR8888);
if (!conv_surf) { if (!conv_surf) {
return NULL; return NULL;

View File

@ -44,7 +44,7 @@ static SDL_INLINE SDL_BLooper *_GetBeLooper() {
} }
int HAIKU_CreateWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window * window, int HAIKU_CreateWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window * window,
SDL_PixelFormatEnum * format, SDL_PixelFormat * format,
void ** pixels, int *pitch) { void ** pixels, int *pitch) {
SDL_BWin *bwin = _ToBeWin(window); SDL_BWin *bwin = _ToBeWin(window);
BScreen bscreen; BScreen bscreen;

View File

@ -31,7 +31,7 @@ extern "C" {
#include "../SDL_sysvideo.h" #include "../SDL_sysvideo.h"
extern int HAIKU_CreateWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window *window, extern int HAIKU_CreateWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window *window,
SDL_PixelFormatEnum *format, SDL_PixelFormat *format,
void **pixels, int *pitch); void **pixels, int *pitch);
extern int HAIKU_UpdateWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window *window, extern int HAIKU_UpdateWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window *window,
const SDL_Rect *rects, int numrects); const SDL_Rect *rects, int numrects);

View File

@ -132,7 +132,7 @@ void _SpoutModeData(display_mode *bmode) {
SDL_PixelFormatEnum HAIKU_ColorSpaceToSDLPxFormat(uint32 colorspace) SDL_PixelFormat HAIKU_ColorSpaceToSDLPxFormat(uint32 colorspace)
{ {
switch (colorspace) { switch (colorspace) {
case B_CMAP8: case B_CMAP8:

View File

@ -28,7 +28,7 @@ extern "C" {
#include "../SDL_sysvideo.h" #include "../SDL_sysvideo.h"
extern SDL_PixelFormatEnum HAIKU_ColorSpaceToSDLPxFormat(uint32 colorspace); extern SDL_PixelFormat HAIKU_ColorSpaceToSDLPxFormat(uint32 colorspace);
extern int HAIKU_InitModes(SDL_VideoDevice *_this); extern int HAIKU_InitModes(SDL_VideoDevice *_this);
extern int HAIKU_QuitModes(SDL_VideoDevice *_this); extern int HAIKU_QuitModes(SDL_VideoDevice *_this);

View File

@ -179,7 +179,7 @@ static SDL_Cursor * HAIKU_CreateCursor(SDL_Surface * surface, int hot_x, int hot
SDL_Cursor *cursor; SDL_Cursor *cursor;
SDL_Surface *converted; SDL_Surface *converted;
converted = SDL_ConvertSurfaceFormat(surface, SDL_PIXELFORMAT_ARGB8888); converted = SDL_ConvertSurface(surface, SDL_PIXELFORMAT_ARGB8888);
if (!converted) { if (!converted) {
return NULL; return NULL;
} }

View File

@ -266,7 +266,7 @@ static SDL_Cursor *KMSDRM_CreateCursor(SDL_Surface *surface, int hot_x, int hot_
alpha-premultiplied, but the SDL surface we receive has alpha-premultiplied, but the SDL surface we receive has
straight-alpha pixels, so we always have to convert. */ straight-alpha pixels, so we always have to convert. */
SDL_PremultiplyAlpha(surface->w, surface->h, SDL_PremultiplyAlpha(surface->w, surface->h,
surface->format->format, surface->pixels, surface->pitch, surface->format, surface->pixels, surface->pitch,
SDL_PIXELFORMAT_ARGB8888, curdata->buffer, surface->w * 4); SDL_PIXELFORMAT_ARGB8888, curdata->buffer, surface->w * 4);
cursor->driverdata = curdata; cursor->driverdata = curdata;

View File

@ -42,7 +42,7 @@ static int GetSourceOffset(int x, int y, int source_width);
static void FlushN3DSBuffer(const void *buffer, u32 bufsize, gfxScreen_t screen); static void FlushN3DSBuffer(const void *buffer, u32 bufsize, gfxScreen_t screen);
int SDL_N3DS_CreateWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window *window, SDL_PixelFormatEnum *format, void **pixels, int *pitch) int SDL_N3DS_CreateWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window *window, SDL_PixelFormat *format, void **pixels, int *pitch)
{ {
SDL_Surface *framebuffer; SDL_Surface *framebuffer;
const SDL_DisplayMode *mode; const SDL_DisplayMode *mode;
@ -82,10 +82,10 @@ int SDL_N3DS_UpdateWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window *window,
framebuffer = gfxGetFramebuffer(drv_data->screen, GFX_LEFT, &width, &height); framebuffer = gfxGetFramebuffer(drv_data->screen, GFX_LEFT, &width, &height);
bufsize = width * height * 4; bufsize = width * height * 4;
if (surface->format->bytes_per_pixel == 2) if (SDL_BYTESPERPIXEL(surface->format) == 2)
CopyFramebuffertoN3DS_16(framebuffer, (Dimensions){ width, height }, CopyFramebuffertoN3DS_16(framebuffer, (Dimensions){ width, height },
surface->pixels, (Dimensions){ surface->w, surface->h }); surface->pixels, (Dimensions){ surface->w, surface->h });
else if (surface->format->bytes_per_pixel == 3) else if (SDL_BYTESPERPIXEL(surface->format) == 3)
CopyFramebuffertoN3DS_24(framebuffer, (Dimensions){ width, height }, CopyFramebuffertoN3DS_24(framebuffer, (Dimensions){ width, height },
surface->pixels, (Dimensions){ surface->w, surface->h }); surface->pixels, (Dimensions){ surface->w, surface->h });
else else

View File

@ -24,7 +24,7 @@
#include "SDL_internal.h" #include "SDL_internal.h"
int SDL_N3DS_CreateWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window *window, SDL_PixelFormatEnum *format, void **pixels, int *pitch); int SDL_N3DS_CreateWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window *window, SDL_PixelFormat *format, void **pixels, int *pitch);
int SDL_N3DS_UpdateWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window *window, const SDL_Rect *rects, int numrects); int SDL_N3DS_UpdateWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window *window, const SDL_Rect *rects, int numrects);
void SDL_N3DS_DestroyWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window *window); void SDL_N3DS_DestroyWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window *window);

View File

@ -53,7 +53,7 @@ struct SDL_DisplayModeData
static const struct static const struct
{ {
SDL_PixelFormatEnum pixfmt; SDL_PixelFormat pixfmt;
GSPGPU_FramebufferFormat gspfmt; GSPGPU_FramebufferFormat gspfmt;
} format_map[] = { } format_map[] = {
{ SDL_PIXELFORMAT_RGBA8888, GSP_RGBA8_OES }, { SDL_PIXELFORMAT_RGBA8888, GSP_RGBA8_OES },

View File

@ -44,11 +44,11 @@ void DrawBackground(SDL_VideoDevice *_this);
void DirectDraw(SDL_VideoDevice *_this, int numrects, SDL_Rect *rects, TUint16 *screenBuffer); void DirectDraw(SDL_VideoDevice *_this, int numrects, SDL_Rect *rects, TUint16 *screenBuffer);
void RedrawWindowL(SDL_VideoDevice *_this); void RedrawWindowL(SDL_VideoDevice *_this);
int SDL_NGAGE_CreateWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window *window, SDL_PixelFormatEnum *format, void **pixels, int *pitch) int SDL_NGAGE_CreateWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window *window, SDL_PixelFormat *format, void **pixels, int *pitch)
{ {
SDL_VideoData *phdata = _this->driverdata; SDL_VideoData *phdata = _this->driverdata;
SDL_Surface *surface; SDL_Surface *surface;
const SDL_PixelFormatEnum surface_format = SDL_PIXELFORMAT_XRGB4444; const SDL_PixelFormat surface_format = SDL_PIXELFORMAT_XRGB4444;
int w, h; int w, h;
/* Free the old framebuffer surface */ /* Free the old framebuffer surface */

View File

@ -21,7 +21,7 @@
#include "SDL_internal.h" #include "SDL_internal.h"
extern int SDL_NGAGE_CreateWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window *window, SDL_PixelFormatEnum *format, void **pixels, int *pitch); extern int SDL_NGAGE_CreateWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window *window, SDL_PixelFormat *format, void **pixels, int *pitch);
extern int SDL_NGAGE_UpdateWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window *window, const SDL_Rect *rects, int numrects); extern int SDL_NGAGE_UpdateWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window *window, const SDL_Rect *rects, int numrects);
extern void SDL_NGAGE_DestroyWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window *window); extern void SDL_NGAGE_DestroyWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window *window);

View File

@ -29,10 +29,10 @@
#define OFFSCREEN_SURFACE "SDL.internal.window.surface" #define OFFSCREEN_SURFACE "SDL.internal.window.surface"
int SDL_OFFSCREEN_CreateWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window *window, SDL_PixelFormatEnum *format, void **pixels, int *pitch) int SDL_OFFSCREEN_CreateWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window *window, SDL_PixelFormat *format, void **pixels, int *pitch)
{ {
SDL_Surface *surface; SDL_Surface *surface;
const SDL_PixelFormatEnum surface_format = SDL_PIXELFORMAT_XRGB8888; const SDL_PixelFormat surface_format = SDL_PIXELFORMAT_XRGB8888;
int w, h; int w, h;
/* Create a new framebuffer */ /* Create a new framebuffer */

View File

@ -20,6 +20,6 @@
*/ */
#include "SDL_internal.h" #include "SDL_internal.h"
extern int SDL_OFFSCREEN_CreateWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window *window, SDL_PixelFormatEnum *format, void **pixels, int *pitch); extern int SDL_OFFSCREEN_CreateWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window *window, SDL_PixelFormat *format, void **pixels, int *pitch);
extern int SDL_OFFSCREEN_UpdateWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window *window, const SDL_Rect *rects, int numrects); extern int SDL_OFFSCREEN_UpdateWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window *window, const SDL_Rect *rects, int numrects);
extern void SDL_OFFSCREEN_DestroyWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window *window); extern void SDL_OFFSCREEN_DestroyWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window *window);

View File

@ -152,7 +152,7 @@ fail:
* @param[out] pitch Holds the number of bytes per line * @param[out] pitch Holds the number of bytes per line
* @return 0 if successful, -1 on error * @return 0 if successful, -1 on error
*/ */
static int createWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window * window, SDL_PixelFormatEnum * format, static int createWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window * window, SDL_PixelFormat * format,
void ** pixels, int *pitch) void ** pixels, int *pitch)
{ {
window_impl_t *impl = (window_impl_t *)window->driverdata; window_impl_t *impl = (window_impl_t *)window->driverdata;

View File

@ -61,7 +61,7 @@ static SDL_Cursor *RPI_CreateCursor(SDL_Surface *surface, int hot_x, int hot_y)
VC_RECT_T dst_rect; VC_RECT_T dst_rect;
Uint32 dummy; Uint32 dummy;
SDL_assert(surface->format->format == SDL_PIXELFORMAT_ARGB8888); SDL_assert(surface->format == SDL_PIXELFORMAT_ARGB8888);
SDL_assert(surface->pitch == surface->w * 4); SDL_assert(surface->pitch == surface->w * 4);
cursor = (SDL_Cursor *)SDL_calloc(1, sizeof(*cursor)); cursor = (SDL_Cursor *)SDL_calloc(1, sizeof(*cursor));

View File

@ -30,7 +30,7 @@
#include <kernel.h> #include <kernel.h>
#include <swis.h> #include <swis.h>
int RISCOS_CreateWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window *window, SDL_PixelFormatEnum *format, void **pixels, int *pitch) int RISCOS_CreateWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window *window, SDL_PixelFormat *format, void **pixels, int *pitch)
{ {
SDL_WindowData *driverdata = window->driverdata; SDL_WindowData *driverdata = window->driverdata;
const char *sprite_name = "display"; const char *sprite_name = "display";

View File

@ -24,7 +24,7 @@
#include "SDL_internal.h" #include "SDL_internal.h"
extern int RISCOS_CreateWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window *window, SDL_PixelFormatEnum *format, void **pixels, int *pitch); extern int RISCOS_CreateWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window *window, SDL_PixelFormat *format, void **pixels, int *pitch);
extern int RISCOS_UpdateWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window *window, const SDL_Rect *rects, int numrects); extern int RISCOS_UpdateWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window *window, const SDL_Rect *rects, int numrects);
extern void RISCOS_DestroyWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window *window); extern void RISCOS_DestroyWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window *window);

View File

@ -45,7 +45,7 @@ enum
static const struct static const struct
{ {
SDL_PixelFormatEnum pixel_format; SDL_PixelFormat pixel_format;
int modeflags, ncolour, log2bpp; int modeflags, ncolour, log2bpp;
} mode_to_pixelformat[] = { } mode_to_pixelformat[] = {
/* { SDL_PIXELFORMAT_INDEX1LSB, 0, 1, 0 }, */ /* { SDL_PIXELFORMAT_INDEX1LSB, 0, 1, 0 }, */
@ -70,7 +70,7 @@ static const struct
{ SDL_PIXELFORMAT_ARGB8888, MODE_FLAG_ARGB, -1, 5 } { SDL_PIXELFORMAT_ARGB8888, MODE_FLAG_ARGB, -1, 5 }
}; };
static SDL_PixelFormatEnum RISCOS_ModeToPixelFormat(int ncolour, int modeflags, int log2bpp) static SDL_PixelFormat RISCOS_ModeToPixelFormat(int ncolour, int modeflags, int log2bpp)
{ {
int i; int i;

View File

@ -63,7 +63,7 @@ void vita_gpu_free(SceUID uid)
sceKernelFreeMemBlock(uid); sceKernelFreeMemBlock(uid);
} }
int VITA_CreateWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window *window, SDL_PixelFormatEnum *format, void **pixels, int *pitch) int VITA_CreateWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window *window, SDL_PixelFormat *format, void **pixels, int *pitch)
{ {
SDL_WindowData *data = window->driverdata; SDL_WindowData *data = window->driverdata;
SceDisplayFrameBuf framebuf; SceDisplayFrameBuf framebuf;

View File

@ -20,6 +20,6 @@
*/ */
#include "SDL_internal.h" #include "SDL_internal.h"
extern int VITA_CreateWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window *window, SDL_PixelFormatEnum *format, void **pixels, int *pitch); extern int VITA_CreateWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window *window, SDL_PixelFormat *format, void **pixels, int *pitch);
extern int VITA_UpdateWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window *window, const SDL_Rect *rects, int numrects); extern int VITA_UpdateWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window *window, const SDL_Rect *rects, int numrects);
extern void VITA_DestroyWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window *window); extern void VITA_DestroyWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window *window);

View File

@ -440,7 +440,7 @@ static SDL_Cursor *Wayland_CreateCursor(SDL_Surface *surface, int hot_x, int hot
/* Wayland requires premultiplied alpha for its surfaces. */ /* Wayland requires premultiplied alpha for its surfaces. */
SDL_PremultiplyAlpha(surface->w, surface->h, SDL_PremultiplyAlpha(surface->w, surface->h,
surface->format->format, surface->pixels, surface->pitch, surface->format, surface->pixels, surface->pitch,
SDL_PIXELFORMAT_ARGB8888, data->cursor_data.custom.shm_data, surface->w * 4); SDL_PIXELFORMAT_ARGB8888, data->cursor_data.custom.shm_data, surface->w * 4);
data->surface = wl_compositor_create_surface(wd->compositor); data->surface = wl_compositor_create_surface(wd->compositor);

View File

@ -24,7 +24,7 @@
#include "SDL_windowsvideo.h" #include "SDL_windowsvideo.h"
int WIN_CreateWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window *window, SDL_PixelFormatEnum *format, void **pixels, int *pitch) int WIN_CreateWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window *window, SDL_PixelFormat *format, void **pixels, int *pitch)
{ {
SDL_WindowData *data = window->driverdata; SDL_WindowData *data = window->driverdata;
SDL_bool isstack; SDL_bool isstack;
@ -66,7 +66,7 @@ int WIN_CreateWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window *window, SDL_
bpp = info->bmiHeader.biPlanes * info->bmiHeader.biBitCount; bpp = info->bmiHeader.biPlanes * info->bmiHeader.biBitCount;
masks = (Uint32 *)((Uint8 *)info + info->bmiHeader.biSize); masks = (Uint32 *)((Uint8 *)info + info->bmiHeader.biSize);
*format = SDL_GetPixelFormatEnumForMasks(bpp, masks[0], masks[1], masks[2], 0); *format = SDL_GetPixelFormatForMasks(bpp, masks[0], masks[1], masks[2], 0);
} }
if (*format == SDL_PIXELFORMAT_UNKNOWN) { if (*format == SDL_PIXELFORMAT_UNKNOWN) {
/* We'll use RGB format for now */ /* We'll use RGB format for now */

View File

@ -20,6 +20,6 @@
*/ */
#include "SDL_internal.h" #include "SDL_internal.h"
extern int WIN_CreateWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window *window, SDL_PixelFormatEnum *format, void **pixels, int *pitch); extern int WIN_CreateWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window *window, SDL_PixelFormat *format, void **pixels, int *pitch);
extern int WIN_UpdateWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window *window, const SDL_Rect *rects, int numrects); extern int WIN_UpdateWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window *window, const SDL_Rect *rects, int numrects);
extern void WIN_DestroyWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window *window); extern void WIN_DestroyWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window *window);

View File

@ -49,7 +49,7 @@ static SDL_bool IsMonochromeSurface(SDL_Surface *surface)
int x, y; int x, y;
Uint8 r, g, b, a; Uint8 r, g, b, a;
SDL_assert(surface->format->format == SDL_PIXELFORMAT_ARGB8888); SDL_assert(surface->format == SDL_PIXELFORMAT_ARGB8888);
for (y = 0; y < surface->h; y++) { for (y = 0; y < surface->h; y++) {
for (x = 0; x < surface->w; x++) { for (x = 0; x < surface->w; x++) {
@ -76,7 +76,7 @@ static HBITMAP CreateColorBitmap(SDL_Surface *surface)
BITMAPINFO bi; BITMAPINFO bi;
void *pixels; void *pixels;
SDL_assert(surface->format->format == SDL_PIXELFORMAT_ARGB8888); SDL_assert(surface->format == SDL_PIXELFORMAT_ARGB8888);
SDL_zero(bi); SDL_zero(bi);
bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
@ -114,7 +114,7 @@ static HBITMAP CreateMaskBitmap(SDL_Surface *surface, SDL_bool is_monochrome)
const int size = pitch * surface->h; const int size = pitch * surface->h;
static const unsigned char masks[] = { 0x80, 0x40, 0x20, 0x10, 0x8, 0x4, 0x2, 0x1 }; static const unsigned char masks[] = { 0x80, 0x40, 0x20, 0x10, 0x8, 0x4, 0x2, 0x1 };
SDL_assert(surface->format->format == SDL_PIXELFORMAT_ARGB8888); SDL_assert(surface->format == SDL_PIXELFORMAT_ARGB8888);
pixels = SDL_small_alloc(Uint8, size * (is_monochrome ? 2 : 1), &isstack); pixels = SDL_small_alloc(Uint8, size * (is_monochrome ? 2 : 1), &isstack);
if (!pixels) { if (!pixels) {

Some files were not shown because too many files have changed in this diff Show More