diff --git a/gsk/gl/gskglcommandqueue.c b/gsk/gl/gskglcommandqueue.c index 8fee49fd15..39917877ad 100644 --- a/gsk/gl/gskglcommandqueue.c +++ b/gsk/gl/gskglcommandqueue.c @@ -449,7 +449,22 @@ gsk_gl_command_queue_new (GdkGLContext *context, /* Determine max texture size immediately and restore context */ gdk_gl_context_make_current (context); + glGetIntegerv (GL_MAX_TEXTURE_SIZE, &self->max_texture_size); + if (g_getenv ("GSK_MAX_TEXTURE_SIZE")) + { + int max_texture_size = atoi (g_getenv ("GSK_MAX_TEXTURE_SIZE")); + if (max_texture_size == 0) + { + g_warning ("Failed to parse GSK_MAX_TEXTURE_SIZE"); + } + else + { + max_texture_size = MAX (max_texture_size, 512); + GSK_DEBUG(OPENGL, "Limiting max texture size to %d", max_texture_size); + self->max_texture_size = MIN (self->max_texture_size, max_texture_size); + } + } return g_steal_pointer (&self); } @@ -1454,8 +1469,8 @@ gsk_gl_command_queue_upload_texture (GskGLCommandQueue *self, g_warning ("Attempt to create texture of size %ux%u but max size is %d. " "Clipping will occur.", width, height, self->max_texture_size); - width = MAX (width, self->max_texture_size); - height = MAX (height, self->max_texture_size); + width = MIN (width, self->max_texture_size); + height = MIN (height, self->max_texture_size); } texture_id = gsk_gl_command_queue_create_texture (self, width, height, GL_RGBA8, min_filter, mag_filter); if (texture_id == -1) diff --git a/gsk/gl/gskgldriverprivate.h b/gsk/gl/gskgldriverprivate.h index 2b39217919..e1f30c2d2d 100644 --- a/gsk/gl/gskgldriverprivate.h +++ b/gsk/gl/gskgldriverprivate.h @@ -243,7 +243,7 @@ gsk_gl_driver_slice_texture (GskGLDriver *self, if ((t = gdk_texture_get_render_data (texture, self))) { - if (min_cols == 0 && min_rows == 0) + if (min_cols == 0 && min_rows == 0 && t->slices) { *out_slices = t->slices; *out_n_slices = t->n_slices; diff --git a/gsk/gl/gskglrenderjob.c b/gsk/gl/gskglrenderjob.c index 53a759e293..aca5797b53 100644 --- a/gsk/gl/gskglrenderjob.c +++ b/gsk/gl/gskglrenderjob.c @@ -3575,7 +3575,7 @@ gsk_gl_render_job_visit_texture (GskGLRenderJob *job, GskGLTextureSlice *slices = NULL; guint n_slices = 0; - gsk_gl_driver_slice_texture (job->driver, texture, GL_NEAREST, GL_NEAREST, 0, 0, &slices, &n_slices); + gsk_gl_driver_slice_texture (job->driver, texture, GL_LINEAR, GL_LINEAR, 0, 0, &slices, &n_slices); g_assert (slices != NULL); g_assert (n_slices > 0);