cbe1e8321b
Some of the tests are making direct GL calls. Eventually we want Clutter not to link directly against any GL library so that it can leave Cogl to load it dynamically. As a step towards getting this to work this patch changes the tests to resolve the symbols using cogl_get_proc_address instead of linking directly.
101 lines
3.2 KiB
C
101 lines
3.2 KiB
C
#include "config.h"
|
|
|
|
#include <clutter/clutter.h>
|
|
#include <stdlib.h>
|
|
|
|
#ifdef COGL_HAS_XLIB
|
|
#include <X11/Xlib.h>
|
|
#include <clutter/x11/clutter-x11.h>
|
|
#endif
|
|
|
|
#include "test-conform-common.h"
|
|
|
|
/**
|
|
* test_conform_simple_fixture_setup:
|
|
*
|
|
* Initialise stuff before each test is run
|
|
*/
|
|
void
|
|
test_conform_simple_fixture_setup (TestConformSimpleFixture *fixture,
|
|
gconstpointer data)
|
|
{
|
|
const TestConformSharedState *shared_state = data;
|
|
static int counter = 0;
|
|
|
|
if (counter != 0)
|
|
g_critical ("We don't support running more than one test at a time\n"
|
|
"in a single test run due to the state leakage that often\n"
|
|
"causes subsequent tests to fail.\n"
|
|
"\n"
|
|
"If you want to run all the tests you should run\n"
|
|
"$ make test-report");
|
|
counter++;
|
|
|
|
#ifdef HAVE_CLUTTER_GLX
|
|
{
|
|
/* on X11 we need a display connection to run the test suite */
|
|
const gchar *display = g_getenv ("DISPLAY");
|
|
if (!display || *display == '\0')
|
|
{
|
|
g_print ("No DISPLAY found. Unable to run the conformance "
|
|
"test suite without a display.\n");
|
|
|
|
exit (EXIT_SUCCESS);
|
|
}
|
|
}
|
|
#endif
|
|
|
|
g_assert (clutter_init (shared_state->argc_addr, shared_state->argv_addr)
|
|
== CLUTTER_INIT_SUCCESS);
|
|
|
|
#ifdef COGL_HAS_XLIB
|
|
/* A lot of the tests depend on a specific stage / framebuffer size
|
|
* when they read pixels back to verify the results of the test.
|
|
*
|
|
* Normally the asynchronous nature of X means that setting the
|
|
* clutter stage size may really happen an indefinite amount of time
|
|
* later but since the tests are so short lived and may only render
|
|
* a single frame this is not an acceptable semantic.
|
|
*/
|
|
XSynchronize (clutter_x11_get_default_display(), TRUE);
|
|
#endif
|
|
}
|
|
|
|
|
|
/**
|
|
* test_conform_simple_fixture_teardown:
|
|
*
|
|
* Cleanup stuff after each test has finished
|
|
*/
|
|
void
|
|
test_conform_simple_fixture_teardown (TestConformSimpleFixture *fixture,
|
|
gconstpointer data)
|
|
{
|
|
/* const TestConformSharedState *shared_state = data; */
|
|
}
|
|
|
|
void
|
|
test_conform_get_gl_functions (TestConformGLFunctions *functions)
|
|
{
|
|
functions->glGetString = (void *) cogl_get_proc_address ("glGetString");
|
|
g_assert (functions->glGetString != NULL);
|
|
functions->glGetIntegerv = (void *) cogl_get_proc_address ("glGetIntegerv");
|
|
g_assert (functions->glGetIntegerv != NULL);
|
|
functions->glPixelStorei = (void *) cogl_get_proc_address ("glPixelStorei");
|
|
g_assert (functions->glPixelStorei != NULL);
|
|
functions->glBindTexture = (void *) cogl_get_proc_address ("glBindTexture");
|
|
g_assert (functions->glBindTexture != NULL);
|
|
functions->glGenTextures = (void *) cogl_get_proc_address ("glGenTextures");
|
|
g_assert (functions->glGenTextures != NULL);
|
|
functions->glGetError = (void *) cogl_get_proc_address ("glGetError");
|
|
g_assert (functions->glGetError != NULL);
|
|
functions->glDeleteTextures =
|
|
(void *) cogl_get_proc_address ("glDeleteTextures");
|
|
g_assert (functions->glDeleteTextures != NULL);
|
|
functions->glTexImage2D = (void *) cogl_get_proc_address ("glTexImage2D");
|
|
g_assert (functions->glTexImage2D != NULL);
|
|
functions->glTexParameteri =
|
|
(void *) cogl_get_proc_address ("glTexParameteri");
|
|
g_assert (functions->glTexParameteri != NULL);
|
|
}
|