static gboolean check_gl_extensions (void) { ClutterBackend *backend; CoglContext *cogl_context; CoglDisplay *cogl_display; CoglRenderer *cogl_renderer; backend = clutter_get_default_backend (); cogl_context = clutter_backend_get_cogl_context (backend); cogl_display = cogl_context_get_display (cogl_context); cogl_renderer = cogl_display_get_renderer (cogl_display); switch (cogl_renderer_get_driver (cogl_renderer)) { case COGL_DRIVER_GL3: { int num_extensions, i; gboolean arb_sync = FALSE; gboolean x11_sync_object = FALSE; meta_gl_get_integerv (GL_NUM_EXTENSIONS, &num_extensions); for (i = 0; i < num_extensions; ++i) { const char *ext = meta_gl_get_stringi (GL_EXTENSIONS, i); if (g_strcmp0 ("GL_ARB_sync", ext) == 0) arb_sync = TRUE; else if (g_strcmp0 ("GL_EXT_x11_sync_object", ext) == 0) x11_sync_object = TRUE; } return arb_sync && x11_sync_object; } case COGL_DRIVER_GL: { const char *extensions = meta_gl_get_string (GL_EXTENSIONS); return (extensions != NULL && strstr (extensions, "GL_ARB_sync") != NULL && strstr (extensions, "GL_EXT_x11_sync_object") != NULL); } default: break; } return FALSE; }
static void init() { CoglError *error = NULL; CoglDisplay *display; CoglRenderer *renderer; CoglBool missing_requirement; //g_setenv ("COGL_X11_SYNC", "1", 0); test_ctx = cogl_context_new (NULL, &error); if (!test_ctx) { g_message ("Failed to create a CoglContext: %s", error->message); exit(1); } display = cogl_context_get_display (test_ctx); renderer = cogl_display_get_renderer (display); if (!check_flags (renderer)) { g_message ("WARNING: Missing required feature[s] for this test\n"); exit(1); } { //TODO: get all monitors size to test CoglOffscreen *offscreen; CoglTexture2D *tex = cogl_texture_2d_new_with_size (test_ctx, FB_WIDTH, FB_HEIGHT); offscreen = cogl_offscreen_new_with_texture (COGL_TEXTURE (tex)); test_fb = COGL_FRAMEBUFFER (offscreen); } if (!cogl_framebuffer_allocate (test_fb, &error)) { g_message ("Failed to allocate framebuffer: %s", error->message); exit(1); } cogl_framebuffer_clear4f (test_fb, COGL_BUFFER_BIT_COLOR | COGL_BUFFER_BIT_DEPTH | COGL_BUFFER_BIT_STENCIL, 0, 0, 0, 1); }
int main (int argc, char **argv) { CoglRenderer *renderer; CoglDisplay *display; CoglContext *ctx; CoglError *error = NULL; CoglWinsysID winsys_id; const char *winsys_name; OutputState output_state; #ifdef COGL_HAS_EMSCRIPTEN_SUPPORT ctx = cogl_sdl_context_new (SDL_USEREVENT, &error); #else ctx = cogl_context_new (NULL, &error); #endif if (!ctx) { fprintf (stderr, "Failed to create context: %s\n", error->message); return 1; } display = cogl_context_get_display (ctx); renderer = cogl_display_get_renderer (display); winsys_id = cogl_renderer_get_winsys_id (renderer); winsys_name = get_winsys_name_for_id (winsys_id); g_print ("Renderer: %s\n\n", winsys_name); g_print ("Features:\n"); cogl_foreach_feature (ctx, feature_cb, NULL); g_print ("Outputs:\n"); output_state.id = 0; cogl_renderer_foreach_output (renderer, output_cb, &output_state); if (output_state.id == 0) printf (" Unknown\n"); return 0; }