mutter/tests/conform/test-conform-common.c
Giovanni Campagna 610a9c17ba Add a new GDK backend
This commit introduces a new flavour for Clutter, that uses GDK
for handling all window system specific interactions (except for
creating the cogl context, as cogl does not know about GDK), including
in particular events. This is not compatible with the X11 (glx)
flavour, and this is reflected by the different soname (libclutter-gdk-1.0.so),
as all X11 specific functions and classes are not available. If you
wish to be compatible, you should check for CLUTTER_WINDOWING_X11.
Other than that, this backend should be on feature parity with X11,
including XInput 2, XSettings and EMWH (with much, much less code)

https://bugzilla.gnome.org/show_bug.cgi?id=657434
2011-11-03 13:42:13 +00:00

101 lines
3.2 KiB
C

#include "config.h"
#include <clutter/clutter.h>
#include <stdlib.h>
#ifdef CLUTTER_WINDOWING_X11
#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 CLUTTER_WINDOWING_X11
/* 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);
}