summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gsk/ngl/gsknglcommandqueue.c6
-rw-r--r--gsk/ngl/gsknglcommandqueueprivate.h6
2 files changed, 11 insertions, 1 deletions
diff --git a/gsk/ngl/gsknglcommandqueue.c b/gsk/ngl/gsknglcommandqueue.c
index 6d61dbaad6..25eb37f53b 100644
--- a/gsk/ngl/gsknglcommandqueue.c
+++ b/gsk/ngl/gsknglcommandqueue.c
@@ -444,9 +444,12 @@ gsk_ngl_command_queue_new (GdkGLContext *context,
else
self->uniforms = gsk_ngl_uniform_state_new ();
- /* Determine max texture size immediately and restore context */
+ /* Determine max texture size and other limitations immediately
+ * and restore context
+ */
gdk_gl_context_make_current (context);
glGetIntegerv (GL_MAX_TEXTURE_SIZE, &self->max_texture_size);
+ glGetIntegerv (GL_MAX_ELEMENTS_VERTICES, &self->max_elements_vertices);
return g_steal_pointer (&self);
}
@@ -617,6 +620,7 @@ gsk_ngl_command_queue_end_draw (GskNglCommandQueue *self)
last_batch->any.viewport.height == batch->any.viewport.height &&
last_batch->draw.framebuffer == batch->draw.framebuffer &&
last_batch->draw.vbo_offset + last_batch->draw.vbo_count == batch->draw.vbo_offset &&
+ last_batch->draw.vbo_count + batch->draw.vbo_count <= self->max_elements_vertices &&
snapshots_equal (self, last_batch, batch))
{
last_batch->draw.vbo_count += batch->draw.vbo_count;
diff --git a/gsk/ngl/gsknglcommandqueueprivate.h b/gsk/ngl/gsknglcommandqueueprivate.h
index a2f50c485d..3ed52021bc 100644
--- a/gsk/ngl/gsknglcommandqueueprivate.h
+++ b/gsk/ngl/gsknglcommandqueueprivate.h
@@ -231,6 +231,12 @@ struct _GskNglCommandQueue
*/
int max_texture_size;
+ /* Discovered max element count. We must not create batches that contain
+ * more vertices than this number.
+ */
+
+ int max_elements_vertices;
+
/* The index of the last batch in @batches, which may not be the element
* at the end of the array, as batches can be reordered. This is used to
* update the "next" index when adding a new batch.