include/SDL_video.h
author Steven M. Vascellaro <svascellaro@gmail.com>
Mon, 22 Oct 2018 10:55:18 -0400
changeset 12379 5dc13016cf34
parent 12180 a3c2b6e89522
child 12503 806492103856
permissions -rw-r--r--
joystick: Add Linux mappings for "Xbox One Wireless Controller (Model 1708)"

Adds controller bindings to support the "Xbox One Wireless Controller
(Model 1708)" on Linux. The Model 1708 was released in 2016 alongside the
Xbox One S. It is the current model being sold by Microsoft as of writing.
(October 22, 2018)
slouken@0
     1
/*
slouken@5535
     2
  Simple DirectMedia Layer
slouken@11811
     3
  Copyright (C) 1997-2018 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@10638
    28
#ifndef SDL_video_h_
slouken@10638
    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 */
slime73@9995
    56
    int w;                      /**< width, in screen coordinates */
slime73@9995
    57
    int h;                      /**< height, in screen coordinates */
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()
icculus@10385
    86
 *  \sa SDL_SetWindowResizable()
slouken@3407
    87
 *  \sa SDL_SetWindowTitle()
slouken@3407
    88
 *  \sa SDL_ShowWindow()
slouken@1895
    89
 */
slouken@3685
    90
typedef struct SDL_Window SDL_Window;
slouken@0
    91
slouken@1895
    92
/**
slouken@3407
    93
 *  \brief The flags on a window
slouken@7191
    94
 *
slouken@3407
    95
 *  \sa SDL_GetWindowFlags()
slouken@1895
    96
 */
slouken@1895
    97
typedef enum
slouken@1895
    98
{
icculus@10010
    99
    /* !!! FIXME: change this to name = (1<<x). */
slouken@5380
   100
    SDL_WINDOW_FULLSCREEN = 0x00000001,         /**< fullscreen window */
slouken@1895
   101
    SDL_WINDOW_OPENGL = 0x00000002,             /**< window usable with OpenGL context */
slouken@1895
   102
    SDL_WINDOW_SHOWN = 0x00000004,              /**< window is visible */
slouken@5380
   103
    SDL_WINDOW_HIDDEN = 0x00000008,             /**< window is not visible */
slouken@5380
   104
    SDL_WINDOW_BORDERLESS = 0x00000010,         /**< no window decoration */
slouken@5380
   105
    SDL_WINDOW_RESIZABLE = 0x00000020,          /**< window can be resized */
slouken@5380
   106
    SDL_WINDOW_MINIMIZED = 0x00000040,          /**< window is minimized */
slouken@5380
   107
    SDL_WINDOW_MAXIMIZED = 0x00000080,          /**< window is maximized */
slouken@1895
   108
    SDL_WINDOW_INPUT_GRABBED = 0x00000100,      /**< window has grabbed input focus */
slouken@1895
   109
    SDL_WINDOW_INPUT_FOCUS = 0x00000200,        /**< window has input focus */
slouken@3057
   110
    SDL_WINDOW_MOUSE_FOCUS = 0x00000400,        /**< window has mouse focus */
slouken@7191
   111
    SDL_WINDOW_FULLSCREEN_DESKTOP = ( SDL_WINDOW_FULLSCREEN | 0x00001000 ),
urkle@7746
   112
    SDL_WINDOW_FOREIGN = 0x00000800,            /**< window not created by SDL */
libsdl@11886
   113
    SDL_WINDOW_ALLOW_HIGHDPI = 0x00002000,      /**< window should be created in high-DPI mode if supported.
libsdl@11886
   114
                                                     On macOS NSHighResolutionCapable must be set true in the
libsdl@11886
   115
                                                     application's Info.plist for this to have any effect. */
icculus@10021
   116
    SDL_WINDOW_MOUSE_CAPTURE = 0x00004000,      /**< window has mouse captured (unrelated to INPUT_GRABBED) */
icculus@10021
   117
    SDL_WINDOW_ALWAYS_ON_TOP = 0x00008000,      /**< window should always be above others */
icculus@10021
   118
    SDL_WINDOW_SKIP_TASKBAR  = 0x00010000,      /**< window should not be added to the taskbar */
icculus@10021
   119
    SDL_WINDOW_UTILITY       = 0x00020000,      /**< window should be treated as a utility window */
icculus@10021
   120
    SDL_WINDOW_TOOLTIP       = 0x00040000,      /**< window should be treated as a tooltip */
slouken@11006
   121
    SDL_WINDOW_POPUP_MENU    = 0x00080000,      /**< window should be treated as a popup menu */
icculus@11445
   122
    SDL_WINDOW_VULKAN        = 0x10000000       /**< window usable for Vulkan surface */
slouken@1895
   123
} SDL_WindowFlags;
slouken@0
   124
slouken@1895
   125
/**
slouken@3407
   126
 *  \brief Used to indicate that you don't care what the window position is.
slouken@1895
   127
 */
slouken@10430
   128
#define SDL_WINDOWPOS_UNDEFINED_MASK    0x1FFF0000u
slouken@5246
   129
#define SDL_WINDOWPOS_UNDEFINED_DISPLAY(X)  (SDL_WINDOWPOS_UNDEFINED_MASK|(X))
slouken@5246
   130
#define SDL_WINDOWPOS_UNDEFINED         SDL_WINDOWPOS_UNDEFINED_DISPLAY(0)
slouken@5246
   131
#define SDL_WINDOWPOS_ISUNDEFINED(X)    \
slouken@5246
   132
            (((X)&0xFFFF0000) == SDL_WINDOWPOS_UNDEFINED_MASK)
slouken@3407
   133
slouken@1895
   134
/**
slouken@3407
   135
 *  \brief Used to indicate that the window position should be centered.
slouken@1895
   136
 */
slouken@10430
   137
#define SDL_WINDOWPOS_CENTERED_MASK    0x2FFF0000u
slouken@5246
   138
#define SDL_WINDOWPOS_CENTERED_DISPLAY(X)  (SDL_WINDOWPOS_CENTERED_MASK|(X))
slouken@5246
   139
#define SDL_WINDOWPOS_CENTERED         SDL_WINDOWPOS_CENTERED_DISPLAY(0)
slouken@5246
   140
#define SDL_WINDOWPOS_ISCENTERED(X)    \
slouken@5246
   141
            (((X)&0xFFFF0000) == SDL_WINDOWPOS_CENTERED_MASK)
slouken@1895
   142
slouken@1895
   143
/**
slouken@3407
   144
 *  \brief Event subtype for window events
slouken@1895
   145
 */
slouken@1895
   146
typedef enum
slouken@1895
   147
{
slouken@3407
   148
    SDL_WINDOWEVENT_NONE,           /**< Never used */
slouken@3407
   149
    SDL_WINDOWEVENT_SHOWN,          /**< Window has been shown */
slouken@3407
   150
    SDL_WINDOWEVENT_HIDDEN,         /**< Window has been hidden */
slouken@7191
   151
    SDL_WINDOWEVENT_EXPOSED,        /**< Window has been exposed and should be
slouken@3407
   152
                                         redrawn */
slouken@7191
   153
    SDL_WINDOWEVENT_MOVED,          /**< Window has been moved to data1, data2
slouken@3407
   154
                                     */
slouken@5276
   155
    SDL_WINDOWEVENT_RESIZED,        /**< Window has been resized to data1xdata2 */
slime73@9995
   156
    SDL_WINDOWEVENT_SIZE_CHANGED,   /**< The window size has changed, either as
slime73@9995
   157
                                         a result of an API call or through the
slime73@9995
   158
                                         system or user changing the window size. */
slouken@3407
   159
    SDL_WINDOWEVENT_MINIMIZED,      /**< Window has been minimized */
slouken@3407
   160
    SDL_WINDOWEVENT_MAXIMIZED,      /**< Window has been maximized */
slouken@3407
   161
    SDL_WINDOWEVENT_RESTORED,       /**< Window has been restored to normal size
slouken@3407
   162
                                         and position */
slouken@3691
   163
    SDL_WINDOWEVENT_ENTER,          /**< Window has gained mouse focus */
slouken@3691
   164
    SDL_WINDOWEVENT_LEAVE,          /**< Window has lost mouse focus */
slouken@3691
   165
    SDL_WINDOWEVENT_FOCUS_GAINED,   /**< Window has gained keyboard focus */
slouken@3691
   166
    SDL_WINDOWEVENT_FOCUS_LOST,     /**< Window has lost keyboard focus */
icculus@10028
   167
    SDL_WINDOWEVENT_CLOSE,          /**< The window manager requests that the window be closed */
icculus@10029
   168
    SDL_WINDOWEVENT_TAKE_FOCUS,     /**< Window is being offered a focus (should SetWindowInputFocus() on itself or a subwindow, or ignore) */
icculus@10029
   169
    SDL_WINDOWEVENT_HIT_TEST        /**< Window had a hit test that wasn't SDL_HITTEST_NORMAL. */
slouken@1895
   170
} SDL_WindowEventID;
slouken@1895
   171
slouken@1895
   172
/**
slouken@12143
   173
 *  \brief Event subtype for display events
slouken@12143
   174
 */
slouken@12143
   175
typedef enum
slouken@12143
   176
{
slouken@12143
   177
    SDL_DISPLAYEVENT_NONE,          /**< Never used */
sezeroz@12180
   178
    SDL_DISPLAYEVENT_ORIENTATION    /**< Display orientation has changed to data1 */
slouken@12143
   179
} SDL_DisplayEventID;
slouken@12143
   180
slouken@12143
   181
typedef enum
slouken@12143
   182
{
slouken@12143
   183
    SDL_ORIENTATION_UNKNOWN,            /**< The display orientation can't be determined */
slouken@12143
   184
    SDL_ORIENTATION_LANDSCAPE,          /**< The display is in landscape mode, with the right side up, relative to portrait mode */
slouken@12143
   185
    SDL_ORIENTATION_LANDSCAPE_FLIPPED,  /**< The display is in landscape mode, with the left side up, relative to portrait mode */
slouken@12143
   186
    SDL_ORIENTATION_PORTRAIT,           /**< The display is in portrait mode */
sezeroz@12180
   187
    SDL_ORIENTATION_PORTRAIT_FLIPPED    /**< The display is in portrait mode, upside down */
slouken@12143
   188
} SDL_DisplayOrientation;
slouken@12143
   189
slouken@12143
   190
/**
slouken@3407
   191
 *  \brief An opaque handle to an OpenGL context.
slouken@1895
   192
 */
slouken@1895
   193
typedef void *SDL_GLContext;
slouken@1895
   194
slouken@1895
   195
/**
slouken@3407
   196
 *  \brief OpenGL configuration attributes
slouken@0
   197
 */
slouken@1895
   198
typedef enum
slouken@1895
   199
{
slouken@0
   200
    SDL_GL_RED_SIZE,
slouken@0
   201
    SDL_GL_GREEN_SIZE,
slouken@0
   202
    SDL_GL_BLUE_SIZE,
slouken@0
   203
    SDL_GL_ALPHA_SIZE,
slouken@0
   204
    SDL_GL_BUFFER_SIZE,
slouken@0
   205
    SDL_GL_DOUBLEBUFFER,
slouken@0
   206
    SDL_GL_DEPTH_SIZE,
slouken@0
   207
    SDL_GL_STENCIL_SIZE,
slouken@0
   208
    SDL_GL_ACCUM_RED_SIZE,
slouken@0
   209
    SDL_GL_ACCUM_GREEN_SIZE,
slouken@0
   210
    SDL_GL_ACCUM_BLUE_SIZE,
slouken@450
   211
    SDL_GL_ACCUM_ALPHA_SIZE,
slouken@655
   212
    SDL_GL_STEREO,
slouken@656
   213
    SDL_GL_MULTISAMPLEBUFFERS,
slouken@1736
   214
    SDL_GL_MULTISAMPLESAMPLES,
hfutrell@2747
   215
    SDL_GL_ACCELERATED_VISUAL,
slouken@3100
   216
    SDL_GL_RETAINED_BACKING,
slouken@3139
   217
    SDL_GL_CONTEXT_MAJOR_VERSION,
slouken@6296
   218
    SDL_GL_CONTEXT_MINOR_VERSION,
slouken@6370
   219
    SDL_GL_CONTEXT_EGL,
slouken@6296
   220
    SDL_GL_CONTEXT_FLAGS,
slouken@6393
   221
    SDL_GL_CONTEXT_PROFILE_MASK,
icculus@7853
   222
    SDL_GL_SHARE_WITH_CURRENT_CONTEXT,
mdiluzio@9412
   223
    SDL_GL_FRAMEBUFFER_SRGB_CAPABLE,
icculus@11332
   224
    SDL_GL_CONTEXT_RELEASE_BEHAVIOR,
icculus@11346
   225
    SDL_GL_CONTEXT_RESET_NOTIFICATION,
icculus@11346
   226
    SDL_GL_CONTEXT_NO_ERROR
slouken@0
   227
} SDL_GLattr;
slouken@0
   228
slouken@6296
   229
typedef enum
slouken@6296
   230
{
slouken@6296
   231
    SDL_GL_CONTEXT_PROFILE_CORE           = 0x0001,
slouken@6296
   232
    SDL_GL_CONTEXT_PROFILE_COMPATIBILITY  = 0x0002,
philipp@11065
   233
    SDL_GL_CONTEXT_PROFILE_ES             = 0x0004 /**< GLX_CONTEXT_ES2_PROFILE_BIT_EXT */
slouken@6296
   234
} SDL_GLprofile;
slouken@6296
   235
slouken@6296
   236
typedef enum
slouken@6296
   237
{
slouken@6296
   238
    SDL_GL_CONTEXT_DEBUG_FLAG              = 0x0001,
slouken@6296
   239
    SDL_GL_CONTEXT_FORWARD_COMPATIBLE_FLAG = 0x0002,
slouken@6393
   240
    SDL_GL_CONTEXT_ROBUST_ACCESS_FLAG      = 0x0004,
slouken@6393
   241
    SDL_GL_CONTEXT_RESET_ISOLATION_FLAG    = 0x0008
slouken@6296
   242
} SDL_GLcontextFlag;
slouken@6296
   243
mdiluzio@9412
   244
typedef enum
mdiluzio@9412
   245
{
mdiluzio@9412
   246
    SDL_GL_CONTEXT_RELEASE_BEHAVIOR_NONE   = 0x0000,
mdiluzio@9412
   247
    SDL_GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH  = 0x0001
mdiluzio@9412
   248
} SDL_GLcontextReleaseFlag;
mdiluzio@9412
   249
icculus@11332
   250
typedef enum
icculus@11332
   251
{
icculus@11332
   252
    SDL_GL_CONTEXT_RESET_NO_NOTIFICATION = 0x0000,
icculus@11332
   253
    SDL_GL_CONTEXT_RESET_LOSE_CONTEXT    = 0x0001
icculus@11332
   254
} SDL_GLContextResetNotification;
icculus@11332
   255
slouken@0
   256
/* Function prototypes */
slouken@0
   257
slouken@1895
   258
/**
slouken@3407
   259
 *  \brief Get the number of video drivers compiled into SDL
slouken@7191
   260
 *
slouken@3407
   261
 *  \sa SDL_GetVideoDriver()
slouken@0
   262
 */
slouken@1895
   263
extern DECLSPEC int SDLCALL SDL_GetNumVideoDrivers(void);
slouken@1895
   264
slouken@1895
   265
/**
slouken@3407
   266
 *  \brief Get the name of a built in video driver.
slouken@7191
   267
 *
slouken@3407
   268
 *  \note The video drivers are presented in the order in which they are
slouken@3407
   269
 *        normally checked during initialization.
slouken@7191
   270
 *
slouken@3407
   271
 *  \sa SDL_GetNumVideoDrivers()
slouken@1895
   272
 */
slouken@1895
   273
extern DECLSPEC const char *SDLCALL SDL_GetVideoDriver(int index);
slouken@1895
   274
slouken@1895
   275
/**
slouken@3407
   276
 *  \brief Initialize the video subsystem, optionally specifying a video driver.
slouken@7191
   277
 *
slouken@7191
   278
 *  \param driver_name Initialize a specific driver by name, or NULL for the
slouken@3407
   279
 *                     default video driver.
slouken@7191
   280
 *
slouken@3407
   281
 *  \return 0 on success, -1 on error
slouken@7191
   282
 *
slouken@3407
   283
 *  This function initializes the video subsystem; setting up a connection
slouken@3407
   284
 *  to the window manager, etc, and determines the available display modes
slouken@3407
   285
 *  and pixel formats, but does not initialize a window or graphics mode.
slouken@7191
   286
 *
slouken@3407
   287
 *  \sa SDL_VideoQuit()
slouken@1895
   288
 */
slouken@5123
   289
extern DECLSPEC int SDLCALL SDL_VideoInit(const char *driver_name);
slouken@1895
   290
slouken@1895
   291
/**
slouken@3407
   292
 *  \brief Shuts down the video subsystem.
slouken@7191
   293
 *
slouken@3407
   294
 *  This function closes all windows, and restores the original video mode.
slouken@7191
   295
 *
slouken@3407
   296
 *  \sa SDL_VideoInit()
slouken@1895
   297
 */
slouken@337
   298
extern DECLSPEC void SDLCALL SDL_VideoQuit(void);
slouken@0
   299
slouken@1895
   300
/**
slouken@3407
   301
 *  \brief Returns the name of the currently initialized video driver.
slouken@7191
   302
 *
slouken@3407
   303
 *  \return The name of the current video driver or NULL if no driver
slouken@3407
   304
 *          has been initialized
slouken@7191
   305
 *
slouken@3407
   306
 *  \sa SDL_GetNumVideoDrivers()
slouken@3407
   307
 *  \sa SDL_GetVideoDriver()
slouken@0
   308
 */
slouken@1895
   309
extern DECLSPEC const char *SDLCALL SDL_GetCurrentVideoDriver(void);
slouken@0
   310
slouken@1895
   311
/**
slouken@3407
   312
 *  \brief Returns the number of available video displays.
slouken@7191
   313
 *
slouken@3528
   314
 *  \sa SDL_GetDisplayBounds()
slouken@0
   315
 */
slouken@1895
   316
extern DECLSPEC int SDLCALL SDL_GetNumVideoDisplays(void);
slouken@0
   317
slouken@1895
   318
/**
slouken@6787
   319
 *  \brief Get the name of a display in UTF-8 encoding
slouken@7191
   320
 *
slouken@6787
   321
 *  \return The name of a display, or NULL for an invalid display index.
slouken@7191
   322
 *
slouken@6787
   323
 *  \sa SDL_GetNumVideoDisplays()
slouken@6787
   324
 */
slouken@6787
   325
extern DECLSPEC const char * SDLCALL SDL_GetDisplayName(int displayIndex);
slouken@6787
   326
slouken@6787
   327
/**
slouken@3528
   328
 *  \brief Get the desktop area represented by a display, with the primary
slouken@3528
   329
 *         display located at 0,0
slouken@7191
   330
 *
slouken@3528
   331
 *  \return 0 on success, or -1 if the index is out of range.
slouken@7191
   332
 *
slouken@3528
   333
 *  \sa SDL_GetNumVideoDisplays()
slouken@3528
   334
 */
slouken@5244
   335
extern DECLSPEC int SDLCALL SDL_GetDisplayBounds(int displayIndex, SDL_Rect * rect);
slouken@3528
   336
slouken@3528
   337
/**
icculus@10019
   338
 *  \brief Get the usable desktop area represented by a display, with the
icculus@10019
   339
 *         primary display located at 0,0
icculus@10019
   340
 *
icculus@10019
   341
 *  This is the same area as SDL_GetDisplayBounds() reports, but with portions
icculus@10019
   342
 *  reserved by the system removed. For example, on Mac OS X, this subtracts
icculus@10019
   343
 *  the area occupied by the menu bar and dock.
icculus@10019
   344
 *
icculus@10019
   345
 *  Setting a window to be fullscreen generally bypasses these unusable areas,
icculus@10019
   346
 *  so these are good guidelines for the maximum space available to a
icculus@10019
   347
 *  non-fullscreen window.
icculus@10019
   348
 *
icculus@10019
   349
 *  \return 0 on success, or -1 if the index is out of range.
icculus@10019
   350
 *
icculus@10019
   351
 *  \sa SDL_GetDisplayBounds()
icculus@10019
   352
 *  \sa SDL_GetNumVideoDisplays()
icculus@10019
   353
 */
icculus@10019
   354
extern DECLSPEC int SDLCALL SDL_GetDisplayUsableBounds(int displayIndex, SDL_Rect * rect);
icculus@10019
   355
icculus@10019
   356
/**
slouken@12143
   357
 *  \brief Get the dots/pixels-per-inch for a display
slouken@12143
   358
 *
slouken@12143
   359
 *  \note Diagonal, horizontal and vertical DPI can all be optionally
slouken@12143
   360
 *        returned if the parameter is non-NULL.
slouken@12143
   361
 *
slouken@12143
   362
 *  \return 0 on success, or -1 if no DPI information is available or the index is out of range.
slouken@12143
   363
 *
slouken@12143
   364
 *  \sa SDL_GetNumVideoDisplays()
slouken@12143
   365
 */
slouken@12143
   366
extern DECLSPEC int SDLCALL SDL_GetDisplayDPI(int displayIndex, float * ddpi, float * hdpi, float * vdpi);
slouken@12143
   367
slouken@12143
   368
/**
slouken@12143
   369
 *  \brief Get the orientation of a display
slouken@12143
   370
 *
slouken@12143
   371
 *  \return The orientation of the display, or SDL_ORIENTATION_UNKNOWN if it isn't available.
slouken@12143
   372
 *
slouken@12143
   373
 *  \sa SDL_GetNumVideoDisplays()
slouken@12143
   374
 */
slouken@12143
   375
extern DECLSPEC SDL_DisplayOrientation SDLCALL SDL_GetDisplayOrientation(int displayIndex);
slouken@12143
   376
slouken@12143
   377
/**
slouken@5244
   378
 *  \brief Returns the number of available display modes.
slouken@7191
   379
 *
slouken@3407
   380
 *  \sa SDL_GetDisplayMode()
slouken@0
   381
 */
slouken@5244
   382
extern DECLSPEC int SDLCALL SDL_GetNumDisplayModes(int displayIndex);
slouken@0
   383
slouken@1895
   384
/**
slouken@3407
   385
 *  \brief Fill in information about a specific display mode.
slouken@7191
   386
 *
slouken@3407
   387
 *  \note The display modes are sorted in this priority:
slouken@3407
   388
 *        \li bits per pixel -> more colors to fewer colors
slouken@3407
   389
 *        \li width -> largest to smallest
slouken@3407
   390
 *        \li height -> largest to smallest
slouken@3407
   391
 *        \li refresh rate -> highest to lowest
slouken@7191
   392
 *
slouken@3407
   393
 *  \sa SDL_GetNumDisplayModes()
slouken@0
   394
 */
slouken@5244
   395
extern DECLSPEC int SDLCALL SDL_GetDisplayMode(int displayIndex, int modeIndex,
slouken@1967
   396
                                               SDL_DisplayMode * mode);
slouken@0
   397
slouken@1895
   398
/**
slouken@5244
   399
 *  \brief Fill in information about the desktop display mode.
slouken@1895
   400
 */
slouken@5244
   401
extern DECLSPEC int SDLCALL SDL_GetDesktopDisplayMode(int displayIndex, SDL_DisplayMode * mode);
slouken@1895
   402
slouken@1895
   403
/**
slouken@3407
   404
 *  \brief Fill in information about the current display mode.
slouken@1895
   405
 */
slouken@5244
   406
extern DECLSPEC int SDLCALL SDL_GetCurrentDisplayMode(int displayIndex, SDL_DisplayMode * mode);
slouken@1895
   407
slouken@3400
   408
slouken@1895
   409
/**
slouken@3407
   410
 *  \brief Get the closest match to the requested display mode.
slouken@7191
   411
 *
philipp@7188
   412
 *  \param displayIndex The index of display from which mode should be queried.
slouken@3407
   413
 *  \param mode The desired display mode
slouken@7191
   414
 *  \param closest A pointer to a display mode to be filled in with the closest
slouken@3407
   415
 *                 match of the available display modes.
slouken@7191
   416
 *
slouken@7191
   417
 *  \return The passed in value \c closest, or NULL if no matching video mode
slouken@3407
   418
 *          was available.
slouken@7191
   419
 *
slouken@3407
   420
 *  The available display modes are scanned, and \c closest is filled in with the
slouken@7191
   421
 *  closest mode matching the requested mode and returned.  The mode format and
slouken@7191
   422
 *  refresh_rate default to the desktop mode if they are 0.  The modes are
slouken@7191
   423
 *  scanned with size being first priority, format being second priority, and
slouken@7191
   424
 *  finally checking the refresh_rate.  If all the available modes are too
slouken@3407
   425
 *  small, then NULL is returned.
slouken@7191
   426
 *
slouken@3407
   427
 *  \sa SDL_GetNumDisplayModes()
slouken@3407
   428
 *  \sa SDL_GetDisplayMode()
slouken@1895
   429
 */
slouken@5244
   430
extern DECLSPEC SDL_DisplayMode * SDLCALL SDL_GetClosestDisplayMode(int displayIndex, const SDL_DisplayMode * mode, SDL_DisplayMode * closest);
slouken@1895
   431
slouken@1895
   432
/**
slouken@5246
   433
 *  \brief Get the display index associated with a window.
slouken@7191
   434
 *
slouken@5246
   435
 *  \return the display index of the display containing the center of the
slouken@5246
   436
 *          window, or -1 on error.
slouken@5246
   437
 */
slouken@6786
   438
extern DECLSPEC int SDLCALL SDL_GetWindowDisplayIndex(SDL_Window * window);
slouken@5246
   439
slouken@5246
   440
/**
slouken@5244
   441
 *  \brief Set the display mode used when a fullscreen window is visible.
slouken@5244
   442
 *
slouken@5244
   443
 *  By default the window's dimensions and the desktop format and refresh rate
slouken@5244
   444
 *  are used.
slouken@7191
   445
 *
philipp@7188
   446
 *  \param window The window for which the display mode should be set.
slouken@3500
   447
 *  \param mode The mode to use, or NULL for the default mode.
slouken@7191
   448
 *
slouken@3407
   449
 *  \return 0 on success, or -1 if setting the display mode failed.
slouken@7191
   450
 *
slouken@3522
   451
 *  \sa SDL_GetWindowDisplayMode()
slouken@3407
   452
 *  \sa SDL_SetWindowFullscreen()
slouken@0
   453
 */
slouken@3685
   454
extern DECLSPEC int SDLCALL SDL_SetWindowDisplayMode(SDL_Window * window,
slouken@3500
   455
                                                     const SDL_DisplayMode
slouken@1895
   456
                                                         * mode);
slouken@0
   457
slouken@1895
   458
/**
slouken@3407
   459
 *  \brief Fill in information about the display mode used when a fullscreen
slouken@5244
   460
 *         window is visible.
slouken@3522
   461
 *
slouken@3522
   462
 *  \sa SDL_SetWindowDisplayMode()
slouken@3522
   463
 *  \sa SDL_SetWindowFullscreen()
slouken@0
   464
 */
slouken@3685
   465
extern DECLSPEC int SDLCALL SDL_GetWindowDisplayMode(SDL_Window * window,
slouken@3500
   466
                                                     SDL_DisplayMode * mode);
slouken@0
   467
slouken@1895
   468
/**
slouken@5154
   469
 *  \brief Get the pixel format associated with the window.
slouken@5154
   470
 */
slouken@5154
   471
extern DECLSPEC Uint32 SDLCALL SDL_GetWindowPixelFormat(SDL_Window * window);
slouken@5154
   472
slouken@5154
   473
/**
slouken@3407
   474
 *  \brief Create a window with the specified position, dimensions, and flags.
slouken@7191
   475
 *
slouken@3407
   476
 *  \param title The title of the window, in UTF-8 encoding.
slouken@7191
   477
 *  \param x     The x position of the window, ::SDL_WINDOWPOS_CENTERED, or
slouken@3407
   478
 *               ::SDL_WINDOWPOS_UNDEFINED.
slouken@7191
   479
 *  \param y     The y position of the window, ::SDL_WINDOWPOS_CENTERED, or
slouken@3407
   480
 *               ::SDL_WINDOWPOS_UNDEFINED.
slime73@9995
   481
 *  \param w     The width of the window, in screen coordinates.
slime73@9995
   482
 *  \param h     The height of the window, in screen coordinates.
slouken@7191
   483
 *  \param flags The flags for the window, a mask of any of the following:
urkle@7746
   484
 *               ::SDL_WINDOW_FULLSCREEN,    ::SDL_WINDOW_OPENGL,
urkle@7746
   485
 *               ::SDL_WINDOW_HIDDEN,        ::SDL_WINDOW_BORDERLESS,
urkle@7746
   486
 *               ::SDL_WINDOW_RESIZABLE,     ::SDL_WINDOW_MAXIMIZED,
urkle@7746
   487
 *               ::SDL_WINDOW_MINIMIZED,     ::SDL_WINDOW_INPUT_GRABBED,
icculus@11365
   488
 *               ::SDL_WINDOW_ALLOW_HIGHDPI, ::SDL_WINDOW_VULKAN.
slouken@7191
   489
 *
philipp@10168
   490
 *  \return The created window, or NULL if window creation failed.
slouken@7191
   491
 *
slime73@9995
   492
 *  If the window is created with the SDL_WINDOW_ALLOW_HIGHDPI flag, its size
slime73@9995
   493
 *  in pixels may differ from its size in screen coordinates on platforms with
philipp@9996
   494
 *  high-DPI support (e.g. iOS and Mac OS X). Use SDL_GetWindowSize() to query
icculus@11365
   495
 *  the client area's size in screen coordinates, and SDL_GL_GetDrawableSize(),
icculus@11365
   496
 *  SDL_Vulkan_GetDrawableSize(), or SDL_GetRendererOutputSize() to query the
icculus@11365
   497
 *  drawable size in pixels.
icculus@11365
   498
 *
icculus@11365
   499
 *  If the window is created with any of the SDL_WINDOW_OPENGL or
icculus@11365
   500
 *  SDL_WINDOW_VULKAN flags, then the corresponding LoadLibrary function
icculus@11365
   501
 *  (SDL_GL_LoadLibrary or SDL_Vulkan_LoadLibrary) is called and the
slouken@11720
   502
 *  corresponding UnloadLibrary function is called by SDL_DestroyWindow().
icculus@11365
   503
 *
icculus@11365
   504
 *  If SDL_WINDOW_VULKAN is specified and there isn't a working Vulkan driver,
icculus@11365
   505
 *  SDL_CreateWindow() will fail because SDL_Vulkan_LoadLibrary() will fail.
icculus@11365
   506
 *
icculus@11365
   507
 *  \note On non-Apple devices, SDL requires you to either not link to the
icculus@11365
   508
 *        Vulkan loader or link to a dynamic library version. This limitation
icculus@11365
   509
 *        may be removed in a future version of SDL.
slime73@9995
   510
 *
slouken@3407
   511
 *  \sa SDL_DestroyWindow()
icculus@11365
   512
 *  \sa SDL_GL_LoadLibrary()
icculus@11365
   513
 *  \sa SDL_Vulkan_LoadLibrary()
slouken@0
   514
 */
slouken@3685
   515
extern DECLSPEC SDL_Window * SDLCALL SDL_CreateWindow(const char *title,
slouken@1895
   516
                                                      int x, int y, int w,
slouken@1895
   517
                                                      int h, Uint32 flags);
slouken@0
   518
slouken@1895
   519
/**
slouken@3493
   520
 *  \brief Create an SDL window from an existing native window.
slouken@7191
   521
 *
slouken@3407
   522
 *  \param data A pointer to driver-dependent window creation data
slouken@7191
   523
 *
philipp@10168
   524
 *  \return The created window, or NULL if window creation failed.
slouken@7191
   525
 *
slouken@3407
   526
 *  \sa SDL_DestroyWindow()
slouken@0
   527
 */
slouken@3685
   528
extern DECLSPEC SDL_Window * SDLCALL SDL_CreateWindowFrom(const void *data);
slouken@3685
   529
slouken@3685
   530
/**
slouken@4883
   531
 *  \brief Get the numeric ID of a window, for logging purposes.
slouken@3685
   532
 */
slouken@3685
   533
extern DECLSPEC Uint32 SDLCALL SDL_GetWindowID(SDL_Window * window);
slouken@3685
   534
slouken@3685
   535
/**
slouken@3685
   536
 *  \brief Get a window from a stored ID, or NULL if it doesn't exist.
slouken@3685
   537
 */
slouken@3685
   538
extern DECLSPEC SDL_Window * SDLCALL SDL_GetWindowFromID(Uint32 id);
slouken@1895
   539
slouken@1895
   540
/**
slouken@3407
   541
 *  \brief Get the window flags.
slouken@1895
   542
 */
slouken@3685
   543
extern DECLSPEC Uint32 SDLCALL SDL_GetWindowFlags(SDL_Window * window);
slouken@1895
   544
slouken@1895
   545
/**
slouken@4883
   546
 *  \brief Set the title of a window, in UTF-8 format.
slouken@7191
   547
 *
slouken@3407
   548
 *  \sa SDL_GetWindowTitle()
slouken@1895
   549
 */
slouken@3685
   550
extern DECLSPEC void SDLCALL SDL_SetWindowTitle(SDL_Window * window,
slouken@1895
   551
                                                const char *title);
slouken@1895
   552
slouken@1895
   553
/**
slouken@4883
   554
 *  \brief Get the title of a window, in UTF-8 format.
slouken@7191
   555
 *
slouken@3407
   556
 *  \sa SDL_SetWindowTitle()
slouken@1895
   557
 */
slouken@3685
   558
extern DECLSPEC const char *SDLCALL SDL_GetWindowTitle(SDL_Window * window);
slouken@1895
   559
slouken@1895
   560
/**
slouken@4887
   561
 *  \brief Set the icon for a window.
slouken@7191
   562
 *
philipp@7188
   563
 *  \param window The window for which the icon should be set.
slouken@4887
   564
 *  \param icon The icon for the window.
slouken@1895
   565
 */
slouken@3685
   566
extern DECLSPEC void SDLCALL SDL_SetWindowIcon(SDL_Window * window,
slouken@2990
   567
                                               SDL_Surface * icon);
slouken@1895
   568
slouken@1895
   569
/**
slouken@5165
   570
 *  \brief Associate an arbitrary named pointer with a window.
slouken@7191
   571
 *
slouken@5165
   572
 *  \param window   The window to associate with the pointer.
slouken@5165
   573
 *  \param name     The name of the pointer.
slouken@5165
   574
 *  \param userdata The associated pointer.
slouken@5165
   575
 *
slouken@5165
   576
 *  \return The previous value associated with 'name'
slouken@5165
   577
 *
slouken@5165
   578
 *  \note The name is case-sensitive.
slouken@5165
   579
 *
slouken@3407
   580
 *  \sa SDL_GetWindowData()
slouken@1895
   581
 */
slouken@5165
   582
extern DECLSPEC void* SDLCALL SDL_SetWindowData(SDL_Window * window,
slouken@5165
   583
                                                const char *name,
slouken@5165
   584
                                                void *userdata);
slouken@1895
   585
slouken@1895
   586
/**
slouken@4883
   587
 *  \brief Retrieve the data pointer associated with a window.
slouken@7191
   588
 *
slouken@5165
   589
 *  \param window   The window to query.
slouken@5165
   590
 *  \param name     The name of the pointer.
slouken@5165
   591
 *
slouken@5165
   592
 *  \return The value associated with 'name'
slouken@7191
   593
 *
slouken@3407
   594
 *  \sa SDL_SetWindowData()
slouken@1895
   595
 */
slouken@5165
   596
extern DECLSPEC void *SDLCALL SDL_GetWindowData(SDL_Window * window,
slouken@5165
   597
                                                const char *name);
slouken@1895
   598
slouken@1895
   599
/**
slouken@4883
   600
 *  \brief Set the position of a window.
slouken@7191
   601
 *
slouken@5165
   602
 *  \param window   The window to reposition.
slime73@9995
   603
 *  \param x        The x coordinate of the window in screen coordinates, or
slime73@9995
   604
 *                  ::SDL_WINDOWPOS_CENTERED or ::SDL_WINDOWPOS_UNDEFINED.
slime73@9995
   605
 *  \param y        The y coordinate of the window in screen coordinates, or
slime73@9995
   606
 *                  ::SDL_WINDOWPOS_CENTERED or ::SDL_WINDOWPOS_UNDEFINED.
slouken@7191
   607
 *
slouken@3407
   608
 *  \note The window coordinate origin is the upper left of the display.
slouken@7191
   609
 *
slouken@3407
   610
 *  \sa SDL_GetWindowPosition()
slouken@1895
   611
 */
slouken@3685
   612
extern DECLSPEC void SDLCALL SDL_SetWindowPosition(SDL_Window * window,
slouken@1895
   613
                                                   int x, int y);
slouken@1895
   614
slouken@1895
   615
/**
slouken@4883
   616
 *  \brief Get the position of a window.
slouken@7191
   617
 *
philipp@7175
   618
 *  \param window   The window to query.
slime73@9995
   619
 *  \param x        Pointer to variable for storing the x position, in screen
slime73@9995
   620
 *                  coordinates. May be NULL.
slime73@9995
   621
 *  \param y        Pointer to variable for storing the y position, in screen
slime73@9995
   622
 *                  coordinates. May be NULL.
aschiffler@6984
   623
 *
slouken@3407
   624
 *  \sa SDL_SetWindowPosition()
slouken@1895
   625
 */
slouken@3685
   626
extern DECLSPEC void SDLCALL SDL_GetWindowPosition(SDL_Window * window,
slouken@1895
   627
                                                   int *x, int *y);
slouken@1895
   628
slouken@1895
   629
/**
slouken@4883
   630
 *  \brief Set the size of a window's client area.
slouken@7191
   631
 *
philipp@7175
   632
 *  \param window   The window to resize.
slime73@9995
   633
 *  \param w        The width of the window, in screen coordinates. Must be >0.
slime73@9995
   634
 *  \param h        The height of the window, in screen coordinates. Must be >0.
aschiffler@6984
   635
 *
slouken@11484
   636
 *  \note Fullscreen windows automatically match the size of the display mode,
slouken@11484
   637
 *        and you should use SDL_SetWindowDisplayMode() to change their size.
slouken@7191
   638
 *
slime73@9995
   639
 *  The window size in screen coordinates may differ from the size in pixels, if
slime73@9995
   640
 *  the window was created with SDL_WINDOW_ALLOW_HIGHDPI on a platform with
philipp@9996
   641
 *  high-dpi support (e.g. iOS or OS X). Use SDL_GL_GetDrawableSize() or
philipp@9996
   642
 *  SDL_GetRendererOutputSize() to get the real client area size in pixels.
slime73@9995
   643
 *
slouken@3407
   644
 *  \sa SDL_GetWindowSize()
slouken@11484
   645
 *  \sa SDL_SetWindowDisplayMode()
slouken@1895
   646
 */
slouken@3685
   647
extern DECLSPEC void SDLCALL SDL_SetWindowSize(SDL_Window * window, int w,
slouken@1895
   648
                                               int h);
slouken@1895
   649
slouken@1895
   650
/**
slouken@4883
   651
 *  \brief Get the size of a window's client area.
slouken@7191
   652
 *
philipp@7175
   653
 *  \param window   The window to query.
slime73@9995
   654
 *  \param w        Pointer to variable for storing the width, in screen
slime73@9995
   655
 *                  coordinates. May be NULL.
slime73@9995
   656
 *  \param h        Pointer to variable for storing the height, in screen
slime73@9995
   657
 *                  coordinates. May be NULL.
slime73@9995
   658
 *
slime73@9995
   659
 *  The window size in screen coordinates may differ from the size in pixels, if
slime73@9995
   660
 *  the window was created with SDL_WINDOW_ALLOW_HIGHDPI on a platform with
philipp@9996
   661
 *  high-dpi support (e.g. iOS or OS X). Use SDL_GL_GetDrawableSize() or
philipp@9996
   662
 *  SDL_GetRendererOutputSize() to get the real client area size in pixels.
slouken@7191
   663
 *
slouken@3407
   664
 *  \sa SDL_SetWindowSize()
slouken@1895
   665
 */
slouken@3685
   666
extern DECLSPEC void SDLCALL SDL_GetWindowSize(SDL_Window * window, int *w,
slouken@1895
   667
                                               int *h);
slouken@7191
   668
stopiccot@6681
   669
/**
icculus@10024
   670
 *  \brief Get the size of a window's borders (decorations) around the client area.
icculus@10024
   671
 *
icculus@10024
   672
 *  \param window The window to query.
icculus@10024
   673
 *  \param top Pointer to variable for storing the size of the top border. NULL is permitted.
icculus@10024
   674
 *  \param left Pointer to variable for storing the size of the left border. NULL is permitted.
icculus@10024
   675
 *  \param bottom Pointer to variable for storing the size of the bottom border. NULL is permitted.
icculus@10024
   676
 *  \param right Pointer to variable for storing the size of the right border. NULL is permitted.
icculus@10024
   677
 *
icculus@10024
   678
 *  \return 0 on success, or -1 if getting this information is not supported.
icculus@10024
   679
 *
icculus@10024
   680
 *  \note if this function fails (returns -1), the size values will be
icculus@10024
   681
 *        initialized to 0, 0, 0, 0 (if a non-NULL pointer is provided), as
icculus@10024
   682
 *        if the window in question was borderless.
icculus@10024
   683
 */
icculus@10024
   684
extern DECLSPEC int SDLCALL SDL_GetWindowBordersSize(SDL_Window * window,
icculus@10024
   685
                                                     int *top, int *left,
icculus@10024
   686
                                                     int *bottom, int *right);
icculus@10024
   687
icculus@10024
   688
/**
stopiccot@6681
   689
 *  \brief Set the minimum size of a window's client area.
slouken@7191
   690
 *
philipp@7175
   691
 *  \param window    The window to set a new minimum size.
aschiffler@6984
   692
 *  \param min_w     The minimum width of the window, must be >0
aschiffler@6984
   693
 *  \param min_h     The minimum height of the window, must be >0
stopiccot@6681
   694
 *
stopiccot@6681
   695
 *  \note You can't change the minimum size of a fullscreen window, it
stopiccot@6681
   696
 *        automatically matches the size of the display mode.
stopiccot@6681
   697
 *
stopiccot@6681
   698
 *  \sa SDL_GetWindowMinimumSize()
slouken@6788
   699
 *  \sa SDL_SetWindowMaximumSize()
stopiccot@6681
   700
 */
stopiccot@6681
   701
extern DECLSPEC void SDLCALL SDL_SetWindowMinimumSize(SDL_Window * window,
stopiccot@6681
   702
                                                      int min_w, int min_h);
slouken@7191
   703
stopiccot@6681
   704
/**
stopiccot@6681
   705
 *  \brief Get the minimum size of a window's client area.
slouken@7191
   706
 *
philipp@7175
   707
 *  \param window   The window to query.
aschiffler@6984
   708
 *  \param w        Pointer to variable for storing the minimum width, may be NULL
aschiffler@6984
   709
 *  \param h        Pointer to variable for storing the minimum height, may be NULL
slouken@7191
   710
 *
slouken@6788
   711
 *  \sa SDL_GetWindowMaximumSize()
stopiccot@6681
   712
 *  \sa SDL_SetWindowMinimumSize()
stopiccot@6681
   713
 */
stopiccot@6681
   714
extern DECLSPEC void SDLCALL SDL_GetWindowMinimumSize(SDL_Window * window,
stopiccot@6681
   715
                                                      int *w, int *h);
slouken@1895
   716
slouken@1895
   717
/**
slouken@6788
   718
 *  \brief Set the maximum size of a window's client area.
slouken@6788
   719
 *
philipp@7175
   720
 *  \param window    The window to set a new maximum size.
aschiffler@6984
   721
 *  \param max_w     The maximum width of the window, must be >0
aschiffler@6984
   722
 *  \param max_h     The maximum height of the window, must be >0
aschiffler@6984
   723
 *
slouken@6788
   724
 *  \note You can't change the maximum size of a fullscreen window, it
slouken@6788
   725
 *        automatically matches the size of the display mode.
slouken@6788
   726
 *
slouken@6788
   727
 *  \sa SDL_GetWindowMaximumSize()
slouken@6788
   728
 *  \sa SDL_SetWindowMinimumSize()
slouken@6788
   729
 */
slouken@6788
   730
extern DECLSPEC void SDLCALL SDL_SetWindowMaximumSize(SDL_Window * window,
slouken@6788
   731
                                                      int max_w, int max_h);
slouken@7191
   732
slouken@6788
   733
/**
slouken@6788
   734
 *  \brief Get the maximum size of a window's client area.
slouken@7191
   735
 *
philipp@7175
   736
 *  \param window   The window to query.
aschiffler@6984
   737
 *  \param w        Pointer to variable for storing the maximum width, may be NULL
aschiffler@6984
   738
 *  \param h        Pointer to variable for storing the maximum height, may be NULL
slouken@6788
   739
 *
slouken@6788
   740
 *  \sa SDL_GetWindowMinimumSize()
slouken@6788
   741
 *  \sa SDL_SetWindowMaximumSize()
slouken@6788
   742
 */
slouken@6788
   743
extern DECLSPEC void SDLCALL SDL_GetWindowMaximumSize(SDL_Window * window,
slouken@6788
   744
                                                      int *w, int *h);
slouken@6788
   745
slouken@6788
   746
/**
icculus@6422
   747
 *  \brief Set the border state of a window.
icculus@6422
   748
 *
icculus@6422
   749
 *  This will add or remove the window's SDL_WINDOW_BORDERLESS flag and
icculus@6422
   750
 *  add or remove the border from the actual window. This is a no-op if the
icculus@6422
   751
 *  window's border already matches the requested state.
icculus@6422
   752
 *
icculus@6422
   753
 *  \param window The window of which to change the border state.
icculus@6422
   754
 *  \param bordered SDL_FALSE to remove border, SDL_TRUE to add border.
icculus@6422
   755
 *
icculus@6422
   756
 *  \note You can't change the border state of a fullscreen window.
slouken@7191
   757
 *
icculus@6422
   758
 *  \sa SDL_GetWindowFlags()
icculus@6422
   759
 */
icculus@6422
   760
extern DECLSPEC void SDLCALL SDL_SetWindowBordered(SDL_Window * window,
icculus@6422
   761
                                                   SDL_bool bordered);
icculus@6422
   762
icculus@6422
   763
/**
icculus@10385
   764
 *  \brief Set the user-resizable state of a window.
icculus@10385
   765
 *
icculus@10385
   766
 *  This will add or remove the window's SDL_WINDOW_RESIZABLE flag and
icculus@10385
   767
 *  allow/disallow user resizing of the window. This is a no-op if the
icculus@10385
   768
 *  window's resizable state already matches the requested state.
icculus@10385
   769
 *
icculus@10385
   770
 *  \param window The window of which to change the resizable state.
icculus@10385
   771
 *  \param resizable SDL_TRUE to allow resizing, SDL_FALSE to disallow.
icculus@10385
   772
 *
icculus@10385
   773
 *  \note You can't change the resizable state of a fullscreen window.
icculus@10385
   774
 *
icculus@10385
   775
 *  \sa SDL_GetWindowFlags()
icculus@10385
   776
 */
icculus@10385
   777
extern DECLSPEC void SDLCALL SDL_SetWindowResizable(SDL_Window * window,
icculus@10385
   778
                                                    SDL_bool resizable);
icculus@10385
   779
icculus@10385
   780
/**
slouken@4883
   781
 *  \brief Show a window.
slouken@7191
   782
 *
slouken@3407
   783
 *  \sa SDL_HideWindow()
slouken@1895
   784
 */
slouken@3685
   785
extern DECLSPEC void SDLCALL SDL_ShowWindow(SDL_Window * window);
slouken@1895
   786
slouken@1895
   787
/**
slouken@4883
   788
 *  \brief Hide a window.
slouken@7191
   789
 *
slouken@3407
   790
 *  \sa SDL_ShowWindow()
slouken@1895
   791
 */
slouken@3685
   792
extern DECLSPEC void SDLCALL SDL_HideWindow(SDL_Window * window);
slouken@1895
   793
slouken@1895
   794
/**
slouken@4883
   795
 *  \brief Raise a window above other windows and set the input focus.
slouken@1895
   796
 */
slouken@3685
   797
extern DECLSPEC void SDLCALL SDL_RaiseWindow(SDL_Window * window);
slouken@1895
   798
slouken@1895
   799
/**
slouken@4883
   800
 *  \brief Make a window as large as possible.
slouken@7191
   801
 *
slouken@3407
   802
 *  \sa SDL_RestoreWindow()
slouken@1895
   803
 */
slouken@3685
   804
extern DECLSPEC void SDLCALL SDL_MaximizeWindow(SDL_Window * window);
slouken@1895
   805
slouken@1895
   806
/**
slouken@4883
   807
 *  \brief Minimize a window to an iconic representation.
slouken@7191
   808
 *
slouken@3407
   809
 *  \sa SDL_RestoreWindow()
slouken@1895
   810
 */
slouken@3685
   811
extern DECLSPEC void SDLCALL SDL_MinimizeWindow(SDL_Window * window);
slouken@1895
   812
slouken@1895
   813
/**
slouken@3407
   814
 *  \brief Restore the size and position of a minimized or maximized window.
slouken@7191
   815
 *
slouken@3407
   816
 *  \sa SDL_MaximizeWindow()
slouken@3407
   817
 *  \sa SDL_MinimizeWindow()
slouken@1895
   818
 */
slouken@3685
   819
extern DECLSPEC void SDLCALL SDL_RestoreWindow(SDL_Window * window);
slouken@1895
   820
slouken@1895
   821
/**
slouken@4883
   822
 *  \brief Set a window's fullscreen state.
slouken@7191
   823
 *
slouken@3407
   824
 *  \return 0 on success, or -1 if setting the display mode failed.
slouken@7191
   825
 *
slouken@3522
   826
 *  \sa SDL_SetWindowDisplayMode()
slouken@3522
   827
 *  \sa SDL_GetWindowDisplayMode()
slouken@1895
   828
 */
slouken@3685
   829
extern DECLSPEC int SDLCALL SDL_SetWindowFullscreen(SDL_Window * window,
slouken@6755
   830
                                                    Uint32 flags);
slouken@1895
   831
slouken@1895
   832
/**
slouken@5546
   833
 *  \brief Get the SDL surface associated with the window.
slouken@5166
   834
 *
slouken@7191
   835
 *  \return The window's framebuffer surface, or NULL on error.
slouken@5546
   836
 *
slouken@5546
   837
 *  A new surface will be created with the optimal format for the window,
slouken@5546
   838
 *  if necessary. This surface will be freed when the window is destroyed.
slouken@5166
   839
 *
slouken@5166
   840
 *  \note You may not combine this with 3D or the rendering API on this window.
slouken@5166
   841
 *
slouken@5166
   842
 *  \sa SDL_UpdateWindowSurface()
slouken@5166
   843
 *  \sa SDL_UpdateWindowSurfaceRects()
slouken@5166
   844
 */
slouken@5166
   845
extern DECLSPEC SDL_Surface * SDLCALL SDL_GetWindowSurface(SDL_Window * window);
slouken@5166
   846
slouken@5166
   847
/**
slouken@5166
   848
 *  \brief Copy the window surface to the screen.
slouken@5166
   849
 *
slouken@5166
   850
 *  \return 0 on success, or -1 on error.
slouken@5166
   851
 *
slouken@5166
   852
 *  \sa SDL_GetWindowSurface()
slouken@5166
   853
 *  \sa SDL_UpdateWindowSurfaceRects()
slouken@5166
   854
 */
slouken@5166
   855
extern DECLSPEC int SDLCALL SDL_UpdateWindowSurface(SDL_Window * window);
slouken@5166
   856
slouken@5166
   857
/**
slouken@5166
   858
 *  \brief Copy a number of rectangles on the window surface to the screen.
slouken@5166
   859
 *
slouken@5166
   860
 *  \return 0 on success, or -1 on error.
slouken@5166
   861
 *
slouken@5166
   862
 *  \sa SDL_GetWindowSurface()
philipp@10221
   863
 *  \sa SDL_UpdateWindowSurface()
slouken@5166
   864
 */
slouken@5166
   865
extern DECLSPEC int SDLCALL SDL_UpdateWindowSurfaceRects(SDL_Window * window,
slouken@7014
   866
                                                         const SDL_Rect * rects,
slouken@5297
   867
                                                         int numrects);
slouken@5166
   868
slouken@5166
   869
/**
slouken@4883
   870
 *  \brief Set a window's input grab mode.
slouken@7191
   871
 *
philipp@7188
   872
 *  \param window The window for which the input grab mode should be set.
slouken@5403
   873
 *  \param grabbed This is SDL_TRUE to grab input, and SDL_FALSE to release input.
slouken@7191
   874
 *
icculus@9447
   875
 *  If the caller enables a grab while another window is currently grabbed,
icculus@9447
   876
 *  the other window loses its grab in favor of the caller's window.
icculus@9447
   877
 *
slouken@3407
   878
 *  \sa SDL_GetWindowGrab()
slouken@1895
   879
 */
slouken@3685
   880
extern DECLSPEC void SDLCALL SDL_SetWindowGrab(SDL_Window * window,
slouken@5403
   881
                                               SDL_bool grabbed);
slouken@1895
   882
slouken@1895
   883
/**
slouken@4883
   884
 *  \brief Get a window's input grab mode.
slouken@7191
   885
 *
slouken@5403
   886
 *  \return This returns SDL_TRUE if input is grabbed, and SDL_FALSE otherwise.
slouken@7191
   887
 *
slouken@3407
   888
 *  \sa SDL_SetWindowGrab()
slouken@1895
   889
 */
slouken@5403
   890
extern DECLSPEC SDL_bool SDLCALL SDL_GetWindowGrab(SDL_Window * window);
slouken@1895
   891
slouken@1895
   892
/**
icculus@9447
   893
 *  \brief Get the window that currently has an input grab enabled.
icculus@9447
   894
 *
icculus@9447
   895
 *  \return This returns the window if input is grabbed, and NULL otherwise.
icculus@9447
   896
 *
icculus@9447
   897
 *  \sa SDL_SetWindowGrab()
icculus@9447
   898
 */
icculus@9447
   899
extern DECLSPEC SDL_Window * SDLCALL SDL_GetGrabbedWindow(void);
icculus@9447
   900
icculus@9447
   901
/**
slouken@5466
   902
 *  \brief Set the brightness (gamma correction) for a window.
slouken@7191
   903
 *
slouken@5466
   904
 *  \return 0 on success, or -1 if setting the brightness isn't supported.
slouken@7191
   905
 *
slouken@5466
   906
 *  \sa SDL_GetWindowBrightness()
slouken@5466
   907
 *  \sa SDL_SetWindowGammaRamp()
slouken@5466
   908
 */
slouken@5466
   909
extern DECLSPEC int SDLCALL SDL_SetWindowBrightness(SDL_Window * window, float brightness);
slouken@5466
   910
slouken@5466
   911
/**
slouken@5466
   912
 *  \brief Get the brightness (gamma correction) for a window.
slouken@7191
   913
 *
slouken@5466
   914
 *  \return The last brightness value passed to SDL_SetWindowBrightness()
slouken@7191
   915
 *
slouken@5466
   916
 *  \sa SDL_SetWindowBrightness()
slouken@5466
   917
 */
slouken@5466
   918
extern DECLSPEC float SDLCALL SDL_GetWindowBrightness(SDL_Window * window);
slouken@5466
   919
slouken@5466
   920
/**
icculus@10025
   921
 *  \brief Set the opacity for a window
icculus@10025
   922
 *
icculus@10025
   923
 *  \param window The window which will be made transparent or opaque
icculus@10025
   924
 *  \param opacity Opacity (0.0f - transparent, 1.0f - opaque) This will be
icculus@10025
   925
 *                 clamped internally between 0.0f and 1.0f.
icculus@11365
   926
 *
icculus@10025
   927
 *  \return 0 on success, or -1 if setting the opacity isn't supported.
icculus@10025
   928
 *
icculus@10025
   929
 *  \sa SDL_GetWindowOpacity()
icculus@10025
   930
 */
icculus@10025
   931
extern DECLSPEC int SDLCALL SDL_SetWindowOpacity(SDL_Window * window, float opacity);
icculus@10025
   932
icculus@10025
   933
/**
icculus@10025
   934
 *  \brief Get the opacity of a window.
icculus@10025
   935
 *
icculus@10025
   936
 *  If transparency isn't supported on this platform, opacity will be reported
icculus@10025
   937
 *  as 1.0f without error.
icculus@10025
   938
 *
icculus@10025
   939
 *  \param window The window in question.
philipp@10035
   940
 *  \param out_opacity Opacity (0.0f - transparent, 1.0f - opaque)
icculus@10025
   941
 *
icculus@10025
   942
 *  \return 0 on success, or -1 on error (invalid window, etc).
icculus@10025
   943
 *
icculus@10025
   944
 *  \sa SDL_SetWindowOpacity()
icculus@10025
   945
 */
icculus@10025
   946
extern DECLSPEC int SDLCALL SDL_GetWindowOpacity(SDL_Window * window, float * out_opacity);
icculus@10025
   947
icculus@10025
   948
/**
philipp@10035
   949
 *  \brief Sets the window as a modal for another window (TODO: reconsider this function and/or its name)
icculus@10027
   950
 *
icculus@10027
   951
 *  \param modal_window The window that should be modal
icculus@10027
   952
 *  \param parent_window The parent window
icculus@11365
   953
 *
icculus@10027
   954
 *  \return 0 on success, or -1 otherwise.
icculus@10027
   955
 */
icculus@10027
   956
extern DECLSPEC int SDLCALL SDL_SetWindowModalFor(SDL_Window * modal_window, SDL_Window * parent_window);
icculus@10027
   957
icculus@10027
   958
/**
icculus@10026
   959
 *  \brief Explicitly sets input focus to the window.
icculus@10026
   960
 *
icculus@10026
   961
 *  You almost certainly want SDL_RaiseWindow() instead of this function. Use
icculus@10026
   962
 *  this with caution, as you might give focus to a window that's completely
icculus@10026
   963
 *  obscured by other windows.
icculus@10026
   964
 *
icculus@10026
   965
 *  \param window The window that should get the input focus
icculus@11365
   966
 *
icculus@10026
   967
 *  \return 0 on success, or -1 otherwise.
icculus@10026
   968
 *  \sa SDL_RaiseWindow()
icculus@10026
   969
 */
icculus@10026
   970
extern DECLSPEC int SDLCALL SDL_SetWindowInputFocus(SDL_Window * window);
icculus@10026
   971
icculus@10026
   972
/**
slouken@5466
   973
 *  \brief Set the gamma ramp for a window.
slouken@7191
   974
 *
philipp@7188
   975
 *  \param window The window for which the gamma ramp should be set.
slouken@5466
   976
 *  \param red The translation table for the red channel, or NULL.
slouken@5466
   977
 *  \param green The translation table for the green channel, or NULL.
slouken@5466
   978
 *  \param blue The translation table for the blue channel, or NULL.
slouken@7191
   979
 *
slouken@5466
   980
 *  \return 0 on success, or -1 if gamma ramps are unsupported.
slouken@7191
   981
 *
slouken@5466
   982
 *  Set the gamma translation table for the red, green, and blue channels
slouken@5466
   983
 *  of the video hardware.  Each table is an array of 256 16-bit quantities,
slouken@5466
   984
 *  representing a mapping between the input and output for that channel.
slouken@5466
   985
 *  The input is the index into the array, and the output is the 16-bit
slouken@5466
   986
 *  gamma value at that index, scaled to the output color precision.
slouken@5466
   987
 *
slouken@5504
   988
 *  \sa SDL_GetWindowGammaRamp()
slouken@5466
   989
 */
slouken@5466
   990
extern DECLSPEC int SDLCALL SDL_SetWindowGammaRamp(SDL_Window * window,
slouken@5466
   991
                                                   const Uint16 * red,
slouken@5466
   992
                                                   const Uint16 * green,
slouken@5466
   993
                                                   const Uint16 * blue);
slouken@5466
   994
slouken@5466
   995
/**
slouken@5466
   996
 *  \brief Get the gamma ramp for a window.
slouken@7191
   997
 *
philipp@7188
   998
 *  \param window The window from which the gamma ramp should be queried.
slouken@7191
   999
 *  \param red   A pointer to a 256 element array of 16-bit quantities to hold
slouken@5466
  1000
 *               the translation table for the red channel, or NULL.
slouken@7191
  1001
 *  \param green A pointer to a 256 element array of 16-bit quantities to hold
slouken@5466
  1002
 *               the translation table for the green channel, or NULL.
slouken@7191
  1003
 *  \param blue  A pointer to a 256 element array of 16-bit quantities to hold
slouken@5466
  1004
 *               the translation table for the blue channel, or NULL.
slouken@7191
  1005
 *
slouken@5466
  1006
 *  \return 0 on success, or -1 if gamma ramps are unsupported.
slouken@7191
  1007
 *
slouken@5466
  1008
 *  \sa SDL_SetWindowGammaRamp()
slouken@5466
  1009
 */
slouken@5466
  1010
extern DECLSPEC int SDLCALL SDL_GetWindowGammaRamp(SDL_Window * window,
slouken@5466
  1011
                                                   Uint16 * red,
slouken@5466
  1012
                                                   Uint16 * green,
slouken@5466
  1013
                                                   Uint16 * blue);
slouken@5466
  1014
icculus@8937
  1015
/**
icculus@8937
  1016
 *  \brief Possible return values from the SDL_HitTest callback.
icculus@8937
  1017
 *
icculus@8937
  1018
 *  \sa SDL_HitTest
icculus@8937
  1019
 */
icculus@8935
  1020
typedef enum
icculus@8935
  1021
{
icculus@8935
  1022
    SDL_HITTEST_NORMAL,  /**< Region is normal. No special properties. */
icculus@8935
  1023
    SDL_HITTEST_DRAGGABLE,  /**< Region can drag entire window. */
ionut@8946
  1024
    SDL_HITTEST_RESIZE_TOPLEFT,
ionut@8946
  1025
    SDL_HITTEST_RESIZE_TOP,
ionut@8946
  1026
    SDL_HITTEST_RESIZE_TOPRIGHT,
ionut@8946
  1027
    SDL_HITTEST_RESIZE_RIGHT,
ionut@8946
  1028
    SDL_HITTEST_RESIZE_BOTTOMRIGHT,
ionut@8946
  1029
    SDL_HITTEST_RESIZE_BOTTOM,
ionut@8946
  1030
    SDL_HITTEST_RESIZE_BOTTOMLEFT,
ionut@8946
  1031
    SDL_HITTEST_RESIZE_LEFT
icculus@8935
  1032
} SDL_HitTestResult;
icculus@8935
  1033
icculus@8937
  1034
/**
icculus@8937
  1035
 *  \brief Callback used for hit-testing.
icculus@8937
  1036
 *
icculus@8937
  1037
 *  \sa SDL_SetWindowHitTest
icculus@8937
  1038
 */
icculus@8935
  1039
typedef SDL_HitTestResult (SDLCALL *SDL_HitTest)(SDL_Window *win,
icculus@8935
  1040
                                                 const SDL_Point *area,
icculus@8935
  1041
                                                 void *data);
icculus@8935
  1042
slouken@5466
  1043
/**
icculus@8935
  1044
 *  \brief Provide a callback that decides if a window region has special properties.
icculus@8931
  1045
 *
icculus@8935
  1046
 *  Normally windows are dragged and resized by decorations provided by the
icculus@8935
  1047
 *  system window manager (a title bar, borders, etc), but for some apps, it
icculus@8935
  1048
 *  makes sense to drag them from somewhere else inside the window itself; for
icculus@8935
  1049
 *  example, one might have a borderless window that wants to be draggable
icculus@8935
  1050
 *  from any part, or simulate its own title bar, etc.
icculus@8931
  1051
 *
icculus@8935
  1052
 *  This function lets the app provide a callback that designates pieces of
icculus@8935
  1053
 *  a given window as special. This callback is run during event processing
icculus@8935
  1054
 *  if we need to tell the OS to treat a region of the window specially; the
icculus@8935
  1055
 *  use of this callback is known as "hit testing."
icculus@8931
  1056
 *
icculus@8931
  1057
 *  Mouse input may not be delivered to your application if it is within
icculus@8935
  1058
 *  a special area; the OS will often apply that input to moving the window or
icculus@8935
  1059
 *  resizing the window and not deliver it to the application.
icculus@8935
  1060
 *
icculus@8935
  1061
 *  Specifying NULL for a callback disables hit-testing. Hit-testing is
icculus@8935
  1062
 *  disabled by default.
icculus@8931
  1063
 *
icculus@8931
  1064
 *  Platforms that don't support this functionality will return -1
icculus@8935
  1065
 *  unconditionally, even if you're attempting to disable hit-testing.
icculus@8931
  1066
 *
icculus@8937
  1067
 *  Your callback may fire at any time, and its firing does not indicate any
icculus@8937
  1068
 *  specific behavior (for example, on Windows, this certainly might fire
icculus@8937
  1069
 *  when the OS is deciding whether to drag your window, but it fires for lots
icculus@8937
  1070
 *  of other reasons, too, some unrelated to anything you probably care about
icculus@8937
  1071
 *  _and when the mouse isn't actually at the location it is testing_).
icculus@8937
  1072
 *  Since this can fire at any time, you should try to keep your callback
icculus@8937
  1073
 *  efficient, devoid of allocations, etc.
icculus@8935
  1074
 *
icculus@8935
  1075
 *  \param window The window to set hit-testing on.
icculus@8935
  1076
 *  \param callback The callback to call when doing a hit-test.
icculus@8935
  1077
 *  \param callback_data An app-defined void pointer passed to the callback.
icculus@8931
  1078
 *  \return 0 on success, -1 on error (including unsupported).
icculus@8931
  1079
 */
icculus@8935
  1080
extern DECLSPEC int SDLCALL SDL_SetWindowHitTest(SDL_Window * window,
icculus@8935
  1081
                                                 SDL_HitTest callback,
icculus@8935
  1082
                                                 void *callback_data);
icculus@8931
  1083
icculus@8931
  1084
/**
slouken@3407
  1085
 *  \brief Destroy a window.
slouken@1895
  1086
 */
slouken@3685
  1087
extern DECLSPEC void SDLCALL SDL_DestroyWindow(SDL_Window * window);
slouken@1895
  1088
slouken@0
  1089
slouken@3025
  1090
/**
philipp@10175
  1091
 *  \brief Returns whether the screensaver is currently enabled (default off).
slouken@7191
  1092
 *
slouken@3407
  1093
 *  \sa SDL_EnableScreenSaver()
slouken@3407
  1094
 *  \sa SDL_DisableScreenSaver()
slouken@3025
  1095
 */
couriersud@3033
  1096
extern DECLSPEC SDL_bool SDLCALL SDL_IsScreenSaverEnabled(void);
slouken@3025
  1097
slouken@3025
  1098
/**
slouken@3407
  1099
 *  \brief Allow the screen to be blanked by a screensaver
slouken@7191
  1100
 *
slouken@3407
  1101
 *  \sa SDL_IsScreenSaverEnabled()
slouken@3407
  1102
 *  \sa SDL_DisableScreenSaver()
slouken@3025
  1103
 */
couriersud@3033
  1104
extern DECLSPEC void SDLCALL SDL_EnableScreenSaver(void);
slouken@3025
  1105
slouken@3025
  1106
/**
slouken@3407
  1107
 *  \brief Prevent the screen from being blanked by a screensaver
slouken@7191
  1108
 *
slouken@3407
  1109
 *  \sa SDL_IsScreenSaverEnabled()
slouken@3407
  1110
 *  \sa SDL_EnableScreenSaver()
slouken@3025
  1111
 */
couriersud@3033
  1112
extern DECLSPEC void SDLCALL SDL_DisableScreenSaver(void);
slouken@3025
  1113
slouken@0
  1114
slouken@3407
  1115
/**
slouken@3407
  1116
 *  \name OpenGL support functions
slouken@3407
  1117
 */
gabomdq@7678
  1118
/* @{ */
slouken@0
  1119
slouken@1895
  1120
/**
slouken@3407
  1121
 *  \brief Dynamically load an OpenGL library.
slouken@7191
  1122
 *
slouken@7191
  1123
 *  \param path The platform dependent OpenGL library name, or NULL to open the
slouken@3407
  1124
 *              default OpenGL library.
slouken@7191
  1125
 *
slouken@3407
  1126
 *  \return 0 on success, or -1 if the library couldn't be loaded.
slouken@7191
  1127
 *
slouken@3407
  1128
 *  This should be done after initializing the video driver, but before
slouken@3407
  1129
 *  creating any OpenGL windows.  If no OpenGL library is loaded, the default
slouken@3407
  1130
 *  library will be loaded upon creation of the first OpenGL window.
slouken@7191
  1131
 *
slouken@3407
  1132
 *  \note If you do this, you need to retrieve all of the GL functions used in
slouken@3407
  1133
 *        your program from the dynamic library using SDL_GL_GetProcAddress().
slouken@7191
  1134
 *
slouken@3407
  1135
 *  \sa SDL_GL_GetProcAddress()
slouken@3407
  1136
 *  \sa SDL_GL_UnloadLibrary()
slouken@0
  1137
 */
slouken@337
  1138
extern DECLSPEC int SDLCALL SDL_GL_LoadLibrary(const char *path);
slouken@0
  1139
slouken@1895
  1140
/**
slouken@3407
  1141
 *  \brief Get the address of an OpenGL function.
slouken@0
  1142
 */
slouken@1895
  1143
extern DECLSPEC void *SDLCALL SDL_GL_GetProcAddress(const char *proc);
slouken@0
  1144
slouken@1895
  1145
/**
slouken@3407
  1146
 *  \brief Unload the OpenGL library previously loaded by SDL_GL_LoadLibrary().
slouken@7191
  1147
 *
slouken@3407
  1148
 *  \sa SDL_GL_LoadLibrary()
slouken@3057
  1149
 */
slouken@3057
  1150
extern DECLSPEC void SDLCALL SDL_GL_UnloadLibrary(void);
slouken@3057
  1151
slouken@3057
  1152
/**
slouken@7191
  1153
 *  \brief Return true if an OpenGL extension is supported for the current
slouken@3407
  1154
 *         context.
slouken@1926
  1155
 */
slouken@1926
  1156
extern DECLSPEC SDL_bool SDLCALL SDL_GL_ExtensionSupported(const char
slouken@1926
  1157
                                                           *extension);
slouken@1926
  1158
slouken@1926
  1159
/**
jorgen@8145
  1160
 *  \brief Reset all previously set OpenGL context attributes to their default values
jorgen@8145
  1161
 */
jorgen@8145
  1162
extern DECLSPEC void SDLCALL SDL_GL_ResetAttributes(void);
jorgen@8145
  1163
jorgen@8145
  1164
/**
slouken@3407
  1165
 *  \brief Set an OpenGL window attribute before window creation.
slouken@11171
  1166
 *
slouken@11171
  1167
 *  \return 0 on success, or -1 if the attribute could not be set.
slouken@0
  1168
 */
slouken@337
  1169
extern DECLSPEC int SDLCALL SDL_GL_SetAttribute(SDL_GLattr attr, int value);
slouken@0
  1170
slouken@1895
  1171
/**
slouken@3407
  1172
 *  \brief Get the actual value for an attribute from the current context.
slouken@11171
  1173
 *
slouken@11171
  1174
 *  \return 0 on success, or -1 if the attribute could not be retrieved.
slouken@11171
  1175
 *          The integer at \c value will be modified in either case.
slouken@0
  1176
 */
slouken@1936
  1177
extern DECLSPEC int SDLCALL SDL_GL_GetAttribute(SDL_GLattr attr, int *value);
slouken@0
  1178
slouken@1895
  1179
/**
slouken@7191
  1180
 *  \brief Create an OpenGL context for use with an OpenGL window, and make it
slouken@3407
  1181
 *         current.
slouken@7191
  1182
 *
slouken@3407
  1183
 *  \sa SDL_GL_DeleteContext()
slouken@1895
  1184
 */
slouken@3685
  1185
extern DECLSPEC SDL_GLContext SDLCALL SDL_GL_CreateContext(SDL_Window *
slouken@3685
  1186
                                                           window);
slouken@1895
  1187
slouken@1895
  1188
/**
slouken@3407
  1189
 *  \brief Set up an OpenGL context for rendering into an OpenGL window.
slouken@7191
  1190
 *
slouken@3407
  1191
 *  \note The context must have been created with a compatible window.
slouken@1895
  1192
 */
slouken@3685
  1193
extern DECLSPEC int SDLCALL SDL_GL_MakeCurrent(SDL_Window * window,
slouken@1895
  1194
                                               SDL_GLContext context);
slouken@1895
  1195
slouken@1895
  1196
/**
slouken@7412
  1197
 *  \brief Get the currently active OpenGL window.
slouken@7412
  1198
 */
slouken@7412
  1199
extern DECLSPEC SDL_Window* SDLCALL SDL_GL_GetCurrentWindow(void);
slouken@7412
  1200
slouken@7412
  1201
/**
slouken@7412
  1202
 *  \brief Get the currently active OpenGL context.
slouken@7412
  1203
 */
slouken@7412
  1204
extern DECLSPEC SDL_GLContext SDLCALL SDL_GL_GetCurrentContext(void);
slouken@7412
  1205
slouken@7412
  1206
/**
slime73@9995
  1207
 *  \brief Get the size of a window's underlying drawable in pixels (for use
slime73@9995
  1208
 *         with glViewport).
urkle@7746
  1209
 *
philipp@7752
  1210
 *  \param window   Window from which the drawable size should be queried
slime73@9995
  1211
 *  \param w        Pointer to variable for storing the width in pixels, may be NULL
slime73@9995
  1212
 *  \param h        Pointer to variable for storing the height in pixels, may be NULL
urkle@7746
  1213
 *
philipp@8777
  1214
 * This may differ from SDL_GetWindowSize() if we're rendering to a high-DPI
urkle@7746
  1215
 * drawable, i.e. the window was created with SDL_WINDOW_ALLOW_HIGHDPI on a
urkle@7746
  1216
 * platform with high-DPI support (Apple calls this "Retina"), and not disabled
urkle@7746
  1217
 * by the SDL_HINT_VIDEO_HIGHDPI_DISABLED hint.
urkle@7746
  1218
 *
urkle@7746
  1219
 *  \sa SDL_GetWindowSize()
urkle@7746
  1220
 *  \sa SDL_CreateWindow()
urkle@7746
  1221
 */
urkle@7746
  1222
extern DECLSPEC void SDLCALL SDL_GL_GetDrawableSize(SDL_Window * window, int *w,
urkle@7746
  1223
                                                    int *h);
urkle@7746
  1224
urkle@7746
  1225
/**
slouken@3407
  1226
 *  \brief Set the swap interval for the current OpenGL context.
slouken@7191
  1227
 *
slouken@3407
  1228
 *  \param interval 0 for immediate updates, 1 for updates synchronized with the
icculus@6382
  1229
 *                  vertical retrace. If the system supports it, you may
icculus@6382
  1230
 *                  specify -1 to allow late swaps to happen immediately
icculus@6382
  1231
 *                  instead of waiting for the next retrace.
slouken@7191
  1232
 *
slouken@3407
  1233
 *  \return 0 on success, or -1 if setting the swap interval is not supported.
slouken@7191
  1234
 *
slouken@3407
  1235
 *  \sa SDL_GL_GetSwapInterval()
slouken@1895
  1236
 */
slouken@1895
  1237
extern DECLSPEC int SDLCALL SDL_GL_SetSwapInterval(int interval);
slouken@1895
  1238
slouken@1895
  1239
/**
slouken@3407
  1240
 *  \brief Get the swap interval for the current OpenGL context.
slouken@7191
  1241
 *
slouken@7191
  1242
 *  \return 0 if there is no vertical retrace synchronization, 1 if the buffer
icculus@6382
  1243
 *          swap is synchronized with the vertical retrace, and -1 if late
icculus@6382
  1244
 *          swaps happen immediately instead of waiting for the next retrace.
icculus@6382
  1245
 *          If the system can't determine the swap interval, or there isn't a
icculus@6382
  1246
 *          valid current context, this will return 0 as a safe default.
slouken@7191
  1247
 *
slouken@3407
  1248
 *  \sa SDL_GL_SetSwapInterval()
slouken@1895
  1249
 */
slouken@1895
  1250
extern DECLSPEC int SDLCALL SDL_GL_GetSwapInterval(void);
slouken@1895
  1251
slouken@1895
  1252
/**
slouken@7191
  1253
 * \brief Swap the OpenGL buffers for a window, if double-buffering is
slouken@3407
  1254
 *        supported.
slouken@0
  1255
 */
slouken@10700
  1256
extern DECLSPEC void SDLCALL SDL_GL_SwapWindow(SDL_Window * window);
slouken@0
  1257
slouken@1895
  1258
/**
slouken@3407
  1259
 *  \brief Delete an OpenGL context.
slouken@7191
  1260
 *
slouken@3407
  1261
 *  \sa SDL_GL_CreateContext()
slouken@0
  1262
 */
slouken@1895
  1263
extern DECLSPEC void SDLCALL SDL_GL_DeleteContext(SDL_GLContext context);
slouken@0
  1264
gabomdq@7678
  1265
/* @} *//* OpenGL support functions */
slouken@3407
  1266
slouken@0
  1267
slouken@0
  1268
/* Ends C function definitions when using C++ */
slouken@0
  1269
#ifdef __cplusplus
slouken@0
  1270
}
slouken@0
  1271
#endif
slouken@0
  1272
#include "close_code.h"
slouken@0
  1273
slouken@10638
  1274
#endif /* SDL_video_h_ */
slouken@1895
  1275
slouken@1895
  1276
/* vi: set ts=4 sw=4 expandtab: */