#include "allocate/factory.h" #include "code/return.h" #include "target/linux/draw/opengl_x11_service.h" opengl_x11_service_t::opengl_x11_service_t( opengl_x11_service_t::configuration_t* configuration_p ) { configuration_m = configuration_p; } return_t opengl_x11_service_t::get_visual_info( Display* display_p ) { return_t return_l; return_l.error_m = opengl_x11_service_t::error_t::none; GLint attributes_l[] = { GLX_RGBA, GLX_DEPTH_SIZE, 24, GLX_DOUBLEBUFFER, None }; XVisualInfo *visual_info_l = glXChooseVisual( display_p, 0, attributes_l ); if (visual_info_l == NULL) { return_l.error_m = opengl_x11_service_t::error_t::no_visual_found; } return_l.value_m = visual_info_l; return return_l; } void_t opengl_x11_service_t::initialize_context( Display* display_p, XVisualInfo* visual_info_p, Window window_p ){ void_t void_l; configuration_m->glx_context_m = glXCreateContext( display_p, visual_info_p, NULL, GL_TRUE ); glXMakeCurrent( display_p, window_p, configuration_m->glx_context_m ); void_l.error_m = opengl_x11_service_t::error_t::none; return void_l; } void_t opengl_x11_service_t::swap_buffers( Display* display_p, Window window_p ) { void_t void_l; void_l.error_m = opengl_x11_service_t::error_t::none; glXSwapBuffers( display_p, window_p ); return void_l; } void_t opengl_x11_service_t::dispose( Display* display_p ) { void_t void_l; void_l.error_m = opengl_x11_service_t::error_t::none; glXMakeCurrent( display_p, None, NULL ); glXDestroyContext( display_p, configuration_m->glx_context_m ); return void_l; } return_t opengl_x11_service_factory_t::create( opengl_x11_service_t::configuration_t* configuration_p ) { opengl_x11_service_t* opengl_x11_service_l = new opengl_x11_service_t( configuration_p ); return_t return_l; return_l.error_m = opengl_x11_service_t::error_t::none; return_l.value_m = opengl_x11_service_l; return return_l; } void_t opengl_x11_service_factory_t::dispose( opengl_x11_service_t* opengl_x11_service_p ) { delete opengl_x11_service_p; void_t void_l; void_l.error_m = opengl_x11_service_t::error_t::none; return void_l; }