diff --git a/config_spec.yml b/config_spec.yml index 12a510d882..3e36d1e5c6 100644 --- a/config_spec.yml +++ b/config_spec.yml @@ -237,6 +237,10 @@ display: surface_scale: type: integer default: 1 + filtering: + type: enum + values: [linear, nearest] + default: linear window: fullscreen_on_startup: bool fullscreen_exclusive: bool diff --git a/ui/xui/gl-helpers.cc b/ui/xui/gl-helpers.cc index 0a06b7f16a..f204ace313 100644 --- a/ui/xui/gl-helpers.cc +++ b/ui/xui/gl-helpers.cc @@ -888,6 +888,17 @@ void RenderFramebuffer(GLint tex, int width, int height, bool flip, float scale[ { glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, tex); + + switch (g_config.display.filtering) { + case CONFIG_DISPLAY_FILTERING_LINEAR: + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + break; + case CONFIG_DISPLAY_FILTERING_NEAREST: + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + break; + } DecalShader *s = g_framebuffer_shader; s->flip = flip; diff --git a/ui/xui/menubar.cc b/ui/xui/menubar.cc index 31d8a1c8a2..d271263ac2 100644 --- a/ui/xui/menubar.cc +++ b/ui/xui/menubar.cc @@ -203,6 +203,8 @@ void ShowMainMenu() ImGui::SameLine(); HelpMarker("Controls how the rendered content should be scaled " "into the window"); + ImGui::Combo("Filter Method", &g_config.display.filtering, + "Linear\0Nearest\0"); ImGui::Combo("Aspect Ratio", &g_config.display.ui.aspect_ratio, "Native\0Auto\0""4:3\0""16:9\0"); if (ImGui::MenuItem("Fullscreen", "F11",