OPENGLSDL: Move stretch mode handling into OpenGLGraphicsManager
This commit is contained in:
parent
c57b2cc148
commit
16f8c024d1
4 changed files with 67 additions and 62 deletions
|
@ -54,7 +54,7 @@ namespace OpenGL {
|
||||||
|
|
||||||
OpenGLGraphicsManager::OpenGLGraphicsManager()
|
OpenGLGraphicsManager::OpenGLGraphicsManager()
|
||||||
: _currentState(), _oldState(), _transactionMode(kTransactionNone), _screenChangeID(1 << (sizeof(int) * 8 - 2)),
|
: _currentState(), _oldState(), _transactionMode(kTransactionNone), _screenChangeID(1 << (sizeof(int) * 8 - 2)),
|
||||||
_pipeline(nullptr),
|
_pipeline(nullptr), _stretchMode(STRETCH_FIT),
|
||||||
_defaultFormat(), _defaultFormatAlpha(),
|
_defaultFormat(), _defaultFormatAlpha(),
|
||||||
_gameScreen(nullptr), _gameScreenShakeOffset(0), _overlay(nullptr),
|
_gameScreen(nullptr), _gameScreenShakeOffset(0), _overlay(nullptr),
|
||||||
_cursor(nullptr),
|
_cursor(nullptr),
|
||||||
|
@ -88,6 +88,7 @@ bool OpenGLGraphicsManager::hasFeature(OSystem::Feature f) const {
|
||||||
case OSystem::kFeatureAspectRatioCorrection:
|
case OSystem::kFeatureAspectRatioCorrection:
|
||||||
case OSystem::kFeatureCursorPalette:
|
case OSystem::kFeatureCursorPalette:
|
||||||
case OSystem::kFeatureFilteringMode:
|
case OSystem::kFeatureFilteringMode:
|
||||||
|
case OSystem::kFeatureStretchMode:
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
case OSystem::kFeatureOverlaySupportsAlpha:
|
case OSystem::kFeatureOverlaySupportsAlpha:
|
||||||
|
@ -234,6 +235,54 @@ Common::List<Graphics::PixelFormat> OpenGLGraphicsManager::getSupportedFormats()
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
const OSystem::GraphicsMode glStretchModes[] = {
|
||||||
|
{"center", _s("Center"), STRETCH_CENTER},
|
||||||
|
{"pixel-perfect", _s("Pixel-perfect scaling"), STRETCH_INTEGRAL},
|
||||||
|
{"fit", _s("Fit to window"), STRETCH_FIT},
|
||||||
|
{"stretch", _s("Stretch to window"), STRETCH_STRETCH},
|
||||||
|
{nullptr, nullptr, 0}
|
||||||
|
};
|
||||||
|
|
||||||
|
} // End of anonymous namespace
|
||||||
|
|
||||||
|
const OSystem::GraphicsMode *OpenGLGraphicsManager::getSupportedStretchModes() const {
|
||||||
|
return glStretchModes;
|
||||||
|
}
|
||||||
|
|
||||||
|
int OpenGLGraphicsManager::getDefaultStretchMode() const {
|
||||||
|
return STRETCH_FIT;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool OpenGLGraphicsManager::setStretchMode(int mode) {
|
||||||
|
assert(getTransactionMode() != kTransactionNone);
|
||||||
|
|
||||||
|
if (mode == _stretchMode)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
// Check this is a valid mode
|
||||||
|
const OSystem::GraphicsMode *sm = getSupportedStretchModes();
|
||||||
|
bool found = false;
|
||||||
|
while (sm->name) {
|
||||||
|
if (sm->id == mode) {
|
||||||
|
found = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
sm++;
|
||||||
|
}
|
||||||
|
if (!found) {
|
||||||
|
warning("unknown stretch mode %d", mode);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
_stretchMode = mode;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
int OpenGLGraphicsManager::getStretchMode() const {
|
||||||
|
return _stretchMode;
|
||||||
|
}
|
||||||
|
|
||||||
void OpenGLGraphicsManager::beginGFXTransaction() {
|
void OpenGLGraphicsManager::beginGFXTransaction() {
|
||||||
assert(_transactionMode == kTransactionNone);
|
assert(_transactionMode == kTransactionNone);
|
||||||
|
|
||||||
|
|
|
@ -75,6 +75,11 @@ public:
|
||||||
virtual Common::List<Graphics::PixelFormat> getSupportedFormats() const override;
|
virtual Common::List<Graphics::PixelFormat> getSupportedFormats() const override;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
virtual const OSystem::GraphicsMode *getSupportedStretchModes() const override;
|
||||||
|
virtual int getDefaultStretchMode() const override;
|
||||||
|
virtual bool setStretchMode(int mode) override;
|
||||||
|
virtual int getStretchMode() const override;
|
||||||
|
|
||||||
virtual void beginGFXTransaction() override;
|
virtual void beginGFXTransaction() override;
|
||||||
virtual OSystem::TransactionError endGFXTransaction() override;
|
virtual OSystem::TransactionError endGFXTransaction() override;
|
||||||
|
|
||||||
|
@ -229,6 +234,11 @@ private:
|
||||||
*/
|
*/
|
||||||
int _screenChangeID;
|
int _screenChangeID;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The current stretch mode.
|
||||||
|
*/
|
||||||
|
int _stretchMode;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
/**
|
/**
|
||||||
* Set up the requested video mode. This takes parameters which describe
|
* Set up the requested video mode. This takes parameters which describe
|
||||||
|
|
|
@ -39,7 +39,7 @@ OpenGLSdlGraphicsManager::OpenGLSdlGraphicsManager(uint desktopWidth, uint deskt
|
||||||
#else
|
#else
|
||||||
_lastVideoModeLoad(0),
|
_lastVideoModeLoad(0),
|
||||||
#endif
|
#endif
|
||||||
_graphicsScale(2), _stretchMode(STRETCH_FIT), _ignoreLoadVideoMode(false), _gotResize(false), _wantsFullScreen(false), _ignoreResizeEvents(0),
|
_graphicsScale(2), _ignoreLoadVideoMode(false), _gotResize(false), _wantsFullScreen(false), _ignoreResizeEvents(0),
|
||||||
_desiredFullscreenWidth(0), _desiredFullscreenHeight(0) {
|
_desiredFullscreenWidth(0), _desiredFullscreenHeight(0) {
|
||||||
// Setup OpenGL attributes for SDL
|
// Setup OpenGL attributes for SDL
|
||||||
SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8);
|
SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8);
|
||||||
|
@ -218,7 +218,6 @@ void OpenGLSdlGraphicsManager::deactivateManager() {
|
||||||
bool OpenGLSdlGraphicsManager::hasFeature(OSystem::Feature f) const {
|
bool OpenGLSdlGraphicsManager::hasFeature(OSystem::Feature f) const {
|
||||||
switch (f) {
|
switch (f) {
|
||||||
case OSystem::kFeatureFullscreenMode:
|
case OSystem::kFeatureFullscreenMode:
|
||||||
case OSystem::kFeatureStretchMode:
|
|
||||||
case OSystem::kFeatureIconifyWindow:
|
case OSystem::kFeatureIconifyWindow:
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
@ -267,54 +266,6 @@ bool OpenGLSdlGraphicsManager::getFeatureState(OSystem::Feature f) const {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace {
|
|
||||||
const OSystem::GraphicsMode sdlGlStretchModes[] = {
|
|
||||||
{"center", _s("Center"), STRETCH_CENTER},
|
|
||||||
{"pixel-perfect", _s("Pixel-perfect scaling"), STRETCH_INTEGRAL},
|
|
||||||
{"fit", _s("Fit to window"), STRETCH_FIT},
|
|
||||||
{"stretch", _s("Stretch to window"), STRETCH_STRETCH},
|
|
||||||
{nullptr, nullptr, 0}
|
|
||||||
};
|
|
||||||
|
|
||||||
} // End of anonymous namespace
|
|
||||||
|
|
||||||
const OSystem::GraphicsMode *OpenGLSdlGraphicsManager::getSupportedStretchModes() const {
|
|
||||||
return sdlGlStretchModes;
|
|
||||||
}
|
|
||||||
|
|
||||||
int OpenGLSdlGraphicsManager::getDefaultStretchMode() const {
|
|
||||||
return STRETCH_FIT;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool OpenGLSdlGraphicsManager::setStretchMode(int mode) {
|
|
||||||
assert(getTransactionMode() != kTransactionNone);
|
|
||||||
|
|
||||||
if (mode == _stretchMode)
|
|
||||||
return true;
|
|
||||||
|
|
||||||
// Check this is a valid mode
|
|
||||||
const OSystem::GraphicsMode *sm = sdlGlStretchModes;
|
|
||||||
bool found = false;
|
|
||||||
while (sm->name) {
|
|
||||||
if (sm->id == mode) {
|
|
||||||
found = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
sm++;
|
|
||||||
}
|
|
||||||
if (!found) {
|
|
||||||
warning("unknown stretch mode %d", mode);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
_stretchMode = mode;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
int OpenGLSdlGraphicsManager::getStretchMode() const {
|
|
||||||
return _stretchMode;
|
|
||||||
}
|
|
||||||
|
|
||||||
void OpenGLSdlGraphicsManager::initSize(uint w, uint h, const Graphics::PixelFormat *format) {
|
void OpenGLSdlGraphicsManager::initSize(uint w, uint h, const Graphics::PixelFormat *format) {
|
||||||
// HACK: This is stupid but the SurfaceSDL backend defaults to 2x. This
|
// HACK: This is stupid but the SurfaceSDL backend defaults to 2x. This
|
||||||
// assures that the launcher (which requests 320x200) has a reasonable
|
// assures that the launcher (which requests 320x200) has a reasonable
|
||||||
|
@ -705,24 +656,25 @@ bool OpenGLSdlGraphicsManager::notifyEvent(const Common::Event &event) {
|
||||||
|
|
||||||
// Ctrl+Alt+s cycles through stretch mode
|
// Ctrl+Alt+s cycles through stretch mode
|
||||||
int index = 0;
|
int index = 0;
|
||||||
const OSystem::GraphicsMode *sm = sdlGlStretchModes;
|
const OSystem::GraphicsMode *stretchModes = getSupportedStretchModes();
|
||||||
|
const OSystem::GraphicsMode *sm = stretchModes;
|
||||||
while (sm->name) {
|
while (sm->name) {
|
||||||
if (sm->id == _stretchMode)
|
if (sm->id == getStretchMode())
|
||||||
break;
|
break;
|
||||||
sm++;
|
sm++;
|
||||||
index++;
|
index++;
|
||||||
}
|
}
|
||||||
index++;
|
index++;
|
||||||
if (!sdlGlStretchModes[index].name)
|
if (!stretchModes[index].name)
|
||||||
index = 0;
|
index = 0;
|
||||||
beginGFXTransaction();
|
beginGFXTransaction();
|
||||||
setStretchMode(sdlGlStretchModes[index].id);
|
setStretchMode(stretchModes[index].id);
|
||||||
endGFXTransaction();
|
endGFXTransaction();
|
||||||
|
|
||||||
#ifdef USE_OSD
|
#ifdef USE_OSD
|
||||||
Common::String message = Common::String::format("%s: %s",
|
Common::String message = Common::String::format("%s: %s",
|
||||||
_("Stretch mode"),
|
_("Stretch mode"),
|
||||||
_(sdlGlStretchModes[index].description)
|
_(stretchModes[index].description)
|
||||||
);
|
);
|
||||||
displayMessageOnOSD(message.c_str());
|
displayMessageOnOSD(message.c_str());
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -43,11 +43,6 @@ public:
|
||||||
virtual void setFeatureState(OSystem::Feature f, bool enable) override;
|
virtual void setFeatureState(OSystem::Feature f, bool enable) override;
|
||||||
virtual bool getFeatureState(OSystem::Feature f) const override;
|
virtual bool getFeatureState(OSystem::Feature f) const override;
|
||||||
|
|
||||||
virtual const OSystem::GraphicsMode *getSupportedStretchModes() const override;
|
|
||||||
virtual int getDefaultStretchMode() const override;
|
|
||||||
virtual bool setStretchMode(int mode) override;
|
|
||||||
virtual int getStretchMode() const override;
|
|
||||||
|
|
||||||
virtual void initSize(uint w, uint h, const Graphics::PixelFormat *format) override;
|
virtual void initSize(uint w, uint h, const Graphics::PixelFormat *format) override;
|
||||||
virtual void updateScreen() override;
|
virtual void updateScreen() override;
|
||||||
|
|
||||||
|
@ -84,7 +79,6 @@ private:
|
||||||
uint _lastRequestedWidth;
|
uint _lastRequestedWidth;
|
||||||
uint _lastRequestedHeight;
|
uint _lastRequestedHeight;
|
||||||
uint _graphicsScale;
|
uint _graphicsScale;
|
||||||
int _stretchMode;
|
|
||||||
bool _ignoreLoadVideoMode;
|
bool _ignoreLoadVideoMode;
|
||||||
bool _gotResize;
|
bool _gotResize;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue