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.
This commit is contained in:
Neil Roberts 2010-12-07 11:39:37 +00:00
parent bdeb555ae1
commit afe3929618

View File

@ -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 /* FIXME: Cogl doesn't provide a way to query the maximum number of
texture layers so for now we'll just ask GL directly. */ texture layers so for now we'll just ask GL directly. */
#ifdef HAVE_COGL_GLES2 #ifdef HAVE_COGL_GLES2
/* GLES 2 doesn't have GL_MAX_TEXTURE_UNITS and it uses {
GL_MAX_TEXTURE_IMAGE_UNITS instead */ GLint n_image_units, n_attribs;
glGetIntegerv (GL_MAX_TEXTURE_IMAGE_UNITS, &n_layers); /* GLES 2 doesn't have GL_MAX_TEXTURE_UNITS and it uses
/* Cogl can't support more than 16 layers under GLES 2 */ GL_MAX_TEXTURE_IMAGE_UNITS instead */
if (n_layers > 16) glGetIntegerv (GL_MAX_TEXTURE_IMAGE_UNITS, &n_image_units);
n_layers = 16; /* 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 #else
glGetIntegerv (GL_MAX_TEXTURE_UNITS, &n_layers); 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 /* Cogl currently can't cope with more than 32 layers so we'll also
limit the maximum to that. */ limit the maximum to that. */
if (n_layers > 32) if (n_layers > 32)
n_layers = 32; n_layers = 32;
#endif
for (i = 0; i < n_layers; i++) for (i = 0; i < n_layers; i++)
{ {