From: sumibi-yakitori Date: Sun, 26 Mar 2023 19:53:04 +0000 (+0900) Subject: glrenderer: Fix to prevent creation of GL_TEXTURE_MAG_FILTER filters with incorrect... X-Git-Tag: archive/raspbian/4.12.3+ds-1+rpi1~1^2^2^2~22^2~1^2~490^2 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=cf9c49dcb1f3d0248465c5a82b520ff144d047bf;p=gtk4.git glrenderer: Fix to prevent creation of GL_TEXTURE_MAG_FILTER filters with incorrect values --- diff --git a/gsk/gl/gskglcommandqueue.c b/gsk/gl/gskglcommandqueue.c index 436b8afcad..3d2998e43d 100644 --- a/gsk/gl/gskglcommandqueue.c +++ b/gsk/gl/gskglcommandqueue.c @@ -248,7 +248,7 @@ will_ignore_batch (GskGLCommandQueue *self) } static inline GLint -filter_from_index (guint index) +min_filter_from_index (guint index) { GLint filters[3] = { GL_LINEAR, GL_NEAREST, GL_LINEAR_MIPMAP_LINEAR }; @@ -257,6 +257,16 @@ filter_from_index (guint index) return filters[index]; } +static inline GLint +mag_filter_from_index (guint index) +{ + GLint filters[3] = { GL_LINEAR, GL_NEAREST, GL_LINEAR }; + + g_assert (index < GSK_GL_N_FILTERS); + + return filters[index]; +} + static inline guint snapshot_attachments (const GskGLAttachmentState *state, GskGLCommandBinds *array) @@ -489,8 +499,8 @@ gsk_gl_command_queue_new (GdkGLContext *context, glGenSamplers (G_N_ELEMENTS (self->samplers), self->samplers); for (i = 0; i < G_N_ELEMENTS (self->samplers); i++) { - glSamplerParameteri (self->samplers[i], GL_TEXTURE_MIN_FILTER, filter_from_index(i / GSK_GL_N_FILTERS)); - glSamplerParameteri (self->samplers[i], GL_TEXTURE_MAG_FILTER, filter_from_index(i % GSK_GL_N_FILTERS)); + glSamplerParameteri (self->samplers[i], GL_TEXTURE_MIN_FILTER, min_filter_from_index (i / GSK_GL_N_FILTERS)); + glSamplerParameteri (self->samplers[i], GL_TEXTURE_MAG_FILTER, mag_filter_from_index (i % GSK_GL_N_FILTERS)); glSamplerParameteri (self->samplers[i], GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glSamplerParameteri (self->samplers[i], GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); } @@ -1161,8 +1171,8 @@ gsk_gl_command_queue_execute (GskGLCommandQueue *self, textures[bind->texture] = bind->id; if (!self->has_samplers) { - glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, filter_from_index(bind->sampler / GSK_GL_N_FILTERS)); - glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, filter_from_index(bind->sampler % GSK_GL_N_FILTERS)); + glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, min_filter_from_index (bind->sampler / GSK_GL_N_FILTERS)); + glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, mag_filter_from_index (bind->sampler % GSK_GL_N_FILTERS)); } } @@ -1172,8 +1182,8 @@ gsk_gl_command_queue_execute (GskGLCommandQueue *self, glBindSampler (bind->texture, self->samplers[bind->sampler]); else { - glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, filter_from_index(bind->sampler / GSK_GL_N_FILTERS)); - glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, filter_from_index(bind->sampler % GSK_GL_N_FILTERS)); + glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, min_filter_from_index (bind->sampler / GSK_GL_N_FILTERS)); + glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, mag_filter_from_index (bind->sampler % GSK_GL_N_FILTERS)); } samplers[bind->texture] = bind->sampler; }