about summary refs log tree commit diff
path: root/src/engine/external/glfw/lib/glext.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/engine/external/glfw/lib/glext.c')
-rw-r--r--src/engine/external/glfw/lib/glext.c201
1 files changed, 201 insertions, 0 deletions
diff --git a/src/engine/external/glfw/lib/glext.c b/src/engine/external/glfw/lib/glext.c
new file mode 100644
index 00000000..fda56fa2
--- /dev/null
+++ b/src/engine/external/glfw/lib/glext.c
@@ -0,0 +1,201 @@
+//========================================================================

+// GLFW - An OpenGL framework

+// File:        glext.c

+// Platform:    Any

+// API version: 2.6

+// WWW:         http://glfw.sourceforge.net

+//------------------------------------------------------------------------

+// Copyright (c) 2002-2006 Camilla Berglund

+//

+// This software is provided 'as-is', without any express or implied

+// warranty. In no event will the authors be held liable for any damages

+// arising from the use of this software.

+//

+// Permission is granted to anyone to use this software for any purpose,

+// including commercial applications, and to alter it and redistribute it

+// freely, subject to the following restrictions:

+//

+// 1. The origin of this software must not be misrepresented; you must not

+//    claim that you wrote the original software. If you use this software

+//    in a product, an acknowledgment in the product documentation would

+//    be appreciated but is not required.

+//

+// 2. Altered source versions must be plainly marked as such, and must not

+//    be misrepresented as being the original software.

+//

+// 3. This notice may not be removed or altered from any source

+//    distribution.

+//

+//========================================================================

+

+#include "internal.h"

+

+

+//************************************************************************

+//****                  GLFW internal functions                       ****

+//************************************************************************

+

+//========================================================================

+// _glfwStringInExtensionString() - Check if a string can be found in an

+// OpenGL extension string

+//========================================================================

+

+int _glfwStringInExtensionString( const char *string,

+    const GLubyte *extensions )

+{

+    const GLubyte *start;

+    GLubyte *where, *terminator;

+

+    // It takes a bit of care to be fool-proof about parsing the

+    // OpenGL extensions string. Don't be fooled by sub-strings,

+    // etc.

+    start = extensions;

+    while( 1 )

+    {

+        where = (GLubyte *) strstr( (const char *) start, string );

+        if( !where )

+        {

+            return GL_FALSE;

+        }

+        terminator = where + strlen( string );

+        if( where == start || *(where - 1) == ' ' )

+        {

+            if( *terminator == ' ' || *terminator == '\0' )

+            {

+                break;

+            }

+        }

+        start = terminator;

+    }

+

+    return GL_TRUE;

+}

+

+

+

+//************************************************************************

+//****                    GLFW user functions                         ****

+//************************************************************************

+

+//========================================================================

+// glfwExtensionSupported() - Check if an OpenGL extension is available

+// at runtime

+//========================================================================

+

+GLFWAPI int GLFWAPIENTRY glfwExtensionSupported( const char *extension )

+{

+    const GLubyte *extensions;

+    GLubyte       *where;

+

+    // Is GLFW initialized?

+    if( !_glfwInitialized || !_glfwWin.Opened )

+    {

+        return GL_FALSE;

+    }

+

+    // Extension names should not have spaces

+    where = (GLubyte *) strchr( extension, ' ' );

+    if( where || *extension == '\0' )

+    {

+        return GL_FALSE;

+    }

+

+    // Check if extension is in the standard OpenGL extensions string

+    extensions = (GLubyte *) glGetString( GL_EXTENSIONS );

+    if( extensions != NULL )

+    {

+        if( _glfwStringInExtensionString( extension, extensions ) )

+        {

+            return GL_TRUE;

+        }

+    }

+

+    // Additional platform specific extension checking (e.g. WGL)

+    if( _glfwPlatformExtensionSupported( extension ) )

+    {

+        return GL_TRUE;

+    }

+

+    return GL_FALSE;

+}

+

+

+//========================================================================

+// glfwGetProcAddress() - Get the function pointer to an OpenGL function.

+// This function can be used to get access to extended OpenGL functions.

+//========================================================================

+

+GLFWAPI void * GLFWAPIENTRY glfwGetProcAddress( const char *procname )

+{

+    // Is GLFW initialized?

+    if( !_glfwInitialized || !_glfwWin.Opened )

+    {

+        return NULL;

+    }

+

+    return _glfwPlatformGetProcAddress( procname );

+}

+

+

+//========================================================================

+// glfwGetGLVersion() - Get OpenGL version

+//========================================================================

+

+GLFWAPI void GLFWAPIENTRY glfwGetGLVersion( int *major, int *minor,

+    int *rev )

+{

+    GLuint _major, _minor = 0, _rev = 0;

+    const GLubyte *version;

+    GLubyte *ptr;

+

+    // Is GLFW initialized?

+    if( !_glfwInitialized || !_glfwWin.Opened )

+    {

+        return;

+    }

+

+    // Get OpenGL version string

+    version = glGetString( GL_VERSION );

+    if( !version )

+    {

+        return;

+    }

+

+    // Parse string

+    ptr = (GLubyte*) version;

+    for( _major = 0; *ptr >= '0' && *ptr <= '9'; ptr ++ )

+    {

+        _major = 10*_major + (*ptr - '0');

+    }

+    if( *ptr == '.' )

+    {

+        ptr ++;

+        for( _minor = 0; *ptr >= '0' && *ptr <= '9'; ptr ++ )

+        {

+            _minor = 10*_minor + (*ptr - '0');

+        }

+        if( *ptr == '.' )

+        {

+            ptr ++;

+            for( _rev = 0; *ptr >= '0' && *ptr <= '9'; ptr ++ )

+            {

+                _rev = 10*_rev + (*ptr - '0');

+            }

+        }

+    }

+

+    // Return parsed values

+    if( major != NULL )

+    {

+        *major = _major;

+    }

+    if( minor != NULL )

+    {

+        *minor = _minor;

+    }

+    if( rev != NULL )

+    {

+        *rev = _rev;

+    }

+}

+