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() {
|
||||
Options::video.vsync = !Options::video.vsync;
|
||||
SDL_SetRenderVSync(renderer_, Options::video.vsync ? 1 : SDL_RENDERER_VSYNC_DISABLED);
|
||||
if (shader_backend_) {
|
||||
shader_backend_->setVSync(Options::video.vsync);
|
||||
}
|
||||
setVSync(Options::video.vsync);
|
||||
}
|
||||
|
||||
// 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();
|
||||
}
|
||||
|
||||
// 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) {
|
||||
Options::video.vsync = enabled;
|
||||
SDL_SetRenderVSync(renderer_, enabled ? 1 : SDL_RENDERER_VSYNC_DISABLED);
|
||||
if (shader_backend_) {
|
||||
shader_backend_->setVSync(enabled);
|
||||
}
|
||||
}
|
||||
|
||||
// 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
|
||||
// se ve pequeño y centrado con barras negras alrededor.
|
||||
void Screen::applySettings() {
|
||||
SDL_SetRenderVSync(renderer_, Options::video.vsync ? 1 : SDL_RENDERER_VSYNC_DISABLED);
|
||||
setVSync(Options::video.vsync);
|
||||
setFullscreenMode();
|
||||
adjustWindowSize();
|
||||
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