aboutsummaryrefslogtreecommitdiff
path: root/backends/platform/sdl/sdl.h
diff options
context:
space:
mode:
Diffstat (limited to 'backends/platform/sdl/sdl.h')
-rw-r--r--backends/platform/sdl/sdl.h59
1 files changed, 55 insertions, 4 deletions
diff --git a/backends/platform/sdl/sdl.h b/backends/platform/sdl/sdl.h
index 7498f48b08..68dfe64d53 100644
--- a/backends/platform/sdl/sdl.h
+++ b/backends/platform/sdl/sdl.h
@@ -81,9 +81,49 @@ public:
void beginGFXTransaction(void);
TransactionError endGFXTransaction(void);
- // Set the size of the video bitmap.
- // Typically, 320x200
- virtual void initSize(uint w, uint h); // overloaded by CE backend
+#ifdef ENABLE_RGB_COLOR
+ // Game screen
+ virtual Graphics::PixelFormat getScreenFormat() const { return _screenFormat; }
+
+ // Highest supported
+ virtual Common::List<Graphics::PixelFormat> getSupportedFormats() const {
+ //TODO determine hardware color component order
+ Common::List<Graphics::PixelFormat> list;
+ SDL_PixelFormat *HWFormat = SDL_GetVideoInfo()->vfmt;
+#ifdef ENABLE_32BIT
+ if (HWFormat->BitsPerPixel >= 32)
+ {
+ list.push_back(Graphics::PixelFormat::createFormatRGBA8888());
+ list.push_back(Graphics::PixelFormat::createFormatARGB8888());
+ list.push_back(Graphics::PixelFormat::createFormatABGR8888());
+ list.push_back(Graphics::PixelFormat::createFormatBGRA8888()); }
+ if (HWFormat->BitsPerPixel >= 24)
+ {
+ list.push_back(Graphics::PixelFormat::createFormatRGB888());
+ list.push_back(Graphics::PixelFormat::createFormatBGR888());
+ }
+#endif //ENABLE_32BIT
+ if (HWFormat->BitsPerPixel >= 16)
+ {
+ list.push_back(Graphics::PixelFormat::createFormatRGB565());
+ list.push_back(Graphics::PixelFormat::createFormatXRGB1555());
+ list.push_back(Graphics::PixelFormat::createFormatRGB555());
+ list.push_back(Graphics::PixelFormat::createFormatRGBA4444());
+ list.push_back(Graphics::PixelFormat::createFormatARGB4444());
+ list.push_back(Graphics::PixelFormat::createFormatBGR565());
+ list.push_back(Graphics::PixelFormat::createFormatXBGR1555());
+ list.push_back(Graphics::PixelFormat::createFormatBGR555());
+ list.push_back(Graphics::PixelFormat::createFormatABGR4444());
+ list.push_back(Graphics::PixelFormat::createFormatBGRA4444());
+ }
+ list.push_back(Graphics::PixelFormat::createFormatCLUT8());
+ return list;
+ }
+#endif
+
+ // Set the size and format of the video bitmap.
+ // Typically, 320x200 CLUT8
+ virtual void initSize(uint w, uint h, const Graphics::PixelFormat *format); // overloaded by CE backend
virtual int getScreenChangeID() const { return _screenChangeCount; }
@@ -112,7 +152,7 @@ public:
virtual void warpMouse(int x, int y); // overloaded by CE backend (FIXME)
// Set the bitmap that's used when drawing the cursor.
- virtual void setMouseCursor(const byte *buf, uint w, uint h, int hotspot_x, int hotspot_y, byte keycolor, int cursorTargetScale); // overloaded by CE backend (FIXME)
+ virtual void setMouseCursor(const byte *buf, uint w, uint h, int hotspot_x, int hotspot_y, uint32 keycolor, int cursorTargetScale, const Graphics::PixelFormat *format); // overloaded by CE backend (FIXME)
// Set colors of cursor palette
void setCursorPalette(const byte *colors, uint start, uint num);
@@ -174,6 +214,7 @@ public:
// Overlay
virtual Graphics::PixelFormat getOverlayFormat() const { return _overlayFormat; }
+
virtual void showOverlay();
virtual void hideOverlay();
virtual void clearOverlay();
@@ -227,6 +268,10 @@ protected:
// unseen game screen
SDL_Surface *_screen;
+#ifdef ENABLE_RGB_COLOR
+ Graphics::PixelFormat _screenFormat;
+ Graphics::PixelFormat _cursorFormat;
+#endif
// temporary screen (for scalers)
SDL_Surface *_tmpscreen;
@@ -260,6 +305,9 @@ protected:
bool needHotswap;
bool needUpdatescreen;
bool normal1xScaler;
+#ifdef ENABLE_RGB_COLOR
+ bool formatChanged;
+#endif
};
TransactionDetails _transactionDetails;
@@ -274,6 +322,9 @@ protected:
int screenWidth, screenHeight;
int overlayWidth, overlayHeight;
+#ifdef ENABLE_RGB_COLOR
+ Graphics::PixelFormat format;
+#endif
};
VideoState _videoMode, _oldVideoMode;