Moved OpenGL-related functions into *opengl files.
diff --git a/src/opengl.c b/src/opengl.c
new file mode 100644
index 0000000..7c25c75
--- /dev/null
+++ b/src/opengl.c
@@ -0,0 +1,291 @@
+//========================================================================
+// GLFW - An OpenGL framework
+// Platform:    Any
+// API version: 3.0
+// WWW:         http://www.glfw.org/
+//------------------------------------------------------------------------
+// Copyright (c) 2002-2006 Marcus Geelnard
+// Copyright (c) 2006-2010 Camilla Berglund <elmindreda@elmindreda.org>
+//
+// 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"
+
+#include <string.h>
+
+
+//////////////////////////////////////////////////////////////////////////
+//////                       GLFW internal API                      //////
+//////////////////////////////////////////////////////////////////////////
+
+//========================================================================
+// Parses the OpenGL version string and extracts the version number
+//========================================================================
+
+void _glfwParseGLVersion(int* major, int* minor, int* rev)
+{
+    GLuint _major, _minor = 0, _rev = 0;
+    const GLubyte* version;
+    const GLubyte* ptr;
+    const char* glesPrefix = "OpenGL ES ";
+
+    // Get OpenGL version string
+    version = glGetString(GL_VERSION);
+    if (!version)
+        return;
+
+    if (strncmp((const char*) version, glesPrefix, strlen(glesPrefix)) == 0)
+    {
+        // The version string on OpenGL ES has a prefix before the version
+        // number, so we skip past it and then continue as normal
+
+        version += strlen(glesPrefix);
+    }
+
+    // Parse string
+    ptr = 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
+    *major = _major;
+    *minor = _minor;
+    *rev = _rev;
+}
+
+//========================================================================
+// 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;
+    GLubyte* 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;
+    for (;;)
+    {
+        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 public API                       //////
+//////////////////////////////////////////////////////////////////////////
+
+//========================================================================
+// Swap buffers (double-buffering)
+//========================================================================
+
+GLFWAPI void glfwSwapBuffers(void)
+{
+    if (!_glfwInitialized)
+    {
+        _glfwSetError(GLFW_NOT_INITIALIZED, NULL);
+        return;
+    }
+
+    if (!_glfwLibrary.currentWindow)
+    {
+        _glfwSetError(GLFW_NO_CURRENT_WINDOW, NULL);
+        return;
+    }
+
+    if (_glfwLibrary.currentWindow)
+        _glfwPlatformSwapBuffers();
+}
+
+
+//========================================================================
+// Set double buffering swap interval (0 = vsync off)
+//========================================================================
+
+GLFWAPI void glfwSwapInterval(int interval)
+{
+    if (!_glfwInitialized)
+    {
+        _glfwSetError(GLFW_NOT_INITIALIZED, NULL);
+        return;
+    }
+
+    if (!_glfwLibrary.currentWindow)
+    {
+        _glfwSetError(GLFW_NO_CURRENT_WINDOW, NULL);
+        return;
+    }
+
+    _glfwPlatformSwapInterval(interval);
+}
+
+
+//========================================================================
+// Check if an OpenGL extension is available at runtime
+//========================================================================
+
+GLFWAPI int glfwExtensionSupported(const char* extension)
+{
+    const GLubyte* extensions;
+    _GLFWwindow* window;
+    GLubyte* where;
+    GLint count;
+    int i;
+
+    if (!_glfwInitialized)
+    {
+        _glfwSetError(GLFW_NOT_INITIALIZED, NULL);
+        return GL_FALSE;
+    }
+
+    window = _glfwLibrary.currentWindow;
+    if (!window)
+    {
+        _glfwSetError(GLFW_NO_CURRENT_WINDOW, NULL);
+        return GL_FALSE;
+    }
+
+    // Extension names should not have spaces
+    where = (GLubyte*) strchr(extension, ' ');
+    if (where || *extension == '\0')
+        return GL_FALSE;
+
+    if (window->glMajor < 3)
+    {
+        // Check if extension is in the old style OpenGL extensions string
+
+        extensions = glGetString(GL_EXTENSIONS);
+        if (extensions != NULL)
+        {
+            if (_glfwStringInExtensionString(extension, extensions))
+                return GL_TRUE;
+        }
+    }
+    else
+    {
+        // Check if extension is in the modern OpenGL extensions string list
+
+        glGetIntegerv(GL_NUM_EXTENSIONS, &count);
+
+        for (i = 0;  i < count;  i++)
+        {
+             if (strcmp((const char*) window->GetStringi(GL_EXTENSIONS, i),
+                         extension) == 0)
+             {
+                 return GL_TRUE;
+             }
+        }
+    }
+
+    // Additional platform specific extension checking (e.g. WGL)
+    if (_glfwPlatformExtensionSupported(extension))
+        return GL_TRUE;
+
+    return GL_FALSE;
+}
+
+
+//========================================================================
+// Get the function pointer to an OpenGL function.
+// This function can be used to get access to extended OpenGL functions.
+//========================================================================
+
+GLFWAPI void* glfwGetProcAddress(const char* procname)
+{
+    if (!_glfwInitialized)
+    {
+        _glfwSetError(GLFW_NOT_INITIALIZED, NULL);
+        return NULL;
+    }
+
+    if (!_glfwLibrary.currentWindow)
+    {
+        _glfwSetError(GLFW_NO_CURRENT_WINDOW, NULL);
+        return NULL;
+    }
+
+    return _glfwPlatformGetProcAddress(procname);
+}
+
+
+//========================================================================
+// Returns the OpenGL version
+//========================================================================
+
+GLFWAPI void glfwGetGLVersion(int* major, int* minor, int* rev)
+{
+    _GLFWwindow* window;
+
+    if (!_glfwInitialized)
+    {
+        _glfwSetError(GLFW_NOT_INITIALIZED, NULL);
+        return;
+    }
+
+    window = _glfwLibrary.currentWindow;
+    if (!window)
+    {
+        _glfwSetError(GLFW_NO_CURRENT_WINDOW, NULL);
+        return;
+    }
+
+    if (major != NULL)
+        *major = window->glMajor;
+
+    if (minor != NULL)
+        *minor = window->glMinor;
+
+    if (rev != NULL)
+        *rev = window->glRevision;
+}
+