mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2026-01-15 19:13:07 +01:00
Add Smooth NN scaling to OpenGL renderer
This commit is contained in:
committed by
Michał Janiszewski
parent
360cd813b7
commit
19abb62586
@@ -497,11 +497,13 @@ public:
|
||||
{
|
||||
_scaleQuality = SCALE_QUALITY_NN;
|
||||
}
|
||||
|
||||
sint32 scaleQuality = _scaleQuality;
|
||||
if (_scaleQuality == SCALE_QUALITY_SMOOTH_NN)
|
||||
{
|
||||
_scaleQuality = SCALE_QUALITY_LINEAR;
|
||||
scaleQuality = SCALE_QUALITY_LINEAR;
|
||||
}
|
||||
snprintf(scaleQualityBuffer, sizeof(scaleQualityBuffer), "%u", _scaleQuality);
|
||||
snprintf(scaleQualityBuffer, sizeof(scaleQualityBuffer), "%u", scaleQuality);
|
||||
SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, scaleQualityBuffer);
|
||||
|
||||
sint32 width, height;
|
||||
|
||||
@@ -103,12 +103,7 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
sint32 scaleQuality = gConfigGeneral.scale_quality;
|
||||
if (gConfigGeneral.use_nn_at_integer_scales &&
|
||||
gConfigGeneral.window_scale == std::floor(gConfigGeneral.window_scale))
|
||||
{
|
||||
scaleQuality = SCALE_QUALITY_NN;
|
||||
}
|
||||
sint32 scaleQuality = GetContext()->GetUiContext()->GetScaleQuality();
|
||||
if (scaleQuality == SCALE_QUALITY_SMOOTH_NN)
|
||||
{
|
||||
scaleQuality = SCALE_QUALITY_LINEAR;
|
||||
|
||||
@@ -142,6 +142,7 @@ private:
|
||||
ApplyPaletteShader * _applyPaletteShader = nullptr;
|
||||
OpenGLFramebuffer * _screenFramebuffer = nullptr;
|
||||
OpenGLFramebuffer * _scaleFramebuffer = nullptr;
|
||||
OpenGLFramebuffer * _smoothScaleFramebuffer = nullptr;
|
||||
|
||||
public:
|
||||
SDL_Color Palette[256];
|
||||
@@ -258,7 +259,12 @@ public:
|
||||
_applyPaletteShader->SetTexture(_drawingContext->GetFinalFramebuffer().GetTexture());
|
||||
_applyPaletteShader->Draw();
|
||||
|
||||
if (_scaleFramebuffer != nullptr)
|
||||
if (_smoothScaleFramebuffer != nullptr)
|
||||
{
|
||||
_smoothScaleFramebuffer->Copy(*_scaleFramebuffer, GL_NEAREST);
|
||||
_screenFramebuffer->Copy(*_smoothScaleFramebuffer, GL_LINEAR);
|
||||
}
|
||||
else if (_scaleFramebuffer != nullptr)
|
||||
{
|
||||
_screenFramebuffer->Copy(*_scaleFramebuffer, GL_LINEAR);
|
||||
}
|
||||
@@ -395,10 +401,20 @@ private:
|
||||
delete _scaleFramebuffer;
|
||||
_scaleFramebuffer = nullptr;
|
||||
}
|
||||
if (_smoothScaleFramebuffer != nullptr)
|
||||
{
|
||||
delete _smoothScaleFramebuffer;
|
||||
_smoothScaleFramebuffer = nullptr;
|
||||
}
|
||||
if (GetContext()->GetUiContext()->GetScaleQuality() > 0)
|
||||
{
|
||||
_scaleFramebuffer = new OpenGLFramebuffer(_width, _height, false, false);
|
||||
}
|
||||
if (GetContext()->GetUiContext()->GetScaleQuality() == SCALE_QUALITY_SMOOTH_NN)
|
||||
{
|
||||
uint32 scale = std::ceil(gConfigGeneral.window_scale);
|
||||
_smoothScaleFramebuffer = new OpenGLFramebuffer(_width * scale, _height * scale, false, false);
|
||||
}
|
||||
}
|
||||
|
||||
void Display()
|
||||
|
||||
Reference in New Issue
Block a user