brewery
notashelf /
c9d32e14ab93f00829803348cdbb8f52b717531a

chroma

public

Lightweight wallpaper daemon for Wayland

Star0tarball
clone
ssh://git@git.notashelf.dev:33/notashelf/chroma.git

Commit c9d32e14ab93

tarball

NotAShelf <raf@notashelf.dev> · 2026-01-31 12:14 UTC

unverified1 files changed+17-3
render: handle mipmaps properly

Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: I43de088ca17559648d67e728db1179cf6a6a6964
diff --git a/src/render.c b/src/render.cindex be9f98a..4a77185 100644--- a/src/render.c+++ b/src/render.c@@ -10,27 +10,33 @@  // Convert filter quality enum to OpenGL parameters static void get_gl_filter_params(chroma_filter_quality_t quality,-                                 GLint *min_filter, GLint *mag_filter) {+                                 GLint *min_filter, GLint *mag_filter,+                                 bool *needs_mipmaps) {   switch (quality) {   case CHROMA_FILTER_NEAREST:     *min_filter = GL_NEAREST;     *mag_filter = GL_NEAREST;+    *needs_mipmaps = false;     break;   case CHROMA_FILTER_LINEAR:     *min_filter = GL_LINEAR;     *mag_filter = GL_LINEAR;+    *needs_mipmaps = false;     break;   case CHROMA_FILTER_BILINEAR:-    *min_filter = GL_LINEAR_MIPMAP_LINEAR;+    *min_filter = GL_LINEAR;     *mag_filter = GL_LINEAR;+    *needs_mipmaps = false;     break;   case CHROMA_FILTER_TRILINEAR:     *min_filter = GL_LINEAR_MIPMAP_LINEAR;     *mag_filter = GL_LINEAR;+    *needs_mipmaps = true;     break;   default:     *min_filter = GL_LINEAR;     *mag_filter = GL_LINEAR;+    *needs_mipmaps = false;     break;   } }@@ -324,7 +330,9 @@ static int update_texture_from_image(chroma_output_t *output,    // Use configured filter quality   GLint min_filter, mag_filter;-  get_gl_filter_params(filter_quality, &min_filter, &mag_filter);+  bool needs_mipmaps;+  get_gl_filter_params(filter_quality, &min_filter, &mag_filter,+                       &needs_mipmaps);   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, min_filter);   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, mag_filter); @@ -332,6 +340,12 @@ static int update_texture_from_image(chroma_output_t *output,   glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, image->width, image->height, 0,                GL_RGBA, GL_UNSIGNED_BYTE, image->data); +  // Generate mipmaps for trilinear filtering if they're needed+  if (needs_mipmaps) {+    glGenerateMipmap(GL_TEXTURE_2D);+    chroma_log("DEBUG", "Generated mipmaps for trilinear filtering");+  }+   glBindTexture(GL_TEXTURE_2D, 0);    // Mark this output as having uploaded its texture