vsync: separa preferència persistent de l'estat aplicat al hardware
This commit is contained in:
@@ -642,13 +642,12 @@ void Screen::toggleIntegerScale() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Alterna entre activar y desactivar el V-Sync
|
// Alterna entre activar y desactivar el V-Sync. ÚNICA via "user-facing" que
|
||||||
|
// modifica la preferencia persistent (Options::video.vsync); la resta de
|
||||||
|
// crides a setVSync apliquen l'estat al hardware sense escriure preferència.
|
||||||
void Screen::toggleVSync() {
|
void Screen::toggleVSync() {
|
||||||
Options::video.vsync = !Options::video.vsync;
|
Options::video.vsync = !Options::video.vsync;
|
||||||
SDL_SetRenderVSync(renderer_, Options::video.vsync ? 1 : SDL_RENDERER_VSYNC_DISABLED);
|
setVSync(Options::video.vsync);
|
||||||
if (shader_backend_) {
|
|
||||||
shader_backend_->setVSync(Options::video.vsync);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Aplica Options::video.scale_mode a la textura del canvas de juego
|
// Aplica Options::video.scale_mode a la textura del canvas de juego
|
||||||
@@ -670,10 +669,16 @@ auto Screen::isHardwareAccelerated() -> bool {
|
|||||||
return self != nullptr && self->shader_backend_ && self->shader_backend_->isHardwareAccelerated();
|
return self != nullptr && self->shader_backend_ && self->shader_backend_->isHardwareAccelerated();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Establece el estado del V-Sync
|
// Aplica V-Sync al renderer SDL i al backend GPU. NO toca la preferència
|
||||||
|
// persistent (Options::video.vsync) — és responsabilitat del caller (menú
|
||||||
|
// servei, toggleVSync). Així Resource::beginLoad/finishBoot poden canviar
|
||||||
|
// el vsync efectiu durant el preload sense clobberar la preferència de
|
||||||
|
// l'usuari (bug històric: el seu vsync=true es perdia entre llançaments).
|
||||||
void Screen::setVSync(bool enabled) {
|
void Screen::setVSync(bool enabled) {
|
||||||
Options::video.vsync = enabled;
|
|
||||||
SDL_SetRenderVSync(renderer_, enabled ? 1 : SDL_RENDERER_VSYNC_DISABLED);
|
SDL_SetRenderVSync(renderer_, enabled ? 1 : SDL_RENDERER_VSYNC_DISABLED);
|
||||||
|
if (shader_backend_) {
|
||||||
|
shader_backend_->setVSync(enabled);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Obtiene los punteros a los singletones
|
// Obtiene los punteros a los singletones
|
||||||
@@ -698,7 +703,7 @@ void Screen::getSingletons() {
|
|||||||
// el viewport queda cacheado al tamaño de la ventana pequeña previa y el juego
|
// el viewport queda cacheado al tamaño de la ventana pequeña previa y el juego
|
||||||
// se ve pequeño y centrado con barras negras alrededor.
|
// se ve pequeño y centrado con barras negras alrededor.
|
||||||
void Screen::applySettings() {
|
void Screen::applySettings() {
|
||||||
SDL_SetRenderVSync(renderer_, Options::video.vsync ? 1 : SDL_RENDERER_VSYNC_DISABLED);
|
setVSync(Options::video.vsync);
|
||||||
setFullscreenMode();
|
setFullscreenMode();
|
||||||
adjustWindowSize();
|
adjustWindowSize();
|
||||||
SDL_SetRenderLogicalPresentation(renderer_, param.game.width, param.game.height, Options::video.integer_scale ? SDL_LOGICAL_PRESENTATION_INTEGER_SCALE : SDL_LOGICAL_PRESENTATION_LETTERBOX);
|
SDL_SetRenderLogicalPresentation(renderer_, param.game.width, param.game.height, Options::video.integer_scale ? SDL_LOGICAL_PRESENTATION_INTEGER_SCALE : SDL_LOGICAL_PRESENTATION_LETTERBOX);
|
||||||
|
|||||||
Reference in New Issue
Block a user