static void DirectFB_GL_UnloadLibrary(_THIS) { int ret; if (_this->gl_config.driver_loaded) { ret = GL_UnloadObject(_this->gl_config.dll_handle); if (ret) SDL_DFB_ERR("Error #%d trying to unload library.\n", ret); _this->gl_config.dll_handle = NULL; _this->gl_config.driver_loaded = 0; } }
void X11_GL_UnloadLibrary(_THIS) { /* Don't actually unload the library, since it may have registered * X11 shutdown hooks, per the notes at: * http://dri.sourceforge.net/doc/DRIuserguide.html */ #if 0 GL_UnloadObject(_this->gl_config.dll_handle); _this->gl_config.dll_handle = NULL; #endif /* Free OpenGL memory */ SDL_free(_this->gl_data); _this->gl_data = NULL; }
static void DirectFB_GL_UnloadLibrary(_THIS) { #if 0 int ret; if (_this->gl_config.driver_loaded) { ret = GL_UnloadObject(_this->gl_config.dll_handle); if (ret) SDL_DFB_ERR("Error #%d trying to unload library.\n", ret); _this->gl_config.dll_handle = NULL; _this->gl_config.driver_loaded = 0; } #endif /* Free OpenGL memory */ SDL_free(_this->gl_data); _this->gl_data = NULL; }
void X11_GL_UnloadLibrary(_THIS) { #if SDL_VIDEO_OPENGL_GLX if ( this->gl_config.driver_loaded ) { GL_UnloadObject(this->gl_config.dll_handle); this->gl_data->glXGetProcAddress = NULL; this->gl_data->glXChooseVisual = NULL; this->gl_data->glXCreateContext = NULL; this->gl_data->glXDestroyContext = NULL; this->gl_data->glXMakeCurrent = NULL; this->gl_data->glXSwapBuffers = NULL; this->gl_data->glXSwapIntervalSGI = NULL; this->gl_data->glXSwapIntervalMESA = NULL; this->gl_config.dll_handle = NULL; this->gl_config.driver_loaded = 0; } #endif }
int X11_GL_LoadLibrary(_THIS, const char* path) { void* handle = NULL; if ( gl_active ) { SDL_SetError("OpenGL context already created"); return -1; } if ( path == NULL ) { path = SDL_getenv("SDL_VIDEO_GL_DRIVER"); if ( path == NULL ) { path = DEFAULT_OPENGL; } } handle = GL_LoadObject(path); if ( handle == NULL ) { #if defined(OPENGL_REQUIRS_DLOPEN) && defined(SDL_LOADSO_DLOPEN) SDL_SetError("Failed loading %s", path); #else #endif return -1; } X11_GL_UnloadLibrary(this); this->gl_config.dll_handle = handle; this->gl_data->glXGetProcAddress = (void *(*)(const GLubyte *)) GL_LoadFunction(handle, "glXGetProcAddressARB"); this->gl_data->glXChooseVisual = (XVisualInfo *(*)(Display *, int, int *)) X11_GL_GetProcAddress(this, "glXChooseVisual"); this->gl_data->glXCreateContext = (GLXContext (*)(Display *, XVisualInfo *, GLXContext, int)) X11_GL_GetProcAddress(this, "glXCreateContext"); this->gl_data->glXDestroyContext = (void (*)(Display *, GLXContext)) X11_GL_GetProcAddress(this, "glXDestroyContext"); this->gl_data->glXMakeCurrent = (int (*)(Display *, GLXDrawable, GLXContext)) X11_GL_GetProcAddress(this, "glXMakeCurrent"); this->gl_data->glXSwapBuffers = (void (*)(Display *, GLXDrawable)) X11_GL_GetProcAddress(this, "glXSwapBuffers"); this->gl_data->glXGetConfig = (int (*)(Display *, XVisualInfo *, int, int *)) X11_GL_GetProcAddress(this, "glXGetConfig"); this->gl_data->glXQueryExtensionsString = (const char *(*)(Display *, int)) X11_GL_GetProcAddress(this, "glXQueryExtensionsString"); this->gl_data->glXSwapIntervalSGI = (int (*)(int)) X11_GL_GetProcAddress(this, "glXSwapIntervalSGI"); this->gl_data->glXSwapIntervalMESA = (GLint (*)(unsigned)) X11_GL_GetProcAddress(this, "glXSwapIntervalMESA"); this->gl_data->glXSwapIntervalEXT = (int (*)(Display*,GLXDrawable,int)) X11_GL_GetProcAddress(this, "glXSwapIntervalEXT"); if ( (this->gl_data->glXChooseVisual == NULL) || (this->gl_data->glXCreateContext == NULL) || (this->gl_data->glXDestroyContext == NULL) || (this->gl_data->glXMakeCurrent == NULL) || (this->gl_data->glXSwapBuffers == NULL) || (this->gl_data->glXGetConfig == NULL) || (this->gl_data->glXQueryExtensionsString == NULL)) { GL_UnloadObject(this->gl_config.dll_handle); this->gl_config.dll_handle = NULL; SDL_SetError("Could not retrieve OpenGL functions"); return -1; } this->gl_config.driver_loaded = 1; if ( path ) { SDL_strlcpy(this->gl_config.driver_path, path, SDL_arraysize(this->gl_config.driver_path)); } else { *this->gl_config.driver_path = '\0'; } return 0; }
int X11_GL_LoadLibrary(_THIS, const char *path) { Display *display; void *handle; if (_this->gl_data) { return SDL_SetError("OpenGL context already created"); } /* Load the OpenGL library */ if (path == NULL) { path = SDL_getenv("SDL_OPENGL_LIBRARY"); } if (path == NULL) { path = DEFAULT_OPENGL; } _this->gl_config.dll_handle = GL_LoadObject(path); if (!_this->gl_config.dll_handle) { #if defined(OPENGL_REQUIRES_DLOPEN) && defined(SDL_LOADSO_DLOPEN) SDL_SetError("Failed loading %s: %s", path, dlerror()); #endif return -1; } SDL_strlcpy(_this->gl_config.driver_path, path, SDL_arraysize(_this->gl_config.driver_path)); /* Allocate OpenGL memory */ _this->gl_data = (struct SDL_GLDriverData *) SDL_calloc(1, sizeof(struct SDL_GLDriverData)); if (!_this->gl_data) { return SDL_OutOfMemory(); } /* Load function pointers */ handle = _this->gl_config.dll_handle; _this->gl_data->glXQueryExtension = (Bool (*)(Display *, int *, int *)) GL_LoadFunction(handle, "glXQueryExtension"); _this->gl_data->glXGetProcAddress = (void *(*)(const GLubyte *)) GL_LoadFunction(handle, "glXGetProcAddressARB"); _this->gl_data->glXChooseVisual = (XVisualInfo * (*)(Display *, int, int *)) X11_GL_GetProcAddress(_this, "glXChooseVisual"); _this->gl_data->glXCreateContext = (GLXContext(*)(Display *, XVisualInfo *, GLXContext, int)) X11_GL_GetProcAddress(_this, "glXCreateContext"); _this->gl_data->glXDestroyContext = (void (*)(Display *, GLXContext)) X11_GL_GetProcAddress(_this, "glXDestroyContext"); _this->gl_data->glXMakeCurrent = (int (*)(Display *, GLXDrawable, GLXContext)) X11_GL_GetProcAddress(_this, "glXMakeCurrent"); _this->gl_data->glXSwapBuffers = (void (*)(Display *, GLXDrawable)) X11_GL_GetProcAddress(_this, "glXSwapBuffers"); _this->gl_data->glXQueryDrawable = (void (*)(Display*,GLXDrawable,int,unsigned int*)) X11_GL_GetProcAddress(_this, "glXQueryDrawable"); if (!_this->gl_data->glXQueryExtension || !_this->gl_data->glXChooseVisual || !_this->gl_data->glXCreateContext || !_this->gl_data->glXDestroyContext || !_this->gl_data->glXMakeCurrent || !_this->gl_data->glXSwapBuffers) { return SDL_SetError("Could not retrieve OpenGL functions"); } display = ((SDL_VideoData *) _this->driverdata)->display; if (!_this->gl_data->glXQueryExtension(display, &_this->gl_data->errorBase, &_this->gl_data->eventBase)) { return SDL_SetError("GLX is not supported"); } /* Initialize extensions */ X11_GL_InitExtensions(_this); /* If SDL_GL_CONTEXT_EGL has been changed to 1, and there's * no GLX_EXT_create_context_es2_profile extension switch over to X11_GLES functions */ if (_this->gl_config.use_egl == 1) { if (_this->gl_data->HAS_GLX_EXT_create_context_es2_profile) { /* We cheat a little bit here by using GLX instead of EGL * to improve our chances of getting hardware acceleration */ _this->gl_config.use_egl = 0; _this->gl_config.profile_mask = SDL_GL_CONTEXT_PROFILE_ES; } else { #if SDL_VIDEO_OPENGL_EGL X11_GL_UnloadLibrary(_this); /* Better avoid conflicts! */ if (_this->gl_config.dll_handle != NULL ) { GL_UnloadObject(_this->gl_config.dll_handle); _this->gl_config.dll_handle = NULL; } _this->GL_LoadLibrary = X11_GLES_LoadLibrary; _this->GL_GetProcAddress = X11_GLES_GetProcAddress; _this->GL_UnloadLibrary = X11_GLES_UnloadLibrary; _this->GL_CreateContext = X11_GLES_CreateContext; _this->GL_MakeCurrent = X11_GLES_MakeCurrent; _this->GL_SetSwapInterval = X11_GLES_SetSwapInterval; _this->GL_GetSwapInterval = X11_GLES_GetSwapInterval; _this->GL_SwapWindow = X11_GLES_SwapWindow; _this->GL_DeleteContext = X11_GLES_DeleteContext; return X11_GLES_LoadLibrary(_this, NULL); #else return SDL_SetError("SDL not configured with EGL support"); #endif } } return 0; }