int gfx_init( GFXContext context, GFXErrorMode errors) { /* Always debug */ #ifndef NDEBUG errors = GFX_ERROR_MODE_DEBUG; #endif /* Initialize errors, platform and context manager */ if(_gfx_errors_init(errors)) { if(_gfx_platform_init()) { if(_gfx_context_manager_init(context)) { /* Get starting point of time */ _gfx_platform_init_timer(); _gfx_time_start = _gfx_platform_get_time(); return 1; } _gfx_platform_terminate(); } _gfx_errors_terminate(); } return 0; }
void gfx_terminate(void) { /* Cleanup shared buffers */ gfx_shared_buffer_cleanup(); /* Terminate */ _gfx_context_manager_terminate(); _gfx_platform_terminate(); _gfx_errors_terminate(); }
int _gfx_platform_init(void) { /* Connect to X Server */ _gfx_x11.display = XOpenDisplay(NULL); if(!_gfx_x11.display) return 0; XSetErrorHandler(_gfx_x11_error_handler); _gfx_x11.errors = 1; /* Setup memory */ gfx_vector_init(&_gfx_x11.monitors, sizeof(GFX_X11_Monitor)); gfx_vector_init(&_gfx_x11.modes, sizeof(GFX_X11_Mode)); gfx_vector_init(&_gfx_x11.windows, sizeof(GFX_X11_Window)); /* Load extensions and init monitors */ int major; int minor; if( !_gfx_x11_load_extensions(&major, &minor) || !_gfx_x11_init_monitors(major, minor)) { _gfx_platform_terminate(); return 0; } /* Load atoms */ _gfx_x11.MOTIF_WM_HINTS = XInternAtom(_gfx_x11.display, "_MOTIF_WM_HINTS", False); _gfx_x11.NET_WM_BYPASS_COMPOSITOR = XInternAtom(_gfx_x11.display, "_NET_WM_BYPASS_COMPOSITOR", False); _gfx_x11.NET_WM_STATE = XInternAtom(_gfx_x11.display, "_NET_WM_STATE", False); _gfx_x11.NET_WM_STATE_ABOVE = XInternAtom(_gfx_x11.display, "_NET_WM_STATE_ABOVE", False); _gfx_x11.WM_DELETE_WINDOW = XInternAtom(_gfx_x11.display, "WM_DELETE_WINDOW", False); /* Construct a keycode lookup */ _gfx_x11_create_key_table(); return 1; }