From afe39296180e3839c42c5327f55ff8a773ba7000 Mon Sep 17 00:00:00 2001 From: Neil Roberts Date: Tue, 7 Dec 2010 11:39:37 +0000 Subject: [PATCH] test-cogl-materials: Use GL_MAX_VERTEX_ATTRIBS on GLES2 When determining the maximum number of layers we also need to take into account GL_MAX_VERTEX_ATTRIBS on GLES2. Cogl needs one vertex attrib for each texture unit plus two for the position and color. --- tests/conform/test-cogl-materials.c | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/tests/conform/test-cogl-materials.c b/tests/conform/test-cogl-materials.c index 04238aea6..d5a21ab2f 100644 --- a/tests/conform/test-cogl-materials.c +++ b/tests/conform/test-cogl-materials.c @@ -155,19 +155,27 @@ test_using_all_layers (TestState *state, int x, int y) /* FIXME: Cogl doesn't provide a way to query the maximum number of texture layers so for now we'll just ask GL directly. */ #ifdef HAVE_COGL_GLES2 - /* GLES 2 doesn't have GL_MAX_TEXTURE_UNITS and it uses - GL_MAX_TEXTURE_IMAGE_UNITS instead */ - glGetIntegerv (GL_MAX_TEXTURE_IMAGE_UNITS, &n_layers); - /* Cogl can't support more than 16 layers under GLES 2 */ - if (n_layers > 16) - n_layers = 16; + { + GLint n_image_units, n_attribs; + /* GLES 2 doesn't have GL_MAX_TEXTURE_UNITS and it uses + GL_MAX_TEXTURE_IMAGE_UNITS instead */ + glGetIntegerv (GL_MAX_TEXTURE_IMAGE_UNITS, &n_image_units); + /* Cogl needs a vertex attrib for each layer to upload the texture + coordinates */ + glGetIntegerv (GL_MAX_VERTEX_ATTRIBS, &n_attribs); + /* We can't use two of the attribs because they are used by the + position and color */ + n_attribs -= 2; + n_layers = MIN (n_attribs, n_image_units); + } #else glGetIntegerv (GL_MAX_TEXTURE_UNITS, &n_layers); +#endif + /* FIXME: is this still true? */ /* Cogl currently can't cope with more than 32 layers so we'll also limit the maximum to that. */ if (n_layers > 32) n_layers = 32; -#endif for (i = 0; i < n_layers; i++) {