|
@@ -801,6 +801,54 @@ SDL_FindColor(SDL_Palette * pal, Uint8 r, Uint8 g, Uint8 b, Uint8 a)
|
|
|
return (pixel);
|
|
|
}
|
|
|
|
|
|
+/* 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)
|
|
|
+{
|
|
|
+ int i;
|
|
|
+
|
|
|
+ {
|
|
|
+ SDL_bool all_opaque = SDL_TRUE;
|
|
|
+ for (i = 0; i < pal->ncolors; i++) {
|
|
|
+ Uint8 alpha_value = pal->colors[i].a;
|
|
|
+ if (alpha_value != SDL_ALPHA_OPAQUE) {
|
|
|
+ all_opaque = SDL_FALSE;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (all_opaque) {
|
|
|
+ /* Palette is opaque, with an alpha channel */
|
|
|
+ *is_opaque = SDL_TRUE;
|
|
|
+ *has_alpha_channel = SDL_TRUE;
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ {
|
|
|
+ SDL_bool all_transparent = SDL_TRUE;
|
|
|
+ for (i = 0; i < pal->ncolors; i++) {
|
|
|
+ Uint8 alpha_value = pal->colors[i].a;
|
|
|
+ if (alpha_value != SDL_ALPHA_TRANSPARENT) {
|
|
|
+ all_transparent = SDL_FALSE;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (all_transparent) {
|
|
|
+ /* Palette is opaque, without an alpha channel */
|
|
|
+ *is_opaque = SDL_TRUE;
|
|
|
+ *has_alpha_channel = SDL_FALSE;
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /* Palette has alpha values */
|
|
|
+ *is_opaque = SDL_FALSE;
|
|
|
+ *has_alpha_channel = SDL_TRUE;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
/* Find the opaque pixel value corresponding to an RGB triple */
|
|
|
Uint32
|
|
|
SDL_MapRGB(const SDL_PixelFormat * format, Uint8 r, Uint8 g, Uint8 b)
|