Visual * createVisual(bool doubleBuffer, Profile profile) { struct waffle_config *cfg; int config_attrib_list[64], i(0), waffle_profile; switch (profile) { case PROFILE_ES1: waffle_profile = WAFFLE_CONTEXT_OPENGL_ES1; break; case PROFILE_ES2: waffle_profile = WAFFLE_CONTEXT_OPENGL_ES2; break; default: os::log("%s: Unsupported context profile\n", __FILE__); os::abort(); return NULL; } if(!waffle_display_supports_context_api(dpy, waffle_profile)) { os::log("%s: !waffle_display_supports_context_api\n", __FILE__); os::abort(); return NULL; } config_attrib_list[i++] = WAFFLE_CONTEXT_API; config_attrib_list[i++] = waffle_profile; config_attrib_list[i++] = WAFFLE_RED_SIZE; config_attrib_list[i++] = 8; config_attrib_list[i++] = WAFFLE_GREEN_SIZE; config_attrib_list[i++] = 8; config_attrib_list[i++] = WAFFLE_BLUE_SIZE; config_attrib_list[i++] = 8; config_attrib_list[i++] = WAFFLE_DEPTH_SIZE; config_attrib_list[i++] = 8; config_attrib_list[i++] = WAFFLE_ALPHA_SIZE; config_attrib_list[i++] = 8; config_attrib_list[i++] = WAFFLE_STENCIL_SIZE; config_attrib_list[i++] = 8; config_attrib_list[i++] = WAFFLE_DOUBLE_BUFFERED; config_attrib_list[i++] = doubleBuffer; config_attrib_list[i++] = 0; cfg = waffle_config_choose(dpy, config_attrib_list); if (!cfg) { os::log("Error in %s waffle_config_choose(dpy, " \ "config_attrib_list)\n", __FILE__); os::abort(); return NULL; } return new WaffleVisual(profile, cfg); }
void make_context() { /* Generate a context */ struct waffle_display *dpy; struct waffle_config *config; struct waffle_window *window; struct waffle_context *ctx; const int32_t init_attrs[] = { WAFFLE_PLATFORM, WAFFLE_PLATFORM_X11_EGL, 0, }; const int32_t config_attrs[] = { WAFFLE_CONTEXT_API, WAFFLE_CONTEXT_OPENGL_ES2, WAFFLE_RED_SIZE, 8, WAFFLE_BLUE_SIZE, 8, WAFFLE_GREEN_SIZE, 8, 0, }; const int32_t window_width = 320; const int32_t window_height = 240; waffle_init(init_attrs); dpy = waffle_display_connect(NULL); // Exit if OpenGL ES2 is unsupported. if (!waffle_display_supports_context_api(dpy, WAFFLE_CONTEXT_OPENGL_ES2) || !waffle_dl_can_open(WAFFLE_DL_OPENGL_ES2)) { exit(EXIT_FAILURE); } config = waffle_config_choose(dpy, config_attrs); window = waffle_window_create(config, window_width, window_height); ctx = waffle_context_create(config, NULL); waffle_make_current(dpy, window, ctx); }
Visual * createVisual(bool doubleBuffer, unsigned samples, Profile profile) { struct waffle_config *cfg; int waffle_api; if (profile.api == glfeatures::API_GL) { waffle_api = WAFFLE_CONTEXT_OPENGL; } else if (profile.api == glfeatures::API_GLES) { switch (profile.major) { case 1: waffle_api = WAFFLE_CONTEXT_OPENGL_ES1; break; case 2: waffle_api = WAFFLE_CONTEXT_OPENGL_ES2; break; case 3: waffle_api = WAFFLE_CONTEXT_OPENGL_ES3; break; default: std::cerr << "error: unsupported context profile " << profile << "\n"; exit(1); return NULL; } } else { assert(0); return NULL; } if (!waffle_display_supports_context_api(dpy, waffle_api)) { std::cerr << "error: waffle_display_supports_context_api failed \n"; exit(1); return NULL; } Attributes<int32_t> config_attrib_list; config_attrib_list.add(WAFFLE_CONTEXT_API, waffle_api); if (profile.api == glfeatures::API_GL) { config_attrib_list.add(WAFFLE_CONTEXT_MAJOR_VERSION, profile.major); config_attrib_list.add(WAFFLE_CONTEXT_MINOR_VERSION, profile.minor); if (profile.versionGreaterOrEqual(3, 2)) { int profileMask = profile.core ? WAFFLE_CONTEXT_CORE_PROFILE : WAFFLE_CONTEXT_COMPATIBILITY_PROFILE; config_attrib_list.add(WAFFLE_CONTEXT_PROFILE, profileMask); } if (profile.forwardCompatible) { config_attrib_list.add(WAFFLE_CONTEXT_FORWARD_COMPATIBLE, true); } } config_attrib_list.add(WAFFLE_RED_SIZE, 8); config_attrib_list.add(WAFFLE_GREEN_SIZE, 8); config_attrib_list.add(WAFFLE_BLUE_SIZE, 8); config_attrib_list.add(WAFFLE_ALPHA_SIZE, 8); config_attrib_list.add(WAFFLE_DEPTH_SIZE, 24); config_attrib_list.add(WAFFLE_STENCIL_SIZE, 8); config_attrib_list.add(WAFFLE_DOUBLE_BUFFERED, doubleBuffer); if (0) { config_attrib_list.add(WAFFLE_CONTEXT_DEBUG, true); } config_attrib_list.end(); cfg = waffle_config_choose(dpy, config_attrib_list); if (!cfg) { std::cerr << "error: waffle_config_choose failed\n"; exit(1); return NULL; } return new WaffleVisual(profile, cfg); }