1
0
Fork 0

test-cogl-materials: Use glGetString to determine cogl driver

Rather than using the #ifdefs and assuming that only one Cogl driver
is compiled in (which is no longer true), the test now calls
glGetString to check the GL_VERSION. This is kind of a hack but the
test is already calling GL functions directly anyway.
This commit is contained in:
Neil Roberts 2011-07-11 16:42:03 +01:00
parent 2bb4c2c6cb
commit fa336ab57f

View file

@ -126,6 +126,15 @@ test_invalid_texture_layers (TestState *state, int x, int y)
test_material_with_primitives (state, x, y, 0xffffffff); test_material_with_primitives (state, x, y, 0xffffffff);
} }
static gboolean
using_gles2_driver (void)
{
/* FIXME: This should probably be replaced with some way to query
the driver from Cogl */
return g_str_has_prefix ((const char *) glGetString (GL_VERSION),
"OpenGL ES 2");
}
static void static void
test_using_all_layers (TestState *state, int x, int y) test_using_all_layers (TestState *state, int x, int y)
{ {
@ -154,22 +163,28 @@ 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 COGL_HAS_GLES2 #ifdef COGL_HAS_GLES2
{ if (using_gles2_driver ())
GLint n_image_units, n_attribs; {
/* GLES 2 doesn't have GL_MAX_TEXTURE_UNITS and it uses GLint n_image_units, n_attribs;
GL_MAX_TEXTURE_IMAGE_UNITS instead */ /* GLES 2 doesn't have GL_MAX_TEXTURE_UNITS and it uses
glGetIntegerv (GL_MAX_TEXTURE_IMAGE_UNITS, &n_image_units); GL_MAX_TEXTURE_IMAGE_UNITS instead */
/* Cogl needs a vertex attrib for each layer to upload the texture glGetIntegerv (GL_MAX_TEXTURE_IMAGE_UNITS, &n_image_units);
coordinates */ /* Cogl needs a vertex attrib for each layer to upload the texture
glGetIntegerv (GL_MAX_VERTEX_ATTRIBS, &n_attribs); coordinates */
/* We can't use two of the attribs because they are used by the glGetIntegerv (GL_MAX_VERTEX_ATTRIBS, &n_attribs);
position and color */ /* We can't use two of the attribs because they are used by the
n_attribs -= 2; position and color */
n_layers = MIN (n_attribs, n_image_units); n_attribs -= 2;
} n_layers = MIN (n_attribs, n_image_units);
#else }
glGetIntegerv (GL_MAX_TEXTURE_UNITS, &n_layers); else
#endif #endif
{
#if defined(COGL_HAS_GLES1) || defined(COGL_HAS_GL)
glGetIntegerv (GL_MAX_TEXTURE_UNITS, &n_layers);
#endif
}
/* FIXME: is this still true? */ /* 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. */