mirror of
https://github.com/TerryCavanagh/VVVVVV.git
synced 2024-12-22 09:39:43 +01:00
Fix regression: Linear filter persistence
This fixes #1013 by axing the use of SDL_HINT_RENDER_SCALE_QUALITY and instead using SDL_SetTextureScaleMode. The hint is unwieldy to use, and since #923, has resulted in a regression where starting the game in filtered mode then switching to nearest results in scaled textures still being filtered. The proper solution is to use SDL_SetTextureScaleMode on the two textures that are drawn to the final screen: gameTexture and tempShakeTexture.
This commit is contained in:
parent
5467dbe3d8
commit
1bf0d11c9e
2 changed files with 37 additions and 10 deletions
|
@ -194,6 +194,16 @@ void Graphics::create_buffers(void)
|
|||
#undef CREATE_SCROLL_TEXTURE
|
||||
#undef CREATE_TEXTURE
|
||||
#undef CREATE_TEXTURE_WITH_DIMENSIONS
|
||||
|
||||
SDL_SetTextureScaleMode(
|
||||
gameTexture,
|
||||
gameScreen.isFiltered ? SDL_ScaleModeLinear : SDL_ScaleModeNearest
|
||||
);
|
||||
|
||||
SDL_SetTextureScaleMode(
|
||||
tempShakeTexture,
|
||||
gameScreen.isFiltered ? SDL_ScaleModeLinear : SDL_ScaleModeNearest
|
||||
);
|
||||
}
|
||||
|
||||
void Graphics::destroy_buffers(void)
|
||||
|
|
|
@ -39,11 +39,6 @@ void Screen::init(const struct ScreenSettings* settings)
|
|||
badSignalEffect = settings->badSignal;
|
||||
vsync = settings->useVsync;
|
||||
|
||||
SDL_SetHintWithPriority(
|
||||
SDL_HINT_RENDER_SCALE_QUALITY,
|
||||
isFiltered ? "linear" : "nearest",
|
||||
SDL_HINT_OVERRIDE
|
||||
);
|
||||
SDL_SetHintWithPriority(
|
||||
SDL_HINT_RENDER_VSYNC,
|
||||
vsync ? "1" : "0",
|
||||
|
@ -313,12 +308,10 @@ void Screen::toggleScalingMode(void)
|
|||
void Screen::toggleLinearFilter(void)
|
||||
{
|
||||
isFiltered = !isFiltered;
|
||||
SDL_SetHintWithPriority(
|
||||
SDL_HINT_RENDER_SCALE_QUALITY,
|
||||
isFiltered ? "linear" : "nearest",
|
||||
SDL_HINT_OVERRIDE
|
||||
);
|
||||
|
||||
SDL_DestroyTexture(graphics.gameTexture);
|
||||
SDL_DestroyTexture(graphics.tempShakeTexture);
|
||||
|
||||
graphics.gameTexture = SDL_CreateTexture(
|
||||
m_renderer,
|
||||
SDL_PIXELFORMAT_ARGB8888,
|
||||
|
@ -327,11 +320,35 @@ void Screen::toggleLinearFilter(void)
|
|||
SCREEN_HEIGHT_PIXELS
|
||||
);
|
||||
|
||||
graphics.tempShakeTexture = SDL_CreateTexture(
|
||||
m_renderer,
|
||||
SDL_PIXELFORMAT_ARGB8888,
|
||||
SDL_TEXTUREACCESS_TARGET,
|
||||
SCREEN_WIDTH_PIXELS,
|
||||
SCREEN_HEIGHT_PIXELS
|
||||
);
|
||||
|
||||
if (graphics.gameTexture == NULL)
|
||||
{
|
||||
vlog_error("Could not create game texture: %s", SDL_GetError());
|
||||
return;
|
||||
}
|
||||
|
||||
if (graphics.tempShakeTexture == NULL)
|
||||
{
|
||||
vlog_error("Could not create temp shake texture: %s", SDL_GetError());
|
||||
return;
|
||||
}
|
||||
|
||||
SDL_SetTextureScaleMode(
|
||||
graphics.gameTexture,
|
||||
isFiltered ? SDL_ScaleModeLinear : SDL_ScaleModeNearest
|
||||
);
|
||||
|
||||
SDL_SetTextureScaleMode(
|
||||
graphics.tempShakeTexture,
|
||||
isFiltered ? SDL_ScaleModeLinear : SDL_ScaleModeNearest
|
||||
);
|
||||
}
|
||||
|
||||
void Screen::toggleVSync(void)
|
||||
|
|
Loading…
Reference in a new issue