mirror of
				https://github.com/glfw/glfw.git
				synced 2025-11-04 06:15:07 +00:00 
			
		
		
		
	Moved OpenGL init and terminate to opengl module.
This commit is contained in:
		
							parent
							
								
									49dfbe86b2
								
							
						
					
					
						commit
						9614b9b22f
					
				@ -36,33 +36,6 @@
 | 
				
			|||||||
#include <limits.h>
 | 
					#include <limits.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//========================================================================
 | 
					 | 
				
			||||||
// Dynamically load libraries
 | 
					 | 
				
			||||||
//========================================================================
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static void initLibraries(void)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
#ifdef _GLFW_DLOPEN_LIBGL
 | 
					 | 
				
			||||||
    int i;
 | 
					 | 
				
			||||||
    char* libGL_names[ ] =
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        "libGL.so",
 | 
					 | 
				
			||||||
        "libGL.so.1",
 | 
					 | 
				
			||||||
        "/usr/lib/libGL.so",
 | 
					 | 
				
			||||||
        "/usr/lib/libGL.so.1",
 | 
					 | 
				
			||||||
        NULL
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    for (i = 0;  libGL_names[i] != NULL;  i++)
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        _glfwLibrary.GLX.libGL = dlopen(libGL_names[i], RTLD_LAZY | RTLD_GLOBAL);
 | 
					 | 
				
			||||||
        if (_glfwLibrary.GLX.libGL)
 | 
					 | 
				
			||||||
            break;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
//========================================================================
 | 
					//========================================================================
 | 
				
			||||||
// Translate an X11 key code to a GLFW key code.
 | 
					// Translate an X11 key code to a GLFW key code.
 | 
				
			||||||
//========================================================================
 | 
					//========================================================================
 | 
				
			||||||
@ -561,22 +534,6 @@ static GLboolean initDisplay(void)
 | 
				
			|||||||
    _glfwLibrary.X11.RandR.available = GL_FALSE;
 | 
					    _glfwLibrary.X11.RandR.available = GL_FALSE;
 | 
				
			||||||
#endif /*_GLFW_HAS_XRANDR*/
 | 
					#endif /*_GLFW_HAS_XRANDR*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Check if GLX is supported on this display
 | 
					 | 
				
			||||||
    if (!glXQueryExtension(_glfwLibrary.X11.display, NULL, NULL))
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        _glfwSetError(GLFW_OPENGL_UNAVAILABLE, "X11/GLX: GLX supported not found");
 | 
					 | 
				
			||||||
        return GL_FALSE;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (!glXQueryVersion(_glfwLibrary.X11.display,
 | 
					 | 
				
			||||||
                         &_glfwLibrary.GLX.majorVersion,
 | 
					 | 
				
			||||||
                         &_glfwLibrary.GLX.minorVersion))
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        _glfwSetError(GLFW_OPENGL_UNAVAILABLE,
 | 
					 | 
				
			||||||
                      "X11/GLX: Failed to query GLX version");
 | 
					 | 
				
			||||||
        return GL_FALSE;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // Check if Xkb is supported on this display
 | 
					    // Check if Xkb is supported on this display
 | 
				
			||||||
#if defined(_GLFW_HAS_XKB)
 | 
					#if defined(_GLFW_HAS_XKB)
 | 
				
			||||||
    _glfwLibrary.X11.Xkb.majorVersion = 1;
 | 
					    _glfwLibrary.X11.Xkb.majorVersion = 1;
 | 
				
			||||||
@ -739,15 +696,15 @@ int _glfwPlatformInit(void)
 | 
				
			|||||||
    if (!initDisplay())
 | 
					    if (!initDisplay())
 | 
				
			||||||
        return GL_FALSE;
 | 
					        return GL_FALSE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (!_glfwInitOpenGL())
 | 
				
			||||||
 | 
					        return GL_FALSE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    initGammaRamp();
 | 
					    initGammaRamp();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    initEWMH();
 | 
					    initEWMH();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    _glfwLibrary.X11.cursor = createNULLCursor();
 | 
					    _glfwLibrary.X11.cursor = createNULLCursor();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Try to load libGL.so if necessary
 | 
					 | 
				
			||||||
    initLibraries();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    _glfwInitJoysticks();
 | 
					    _glfwInitJoysticks();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Start the timer
 | 
					    // Start the timer
 | 
				
			||||||
@ -773,14 +730,7 @@ int _glfwPlatformTerminate(void)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    _glfwTerminateJoysticks();
 | 
					    _glfwTerminateJoysticks();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Unload libGL.so if necessary
 | 
					    _glfwTerminateOpenGL();
 | 
				
			||||||
#ifdef _GLFW_DLOPEN_LIBGL
 | 
					 | 
				
			||||||
    if (_glfwLibrary.GLX.libGL != NULL)
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        dlclose(_glfwLibrary.GLX.libGL);
 | 
					 | 
				
			||||||
        _glfwLibrary.GLX.libGL = NULL;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Free clipboard memory
 | 
					    // Free clipboard memory
 | 
				
			||||||
    if (_glfwLibrary.X11.selection.string)
 | 
					    if (_glfwLibrary.X11.selection.string)
 | 
				
			||||||
 | 
				
			|||||||
@ -529,6 +529,74 @@ static int createContext(_GLFWwindow* window,
 | 
				
			|||||||
//////                       GLFW internal API                      //////
 | 
					//////                       GLFW internal API                      //////
 | 
				
			||||||
//////////////////////////////////////////////////////////////////////////
 | 
					//////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//========================================================================
 | 
				
			||||||
 | 
					// Initialize GLX
 | 
				
			||||||
 | 
					//========================================================================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int _glfwInitOpenGL(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					#ifdef _GLFW_DLOPEN_LIBGL
 | 
				
			||||||
 | 
					    int i;
 | 
				
			||||||
 | 
					    char* libGL_names[ ] =
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        "libGL.so",
 | 
				
			||||||
 | 
					        "libGL.so.1",
 | 
				
			||||||
 | 
					        "/usr/lib/libGL.so",
 | 
				
			||||||
 | 
					        "/usr/lib/libGL.so.1",
 | 
				
			||||||
 | 
					        NULL
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for (i = 0;  libGL_names[i] != NULL;  i++)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        _glfwLibrary.GLX.libGL = dlopen(libGL_names[i], RTLD_LAZY | RTLD_GLOBAL);
 | 
				
			||||||
 | 
					        if (_glfwLibrary.GLX.libGL)
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (!_glfwLibrary.GLX.libGL)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        _glfwSetError(GLFW_PLATFORM_ERROR, "X11/GLX: Failed to find libGL");
 | 
				
			||||||
 | 
					        return GL_FALSE;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Check if GLX is supported on this display
 | 
				
			||||||
 | 
					    if (!glXQueryExtension(_glfwLibrary.X11.display, NULL, NULL))
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        _glfwSetError(GLFW_OPENGL_UNAVAILABLE, "X11/GLX: GLX supported not found");
 | 
				
			||||||
 | 
					        return GL_FALSE;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (!glXQueryVersion(_glfwLibrary.X11.display,
 | 
				
			||||||
 | 
					                         &_glfwLibrary.GLX.majorVersion,
 | 
				
			||||||
 | 
					                         &_glfwLibrary.GLX.minorVersion))
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        _glfwSetError(GLFW_OPENGL_UNAVAILABLE,
 | 
				
			||||||
 | 
					                      "X11/GLX: Failed to query GLX version");
 | 
				
			||||||
 | 
					        return GL_FALSE;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return GL_TRUE;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//========================================================================
 | 
				
			||||||
 | 
					// Terminate GLX
 | 
				
			||||||
 | 
					//========================================================================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void _glfwTerminateOpenGL(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    // Unload libGL.so if necessary
 | 
				
			||||||
 | 
					#ifdef _GLFW_DLOPEN_LIBGL
 | 
				
			||||||
 | 
					    if (_glfwLibrary.GLX.libGL != NULL)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        dlclose(_glfwLibrary.GLX.libGL);
 | 
				
			||||||
 | 
					        _glfwLibrary.GLX.libGL = NULL;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//========================================================================
 | 
					//========================================================================
 | 
				
			||||||
// Prepare for creation of the OpenGL context
 | 
					// Prepare for creation of the OpenGL context
 | 
				
			||||||
//========================================================================
 | 
					//========================================================================
 | 
				
			||||||
 | 
				
			|||||||
@ -283,6 +283,8 @@ GLFWGLOBAL struct {
 | 
				
			|||||||
void _glfwInitTimer(void);
 | 
					void _glfwInitTimer(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// OpenGL support
 | 
					// OpenGL support
 | 
				
			||||||
 | 
					int _glfwInitOpenGL(void);
 | 
				
			||||||
 | 
					void _glfwTerminateOpenGL(void);
 | 
				
			||||||
int _glfwCreateContext(_GLFWwindow* window,
 | 
					int _glfwCreateContext(_GLFWwindow* window,
 | 
				
			||||||
                       const _GLFWwndconfig* wndconfig,
 | 
					                       const _GLFWwndconfig* wndconfig,
 | 
				
			||||||
                       const _GLFWfbconfig* fbconfig);
 | 
					                       const _GLFWfbconfig* fbconfig);
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user