Skip to content

Commit bd1b1fe

Browse files
authored
Merge pull request #84 from cortex-command-community/postprocess-mipmapping
Disable mipmapping and linear upscaling on posteffects
2 parents ad4b4b5 + dfba7a9 commit bd1b1fe

File tree

3 files changed

+20
-7
lines changed

3 files changed

+20
-7
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
1818

1919
- Fixed some activities iterating from `0` to `PlayerCount - 1` instead of iterating over every player index and filtering to active human players. For example, "Exploration" (Doainar) was unable to progress if you used a different player than player 1.
2020

21+
- Fixed an issue that could cause post-effects to appear very blurry.
22+
2123
</details>
2224

2325
## [Release v6.1.0] - 2024/02/15

Data/Base.rte/Shaders/PostProcess.frag

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,16 @@ out vec4 FragColor;
77
uniform sampler2D rteTexture;
88
uniform vec4 rteColor;
99

10+
11+
vec4 texture2DAA(sampler2D tex, vec2 uv) {
12+
vec2 texsize = vec2(textureSize(tex, 0));
13+
vec2 uv_texspace = uv * texsize;
14+
vec2 seam = floor(uv_texspace + .5);
15+
uv_texspace = (uv_texspace - seam) / fwidth(uv_texspace) + seam;
16+
uv_texspace = clamp(uv_texspace, seam - .5, seam + .5);
17+
return texture(tex, uv_texspace / texsize);
18+
}
19+
1020
void main() {
11-
FragColor = texture(rteTexture, textureUV) * rteColor;
21+
FragColor = texture2DAA(rteTexture, textureUV) * rteColor;
1222
}

Source/Managers/PostProcessMan.cpp

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#include "PostProcessMan.h"
22

33
#include "CameraMan.h"
4+
#include "WindowMan.h"
45
#include "FrameMan.h"
56
#include "Scene.h"
67
#include "ContentFile.h"
@@ -126,7 +127,7 @@ void PostProcessMan::CreateGLBackBuffers() {
126127
GL_CHECK(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST));
127128
UpdatePalette();
128129
GL_CHECK(glActiveTexture(GL_TEXTURE0));
129-
m_ProjectionMatrix = std::make_unique<glm::mat4>(glm::ortho(0.0F, static_cast<float>(g_FrameMan.GetBackBuffer8()->w), 0.0F, static_cast<float>(g_FrameMan.GetBackBuffer8()->h), -1.0F, 1.0F));
130+
m_ProjectionMatrix = std::make_unique<glm::mat4>(glm::ortho(0.0F, static_cast<float>(g_WindowMan.GetResX()), 0.0F, static_cast<float>(g_WindowMan.GetResY()), -1.0F, 1.0F));
130131
}
131132

132133
void PostProcessMan::UpdatePalette() {
@@ -152,8 +153,8 @@ void PostProcessMan::LazyInitBitmap(BITMAP* bitmap) {
152153
GL_CHECK(glActiveTexture(GL_TEXTURE0));
153154
GL_CHECK(glBindTexture(GL_TEXTURE_2D, reinterpret_cast<GLBitmapInfo*>(bitmap->extra)->m_Texture));
154155
GL_CHECK(glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, bitmap->w, bitmap->h, 0, GL_RGBA, GL_UNSIGNED_BYTE, bitmap->line[0]));
155-
GL_CHECK(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR));
156-
GL_CHECK(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR));
156+
GL_CHECK(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR));
157+
GL_CHECK(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST));
157158
GL_CHECK(glGenerateMipmap(GL_TEXTURE_2D));
158159
}
159160

@@ -385,7 +386,7 @@ void PostProcessMan::PostProcess() {
385386
GL_CHECK(glBindTexture(GL_TEXTURE_2D, m_Palette8Texture));
386387
GL_CHECK(glBindFramebuffer(GL_DRAW_FRAMEBUFFER, m_BlitFramebuffer));
387388
GL_CHECK(glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, m_BackBuffer32, 0));
388-
GL_CHECK(glViewport(0, 0, g_FrameMan.GetBackBuffer8()->w, g_FrameMan.GetBackBuffer8()->h));
389+
GL_CHECK(glViewport(0, 0, g_WindowMan.GetResX(), g_WindowMan.GetResY()));
389390
m_Blit8->Use();
390391
m_Blit8->SetInt(m_Blit8->GetTextureUniform(), 0);
391392
int paletteUniform = m_Blit8->GetUniformLocation("rtePalette");
@@ -404,7 +405,7 @@ void PostProcessMan::PostProcess() {
404405
GL_CHECK(glBlendColor(0.5F, 0.5F, 0.5F, 0.5F));
405406
GL_CHECK(glBindFramebuffer(GL_FRAMEBUFFER, m_PostProcessFramebuffer));
406407
GL_CHECK(glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, m_BackBuffer32, 0));
407-
GL_CHECK(glViewport(0, 0, g_FrameMan.GetBackBuffer8()->w, g_FrameMan.GetBackBuffer8()->h));
408+
GL_CHECK(glViewport(0, 0, g_WindowMan.GetResX(), g_WindowMan.GetResY()));
408409

409410
m_PostProcessShader->Use();
410411

@@ -503,7 +504,7 @@ void PostProcessMan::DrawPostScreenEffects() {
503504
glm::mat4 transformMatrix(1);
504505
transformMatrix = glm::translate(transformMatrix, glm::vec3(effectPosX, effectPosY, 0));
505506
transformMatrix = glm::rotate(transformMatrix, -postEffect.m_Angle, glm::vec3(0, 0, 1));
506-
transformMatrix = glm::scale(transformMatrix, glm::vec3(effectBitmap->w * 0.5f, effectBitmap->h * 0.5f, 1.0));
507+
transformMatrix = glm::scale(transformMatrix, glm::vec3(static_cast<float>(effectBitmap->w) * 0.5f, static_cast<float>(effectBitmap->h) * 0.5f, 1.0f));
507508

508509
GL_CHECK(glBindTexture(GL_TEXTURE_2D, reinterpret_cast<GLBitmapInfo*>(postEffect.m_Bitmap->extra)->m_Texture));
509510
m_PostProcessShader->SetMatrix4f(m_PostProcessShader->GetTransformUniform(), transformMatrix);

0 commit comments

Comments
 (0)