include/SDL_video.h
author Sam Lantinga <slouken@libsdl.org>
Thu, 11 Jul 2013 22:59:20 -0700
changeset 7412 50211a1fd557
parent 7191 75360622e65f
child 7459 7c6bd424f819
permissions -rw-r--r--
Fixed bug 1946 - OpenGL contexts in threads

The SDL OpenGL context code is now properly thread aware. There are two new functions which return the current OpenGL window and context for the current thread.

There are still places in the cocoa driver where the OpenGL context needs to be updated when the view changes. These will need a different solution and still use the last globally set context to avoid changing behavior.
slouken@0
     1
/*
slouken@5535
     2
  Simple DirectMedia Layer
slouken@6885
     3
  Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org>
slouken@0
     4
slouken@5535
     5
  This software is provided 'as-is', without any express or implied
slouken@5535
     6
  warranty.  In no event will the authors be held liable for any damages
slouken@5535
     7
  arising from the use of this software.
slouken@0
     8
slouken@5535
     9
  Permission is granted to anyone to use this software for any purpose,
slouken@5535
    10
  including commercial applications, and to alter it and redistribute it
slouken@5535
    11
  freely, subject to the following restrictions:
slouken@0
    12
slouken@5535
    13
  1. The origin of this software must not be misrepresented; you must not
slouken@5535
    14
     claim that you wrote the original software. If you use this software
slouken@5535
    15
     in a product, an acknowledgment in the product documentation would be
slouken@5535
    16
     appreciated but is not required.
slouken@5535
    17
  2. Altered source versions must be plainly marked as such, and must not be
slouken@5535
    18
     misrepresented as being the original software.
slouken@5535
    19
  3. This notice may not be removed or altered from any source distribution.
slouken@0
    20
*/
slouken@0
    21
slouken@1895
    22
/**
slouken@3407
    23
 *  \file SDL_video.h
slouken@7191
    24
 *
slouken@3407
    25
 *  Header file for SDL video functions.
slouken@1895
    26
 */
slouken@0
    27
slouken@0
    28
#ifndef _SDL_video_h
slouken@0
    29
#define _SDL_video_h
slouken@0
    30
slouken@1356
    31
#include "SDL_stdinc.h"
slouken@1895
    32
#include "SDL_pixels.h"
slouken@2275
    33
#include "SDL_rect.h"
slouken@2275
    34
#include "SDL_surface.h"
slouken@0
    35
slouken@0
    36
#include "begin_code.h"
slouken@0
    37
/* Set up for C function definitions, even when using C++ */
slouken@0
    38
#ifdef __cplusplus
slouken@0
    39
extern "C" {
slouken@0
    40
#endif
slouken@0
    41
slouken@1895
    42
/**
slouken@3407
    43
 *  \brief  The structure that defines a display mode
slouken@7191
    44
 *
slouken@3407
    45
 *  \sa SDL_GetNumDisplayModes()
slouken@3407
    46
 *  \sa SDL_GetDisplayMode()
slouken@3407
    47
 *  \sa SDL_GetDesktopDisplayMode()
slouken@3407
    48
 *  \sa SDL_GetCurrentDisplayMode()
slouken@3407
    49
 *  \sa SDL_GetClosestDisplayMode()
slouken@3500
    50
 *  \sa SDL_SetWindowDisplayMode()
slouken@3500
    51
 *  \sa SDL_GetWindowDisplayMode()
slouken@1895
    52
 */
slouken@1895
    53
typedef struct
slouken@1895
    54
{
slouken@1895
    55
    Uint32 format;              /**< pixel format */
slouken@1895
    56
    int w;                      /**< width */
slouken@1895
    57
    int h;                      /**< height */
slouken@1895
    58
    int refresh_rate;           /**< refresh rate (or zero for unspecified) */
slouken@1895
    59
    void *driverdata;           /**< driver-specific data, initialize to 0 */
slouken@1895
    60
} SDL_DisplayMode;
slouken@0
    61
slouken@1895
    62
/**
slouken@3407
    63
 *  \brief The type used to identify a window
slouken@7191
    64
 *
slouken@3407
    65
 *  \sa SDL_CreateWindow()
slouken@3407
    66
 *  \sa SDL_CreateWindowFrom()
slouken@3407
    67
 *  \sa SDL_DestroyWindow()
slouken@3407
    68
 *  \sa SDL_GetWindowData()
slouken@3407
    69
 *  \sa SDL_GetWindowFlags()
slouken@3407
    70
 *  \sa SDL_GetWindowGrab()
slouken@3407
    71
 *  \sa SDL_GetWindowPosition()
slouken@3407
    72
 *  \sa SDL_GetWindowSize()
slouken@3407
    73
 *  \sa SDL_GetWindowTitle()
slouken@3407
    74
 *  \sa SDL_HideWindow()
slouken@3407
    75
 *  \sa SDL_MaximizeWindow()
slouken@3407
    76
 *  \sa SDL_MinimizeWindow()
slouken@3407
    77
 *  \sa SDL_RaiseWindow()
slouken@3407
    78
 *  \sa SDL_RestoreWindow()
slouken@3407
    79
 *  \sa SDL_SetWindowData()
slouken@3407
    80
 *  \sa SDL_SetWindowFullscreen()
slouken@3407
    81
 *  \sa SDL_SetWindowGrab()
slouken@3407
    82
 *  \sa SDL_SetWindowIcon()
slouken@3407
    83
 *  \sa SDL_SetWindowPosition()
slouken@3407
    84
 *  \sa SDL_SetWindowSize()
icculus@6429
    85
 *  \sa SDL_SetWindowBordered()
slouken@3407
    86
 *  \sa SDL_SetWindowTitle()
slouken@3407
    87
 *  \sa SDL_ShowWindow()
slouken@1895
    88
 */
slouken@3685
    89
typedef struct SDL_Window SDL_Window;
slouken@0
    90
slouken@1895
    91
/**
slouken@3407
    92
 *  \brief The flags on a window
slouken@7191
    93
 *
slouken@3407
    94
 *  \sa SDL_GetWindowFlags()
slouken@1895
    95
 */
slouken@1895
    96
typedef enum
slouken@1895
    97
{
slouken@5380
    98
    SDL_WINDOW_FULLSCREEN = 0x00000001,         /**< fullscreen window */
slouken@1895
    99
    SDL_WINDOW_OPENGL = 0x00000002,             /**< window usable with OpenGL context */
slouken@1895
   100
    SDL_WINDOW_SHOWN = 0x00000004,              /**< window is visible */
slouken@5380
   101
    SDL_WINDOW_HIDDEN = 0x00000008,             /**< window is not visible */
slouken@5380
   102
    SDL_WINDOW_BORDERLESS = 0x00000010,         /**< no window decoration */
slouken@5380
   103
    SDL_WINDOW_RESIZABLE = 0x00000020,          /**< window can be resized */
slouken@5380
   104
    SDL_WINDOW_MINIMIZED = 0x00000040,          /**< window is minimized */
slouken@5380
   105
    SDL_WINDOW_MAXIMIZED = 0x00000080,          /**< window is maximized */
slouken@1895
   106
    SDL_WINDOW_INPUT_GRABBED = 0x00000100,      /**< window has grabbed input focus */
slouken@1895
   107
    SDL_WINDOW_INPUT_FOCUS = 0x00000200,        /**< window has input focus */
slouken@3057
   108
    SDL_WINDOW_MOUSE_FOCUS = 0x00000400,        /**< window has mouse focus */
slouken@7191
   109
    SDL_WINDOW_FULLSCREEN_DESKTOP = ( SDL_WINDOW_FULLSCREEN | 0x00001000 ),
slouken@3057
   110
    SDL_WINDOW_FOREIGN = 0x00000800             /**< window not created by SDL */
slouken@1895
   111
} SDL_WindowFlags;
slouken@0
   112
slouken@1895
   113
/**
slouken@3407
   114
 *  \brief Used to indicate that you don't care what the window position is.
slouken@1895
   115
 */
slouken@5246
   116
#define SDL_WINDOWPOS_UNDEFINED_MASK    0x1FFF0000
slouken@5246
   117
#define SDL_WINDOWPOS_UNDEFINED_DISPLAY(X)  (SDL_WINDOWPOS_UNDEFINED_MASK|(X))
slouken@5246
   118
#define SDL_WINDOWPOS_UNDEFINED         SDL_WINDOWPOS_UNDEFINED_DISPLAY(0)
slouken@5246
   119
#define SDL_WINDOWPOS_ISUNDEFINED(X)    \
slouken@5246
   120
            (((X)&0xFFFF0000) == SDL_WINDOWPOS_UNDEFINED_MASK)
slouken@3407
   121
slouken@1895
   122
/**
slouken@3407
   123
 *  \brief Used to indicate that the window position should be centered.
slouken@1895
   124
 */
slouken@5246
   125
#define SDL_WINDOWPOS_CENTERED_MASK    0x2FFF0000
slouken@5246
   126
#define SDL_WINDOWPOS_CENTERED_DISPLAY(X)  (SDL_WINDOWPOS_CENTERED_MASK|(X))
slouken@5246
   127
#define SDL_WINDOWPOS_CENTERED         SDL_WINDOWPOS_CENTERED_DISPLAY(0)
slouken@5246
   128
#define SDL_WINDOWPOS_ISCENTERED(X)    \
slouken@5246
   129
            (((X)&0xFFFF0000) == SDL_WINDOWPOS_CENTERED_MASK)
slouken@1895
   130
slouken@1895
   131
/**
slouken@3407
   132
 *  \brief Event subtype for window events
slouken@1895
   133
 */
slouken@1895
   134
typedef enum
slouken@1895
   135
{
slouken@3407
   136
    SDL_WINDOWEVENT_NONE,           /**< Never used */
slouken@3407
   137
    SDL_WINDOWEVENT_SHOWN,          /**< Window has been shown */
slouken@3407
   138
    SDL_WINDOWEVENT_HIDDEN,         /**< Window has been hidden */
slouken@7191
   139
    SDL_WINDOWEVENT_EXPOSED,        /**< Window has been exposed and should be
slouken@3407
   140
                                         redrawn */
slouken@7191
   141
    SDL_WINDOWEVENT_MOVED,          /**< Window has been moved to data1, data2
slouken@3407
   142
                                     */
slouken@5276
   143
    SDL_WINDOWEVENT_RESIZED,        /**< Window has been resized to data1xdata2 */
slouken@5276
   144
    SDL_WINDOWEVENT_SIZE_CHANGED,   /**< The window size has changed, either as a result of an API call or through the system or user changing the window size. */
slouken@3407
   145
    SDL_WINDOWEVENT_MINIMIZED,      /**< Window has been minimized */
slouken@3407
   146
    SDL_WINDOWEVENT_MAXIMIZED,      /**< Window has been maximized */
slouken@3407
   147
    SDL_WINDOWEVENT_RESTORED,       /**< Window has been restored to normal size
slouken@3407
   148
                                         and position */
slouken@3691
   149
    SDL_WINDOWEVENT_ENTER,          /**< Window has gained mouse focus */
slouken@3691
   150
    SDL_WINDOWEVENT_LEAVE,          /**< Window has lost mouse focus */
slouken@3691
   151
    SDL_WINDOWEVENT_FOCUS_GAINED,   /**< Window has gained keyboard focus */
slouken@3691
   152
    SDL_WINDOWEVENT_FOCUS_LOST,     /**< Window has lost keyboard focus */
slouken@7191
   153
    SDL_WINDOWEVENT_CLOSE           /**< The window manager requests that the
slouken@3407
   154
                                         window be closed */
slouken@1895
   155
} SDL_WindowEventID;
slouken@1895
   156
slouken@1895
   157
/**
slouken@3407
   158
 *  \brief An opaque handle to an OpenGL context.
slouken@1895
   159
 */
slouken@1895
   160
typedef void *SDL_GLContext;
slouken@1895
   161
slouken@1895
   162
/**
slouken@3407
   163
 *  \brief OpenGL configuration attributes
slouken@0
   164
 */
slouken@1895
   165
typedef enum
slouken@1895
   166
{
slouken@0
   167
    SDL_GL_RED_SIZE,
slouken@0
   168
    SDL_GL_GREEN_SIZE,
slouken@0
   169
    SDL_GL_BLUE_SIZE,
slouken@0
   170
    SDL_GL_ALPHA_SIZE,
slouken@0
   171
    SDL_GL_BUFFER_SIZE,
slouken@0
   172
    SDL_GL_DOUBLEBUFFER,
slouken@0
   173
    SDL_GL_DEPTH_SIZE,
slouken@0
   174
    SDL_GL_STENCIL_SIZE,
slouken@0
   175
    SDL_GL_ACCUM_RED_SIZE,
slouken@0
   176
    SDL_GL_ACCUM_GREEN_SIZE,
slouken@0
   177
    SDL_GL_ACCUM_BLUE_SIZE,
slouken@450
   178
    SDL_GL_ACCUM_ALPHA_SIZE,
slouken@655
   179
    SDL_GL_STEREO,
slouken@656
   180
    SDL_GL_MULTISAMPLEBUFFERS,
slouken@1736
   181
    SDL_GL_MULTISAMPLESAMPLES,
hfutrell@2747
   182
    SDL_GL_ACCELERATED_VISUAL,
slouken@3100
   183
    SDL_GL_RETAINED_BACKING,
slouken@3139
   184
    SDL_GL_CONTEXT_MAJOR_VERSION,
slouken@6296
   185
    SDL_GL_CONTEXT_MINOR_VERSION,
slouken@6370
   186
    SDL_GL_CONTEXT_EGL,
slouken@6296
   187
    SDL_GL_CONTEXT_FLAGS,
slouken@6393
   188
    SDL_GL_CONTEXT_PROFILE_MASK,
slouken@6393
   189
    SDL_GL_SHARE_WITH_CURRENT_CONTEXT
slouken@0
   190
} SDL_GLattr;
slouken@0
   191
slouken@6296
   192
typedef enum
slouken@6296
   193
{
slouken@6296
   194
    SDL_GL_CONTEXT_PROFILE_CORE           = 0x0001,
slouken@6296
   195
    SDL_GL_CONTEXT_PROFILE_COMPATIBILITY  = 0x0002,
slouken@6394
   196
    SDL_GL_CONTEXT_PROFILE_ES             = 0x0004
slouken@6296
   197
} SDL_GLprofile;
slouken@6296
   198
slouken@6296
   199
typedef enum
slouken@6296
   200
{
slouken@6296
   201
    SDL_GL_CONTEXT_DEBUG_FLAG              = 0x0001,
slouken@6296
   202
    SDL_GL_CONTEXT_FORWARD_COMPATIBLE_FLAG = 0x0002,
slouken@6393
   203
    SDL_GL_CONTEXT_ROBUST_ACCESS_FLAG      = 0x0004,
slouken@6393
   204
    SDL_GL_CONTEXT_RESET_ISOLATION_FLAG    = 0x0008
slouken@6296
   205
} SDL_GLcontextFlag;
slouken@6296
   206
slouken@0
   207
slouken@0
   208
/* Function prototypes */
slouken@0
   209
slouken@1895
   210
/**
slouken@3407
   211
 *  \brief Get the number of video drivers compiled into SDL
slouken@7191
   212
 *
slouken@3407
   213
 *  \sa SDL_GetVideoDriver()
slouken@0
   214
 */
slouken@1895
   215
extern DECLSPEC int SDLCALL SDL_GetNumVideoDrivers(void);
slouken@1895
   216
slouken@1895
   217
/**
slouken@3407
   218
 *  \brief Get the name of a built in video driver.
slouken@7191
   219
 *
slouken@3407
   220
 *  \note The video drivers are presented in the order in which they are
slouken@3407
   221
 *        normally checked during initialization.
slouken@7191
   222
 *
slouken@3407
   223
 *  \sa SDL_GetNumVideoDrivers()
slouken@1895
   224
 */
slouken@1895
   225
extern DECLSPEC const char *SDLCALL SDL_GetVideoDriver(int index);
slouken@1895
   226
slouken@1895
   227
/**
slouken@3407
   228
 *  \brief Initialize the video subsystem, optionally specifying a video driver.
slouken@7191
   229
 *
slouken@7191
   230
 *  \param driver_name Initialize a specific driver by name, or NULL for the
slouken@3407
   231
 *                     default video driver.
slouken@7191
   232
 *
slouken@3407
   233
 *  \return 0 on success, -1 on error
slouken@7191
   234
 *
slouken@3407
   235
 *  This function initializes the video subsystem; setting up a connection
slouken@3407
   236
 *  to the window manager, etc, and determines the available display modes
slouken@3407
   237
 *  and pixel formats, but does not initialize a window or graphics mode.
slouken@7191
   238
 *
slouken@3407
   239
 *  \sa SDL_VideoQuit()
slouken@1895
   240
 */
slouken@5123
   241
extern DECLSPEC int SDLCALL SDL_VideoInit(const char *driver_name);
slouken@1895
   242
slouken@1895
   243
/**
slouken@3407
   244
 *  \brief Shuts down the video subsystem.
slouken@7191
   245
 *
slouken@3407
   246
 *  This function closes all windows, and restores the original video mode.
slouken@7191
   247
 *
slouken@3407
   248
 *  \sa SDL_VideoInit()
slouken@1895
   249
 */
slouken@337
   250
extern DECLSPEC void SDLCALL SDL_VideoQuit(void);
slouken@0
   251
slouken@1895
   252
/**
slouken@3407
   253
 *  \brief Returns the name of the currently initialized video driver.
slouken@7191
   254
 *
slouken@3407
   255
 *  \return The name of the current video driver or NULL if no driver
slouken@3407
   256
 *          has been initialized
slouken@7191
   257
 *
slouken@3407
   258
 *  \sa SDL_GetNumVideoDrivers()
slouken@3407
   259
 *  \sa SDL_GetVideoDriver()
slouken@0
   260
 */
slouken@1895
   261
extern DECLSPEC const char *SDLCALL SDL_GetCurrentVideoDriver(void);
slouken@0
   262
slouken@1895
   263
/**
slouken@3407
   264
 *  \brief Returns the number of available video displays.
slouken@7191
   265
 *
slouken@3528
   266
 *  \sa SDL_GetDisplayBounds()
slouken@0
   267
 */
slouken@1895
   268
extern DECLSPEC int SDLCALL SDL_GetNumVideoDisplays(void);
slouken@0
   269
slouken@1895
   270
/**
slouken@6787
   271
 *  \brief Get the name of a display in UTF-8 encoding
slouken@7191
   272
 *
slouken@6787
   273
 *  \return The name of a display, or NULL for an invalid display index.
slouken@7191
   274
 *
slouken@6787
   275
 *  \sa SDL_GetNumVideoDisplays()
slouken@6787
   276
 */
slouken@6787
   277
extern DECLSPEC const char * SDLCALL SDL_GetDisplayName(int displayIndex);
slouken@6787
   278
slouken@6787
   279
/**
slouken@3528
   280
 *  \brief Get the desktop area represented by a display, with the primary
slouken@3528
   281
 *         display located at 0,0
slouken@7191
   282
 *
slouken@3528
   283
 *  \return 0 on success, or -1 if the index is out of range.
slouken@7191
   284
 *
slouken@3528
   285
 *  \sa SDL_GetNumVideoDisplays()
slouken@3528
   286
 */
slouken@5244
   287
extern DECLSPEC int SDLCALL SDL_GetDisplayBounds(int displayIndex, SDL_Rect * rect);
slouken@3528
   288
slouken@3528
   289
/**
slouken@5244
   290
 *  \brief Returns the number of available display modes.
slouken@7191
   291
 *
slouken@3407
   292
 *  \sa SDL_GetDisplayMode()
slouken@0
   293
 */
slouken@5244
   294
extern DECLSPEC int SDLCALL SDL_GetNumDisplayModes(int displayIndex);
slouken@0
   295
slouken@1895
   296
/**
slouken@3407
   297
 *  \brief Fill in information about a specific display mode.
slouken@7191
   298
 *
slouken@3407
   299
 *  \note The display modes are sorted in this priority:
slouken@3407
   300
 *        \li bits per pixel -> more colors to fewer colors
slouken@3407
   301
 *        \li width -> largest to smallest
slouken@3407
   302
 *        \li height -> largest to smallest
slouken@3407
   303
 *        \li refresh rate -> highest to lowest
slouken@7191
   304
 *
slouken@3407
   305
 *  \sa SDL_GetNumDisplayModes()
slouken@0
   306
 */
slouken@5244
   307
extern DECLSPEC int SDLCALL SDL_GetDisplayMode(int displayIndex, int modeIndex,
slouken@1967
   308
                                               SDL_DisplayMode * mode);
slouken@0
   309
slouken@1895
   310
/**
slouken@5244
   311
 *  \brief Fill in information about the desktop display mode.
slouken@1895
   312
 */
slouken@5244
   313
extern DECLSPEC int SDLCALL SDL_GetDesktopDisplayMode(int displayIndex, SDL_DisplayMode * mode);
slouken@1895
   314
slouken@1895
   315
/**
slouken@3407
   316
 *  \brief Fill in information about the current display mode.
slouken@1895
   317
 */
slouken@5244
   318
extern DECLSPEC int SDLCALL SDL_GetCurrentDisplayMode(int displayIndex, SDL_DisplayMode * mode);
slouken@1895
   319
slouken@3400
   320
slouken@1895
   321
/**
slouken@3407
   322
 *  \brief Get the closest match to the requested display mode.
slouken@7191
   323
 *
philipp@7188
   324
 *  \param displayIndex The index of display from which mode should be queried.
slouken@3407
   325
 *  \param mode The desired display mode
slouken@7191
   326
 *  \param closest A pointer to a display mode to be filled in with the closest
slouken@3407
   327
 *                 match of the available display modes.
slouken@7191
   328
 *
slouken@7191
   329
 *  \return The passed in value \c closest, or NULL if no matching video mode
slouken@3407
   330
 *          was available.
slouken@7191
   331
 *
slouken@3407
   332
 *  The available display modes are scanned, and \c closest is filled in with the
slouken@7191
   333
 *  closest mode matching the requested mode and returned.  The mode format and
slouken@7191
   334
 *  refresh_rate default to the desktop mode if they are 0.  The modes are
slouken@7191
   335
 *  scanned with size being first priority, format being second priority, and
slouken@7191
   336
 *  finally checking the refresh_rate.  If all the available modes are too
slouken@3407
   337
 *  small, then NULL is returned.
slouken@7191
   338
 *
slouken@3407
   339
 *  \sa SDL_GetNumDisplayModes()
slouken@3407
   340
 *  \sa SDL_GetDisplayMode()
slouken@1895
   341
 */
slouken@5244
   342
extern DECLSPEC SDL_DisplayMode * SDLCALL SDL_GetClosestDisplayMode(int displayIndex, const SDL_DisplayMode * mode, SDL_DisplayMode * closest);
slouken@1895
   343
slouken@1895
   344
/**
slouken@5246
   345
 *  \brief Get the display index associated with a window.
slouken@7191
   346
 *
slouken@5246
   347
 *  \return the display index of the display containing the center of the
slouken@5246
   348
 *          window, or -1 on error.
slouken@5246
   349
 */
slouken@6786
   350
extern DECLSPEC int SDLCALL SDL_GetWindowDisplayIndex(SDL_Window * window);
slouken@5246
   351
slouken@5246
   352
/**
slouken@5244
   353
 *  \brief Set the display mode used when a fullscreen window is visible.
slouken@5244
   354
 *
slouken@5244
   355
 *  By default the window's dimensions and the desktop format and refresh rate
slouken@5244
   356
 *  are used.
slouken@7191
   357
 *
philipp@7188
   358
 *  \param window The window for which the display mode should be set.
slouken@3500
   359
 *  \param mode The mode to use, or NULL for the default mode.
slouken@7191
   360
 *
slouken@3407
   361
 *  \return 0 on success, or -1 if setting the display mode failed.
slouken@7191
   362
 *
slouken@3522
   363
 *  \sa SDL_GetWindowDisplayMode()
slouken@3407
   364
 *  \sa SDL_SetWindowFullscreen()
slouken@0
   365
 */
slouken@3685
   366
extern DECLSPEC int SDLCALL SDL_SetWindowDisplayMode(SDL_Window * window,
slouken@3500
   367
                                                     const SDL_DisplayMode
slouken@1895
   368
                                                         * mode);
slouken@0
   369
slouken@1895
   370
/**
slouken@3407
   371
 *  \brief Fill in information about the display mode used when a fullscreen
slouken@5244
   372
 *         window is visible.
slouken@3522
   373
 *
slouken@3522
   374
 *  \sa SDL_SetWindowDisplayMode()
slouken@3522
   375
 *  \sa SDL_SetWindowFullscreen()
slouken@0
   376
 */
slouken@3685
   377
extern DECLSPEC int SDLCALL SDL_GetWindowDisplayMode(SDL_Window * window,
slouken@3500
   378
                                                     SDL_DisplayMode * mode);
slouken@0
   379
slouken@1895
   380
/**
slouken@5154
   381
 *  \brief Get the pixel format associated with the window.
slouken@5154
   382
 */
slouken@5154
   383
extern DECLSPEC Uint32 SDLCALL SDL_GetWindowPixelFormat(SDL_Window * window);
slouken@5154
   384
slouken@5154
   385
/**
slouken@3407
   386
 *  \brief Create a window with the specified position, dimensions, and flags.
slouken@7191
   387
 *
slouken@3407
   388
 *  \param title The title of the window, in UTF-8 encoding.
slouken@7191
   389
 *  \param x     The x position of the window, ::SDL_WINDOWPOS_CENTERED, or
slouken@3407
   390
 *               ::SDL_WINDOWPOS_UNDEFINED.
slouken@7191
   391
 *  \param y     The y position of the window, ::SDL_WINDOWPOS_CENTERED, or
slouken@3407
   392
 *               ::SDL_WINDOWPOS_UNDEFINED.
slouken@3407
   393
 *  \param w     The width of the window.
slouken@3407
   394
 *  \param h     The height of the window.
slouken@7191
   395
 *  \param flags The flags for the window, a mask of any of the following:
slouken@7191
   396
 *               ::SDL_WINDOW_FULLSCREEN, ::SDL_WINDOW_OPENGL,
slouken@7191
   397
 *               ::SDL_WINDOW_SHOWN,      ::SDL_WINDOW_BORDERLESS,
slouken@7191
   398
 *               ::SDL_WINDOW_RESIZABLE,  ::SDL_WINDOW_MAXIMIZED,
slouken@3407
   399
 *               ::SDL_WINDOW_MINIMIZED,  ::SDL_WINDOW_INPUT_GRABBED.
slouken@7191
   400
 *
slouken@3407
   401
 *  \return The id of the window created, or zero if window creation failed.
slouken@7191
   402
 *
slouken@3407
   403
 *  \sa SDL_DestroyWindow()
slouken@0
   404
 */
slouken@3685
   405
extern DECLSPEC SDL_Window * SDLCALL SDL_CreateWindow(const char *title,
slouken@1895
   406
                                                      int x, int y, int w,
slouken@1895
   407
                                                      int h, Uint32 flags);
slouken@0
   408
slouken@1895
   409
/**
slouken@3493
   410
 *  \brief Create an SDL window from an existing native window.
slouken@7191
   411
 *
slouken@3407
   412
 *  \param data A pointer to driver-dependent window creation data
slouken@7191
   413
 *
slouken@3407
   414
 *  \return The id of the window created, or zero if window creation failed.
slouken@7191
   415
 *
slouken@3407
   416
 *  \sa SDL_DestroyWindow()
slouken@0
   417
 */
slouken@3685
   418
extern DECLSPEC SDL_Window * SDLCALL SDL_CreateWindowFrom(const void *data);
slouken@3685
   419
slouken@3685
   420
/**
slouken@4883
   421
 *  \brief Get the numeric ID of a window, for logging purposes.
slouken@3685
   422
 */
slouken@3685
   423
extern DECLSPEC Uint32 SDLCALL SDL_GetWindowID(SDL_Window * window);
slouken@3685
   424
slouken@3685
   425
/**
slouken@3685
   426
 *  \brief Get a window from a stored ID, or NULL if it doesn't exist.
slouken@3685
   427
 */
slouken@3685
   428
extern DECLSPEC SDL_Window * SDLCALL SDL_GetWindowFromID(Uint32 id);
slouken@1895
   429
slouken@1895
   430
/**
slouken@3407
   431
 *  \brief Get the window flags.
slouken@1895
   432
 */
slouken@3685
   433
extern DECLSPEC Uint32 SDLCALL SDL_GetWindowFlags(SDL_Window * window);
slouken@1895
   434
slouken@1895
   435
/**
slouken@4883
   436
 *  \brief Set the title of a window, in UTF-8 format.
slouken@7191
   437
 *
slouken@3407
   438
 *  \sa SDL_GetWindowTitle()
slouken@1895
   439
 */
slouken@3685
   440
extern DECLSPEC void SDLCALL SDL_SetWindowTitle(SDL_Window * window,
slouken@1895
   441
                                                const char *title);
slouken@1895
   442
slouken@1895
   443
/**
slouken@4883
   444
 *  \brief Get the title of a window, in UTF-8 format.
slouken@7191
   445
 *
slouken@3407
   446
 *  \sa SDL_SetWindowTitle()
slouken@1895
   447
 */
slouken@3685
   448
extern DECLSPEC const char *SDLCALL SDL_GetWindowTitle(SDL_Window * window);
slouken@1895
   449
slouken@1895
   450
/**
slouken@4887
   451
 *  \brief Set the icon for a window.
slouken@7191
   452
 *
philipp@7188
   453
 *  \param window The window for which the icon should be set.
slouken@4887
   454
 *  \param icon The icon for the window.
slouken@1895
   455
 */
slouken@3685
   456
extern DECLSPEC void SDLCALL SDL_SetWindowIcon(SDL_Window * window,
slouken@2990
   457
                                               SDL_Surface * icon);
slouken@1895
   458
slouken@1895
   459
/**
slouken@5165
   460
 *  \brief Associate an arbitrary named pointer with a window.
slouken@7191
   461
 *
slouken@5165
   462
 *  \param window   The window to associate with the pointer.
slouken@5165
   463
 *  \param name     The name of the pointer.
slouken@5165
   464
 *  \param userdata The associated pointer.
slouken@5165
   465
 *
slouken@5165
   466
 *  \return The previous value associated with 'name'
slouken@5165
   467
 *
slouken@5165
   468
 *  \note The name is case-sensitive.
slouken@5165
   469
 *
slouken@3407
   470
 *  \sa SDL_GetWindowData()
slouken@1895
   471
 */
slouken@5165
   472
extern DECLSPEC void* SDLCALL SDL_SetWindowData(SDL_Window * window,
slouken@5165
   473
                                                const char *name,
slouken@5165
   474
                                                void *userdata);
slouken@1895
   475
slouken@1895
   476
/**
slouken@4883
   477
 *  \brief Retrieve the data pointer associated with a window.
slouken@7191
   478
 *
slouken@5165
   479
 *  \param window   The window to query.
slouken@5165
   480
 *  \param name     The name of the pointer.
slouken@5165
   481
 *
slouken@5165
   482
 *  \return The value associated with 'name'
slouken@7191
   483
 *
slouken@3407
   484
 *  \sa SDL_SetWindowData()
slouken@1895
   485
 */
slouken@5165
   486
extern DECLSPEC void *SDLCALL SDL_GetWindowData(SDL_Window * window,
slouken@5165
   487
                                                const char *name);
slouken@1895
   488
slouken@1895
   489
/**
slouken@4883
   490
 *  \brief Set the position of a window.
slouken@7191
   491
 *
slouken@5165
   492
 *  \param window   The window to reposition.
slouken@3407
   493
 *  \param x        The x coordinate of the window, ::SDL_WINDOWPOS_CENTERED, or
slouken@3407
   494
                    ::SDL_WINDOWPOS_UNDEFINED.
slouken@3407
   495
 *  \param y        The y coordinate of the window, ::SDL_WINDOWPOS_CENTERED, or
slouken@3407
   496
                    ::SDL_WINDOWPOS_UNDEFINED.
slouken@7191
   497
 *
slouken@3407
   498
 *  \note The window coordinate origin is the upper left of the display.
slouken@7191
   499
 *
slouken@3407
   500
 *  \sa SDL_GetWindowPosition()
slouken@1895
   501
 */
slouken@3685
   502
extern DECLSPEC void SDLCALL SDL_SetWindowPosition(SDL_Window * window,
slouken@1895
   503
                                                   int x, int y);
slouken@1895
   504
slouken@1895
   505
/**
slouken@4883
   506
 *  \brief Get the position of a window.
slouken@7191
   507
 *
philipp@7175
   508
 *  \param window   The window to query.
aschiffler@6984
   509
 *  \param x        Pointer to variable for storing the x position, may be NULL
aschiffler@6984
   510
 *  \param y        Pointer to variable for storing the y position, may be NULL
aschiffler@6984
   511
 *
slouken@3407
   512
 *  \sa SDL_SetWindowPosition()
slouken@1895
   513
 */
slouken@3685
   514
extern DECLSPEC void SDLCALL SDL_GetWindowPosition(SDL_Window * window,
slouken@1895
   515
                                                   int *x, int *y);
slouken@1895
   516
slouken@1895
   517
/**
slouken@4883
   518
 *  \brief Set the size of a window's client area.
slouken@7191
   519
 *
philipp@7175
   520
 *  \param window   The window to resize.
aschiffler@6984
   521
 *  \param w        The width of the window, must be >0
aschiffler@6984
   522
 *  \param h        The height of the window, must be >0
aschiffler@6984
   523
 *
slouken@3407
   524
 *  \note You can't change the size of a fullscreen window, it automatically
slouken@3407
   525
 *        matches the size of the display mode.
slouken@7191
   526
 *
slouken@3407
   527
 *  \sa SDL_GetWindowSize()
slouken@1895
   528
 */
slouken@3685
   529
extern DECLSPEC void SDLCALL SDL_SetWindowSize(SDL_Window * window, int w,
slouken@1895
   530
                                               int h);
slouken@1895
   531
slouken@1895
   532
/**
slouken@4883
   533
 *  \brief Get the size of a window's client area.
slouken@7191
   534
 *
philipp@7175
   535
 *  \param window   The window to query.
aschiffler@6984
   536
 *  \param w        Pointer to variable for storing the width, may be NULL
aschiffler@6984
   537
 *  \param h        Pointer to variable for storing the height, may be NULL
slouken@7191
   538
 *
slouken@3407
   539
 *  \sa SDL_SetWindowSize()
slouken@1895
   540
 */
slouken@3685
   541
extern DECLSPEC void SDLCALL SDL_GetWindowSize(SDL_Window * window, int *w,
slouken@1895
   542
                                               int *h);
slouken@7191
   543
stopiccot@6681
   544
/**
stopiccot@6681
   545
 *  \brief Set the minimum size of a window's client area.
slouken@7191
   546
 *
philipp@7175
   547
 *  \param window    The window to set a new minimum size.
aschiffler@6984
   548
 *  \param min_w     The minimum width of the window, must be >0
aschiffler@6984
   549
 *  \param min_h     The minimum height of the window, must be >0
stopiccot@6681
   550
 *
stopiccot@6681
   551
 *  \note You can't change the minimum size of a fullscreen window, it
stopiccot@6681
   552
 *        automatically matches the size of the display mode.
stopiccot@6681
   553
 *
stopiccot@6681
   554
 *  \sa SDL_GetWindowMinimumSize()
slouken@6788
   555
 *  \sa SDL_SetWindowMaximumSize()
stopiccot@6681
   556
 */
stopiccot@6681
   557
extern DECLSPEC void SDLCALL SDL_SetWindowMinimumSize(SDL_Window * window,
stopiccot@6681
   558
                                                      int min_w, int min_h);
slouken@7191
   559
stopiccot@6681
   560
/**
stopiccot@6681
   561
 *  \brief Get the minimum size of a window's client area.
slouken@7191
   562
 *
philipp@7175
   563
 *  \param window   The window to query.
aschiffler@6984
   564
 *  \param w        Pointer to variable for storing the minimum width, may be NULL
aschiffler@6984
   565
 *  \param h        Pointer to variable for storing the minimum height, may be NULL
slouken@7191
   566
 *
slouken@6788
   567
 *  \sa SDL_GetWindowMaximumSize()
stopiccot@6681
   568
 *  \sa SDL_SetWindowMinimumSize()
stopiccot@6681
   569
 */
stopiccot@6681
   570
extern DECLSPEC void SDLCALL SDL_GetWindowMinimumSize(SDL_Window * window,
stopiccot@6681
   571
                                                      int *w, int *h);
slouken@1895
   572
slouken@1895
   573
/**
slouken@6788
   574
 *  \brief Set the maximum size of a window's client area.
slouken@6788
   575
 *
philipp@7175
   576
 *  \param window    The window to set a new maximum size.
aschiffler@6984
   577
 *  \param max_w     The maximum width of the window, must be >0
aschiffler@6984
   578
 *  \param max_h     The maximum height of the window, must be >0
aschiffler@6984
   579
 *
slouken@6788
   580
 *  \note You can't change the maximum size of a fullscreen window, it
slouken@6788
   581
 *        automatically matches the size of the display mode.
slouken@6788
   582
 *
slouken@6788
   583
 *  \sa SDL_GetWindowMaximumSize()
slouken@6788
   584
 *  \sa SDL_SetWindowMinimumSize()
slouken@6788
   585
 */
slouken@6788
   586
extern DECLSPEC void SDLCALL SDL_SetWindowMaximumSize(SDL_Window * window,
slouken@6788
   587
                                                      int max_w, int max_h);
slouken@7191
   588
slouken@6788
   589
/**
slouken@6788
   590
 *  \brief Get the maximum size of a window's client area.
slouken@7191
   591
 *
philipp@7175
   592
 *  \param window   The window to query.
aschiffler@6984
   593
 *  \param w        Pointer to variable for storing the maximum width, may be NULL
aschiffler@6984
   594
 *  \param h        Pointer to variable for storing the maximum height, may be NULL
slouken@6788
   595
 *
slouken@6788
   596
 *  \sa SDL_GetWindowMinimumSize()
slouken@6788
   597
 *  \sa SDL_SetWindowMaximumSize()
slouken@6788
   598
 */
slouken@6788
   599
extern DECLSPEC void SDLCALL SDL_GetWindowMaximumSize(SDL_Window * window,
slouken@6788
   600
                                                      int *w, int *h);
slouken@6788
   601
slouken@6788
   602
/**
icculus@6422
   603
 *  \brief Set the border state of a window.
icculus@6422
   604
 *
icculus@6422
   605
 *  This will add or remove the window's SDL_WINDOW_BORDERLESS flag and
icculus@6422
   606
 *  add or remove the border from the actual window. This is a no-op if the
icculus@6422
   607
 *  window's border already matches the requested state.
icculus@6422
   608
 *
icculus@6422
   609
 *  \param window The window of which to change the border state.
icculus@6422
   610
 *  \param bordered SDL_FALSE to remove border, SDL_TRUE to add border.
icculus@6422
   611
 *
icculus@6422
   612
 *  \note You can't change the border state of a fullscreen window.
slouken@7191
   613
 *
icculus@6422
   614
 *  \sa SDL_GetWindowFlags()
icculus@6422
   615
 */
icculus@6422
   616
extern DECLSPEC void SDLCALL SDL_SetWindowBordered(SDL_Window * window,
icculus@6422
   617
                                                   SDL_bool bordered);
icculus@6422
   618
icculus@6422
   619
/**
slouken@4883
   620
 *  \brief Show a window.
slouken@7191
   621
 *
slouken@3407
   622
 *  \sa SDL_HideWindow()
slouken@1895
   623
 */
slouken@3685
   624
extern DECLSPEC void SDLCALL SDL_ShowWindow(SDL_Window * window);
slouken@1895
   625
slouken@1895
   626
/**
slouken@4883
   627
 *  \brief Hide a window.
slouken@7191
   628
 *
slouken@3407
   629
 *  \sa SDL_ShowWindow()
slouken@1895
   630
 */
slouken@3685
   631
extern DECLSPEC void SDLCALL SDL_HideWindow(SDL_Window * window);
slouken@1895
   632
slouken@1895
   633
/**
slouken@4883
   634
 *  \brief Raise a window above other windows and set the input focus.
slouken@1895
   635
 */
slouken@3685
   636
extern DECLSPEC void SDLCALL SDL_RaiseWindow(SDL_Window * window);
slouken@1895
   637
slouken@1895
   638
/**
slouken@4883
   639
 *  \brief Make a window as large as possible.
slouken@7191
   640
 *
slouken@3407
   641
 *  \sa SDL_RestoreWindow()
slouken@1895
   642
 */
slouken@3685
   643
extern DECLSPEC void SDLCALL SDL_MaximizeWindow(SDL_Window * window);
slouken@1895
   644
slouken@1895
   645
/**
slouken@4883
   646
 *  \brief Minimize a window to an iconic representation.
slouken@7191
   647
 *
slouken@3407
   648
 *  \sa SDL_RestoreWindow()
slouken@1895
   649
 */
slouken@3685
   650
extern DECLSPEC void SDLCALL SDL_MinimizeWindow(SDL_Window * window);
slouken@1895
   651
slouken@1895
   652
/**
slouken@3407
   653
 *  \brief Restore the size and position of a minimized or maximized window.
slouken@7191
   654
 *
slouken@3407
   655
 *  \sa SDL_MaximizeWindow()
slouken@3407
   656
 *  \sa SDL_MinimizeWindow()
slouken@1895
   657
 */
slouken@3685
   658
extern DECLSPEC void SDLCALL SDL_RestoreWindow(SDL_Window * window);
slouken@1895
   659
slouken@1895
   660
/**
slouken@4883
   661
 *  \brief Set a window's fullscreen state.
slouken@7191
   662
 *
slouken@3407
   663
 *  \return 0 on success, or -1 if setting the display mode failed.
slouken@7191
   664
 *
slouken@3522
   665
 *  \sa SDL_SetWindowDisplayMode()
slouken@3522
   666
 *  \sa SDL_GetWindowDisplayMode()
slouken@1895
   667
 */
slouken@3685
   668
extern DECLSPEC int SDLCALL SDL_SetWindowFullscreen(SDL_Window * window,
slouken@6755
   669
                                                    Uint32 flags);
slouken@1895
   670
slouken@1895
   671
/**
slouken@5546
   672
 *  \brief Get the SDL surface associated with the window.
slouken@5166
   673
 *
slouken@7191
   674
 *  \return The window's framebuffer surface, or NULL on error.
slouken@5546
   675
 *
slouken@5546
   676
 *  A new surface will be created with the optimal format for the window,
slouken@5546
   677
 *  if necessary. This surface will be freed when the window is destroyed.
slouken@5166
   678
 *
slouken@5166
   679
 *  \note You may not combine this with 3D or the rendering API on this window.
slouken@5166
   680
 *
slouken@5166
   681
 *  \sa SDL_UpdateWindowSurface()
slouken@5166
   682
 *  \sa SDL_UpdateWindowSurfaceRects()
slouken@5166
   683
 */
slouken@5166
   684
extern DECLSPEC SDL_Surface * SDLCALL SDL_GetWindowSurface(SDL_Window * window);
slouken@5166
   685
slouken@5166
   686
/**
slouken@5166
   687
 *  \brief Copy the window surface to the screen.
slouken@5166
   688
 *
slouken@5166
   689
 *  \return 0 on success, or -1 on error.
slouken@5166
   690
 *
slouken@5166
   691
 *  \sa SDL_GetWindowSurface()
slouken@5166
   692
 *  \sa SDL_UpdateWindowSurfaceRects()
slouken@5166
   693
 */
slouken@5166
   694
extern DECLSPEC int SDLCALL SDL_UpdateWindowSurface(SDL_Window * window);
slouken@5166
   695
slouken@5166
   696
/**
slouken@5166
   697
 *  \brief Copy a number of rectangles on the window surface to the screen.
slouken@5166
   698
 *
slouken@5166
   699
 *  \return 0 on success, or -1 on error.
slouken@5166
   700
 *
slouken@5166
   701
 *  \sa SDL_GetWindowSurface()
slouken@5166
   702
 *  \sa SDL_UpdateWindowSurfaceRect()
slouken@5166
   703
 */
slouken@5166
   704
extern DECLSPEC int SDLCALL SDL_UpdateWindowSurfaceRects(SDL_Window * window,
slouken@7014
   705
                                                         const SDL_Rect * rects,
slouken@5297
   706
                                                         int numrects);
slouken@5166
   707
slouken@5166
   708
/**
slouken@4883
   709
 *  \brief Set a window's input grab mode.
slouken@7191
   710
 *
philipp@7188
   711
 *  \param window The window for which the input grab mode should be set.
slouken@5403
   712
 *  \param grabbed This is SDL_TRUE to grab input, and SDL_FALSE to release input.
slouken@7191
   713
 *
slouken@3407
   714
 *  \sa SDL_GetWindowGrab()
slouken@1895
   715
 */
slouken@3685
   716
extern DECLSPEC void SDLCALL SDL_SetWindowGrab(SDL_Window * window,
slouken@5403
   717
                                               SDL_bool grabbed);
slouken@1895
   718
slouken@1895
   719
/**
slouken@4883
   720
 *  \brief Get a window's input grab mode.
slouken@7191
   721
 *
slouken@5403
   722
 *  \return This returns SDL_TRUE if input is grabbed, and SDL_FALSE otherwise.
slouken@7191
   723
 *
slouken@3407
   724
 *  \sa SDL_SetWindowGrab()
slouken@1895
   725
 */
slouken@5403
   726
extern DECLSPEC SDL_bool SDLCALL SDL_GetWindowGrab(SDL_Window * window);
slouken@1895
   727
slouken@1895
   728
/**
slouken@5466
   729
 *  \brief Set the brightness (gamma correction) for a window.
slouken@7191
   730
 *
slouken@5466
   731
 *  \return 0 on success, or -1 if setting the brightness isn't supported.
slouken@7191
   732
 *
slouken@5466
   733
 *  \sa SDL_GetWindowBrightness()
slouken@5466
   734
 *  \sa SDL_SetWindowGammaRamp()
slouken@5466
   735
 */
slouken@5466
   736
extern DECLSPEC int SDLCALL SDL_SetWindowBrightness(SDL_Window * window, float brightness);
slouken@5466
   737
slouken@5466
   738
/**
slouken@5466
   739
 *  \brief Get the brightness (gamma correction) for a window.
slouken@7191
   740
 *
slouken@5466
   741
 *  \return The last brightness value passed to SDL_SetWindowBrightness()
slouken@7191
   742
 *
slouken@5466
   743
 *  \sa SDL_SetWindowBrightness()
slouken@5466
   744
 */
slouken@5466
   745
extern DECLSPEC float SDLCALL SDL_GetWindowBrightness(SDL_Window * window);
slouken@5466
   746
slouken@5466
   747
/**
slouken@5466
   748
 *  \brief Set the gamma ramp for a window.
slouken@7191
   749
 *
philipp@7188
   750
 *  \param window The window for which the gamma ramp should be set.
slouken@5466
   751
 *  \param red The translation table for the red channel, or NULL.
slouken@5466
   752
 *  \param green The translation table for the green channel, or NULL.
slouken@5466
   753
 *  \param blue The translation table for the blue channel, or NULL.
slouken@7191
   754
 *
slouken@5466
   755
 *  \return 0 on success, or -1 if gamma ramps are unsupported.
slouken@7191
   756
 *
slouken@5466
   757
 *  Set the gamma translation table for the red, green, and blue channels
slouken@5466
   758
 *  of the video hardware.  Each table is an array of 256 16-bit quantities,
slouken@5466
   759
 *  representing a mapping between the input and output for that channel.
slouken@5466
   760
 *  The input is the index into the array, and the output is the 16-bit
slouken@5466
   761
 *  gamma value at that index, scaled to the output color precision.
slouken@5466
   762
 *
slouken@5504
   763
 *  \sa SDL_GetWindowGammaRamp()
slouken@5466
   764
 */
slouken@5466
   765
extern DECLSPEC int SDLCALL SDL_SetWindowGammaRamp(SDL_Window * window,
slouken@5466
   766
                                                   const Uint16 * red,
slouken@5466
   767
                                                   const Uint16 * green,
slouken@5466
   768
                                                   const Uint16 * blue);
slouken@5466
   769
slouken@5466
   770
/**
slouken@5466
   771
 *  \brief Get the gamma ramp for a window.
slouken@7191
   772
 *
philipp@7188
   773
 *  \param window The window from which the gamma ramp should be queried.
slouken@7191
   774
 *  \param red   A pointer to a 256 element array of 16-bit quantities to hold
slouken@5466
   775
 *               the translation table for the red channel, or NULL.
slouken@7191
   776
 *  \param green A pointer to a 256 element array of 16-bit quantities to hold
slouken@5466
   777
 *               the translation table for the green channel, or NULL.
slouken@7191
   778
 *  \param blue  A pointer to a 256 element array of 16-bit quantities to hold
slouken@5466
   779
 *               the translation table for the blue channel, or NULL.
slouken@7191
   780
 *
slouken@5466
   781
 *  \return 0 on success, or -1 if gamma ramps are unsupported.
slouken@7191
   782
 *
slouken@5466
   783
 *  \sa SDL_SetWindowGammaRamp()
slouken@5466
   784
 */
slouken@5466
   785
extern DECLSPEC int SDLCALL SDL_GetWindowGammaRamp(SDL_Window * window,
slouken@5466
   786
                                                   Uint16 * red,
slouken@5466
   787
                                                   Uint16 * green,
slouken@5466
   788
                                                   Uint16 * blue);
slouken@5466
   789
slouken@5466
   790
/**
slouken@3407
   791
 *  \brief Destroy a window.
slouken@1895
   792
 */
slouken@3685
   793
extern DECLSPEC void SDLCALL SDL_DestroyWindow(SDL_Window * window);
slouken@1895
   794
slouken@0
   795
slouken@3025
   796
/**
slouken@4875
   797
 *  \brief Returns whether the screensaver is currently enabled (default on).
slouken@7191
   798
 *
slouken@3407
   799
 *  \sa SDL_EnableScreenSaver()
slouken@3407
   800
 *  \sa SDL_DisableScreenSaver()
slouken@3025
   801
 */
couriersud@3033
   802
extern DECLSPEC SDL_bool SDLCALL SDL_IsScreenSaverEnabled(void);
slouken@3025
   803
slouken@3025
   804
/**
slouken@3407
   805
 *  \brief Allow the screen to be blanked by a screensaver
slouken@7191
   806
 *
slouken@3407
   807
 *  \sa SDL_IsScreenSaverEnabled()
slouken@3407
   808
 *  \sa SDL_DisableScreenSaver()
slouken@3025
   809
 */
couriersud@3033
   810
extern DECLSPEC void SDLCALL SDL_EnableScreenSaver(void);
slouken@3025
   811
slouken@3025
   812
/**
slouken@3407
   813
 *  \brief Prevent the screen from being blanked by a screensaver
slouken@7191
   814
 *
slouken@3407
   815
 *  \sa SDL_IsScreenSaverEnabled()
slouken@3407
   816
 *  \sa SDL_EnableScreenSaver()
slouken@3025
   817
 */
couriersud@3033
   818
extern DECLSPEC void SDLCALL SDL_DisableScreenSaver(void);
slouken@3025
   819
slouken@0
   820
slouken@3407
   821
/**
slouken@3407
   822
 *  \name OpenGL support functions
slouken@3407
   823
 */
slouken@3407
   824
/*@{*/
slouken@0
   825
slouken@1895
   826
/**
slouken@3407
   827
 *  \brief Dynamically load an OpenGL library.
slouken@7191
   828
 *
slouken@7191
   829
 *  \param path The platform dependent OpenGL library name, or NULL to open the
slouken@3407
   830
 *              default OpenGL library.
slouken@7191
   831
 *
slouken@3407
   832
 *  \return 0 on success, or -1 if the library couldn't be loaded.
slouken@7191
   833
 *
slouken@3407
   834
 *  This should be done after initializing the video driver, but before
slouken@3407
   835
 *  creating any OpenGL windows.  If no OpenGL library is loaded, the default
slouken@3407
   836
 *  library will be loaded upon creation of the first OpenGL window.
slouken@7191
   837
 *
slouken@3407
   838
 *  \note If you do this, you need to retrieve all of the GL functions used in
slouken@3407
   839
 *        your program from the dynamic library using SDL_GL_GetProcAddress().
slouken@7191
   840
 *
slouken@3407
   841
 *  \sa SDL_GL_GetProcAddress()
slouken@3407
   842
 *  \sa SDL_GL_UnloadLibrary()
slouken@0
   843
 */
slouken@337
   844
extern DECLSPEC int SDLCALL SDL_GL_LoadLibrary(const char *path);
slouken@0
   845
slouken@1895
   846
/**
slouken@3407
   847
 *  \brief Get the address of an OpenGL function.
slouken@0
   848
 */
slouken@1895
   849
extern DECLSPEC void *SDLCALL SDL_GL_GetProcAddress(const char *proc);
slouken@0
   850
slouken@1895
   851
/**
slouken@3407
   852
 *  \brief Unload the OpenGL library previously loaded by SDL_GL_LoadLibrary().
slouken@7191
   853
 *
slouken@3407
   854
 *  \sa SDL_GL_LoadLibrary()
slouken@3057
   855
 */
slouken@3057
   856
extern DECLSPEC void SDLCALL SDL_GL_UnloadLibrary(void);
slouken@3057
   857
slouken@3057
   858
/**
slouken@7191
   859
 *  \brief Return true if an OpenGL extension is supported for the current
slouken@3407
   860
 *         context.
slouken@1926
   861
 */
slouken@1926
   862
extern DECLSPEC SDL_bool SDLCALL SDL_GL_ExtensionSupported(const char
slouken@1926
   863
                                                           *extension);
slouken@1926
   864
slouken@1926
   865
/**
slouken@3407
   866
 *  \brief Set an OpenGL window attribute before window creation.
slouken@0
   867
 */
slouken@337
   868
extern DECLSPEC int SDLCALL SDL_GL_SetAttribute(SDL_GLattr attr, int value);
slouken@0
   869
slouken@1895
   870
/**
slouken@3407
   871
 *  \brief Get the actual value for an attribute from the current context.
slouken@0
   872
 */
slouken@1936
   873
extern DECLSPEC int SDLCALL SDL_GL_GetAttribute(SDL_GLattr attr, int *value);
slouken@0
   874
slouken@1895
   875
/**
slouken@7191
   876
 *  \brief Create an OpenGL context for use with an OpenGL window, and make it
slouken@3407
   877
 *         current.
slouken@7191
   878
 *
slouken@3407
   879
 *  \sa SDL_GL_DeleteContext()
slouken@1895
   880
 */
slouken@3685
   881
extern DECLSPEC SDL_GLContext SDLCALL SDL_GL_CreateContext(SDL_Window *
slouken@3685
   882
                                                           window);
slouken@1895
   883
slouken@1895
   884
/**
slouken@3407
   885
 *  \brief Set up an OpenGL context for rendering into an OpenGL window.
slouken@7191
   886
 *
slouken@3407
   887
 *  \note The context must have been created with a compatible window.
slouken@1895
   888
 */
slouken@3685
   889
extern DECLSPEC int SDLCALL SDL_GL_MakeCurrent(SDL_Window * window,
slouken@1895
   890
                                               SDL_GLContext context);
slouken@1895
   891
slouken@1895
   892
/**
slouken@7412
   893
 *  \brief Get the currently active OpenGL window.
slouken@7412
   894
 */
slouken@7412
   895
extern DECLSPEC SDL_Window* SDLCALL SDL_GL_GetCurrentWindow(void);
slouken@7412
   896
slouken@7412
   897
/**
slouken@7412
   898
 *  \brief Get the currently active OpenGL context.
slouken@7412
   899
 */
slouken@7412
   900
extern DECLSPEC SDL_GLContext SDLCALL SDL_GL_GetCurrentContext(void);
slouken@7412
   901
slouken@7412
   902
/**
slouken@3407
   903
 *  \brief Set the swap interval for the current OpenGL context.
slouken@7191
   904
 *
slouken@3407
   905
 *  \param interval 0 for immediate updates, 1 for updates synchronized with the
icculus@6382
   906
 *                  vertical retrace. If the system supports it, you may
icculus@6382
   907
 *                  specify -1 to allow late swaps to happen immediately
icculus@6382
   908
 *                  instead of waiting for the next retrace.
slouken@7191
   909
 *
slouken@3407
   910
 *  \return 0 on success, or -1 if setting the swap interval is not supported.
slouken@7191
   911
 *
slouken@3407
   912
 *  \sa SDL_GL_GetSwapInterval()
slouken@1895
   913
 */
slouken@1895
   914
extern DECLSPEC int SDLCALL SDL_GL_SetSwapInterval(int interval);
slouken@1895
   915
slouken@1895
   916
/**
slouken@3407
   917
 *  \brief Get the swap interval for the current OpenGL context.
slouken@7191
   918
 *
slouken@7191
   919
 *  \return 0 if there is no vertical retrace synchronization, 1 if the buffer
icculus@6382
   920
 *          swap is synchronized with the vertical retrace, and -1 if late
icculus@6382
   921
 *          swaps happen immediately instead of waiting for the next retrace.
icculus@6382
   922
 *          If the system can't determine the swap interval, or there isn't a
icculus@6382
   923
 *          valid current context, this will return 0 as a safe default.
slouken@7191
   924
 *
slouken@3407
   925
 *  \sa SDL_GL_SetSwapInterval()
slouken@1895
   926
 */
slouken@1895
   927
extern DECLSPEC int SDLCALL SDL_GL_GetSwapInterval(void);
slouken@1895
   928
slouken@1895
   929
/**
slouken@7191
   930
 * \brief Swap the OpenGL buffers for a window, if double-buffering is
slouken@3407
   931
 *        supported.
slouken@0
   932
 */
slouken@3685
   933
extern DECLSPEC void SDLCALL SDL_GL_SwapWindow(SDL_Window * window);
slouken@0
   934
slouken@1895
   935
/**
slouken@3407
   936
 *  \brief Delete an OpenGL context.
slouken@7191
   937
 *
slouken@3407
   938
 *  \sa SDL_GL_CreateContext()
slouken@0
   939
 */
slouken@1895
   940
extern DECLSPEC void SDLCALL SDL_GL_DeleteContext(SDL_GLContext context);
slouken@0
   941
slouken@3407
   942
/*@}*//*OpenGL support functions*/
slouken@3407
   943
slouken@0
   944
slouken@0
   945
/* Ends C function definitions when using C++ */
slouken@0
   946
#ifdef __cplusplus
slouken@0
   947
}
slouken@0
   948
#endif
slouken@0
   949
#include "close_code.h"
slouken@0
   950
slouken@0
   951
#endif /* _SDL_video_h */
slouken@1895
   952
slouken@1895
   953
/* vi: set ts=4 sw=4 expandtab: */