Merge branch 'master' into EGL

Conflicts:
	readme.html
	src/win32_platform.h
	src/x11_platform.h
This commit is contained in:
Camilla Berglund 2012-12-02 16:17:59 +01:00
commit da02844457
11 changed files with 138 additions and 8 deletions

View File

@ -522,6 +522,10 @@ extern "C" {
/*! @brief The number of samples used for default framebuffer multisampling. /*! @brief The number of samples used for default framebuffer multisampling.
*/ */
#define GLFW_FSAA_SAMPLES 0x0002100E #define GLFW_FSAA_SAMPLES 0x0002100E
/*! @brief @c GL_TRUE if the framebuffer should be sRGB capable, or @c GL_FALSE
* otherwise.
*/
#define GLFW_SRGB_CAPABLE 0x0002100F
/*! @brief The @link clients client API @endlink to create a context for. /*! @brief The @link clients client API @endlink to create a context for.
*/ */
@ -710,6 +714,16 @@ typedef void* GLFWwindow;
*/ */
typedef void (* GLFWerrorfun)(int,const char*); typedef void (* GLFWerrorfun)(int,const char*);
/*! @brief The function signature for window position callbacks.
* @param[in] window The window that the user moved.
* @param[in] x The new x-coordinate, in pixels, of the upper-left corner of
* the client area of the window.
* @param[in] y The new y-coordinate, in pixels, of the upper-left corner of
* the client area of the window.
* @ingroup window
*/
typedef void (* GLFWwindowposfun)(GLFWwindow,int,int);
/*! @brief The function signature for window resize callbacks. /*! @brief The function signature for window resize callbacks.
* @param[in] window The window that the user resized. * @param[in] window The window that the user resized.
* @param[in] width The new width, in pixels, of the window. * @param[in] width The new width, in pixels, of the window.
@ -948,7 +962,7 @@ GLFWAPI void glfwGetDesktopMode(GLFWvidmode* mode);
/*! @brief Sets the system gamma ramp to one generated from the specified /*! @brief Sets the system gamma ramp to one generated from the specified
* exponent. * exponent.
* @param[in] The desired exponent. * @param[in] gamma The desired exponent.
* @ingroup gamma * @ingroup gamma
*/ */
GLFWAPI void glfwSetGamma(float gamma); GLFWAPI void glfwSetGamma(float gamma);
@ -1014,6 +1028,9 @@ GLFWAPI void glfwDefaultWindowHints(void);
* The @ref GLFW_FSAA_SAMPLES hint specifies the desired number of samples to * The @ref GLFW_FSAA_SAMPLES hint specifies the desired number of samples to
* use for multisampling. * use for multisampling.
* *
* The @ref GLFW_SRGB_CAPABLE hint specifies whether the framebuffer should be
* sRGB capable.
*
* The @ref GLFW_CLIENT_API hint specifies which client API to create the * The @ref GLFW_CLIENT_API hint specifies which client API to create the
* context for. Possible values are @ref GLFW_OPENGL_API and @ref * context for. Possible values are @ref GLFW_OPENGL_API and @ref
* GLFW_OPENGL_ES_API. * GLFW_OPENGL_ES_API.
@ -1042,7 +1059,8 @@ GLFWAPI void glfwDefaultWindowHints(void);
* used by the OpenGL context. * used by the OpenGL context.
* *
* The @ref GLFW_RESIZABLE hint specifies whether the window will be resizable * The @ref GLFW_RESIZABLE hint specifies whether the window will be resizable
* by the user. This hint is ignored for fullscreen windows. * by the user. The window will still be resizable using the @ref
* glfwSetWindowSize function. This hint is ignored for fullscreen windows.
* *
* The @ref GLFW_VISIBLE hint specifies whether the window will be initially * The @ref GLFW_VISIBLE hint specifies whether the window will be initially
* visible. This hint is ignored for fullscreen windows. * visible. This hint is ignored for fullscreen windows.
@ -1053,7 +1071,9 @@ GLFWAPI void glfwDefaultWindowHints(void);
* Some window hints are hard constraints. These must match the available * Some window hints are hard constraints. These must match the available
* capabilities @em exactly for window and context creation to succeed. Hints * capabilities @em exactly for window and context creation to succeed. Hints
* that are not hard constraints are matched as closely as possible, but the * that are not hard constraints are matched as closely as possible, but the
* resulting window and context may differ from what these hints requested. * resulting window and context may differ from what these hints requested. To
* find out the actual properties of the created window and context, use the
* @ref glfwGetWindowParam function.
* *
* The following window hints are hard constraints: * The following window hints are hard constraints:
* @arg @ref GLFW_STEREO * @arg @ref GLFW_STEREO
@ -1278,11 +1298,21 @@ GLFWAPI void glfwSetWindowUserPointer(GLFWwindow window, void* pointer);
*/ */
GLFWAPI void* glfwGetWindowUserPointer(GLFWwindow window); GLFWAPI void* glfwGetWindowUserPointer(GLFWwindow window);
/*! @brief Sets the position callback for the specified window.
* @param[in] window The window whose callback to set.
* @param[in] cbfun The new callback, or @c NULL to remove the currently set
* callback.
* @ingroup window
*/
GLFWAPI void glfwSetWindowPosCallback(GLFWwindow window, GLFWwindowposfun cbfun);
/*! @brief Sets the size callback for the specified window. /*! @brief Sets the size callback for the specified window.
* @param[in] window The window whose callback to set. * @param[in] window The window whose callback to set.
* @param[in] cbfun The new callback, or @c NULL to remove the currently set * @param[in] cbfun The new callback, or @c NULL to remove the currently set
* callback. * callback.
* @ingroup window * @ingroup window
*
* This callback is called when the window is resized.
*/ */
GLFWAPI void glfwSetWindowSizeCallback(GLFWwindow window, GLFWwindowsizefun cbfun); GLFWAPI void glfwSetWindowSizeCallback(GLFWwindow window, GLFWwindowsizefun cbfun);
@ -1291,6 +1321,14 @@ GLFWAPI void glfwSetWindowSizeCallback(GLFWwindow window, GLFWwindowsizefun cbfu
* @param[in] cbfun The new callback, or @c NULL to remove the currently set * @param[in] cbfun The new callback, or @c NULL to remove the currently set
* callback. * callback.
* @ingroup window * @ingroup window
*
* This callback is called when the user attempts to close the window, i.e.
* clicks the window's close widget or, on Mac OS X, selects @b Quit from the
* application menu. Calling @ref glfwDestroyWindow does not cause this
* callback to be called.
*
* The return value of the close callback becomes the new value of the @ref
* GLFW_CLOSE_REQUESTED window parameter.
*/ */
GLFWAPI void glfwSetWindowCloseCallback(GLFWwindow window, GLFWwindowclosefun cbfun); GLFWAPI void glfwSetWindowCloseCallback(GLFWwindow window, GLFWwindowclosefun cbfun);
@ -1299,6 +1337,13 @@ GLFWAPI void glfwSetWindowCloseCallback(GLFWwindow window, GLFWwindowclosefun cb
* @param[in] cbfun The new callback, or @c NULL to remove the currently set * @param[in] cbfun The new callback, or @c NULL to remove the currently set
* callback. * callback.
* @ingroup window * @ingroup window
*
* This callback is called when the client area of the window needs to be
* redrawn, for example if the window has been exposed after having been
* covered by another window.
*
* @note On compositing window systems such as Mac OS X, where the window
* contents are saved off-screen, this callback may never be called.
*/ */
GLFWAPI void glfwSetWindowRefreshCallback(GLFWwindow window, GLFWwindowrefreshfun cbfun); GLFWAPI void glfwSetWindowRefreshCallback(GLFWwindow window, GLFWwindowrefreshfun cbfun);
@ -1307,6 +1352,8 @@ GLFWAPI void glfwSetWindowRefreshCallback(GLFWwindow window, GLFWwindowrefreshfu
* @param[in] cbfun The new callback, or @c NULL to remove the currently set * @param[in] cbfun The new callback, or @c NULL to remove the currently set
* callback. * callback.
* @ingroup window * @ingroup window
*
* This callback is called when the window gains or loses focus.
*/ */
GLFWAPI void glfwSetWindowFocusCallback(GLFWwindow window, GLFWwindowfocusfun cbfun); GLFWAPI void glfwSetWindowFocusCallback(GLFWwindow window, GLFWwindowfocusfun cbfun);
@ -1315,6 +1362,8 @@ GLFWAPI void glfwSetWindowFocusCallback(GLFWwindow window, GLFWwindowfocusfun cb
* @param[in] cbfun The new callback, or @c NULL to remove the currently set * @param[in] cbfun The new callback, or @c NULL to remove the currently set
* callback. * callback.
* @ingroup window * @ingroup window
*
* This callback is called when the window is iconified or restored.
*/ */
GLFWAPI void glfwSetWindowIconifyCallback(GLFWwindow window, GLFWwindowiconifyfun cbfun); GLFWAPI void glfwSetWindowIconifyCallback(GLFWwindow window, GLFWwindowiconifyfun cbfun);
@ -1413,7 +1462,7 @@ GLFWAPI void glfwGetScrollOffset(GLFWwindow window, double* xoffset, double* yof
* set callback. * set callback.
* @ingroup input * @ingroup input
* *
* @note The key callback deals with physical keys, with @link keys tokens * @remarks The key callback deals with physical keys, with @link keys tokens
* @endlink named after their use on the standard US keyboard layout. If you * @endlink named after their use on the standard US keyboard layout. If you
* want to input text, use the Unicode character callback instead. * want to input text, use the Unicode character callback instead.
*/ */
@ -1424,8 +1473,8 @@ GLFWAPI void glfwSetKeyCallback(GLFWwindow window, GLFWkeyfun cbfun);
* the currently set callback. * the currently set callback.
* @ingroup input * @ingroup input
* *
* @note The Unicode character callback is for text input. If you want to know * @remarks The Unicode character callback is for text input. If you want to
* whether a specific key was pressed or released, use the key callback. * know whether a specific key was pressed or released, use the key callback.
*/ */
GLFWAPI void glfwSetCharCallback(GLFWwindow window, GLFWcharfun cbfun); GLFWAPI void glfwSetCharCallback(GLFWwindow window, GLFWcharfun cbfun);
@ -1440,6 +1489,9 @@ GLFWAPI void glfwSetMouseButtonCallback(GLFWwindow window, GLFWmousebuttonfun cb
* @param[in] cbfun The new cursor position callback, or @c NULL to remove the * @param[in] cbfun The new cursor position callback, or @c NULL to remove the
* currently set callback. * currently set callback.
* @ingroup input * @ingroup input
*
* @remarks The position is relative to the upper-left corner of the client
* area of the window.
*/ */
GLFWAPI void glfwSetCursorPosCallback(GLFWwindow window, GLFWcursorposfun cbfun); GLFWAPI void glfwSetCursorPosCallback(GLFWwindow window, GLFWcursorposfun cbfun);
@ -1492,6 +1544,8 @@ GLFWAPI int glfwGetJoystickButtons(int joy, unsigned char* buttons, int numbutto
* @param[in] string A UTF-8 encoded string. * @param[in] string A UTF-8 encoded string.
* @ingroup clipboard * @ingroup clipboard
* *
* @note This function may only be called from the main thread.
*
* @sa glfwGetClipboardString * @sa glfwGetClipboardString
*/ */
GLFWAPI void glfwSetClipboardString(GLFWwindow window, const char* string); GLFWAPI void glfwSetClipboardString(GLFWwindow window, const char* string);
@ -1502,6 +1556,8 @@ GLFWAPI void glfwSetClipboardString(GLFWwindow window, const char* string);
* if that format was unavailable. * if that format was unavailable.
* @ingroup clipboard * @ingroup clipboard
* *
* @note This function may only be called from the main thread.
*
* @note The returned string is valid only until the next call to @ref * @note The returned string is valid only until the next call to @ref
* glfwGetClipboardString or @ref glfwSetClipboardString. * glfwGetClipboardString or @ref glfwSetClipboardString.
* *

View File

@ -274,17 +274,19 @@ version of GLFW.</p>
<li>Added <code>glfwSetErrorCallback</code> function and <code>GLFWerrorfun</code> type for receiving more specific and/or nested errors</li> <li>Added <code>glfwSetErrorCallback</code> function and <code>GLFWerrorfun</code> type for receiving more specific and/or nested errors</li>
<li>Added <code>glfwSetWindowUserPointer</code> and <code>glfwGetWindowUserPointer</code> functions for per-window user pointers</li> <li>Added <code>glfwSetWindowUserPointer</code> and <code>glfwGetWindowUserPointer</code> functions for per-window user pointers</li>
<li>Added <code>glfwGetVersionString</code> function for determining which code paths were enabled at compile time</li> <li>Added <code>glfwGetVersionString</code> function for determining which code paths were enabled at compile time</li>
<li>Added <code>glfwGetWindowPos</code> function for querying the position of the specified window</li> <li>Added <code>glfwSetWindowPosCallback</code> function and <code>GLFWwindowposfun</code> type for reciving window position events</li>
<li>Added <code>glfwSetWindowFocusCallback</code> function and <code>GLFWwindowfocusfun</code> type for receiving window focus events</li> <li>Added <code>glfwSetWindowFocusCallback</code> function and <code>GLFWwindowfocusfun</code> type for receiving window focus events</li>
<li>Added <code>glfwSetWindowIconifyCallback</code> function and <code>GLFWwindowiconifyfun</code> type for receiving window iconification events</li> <li>Added <code>glfwSetWindowIconifyCallback</code> function and <code>GLFWwindowiconifyfun</code> type for receiving window iconification events</li>
<li>Added <code>glfwGetClipboardString</code> and <code>glfwSetClipboardString</code> functions for interacting with the system clipboard</li> <li>Added <code>glfwGetClipboardString</code> and <code>glfwSetClipboardString</code> functions for interacting with the system clipboard</li>
<li>Added <code>glfwGetCurrentContext</code> function for retrieving the window whose OpenGL context is current</li> <li>Added <code>glfwGetCurrentContext</code> function for retrieving the window whose OpenGL context is current</li>
<li>Added <code>GLFW_CLIENT_API</code> window hint for creating contexts for APIs other than desktop OpenGL</li> <li>Added <code>GLFW_SRGB_CAPABLE</code> for requesting sRGB capable framebuffers</li>
<li>Added <code>GLFW_CLIENT_API</code>, <code>GLFW_OPENGL_API</code> and <code>GLFW_OPENGL_ES_API</code> for selecting client API</li>
<li>Added <code>GLFW_OPENGL_ROBUSTNESS</code> window hint and associated strategy tokens for <code>GL_ARB_robustness</code> support</li> <li>Added <code>GLFW_OPENGL_ROBUSTNESS</code> window hint and associated strategy tokens for <code>GL_ARB_robustness</code> support</li>
<li>Added <code>GLFW_OPENGL_REVISION</code> window parameter to make up for removal of <code>glfwGetGLVersion</code></li> <li>Added <code>GLFW_OPENGL_REVISION</code> window parameter to make up for removal of <code>glfwGetGLVersion</code></li>
<li>Added <code>GLFW_INCLUDE_GLCOREARB</code> macro for including <code>glcorearb.h</code> instead of <code>gl.h</code></li> <li>Added <code>GLFW_INCLUDE_GLCOREARB</code> macro for including <code>glcorearb.h</code> instead of <code>gl.h</code></li>
<li>Added <code>GLFW_INCLUDE_ES2</code> macro for telling the GLFW header to include the OpenGL ES 2.0 header instead of <code>gl.h</code></li> <li>Added <code>GLFW_INCLUDE_ES2</code> macro for telling the GLFW header to include the OpenGL ES 2.0 header instead of <code>gl.h</code></li>
<li>Added <code>GLFW_VISIBLE</code> window hint and parameter for controlling and polling window visibility</li> <li>Added <code>GLFW_VISIBLE</code> window hint and parameter for controlling and polling window visibility</li>
<li>Added <code>GLFW_POSITION_X</code> and <code>GLFW_POSITION_Y</code> window hints and parameter for controlling and polling window position</li>
<li>Added <code>windows</code> simple multi-window test program</li> <li>Added <code>windows</code> simple multi-window test program</li>
<li>Added <code>sharing</code> simple OpenGL object sharing test program</li> <li>Added <code>sharing</code> simple OpenGL object sharing test program</li>
<li>Added <code>modes</code> video mode enumeration and setting test program</li> <li>Added <code>modes</code> video mode enumeration and setting test program</li>

View File

@ -835,6 +835,9 @@ static GLboolean createContext(_GLFWwindow* window,
ADD_ATTR2(NSOpenGLPFASamples, fbconfig->samples); ADD_ATTR2(NSOpenGLPFASamples, fbconfig->samples);
} }
// NOTE: All NSOpenGLPixelFormats on the relevant cards support sRGB
// frambuffer, so there's no need (and no way) to request it
ADD_ATTR(0); ADD_ATTR(0);
#undef ADD_ATTR #undef ADD_ATTR

View File

@ -218,6 +218,12 @@ const _GLFWfbconfig* _glfwChooseFBConfig(const _GLFWfbconfig* desired,
extraDiff += (desired->samples - current->samples) * extraDiff += (desired->samples - current->samples) *
(desired->samples - current->samples); (desired->samples - current->samples);
} }
if (desired->sRGB)
{
if (!current->sRGB)
extraDiff++;
}
} }
// Figure out if the current one is better than the best one found so far // Figure out if the current one is better than the best one found so far

View File

@ -190,6 +190,11 @@ static _GLFWfbconfig* getFBConfigs(_GLFWwindow* window, unsigned int* found)
else else
f->samples = 0; f->samples = 0;
if (_glfwLibrary.GLX.ARB_framebuffer_sRGB)
f->sRGB = getFBConfigAttrib(window, fbconfigs[i], GLX_FRAMEBUFFER_SRGB_CAPABLE_ARB);
else
f->sRGB = GL_FALSE;
f->platformID = (GLFWintptr) getFBConfigAttrib(window, fbconfigs[i], GLX_FBCONFIG_ID); f->platformID = (GLFWintptr) getFBConfigAttrib(window, fbconfigs[i], GLX_FBCONFIG_ID);
(*found)++; (*found)++;
@ -527,6 +532,9 @@ int _glfwInitOpenGL(void)
if (_glfwPlatformExtensionSupported("GLX_ARB_multisample")) if (_glfwPlatformExtensionSupported("GLX_ARB_multisample"))
_glfwLibrary.GLX.ARB_multisample = GL_TRUE; _glfwLibrary.GLX.ARB_multisample = GL_TRUE;
if (_glfwPlatformExtensionSupported("GLX_ARB_framebuffer_sRGB"))
_glfwLibrary.GLX.ARB_framebuffer_sRGB = GL_TRUE;
if (_glfwPlatformExtensionSupported("GLX_ARB_create_context")) if (_glfwPlatformExtensionSupported("GLX_ARB_create_context"))
{ {
_glfwLibrary.GLX.CreateContextAttribsARB = (PFNGLXCREATECONTEXTATTRIBSARBPROC) _glfwLibrary.GLX.CreateContextAttribsARB = (PFNGLXCREATECONTEXTATTRIBSARBPROC)

View File

@ -105,6 +105,7 @@ typedef struct _GLFWlibraryGLX
GLboolean EXT_swap_control; GLboolean EXT_swap_control;
GLboolean MESA_swap_control; GLboolean MESA_swap_control;
GLboolean ARB_multisample; GLboolean ARB_multisample;
GLboolean ARB_framebuffer_sRGB;
GLboolean ARB_create_context; GLboolean ARB_create_context;
GLboolean ARB_create_context_profile; GLboolean ARB_create_context_profile;
GLboolean ARB_create_context_robustness; GLboolean ARB_create_context_robustness;

View File

@ -100,6 +100,7 @@ struct _GLFWhints
GLboolean resizable; GLboolean resizable;
GLboolean visible; GLboolean visible;
int samples; int samples;
GLboolean sRGB;
int clientAPI; int clientAPI;
int glMajor; int glMajor;
int glMinor; int glMinor;
@ -160,6 +161,7 @@ struct _GLFWfbconfig
int auxBuffers; int auxBuffers;
GLboolean stereo; GLboolean stereo;
int samples; int samples;
GLboolean sRGB;
GLFWintptr platformID; GLFWintptr platformID;
}; };
@ -199,6 +201,7 @@ struct _GLFWwindow
int glRobustness; int glRobustness;
PFNGLGETSTRINGIPROC GetStringi; PFNGLGETSTRINGIPROC GetStringi;
GLFWwindowposfun windowPosCallback;
GLFWwindowsizefun windowSizeCallback; GLFWwindowsizefun windowSizeCallback;
GLFWwindowclosefun windowCloseCallback; GLFWwindowclosefun windowCloseCallback;
GLFWwindowrefreshfun windowRefreshCallback; GLFWwindowrefreshfun windowRefreshCallback;

View File

@ -72,6 +72,7 @@ static void initWGLExtensions(_GLFWwindow* window)
// This needs to include every extension used below except for // This needs to include every extension used below except for
// WGL_ARB_extensions_string and WGL_EXT_extensions_string // WGL_ARB_extensions_string and WGL_EXT_extensions_string
window->WGL.ARB_multisample = GL_FALSE; window->WGL.ARB_multisample = GL_FALSE;
window->WGL.ARB_framebuffer_sRGB = GL_FALSE;
window->WGL.ARB_create_context = GL_FALSE; window->WGL.ARB_create_context = GL_FALSE;
window->WGL.ARB_create_context_profile = GL_FALSE; window->WGL.ARB_create_context_profile = GL_FALSE;
window->WGL.EXT_create_context_es2_profile = GL_FALSE; window->WGL.EXT_create_context_es2_profile = GL_FALSE;
@ -92,6 +93,9 @@ static void initWGLExtensions(_GLFWwindow* window)
if (_glfwPlatformExtensionSupported("WGL_ARB_multisample")) if (_glfwPlatformExtensionSupported("WGL_ARB_multisample"))
window->WGL.ARB_multisample = GL_TRUE; window->WGL.ARB_multisample = GL_TRUE;
if (_glfwPlatformExtensionSupported("WGL_ARB_framebuffer_sRGB"))
window->WGL.ARB_framebuffer_sRGB = GL_TRUE;
if (_glfwPlatformExtensionSupported("WGL_ARB_create_context")) if (_glfwPlatformExtensionSupported("WGL_ARB_create_context"))
{ {
window->WGL.CreateContextAttribsARB = (PFNWGLCREATECONTEXTATTRIBSARBPROC) window->WGL.CreateContextAttribsARB = (PFNWGLCREATECONTEXTATTRIBSARBPROC)
@ -246,6 +250,11 @@ static _GLFWfbconfig* getFBConfigs(_GLFWwindow* window, unsigned int* found)
f->samples = getPixelFormatAttrib(window, i, WGL_SAMPLES_ARB); f->samples = getPixelFormatAttrib(window, i, WGL_SAMPLES_ARB);
else else
f->samples = 0; f->samples = 0;
if (window->WGL.ARB_framebuffer_sRGB)
f->sRGB = getPixelFormatAttrib(window, i, WGL_FRAMEBUFFER_SRGB_CAPABLE_ARB);
else
f->sRGB = GL_FALSE;
} }
else else
{ {
@ -293,6 +302,9 @@ static _GLFWfbconfig* getFBConfigs(_GLFWwindow* window, unsigned int* found)
// PFD pixel formats do not support FSAA // PFD pixel formats do not support FSAA
f->samples = 0; f->samples = 0;
// PFD pixel formats do not support sRGB
f->sRGB = GL_FALSE;
} }
f->platformID = i; f->platformID = i;

View File

@ -62,6 +62,7 @@ typedef struct _GLFWcontextWGL
PFNWGLCREATECONTEXTATTRIBSARBPROC CreateContextAttribsARB; PFNWGLCREATECONTEXTATTRIBSARBPROC CreateContextAttribsARB;
GLboolean EXT_swap_control; GLboolean EXT_swap_control;
GLboolean ARB_multisample; GLboolean ARB_multisample;
GLboolean ARB_framebuffer_sRGB;
GLboolean ARB_pixel_format; GLboolean ARB_pixel_format;
GLboolean ARB_create_context; GLboolean ARB_create_context;
GLboolean ARB_create_context_profile; GLboolean ARB_create_context_profile;

View File

@ -119,8 +119,14 @@ void _glfwInputWindowFocus(_GLFWwindow* window, GLboolean focused)
void _glfwInputWindowPos(_GLFWwindow* window, int x, int y) void _glfwInputWindowPos(_GLFWwindow* window, int x, int y)
{ {
if (window->positionX == x && window->positionY == y)
return;
window->positionX = x; window->positionX = x;
window->positionY = y; window->positionY = y;
if (window->windowPosCallback)
window->windowPosCallback(window, x, y);
} }
@ -231,6 +237,7 @@ GLFWAPI GLFWwindow glfwCreateWindow(int width, int height,
fbconfig.auxBuffers = Max(_glfwLibrary.hints.auxBuffers, 0); fbconfig.auxBuffers = Max(_glfwLibrary.hints.auxBuffers, 0);
fbconfig.stereo = _glfwLibrary.hints.stereo ? GL_TRUE : GL_FALSE; fbconfig.stereo = _glfwLibrary.hints.stereo ? GL_TRUE : GL_FALSE;
fbconfig.samples = Max(_glfwLibrary.hints.samples, 0); fbconfig.samples = Max(_glfwLibrary.hints.samples, 0);
fbconfig.sRGB = _glfwLibrary.hints.sRGB ? GL_TRUE : GL_FALSE;
// Set up desired window config // Set up desired window config
wndconfig.mode = mode; wndconfig.mode = mode;
@ -440,6 +447,9 @@ GLFWAPI void glfwWindowHint(int target, int hint)
case GLFW_FSAA_SAMPLES: case GLFW_FSAA_SAMPLES:
_glfwLibrary.hints.samples = hint; _glfwLibrary.hints.samples = hint;
break; break;
case GLFW_SRGB_CAPABLE:
_glfwLibrary.hints.sRGB = hint;
break;
case GLFW_CLIENT_API: case GLFW_CLIENT_API:
_glfwLibrary.hints.clientAPI = hint; _glfwLibrary.hints.clientAPI = hint;
break; break;
@ -764,6 +774,24 @@ GLFWAPI void* glfwGetWindowUserPointer(GLFWwindow handle)
} }
//========================================================================
// Set callback function for window position changes
//========================================================================
GLFWAPI void glfwSetWindowPosCallback(GLFWwindow handle, GLFWwindowposfun cbfun)
{
_GLFWwindow* window = (_GLFWwindow*) handle;
if (!_glfwInitialized)
{
_glfwSetError(GLFW_NOT_INITIALIZED, NULL);
return;
}
window->windowPosCallback = cbfun;
}
//======================================================================== //========================================================================
// Set callback function for window size changes // Set callback function for window size changes
//======================================================================== //========================================================================

View File

@ -218,6 +218,15 @@ static const char* get_character_string(int character)
return result; return result;
} }
static void window_pos_callback(GLFWwindow window, int x, int y)
{
printf("%08x at %0.3f: Window position: %i %i\n",
counter++,
glfwGetTime(),
x,
y);
}
static void window_size_callback(GLFWwindow window, int width, int height) static void window_size_callback(GLFWwindow window, int width, int height)
{ {
printf("%08x at %0.3f: Window size: %i %i\n", printf("%08x at %0.3f: Window size: %i %i\n",
@ -354,6 +363,7 @@ int main(void)
printf("Window opened\n"); printf("Window opened\n");
glfwSetWindowPosCallback(window, window_pos_callback);
glfwSetWindowSizeCallback(window, window_size_callback); glfwSetWindowSizeCallback(window, window_size_callback);
glfwSetWindowCloseCallback(window, window_close_callback); glfwSetWindowCloseCallback(window, window_close_callback);
glfwSetWindowRefreshCallback(window, window_refresh_callback); glfwSetWindowRefreshCallback(window, window_refresh_callback);