mirror of https://github.com/encounter/SDL.git
Fixed SDL_ISPIXELFORMAT_ALPHA to check pixel orders that match pixel type.
Otherwise, SDL_PIXELFORMAT_BGR24 is reported as having alpha, because its SDL_ARRAYORDER_BGR pixel order uses the same integer value as SDL_PACKEDORDER_RGBA, since we weren't checking the pixel type to differentiate. Fixes Bugzilla #2977.
This commit is contained in:
parent
e58a5c43c4
commit
1899dfb041
|
@ -86,6 +86,8 @@ enum
|
||||||
};
|
};
|
||||||
|
|
||||||
/** Array component order, low byte -> high byte. */
|
/** Array component order, low byte -> high byte. */
|
||||||
|
/* !!! FIXME: in 2.1, make these not overlap differently with
|
||||||
|
!!! FIXME: SDL_PACKEDORDER_*, so we can simplify SDL_ISPIXELFORMAT_ALPHA */
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
SDL_ARRAYORDER_NONE,
|
SDL_ARRAYORDER_NONE,
|
||||||
|
@ -134,12 +136,31 @@ enum
|
||||||
(SDL_PIXELTYPE(format) == SDL_PIXELTYPE_INDEX4) || \
|
(SDL_PIXELTYPE(format) == SDL_PIXELTYPE_INDEX4) || \
|
||||||
(SDL_PIXELTYPE(format) == SDL_PIXELTYPE_INDEX8)))
|
(SDL_PIXELTYPE(format) == SDL_PIXELTYPE_INDEX8)))
|
||||||
|
|
||||||
#define SDL_ISPIXELFORMAT_ALPHA(format) \
|
#define SDL_ISPIXELFORMAT_PACKED(format) \
|
||||||
(!SDL_ISPIXELFORMAT_FOURCC(format) && \
|
(!SDL_ISPIXELFORMAT_FOURCC(format) && \
|
||||||
|
((SDL_PIXELTYPE(format) == SDL_PIXELTYPE_PACKED8) || \
|
||||||
|
(SDL_PIXELTYPE(format) == SDL_PIXELTYPE_PACKED16) || \
|
||||||
|
(SDL_PIXELTYPE(format) == SDL_PIXELTYPE_PACKED32)))
|
||||||
|
|
||||||
|
#define SDL_ISPIXELFORMAT_ARRAY(format) \
|
||||||
|
(!SDL_ISPIXELFORMAT_FOURCC(format) && \
|
||||||
|
((SDL_PIXELTYPE(format) == SDL_PIXELTYPE_ARRAYU8) || \
|
||||||
|
(SDL_PIXELTYPE(format) == SDL_PIXELTYPE_ARRAYU16) || \
|
||||||
|
(SDL_PIXELTYPE(format) == SDL_PIXELTYPE_ARRAYU32) || \
|
||||||
|
(SDL_PIXELTYPE(format) == SDL_PIXELTYPE_ARRAYF16) || \
|
||||||
|
(SDL_PIXELTYPE(format) == SDL_PIXELTYPE_ARRAYF32)))
|
||||||
|
|
||||||
|
#define SDL_ISPIXELFORMAT_ALPHA(format) \
|
||||||
|
((SDL_ISPIXELFORMAT_PACKED(format) && \
|
||||||
((SDL_PIXELORDER(format) == SDL_PACKEDORDER_ARGB) || \
|
((SDL_PIXELORDER(format) == SDL_PACKEDORDER_ARGB) || \
|
||||||
(SDL_PIXELORDER(format) == SDL_PACKEDORDER_RGBA) || \
|
(SDL_PIXELORDER(format) == SDL_PACKEDORDER_RGBA) || \
|
||||||
(SDL_PIXELORDER(format) == SDL_PACKEDORDER_ABGR) || \
|
(SDL_PIXELORDER(format) == SDL_PACKEDORDER_ABGR) || \
|
||||||
(SDL_PIXELORDER(format) == SDL_PACKEDORDER_BGRA)))
|
(SDL_PIXELORDER(format) == SDL_PACKEDORDER_BGRA))) || \
|
||||||
|
(SDL_ISPIXELFORMAT_ARRAY(format) && \
|
||||||
|
((SDL_PIXELORDER(format) == SDL_ARRAYORDER_ARGB) || \
|
||||||
|
(SDL_PIXELORDER(format) == SDL_ARRAYORDER_RGBA) || \
|
||||||
|
(SDL_PIXELORDER(format) == SDL_ARRAYORDER_ABGR) || \
|
||||||
|
(SDL_PIXELORDER(format) == SDL_ARRAYORDER_BGRA))))
|
||||||
|
|
||||||
/* The flag is set to 1 because 0x1? is not in the printable ASCII range */
|
/* The flag is set to 1 because 0x1? is not in the printable ASCII range */
|
||||||
#define SDL_ISPIXELFORMAT_FOURCC(format) \
|
#define SDL_ISPIXELFORMAT_FOURCC(format) \
|
||||||
|
|
Loading…
Reference in New Issue