From f0c062cdc8bbe89450466caec89d7efffae91641 Mon Sep 17 00:00:00 2001 From: Clownacy Date: Thu, 1 Aug 2019 00:08:23 +0000 Subject: [PATCH] OpenGL: Clamp textures This fixes this weird thing you'd see in the enhanced branch if the screen is scaled (happens if you resize the window). When the screen is scaled, OpenGL uses linear interpolation. This would cause it to fetch samples from outside the texture. IIRC, by default, the default behaviour is GL_REPEAT, which causes it to blend with samples from the other side of the texture, creating strange pixels at the end of the screen. --- src/Backends/Rendering/OpenGL3.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/Backends/Rendering/OpenGL3.cpp b/src/Backends/Rendering/OpenGL3.cpp index 81c870f7..73f666ff 100644 --- a/src/Backends/Rendering/OpenGL3.cpp +++ b/src/Backends/Rendering/OpenGL3.cpp @@ -242,6 +242,9 @@ BOOL Backend_Init(SDL_Window *p_window) glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8, window_width, window_height, 0, GL_RGB, GL_UNSIGNED_BYTE, NULL); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE); framebuffer_surface.width = window_width; framebuffer_surface.height = window_height; @@ -318,6 +321,9 @@ Backend_Surface* Backend_CreateSurface(unsigned int width, unsigned int height) glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, NULL); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE); surface->width = width; surface->height = height; @@ -528,6 +534,9 @@ Backend_Glyph* Backend_LoadGlyph(const unsigned char *pixels, unsigned int width glTexImage2D(GL_TEXTURE_2D, 0, GL_R8, width, height, 0, GL_RED, GL_UNSIGNED_BYTE, buffer); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE); glyph->width = width; glyph->height = height;