src/video/win32/SDL_win32opengl.c
author Sam Lantinga <slouken@libsdl.org>
Thu, 27 Jul 2006 06:53:23 +0000
changeset 1951 7177581dc9fa
parent 1936 83946ee0ff1f
child 1952 420716272158
permissions -rw-r--r--
Initial work on X11 window code in.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1913
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
     1
/*
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
     2
    SDL - Simple DirectMedia Layer
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
     3
    Copyright (C) 1997-2006 Sam Lantinga
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
     4
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
     5
    This library is free software; you can redistribute it and/or
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
     6
    modify it under the terms of the GNU Lesser General Public
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
     7
    License as published by the Free Software Foundation; either
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
     8
    version 2.1 of the License, or (at your option) any later version.
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
     9
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    10
    This library is distributed in the hope that it will be useful,
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    11
    but WITHOUT ANY WARRANTY; without even the implied warranty of
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    12
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    13
    Lesser General Public License for more details.
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    14
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    15
    You should have received a copy of the GNU Lesser General Public
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    16
    License along with this library; if not, write to the Free Software
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    17
    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    18
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    19
    Sam Lantinga
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    20
    slouken@libsdl.org
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    21
*/
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    22
#include "SDL_config.h"
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    23
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    24
#include "SDL_win32video.h"
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    25
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    26
/* WGL implementation of SDL OpenGL support */
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    27
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    28
#if SDL_VIDEO_OPENGL
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    29
#include "SDL_opengl.h"
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    30
1936
83946ee0ff1f Implemented OpenGL support on Mac OS X
Sam Lantinga <slouken@libsdl.org>
parents: 1926
diff changeset
    31
#define DEFAULT_OPENGL_PATH "OPENGL32.DLL"
1913
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    32
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    33
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    34
int
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    35
WIN_GL_LoadLibrary(_THIS, const char *path)
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    36
{
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    37
    LPTSTR wpath;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    38
    HANDLE handle;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    39
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    40
    if (_this->gl_config.driver_loaded) {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    41
        if (path) {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    42
            SDL_SetError("OpenGL library already loaded");
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    43
            return -1;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    44
        } else {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    45
            ++_this->gl_config.driver_loaded;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    46
            return 0;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    47
        }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    48
    }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    49
    if (path == NULL) {
1936
83946ee0ff1f Implemented OpenGL support on Mac OS X
Sam Lantinga <slouken@libsdl.org>
parents: 1926
diff changeset
    50
        path = DEFAULT_OPENGL_PATH;
1913
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    51
    }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    52
    wpath = WIN_UTF8ToString(path);
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    53
    handle = LoadLibrary(wpath);
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    54
    SDL_free(wpath);
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    55
    if (!handle) {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    56
        char message[1024];
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    57
        SDL_snprintf(message, SDL_arraysize(message), "LoadLibrary(\"%s\")",
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    58
                     path);
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    59
        WIN_SetError(message);
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    60
        return -1;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    61
    }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    62
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    63
    /* Load function pointers */
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    64
    _this->gl_data->wglGetProcAddress = (void *(WINAPI *) (const char *))
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    65
        GetProcAddress(handle, "wglGetProcAddress");
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    66
    _this->gl_data->wglCreateContext = (HGLRC(WINAPI *) (HDC))
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    67
        GetProcAddress(handle, "wglCreateContext");
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    68
    _this->gl_data->wglDeleteContext = (BOOL(WINAPI *) (HGLRC))
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    69
        GetProcAddress(handle, "wglDeleteContext");
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    70
    _this->gl_data->wglMakeCurrent = (BOOL(WINAPI *) (HDC, HGLRC))
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    71
        GetProcAddress(handle, "wglMakeCurrent");
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    72
    _this->gl_data->wglSwapIntervalEXT = (void (WINAPI *) (int))
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    73
        GetProcAddress(handle, "wglSwapIntervalEXT");
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    74
    _this->gl_data->wglGetSwapIntervalEXT = (int (WINAPI *) (void))
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    75
        GetProcAddress(handle, "wglGetSwapIntervalEXT");
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    76
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    77
    if (!_this->gl_data->wglGetProcAddress ||
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    78
        !_this->gl_data->wglCreateContext ||
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    79
        !_this->gl_data->wglDeleteContext ||
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    80
        !_this->gl_data->wglMakeCurrent) {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    81
        SDL_SetError("Could not retrieve OpenGL functions");
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    82
        FreeLibrary(handle);
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    83
        return -1;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    84
    }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    85
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    86
    _this->gl_config.dll_handle = handle;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    87
    SDL_strlcpy(_this->gl_config.driver_path, path,
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    88
                SDL_arraysize(_this->gl_config.driver_path));
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    89
    _this->gl_config.driver_loaded = 1;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    90
    return 0;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    91
}
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    92
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    93
void *
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    94
WIN_GL_GetProcAddress(_THIS, const char *proc)
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    95
{
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    96
    void *func;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    97
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    98
    /* This is to pick up extensions */
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    99
    func = _this->gl_data->wglGetProcAddress(proc);
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   100
    if (!func) {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   101
        /* This is probably a normal GL function */
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   102
        func = GetProcAddress(_this->gl_config.dll_handle, proc);
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   103
    }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   104
    return func;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   105
}
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   106
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   107
static void
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   108
WIN_GL_UnloadLibrary(_THIS)
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   109
{
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   110
    if (_this->gl_config.driver_loaded > 0) {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   111
        if (--_this->gl_config.driver_loaded > 0) {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   112
            return;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   113
        }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   114
        FreeLibrary((HMODULE) _this->gl_config.dll_handle);
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   115
        _this->gl_config.dll_handle = NULL;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   116
    }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   117
}
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   118
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   119
static void
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   120
WIN_GL_SetupPixelFormat(_THIS, PIXELFORMATDESCRIPTOR * pfd)
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   121
{
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   122
    SDL_zerop(pfd);
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   123
    pfd->nSize = sizeof(*pfd);
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   124
    pfd->nVersion = 1;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   125
    pfd->dwFlags = (PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL);
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   126
    if (_this->gl_config.double_buffer) {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   127
        pfd->dwFlags |= PFD_DOUBLEBUFFER;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   128
    }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   129
    if (_this->gl_config.stereo) {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   130
        pfd->dwFlags |= PFD_STEREO;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   131
    }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   132
    pfd->iLayerType = PFD_MAIN_PLANE;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   133
    pfd->iPixelType = PFD_TYPE_RGBA;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   134
    pfd->cRedBits = _this->gl_config.red_size;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   135
    pfd->cGreenBits = _this->gl_config.green_size;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   136
    pfd->cBlueBits = _this->gl_config.blue_size;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   137
    pfd->cAlphaBits = _this->gl_config.alpha_size;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   138
    if (_this->gl_config.buffer_size) {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   139
        pfd->cColorBits =
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   140
            _this->gl_config.buffer_size - _this->gl_config.alpha_size;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   141
    } else {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   142
        pfd->cColorBits = (pfd->cRedBits + pfd->cGreenBits + pfd->cBlueBits);
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   143
    }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   144
    pfd->cAccumRedBits = _this->gl_config.accum_red_size;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   145
    pfd->cAccumGreenBits = _this->gl_config.accum_green_size;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   146
    pfd->cAccumBlueBits = _this->gl_config.accum_blue_size;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   147
    pfd->cAccumAlphaBits = _this->gl_config.accum_alpha_size;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   148
    pfd->cAccumBits =
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   149
        (pfd->cAccumRedBits + pfd->cAccumGreenBits + pfd->cAccumBlueBits +
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   150
         pfd->cAccumAlphaBits);
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   151
    pfd->cDepthBits = _this->gl_config.depth_size;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   152
    pfd->cStencilBits = _this->gl_config.stencil_size;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   153
}
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   154
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   155
static SDL_bool
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   156
HasExtension(const char *extension, const char *extensions)
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   157
{
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   158
    const char *start;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   159
    const char *where, *terminator;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   160
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   161
    /* Extension names should not have spaces. */
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   162
    where = SDL_strchr(extension, ' ');
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   163
    if (where || *extension == '\0')
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   164
        return SDL_FALSE;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   165
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   166
    if (!extensions)
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   167
        return SDL_FALSE;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   168
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   169
    /* It takes a bit of care to be fool-proof about parsing the
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   170
     * OpenGL extensions string. Don't be fooled by sub-strings,
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   171
     * etc. */
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   172
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   173
    start = extensions;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   174
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   175
    for (;;) {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   176
        where = SDL_strstr(start, extension);
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   177
        if (!where)
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   178
            break;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   179
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   180
        terminator = where + SDL_strlen(extension);
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   181
        if (where == start || *(where - 1) == ' ')
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   182
            if (*terminator == ' ' || *terminator == '\0')
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   183
                return SDL_TRUE;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   184
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   185
        start = terminator;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   186
    }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   187
    return SDL_FALSE;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   188
}
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   189
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   190
static void
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   191
WIN_GL_InitExtensions(_THIS)
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   192
{
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   193
    HWND hwnd;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   194
    HDC hdc;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   195
    PIXELFORMATDESCRIPTOR pfd;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   196
    int pixel_format;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   197
    HGLRC hglrc;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   198
    const char *(WINAPI * wglGetExtensionsStringARB) (HDC) = 0;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   199
    const char *extensions;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   200
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   201
    hwnd =
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   202
        CreateWindow(SDL_Appname, SDL_Appname, (WS_POPUP | WS_DISABLED), 0, 0,
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   203
                     10, 10, NULL, NULL, SDL_Instance, NULL);
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   204
    WIN_PumpEvents(_this);
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   205
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   206
    hdc = GetDC(hwnd);
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   207
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   208
    WIN_GL_SetupPixelFormat(_this, &pfd);
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   209
    pixel_format = ChoosePixelFormat(hdc, &pfd);
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   210
    SetPixelFormat(hdc, pixel_format, &pfd);
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   211
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   212
    hglrc = _this->gl_data->wglCreateContext(hdc);
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   213
    if (hglrc) {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   214
        _this->gl_data->wglMakeCurrent(hdc, hglrc);
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   215
    }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   216
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   217
    wglGetExtensionsStringARB = (const char *(WINAPI *) (HDC))
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   218
        _this->gl_data->wglGetProcAddress("wglGetExtensionsStringARB");
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   219
    if (wglGetExtensionsStringARB) {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   220
        extensions = wglGetExtensionsStringARB(hdc);
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   221
    } else {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   222
        extensions = NULL;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   223
    }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   224
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   225
    /* Check for WGL_ARB_pixel_format */
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   226
    _this->gl_data->WGL_ARB_pixel_format = 0;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   227
    if (HasExtension("WGL_ARB_pixel_format", extensions)) {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   228
        _this->gl_data->wglChoosePixelFormatARB = (BOOL(WINAPI *)
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   229
                                                   (HDC, const int *,
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   230
                                                    const FLOAT *, UINT,
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   231
                                                    int *, UINT *))
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   232
            WIN_GL_GetProcAddress(_this, "wglChoosePixelFormatARB");
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   233
        _this->gl_data->wglGetPixelFormatAttribivARB =
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   234
            (BOOL(WINAPI *) (HDC, int, int, UINT, const int *, int *))
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   235
            WIN_GL_GetProcAddress(_this, "wglGetPixelFormatAttribivARB");
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   236
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   237
        if ((_this->gl_data->wglChoosePixelFormatARB != NULL) &&
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   238
            (_this->gl_data->wglGetPixelFormatAttribivARB != NULL)) {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   239
            _this->gl_data->WGL_ARB_pixel_format = 1;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   240
        }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   241
    }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   242
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   243
    /* Check for WGL_EXT_swap_control */
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   244
    if (HasExtension("WGL_EXT_swap_control", extensions)) {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   245
        _this->gl_data->wglSwapIntervalEXT =
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   246
            WIN_GL_GetProcAddress(_this, "wglSwapIntervalEXT");
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   247
        _this->gl_data->wglGetSwapIntervalEXT =
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   248
            WIN_GL_GetProcAddress(_this, "wglGetSwapIntervalEXT");
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   249
    }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   250
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   251
    if (hglrc) {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   252
        _this->gl_data->wglMakeCurrent(NULL, NULL);
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   253
        _this->gl_data->wglDeleteContext(hglrc);
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   254
    }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   255
    ReleaseDC(hwnd, hdc);
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   256
    DestroyWindow(hwnd);
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   257
    WIN_PumpEvents(_this);
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   258
}
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   259
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   260
static void
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   261
WIN_GL_Shutdown(_THIS)
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   262
{
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   263
    if (!_this->gl_data || (--_this->gl_data->initialized > 0)) {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   264
        return;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   265
    }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   266
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   267
    WIN_GL_UnloadLibrary(_this);
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   268
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   269
    SDL_free(_this->gl_data);
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   270
    _this->gl_data = NULL;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   271
}
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   272
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   273
static int
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   274
WIN_GL_Initialize(_THIS)
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   275
{
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   276
    if (_this->gl_data) {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   277
        ++_this->gl_data->initialized;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   278
        return 0;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   279
    }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   280
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   281
    _this->gl_data =
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   282
        (struct SDL_GLDriverData *) SDL_calloc(1,
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   283
                                               sizeof(struct
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   284
                                                      SDL_GLDriverData));
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   285
    if (!_this->gl_data) {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   286
        SDL_OutOfMemory();
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   287
        return -1;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   288
    }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   289
    _this->gl_data->initialized = 1;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   290
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   291
    if (WIN_GL_LoadLibrary(_this, NULL) < 0) {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   292
        return -1;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   293
    }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   294
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   295
    /* Initialize extensions */
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   296
    WIN_GL_InitExtensions(_this);
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   297
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   298
    return 0;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   299
}
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   300
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   301
int
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   302
WIN_GL_SetupWindow(_THIS, SDL_Window * window)
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   303
{
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   304
    HDC hdc = ((SDL_WindowData *) window->driverdata)->hdc;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   305
    PIXELFORMATDESCRIPTOR pfd;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   306
    int pixel_format;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   307
    unsigned int matching;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   308
    int iAttribs[64];
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   309
    int *iAttr;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   310
    float fAttribs[1] = { 0 };
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   311
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   312
    if (WIN_GL_Initialize(_this) < 0) {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   313
        return -1;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   314
    }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   315
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   316
    WIN_GL_SetupPixelFormat(_this, &pfd);
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   317
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   318
    /* setup WGL_ARB_pixel_format attribs */
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   319
    iAttr = &iAttribs[0];
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   320
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   321
    *iAttr++ = WGL_DRAW_TO_WINDOW_ARB;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   322
    *iAttr++ = GL_TRUE;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   323
    *iAttr++ = WGL_ACCELERATION_ARB;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   324
    *iAttr++ = WGL_FULL_ACCELERATION_ARB;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   325
    *iAttr++ = WGL_RED_BITS_ARB;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   326
    *iAttr++ = _this->gl_config.red_size;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   327
    *iAttr++ = WGL_GREEN_BITS_ARB;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   328
    *iAttr++ = _this->gl_config.green_size;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   329
    *iAttr++ = WGL_BLUE_BITS_ARB;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   330
    *iAttr++ = _this->gl_config.blue_size;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   331
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   332
    if (_this->gl_config.alpha_size) {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   333
        *iAttr++ = WGL_ALPHA_BITS_ARB;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   334
        *iAttr++ = _this->gl_config.alpha_size;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   335
    }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   336
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   337
    *iAttr++ = WGL_DOUBLE_BUFFER_ARB;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   338
    *iAttr++ = _this->gl_config.double_buffer;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   339
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   340
    *iAttr++ = WGL_DEPTH_BITS_ARB;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   341
    *iAttr++ = _this->gl_config.depth_size;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   342
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   343
    if (_this->gl_config.stencil_size) {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   344
        *iAttr++ = WGL_STENCIL_BITS_ARB;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   345
        *iAttr++ = _this->gl_config.stencil_size;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   346
    }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   347
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   348
    if (_this->gl_config.accum_red_size) {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   349
        *iAttr++ = WGL_ACCUM_RED_BITS_ARB;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   350
        *iAttr++ = _this->gl_config.accum_red_size;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   351
    }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   352
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   353
    if (_this->gl_config.accum_green_size) {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   354
        *iAttr++ = WGL_ACCUM_GREEN_BITS_ARB;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   355
        *iAttr++ = _this->gl_config.accum_green_size;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   356
    }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   357
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   358
    if (_this->gl_config.accum_blue_size) {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   359
        *iAttr++ = WGL_ACCUM_BLUE_BITS_ARB;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   360
        *iAttr++ = _this->gl_config.accum_blue_size;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   361
    }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   362
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   363
    if (_this->gl_config.accum_alpha_size) {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   364
        *iAttr++ = WGL_ACCUM_ALPHA_BITS_ARB;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   365
        *iAttr++ = _this->gl_config.accum_alpha_size;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   366
    }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   367
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   368
    if (_this->gl_config.stereo) {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   369
        *iAttr++ = WGL_STEREO_ARB;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   370
        *iAttr++ = GL_TRUE;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   371
    }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   372
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   373
    if (_this->gl_config.multisamplebuffers) {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   374
        *iAttr++ = WGL_SAMPLE_BUFFERS_ARB;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   375
        *iAttr++ = _this->gl_config.multisamplebuffers;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   376
    }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   377
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   378
    if (_this->gl_config.multisamplesamples) {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   379
        *iAttr++ = WGL_SAMPLES_ARB;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   380
        *iAttr++ = _this->gl_config.multisamplesamples;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   381
    }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   382
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   383
    if (_this->gl_config.accelerated >= 0) {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   384
        *iAttr++ = WGL_ACCELERATION_ARB;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   385
        *iAttr++ =
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   386
            (_this->gl_config.
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   387
             accelerated ? WGL_GENERIC_ACCELERATION_ARB :
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   388
             WGL_NO_ACCELERATION_ARB);
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   389
    }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   390
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   391
    *iAttr = 0;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   392
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   393
    /* Choose and set the closest available pixel format */
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   394
    if (!_this->gl_data->WGL_ARB_pixel_format
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   395
        || !_this->gl_data->wglChoosePixelFormatARB(hdc, iAttribs, fAttribs,
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   396
                                                    1, &pixel_format,
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   397
                                                    &matching) || !matching) {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   398
        pixel_format = ChoosePixelFormat(hdc, &pfd);
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   399
    }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   400
    if (!pixel_format) {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   401
        SDL_SetError("No matching GL pixel format available");
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   402
        return -1;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   403
    }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   404
    if (!SetPixelFormat(hdc, pixel_format, &pfd)) {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   405
        WIN_SetError("SetPixelFormat()");
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   406
        return (-1);
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   407
    }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   408
    return 0;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   409
}
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   410
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   411
void
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   412
WIN_GL_CleanupWindow(_THIS, SDL_Window * window)
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   413
{
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   414
    WIN_GL_Shutdown(_this);
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   415
}
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   416
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   417
SDL_GLContext
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   418
WIN_GL_CreateContext(_THIS, SDL_Window * window)
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   419
{
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   420
    HDC hdc = ((SDL_WindowData *) window->driverdata)->hdc;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   421
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   422
    return _this->gl_data->wglCreateContext(hdc);
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   423
}
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   424
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   425
int
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   426
WIN_GL_MakeCurrent(_THIS, SDL_Window * window, SDL_GLContext context)
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   427
{
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   428
    HDC hdc;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   429
    int status;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   430
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   431
    if (window) {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   432
        hdc = ((SDL_WindowData *) window->driverdata)->hdc;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   433
    } else {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   434
        hdc = NULL;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   435
    }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   436
    if (!_this->gl_data->wglMakeCurrent(hdc, (HGLRC) context)) {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   437
        WIN_SetError("wglMakeCurrent()");
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   438
        status = -1;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   439
    } else {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   440
        status = 0;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   441
    }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   442
    return status;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   443
}
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   444
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   445
int
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   446
WIN_GL_SetSwapInterval(_THIS, int interval)
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   447
{
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   448
    if (_this->gl_data->wglSwapIntervalEXT) {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   449
        _this->gl_data->wglSwapIntervalEXT(interval);
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   450
        return 0;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   451
    } else {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   452
        SDL_Unsupported();
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   453
        return -1;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   454
    }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   455
}
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   456
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   457
int
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   458
WIN_GL_GetSwapInterval(_THIS)
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   459
{
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   460
    if (_this->gl_data->wglGetSwapIntervalEXT) {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   461
        return _this->gl_data->wglGetSwapIntervalEXT();
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   462
    } else {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   463
        SDL_Unsupported();
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   464
        return -1;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   465
    }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   466
}
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   467
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   468
void
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   469
WIN_GL_SwapWindow(_THIS, SDL_Window * window)
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   470
{
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   471
    HDC hdc = ((SDL_WindowData *) window->driverdata)->hdc;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   472
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   473
    SwapBuffers(hdc);
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   474
}
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   475
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   476
void
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   477
WIN_GL_DeleteContext(_THIS, SDL_GLContext context)
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   478
{
1936
83946ee0ff1f Implemented OpenGL support on Mac OS X
Sam Lantinga <slouken@libsdl.org>
parents: 1926
diff changeset
   479
    _this->gl_data->wglDeleteContext((HGLRC) context);
1913
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   480
}
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   481
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   482
#endif /* SDL_VIDEO_OPENGL */
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   483
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   484
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   485
/* vi: set ts=4 sw=4 expandtab: */