Merge branch 'master' into multi-display-support

Conflicts:
	src/fullscreen.c
	src/win32_window.c
	src/x11_fullscreen.c
This commit is contained in:
Marcel Metz 2011-10-07 00:35:37 -04:00
commit ac57be060d
11 changed files with 97 additions and 84 deletions

View File

@ -228,6 +228,7 @@ int _glfwPlatformInit(void)
// Save the original gamma ramp // Save the original gamma ramp
_glfwLibrary.originalRampSize = CGDisplayGammaTableCapacity(CGMainDisplayID()); _glfwLibrary.originalRampSize = CGDisplayGammaTableCapacity(CGMainDisplayID());
_glfwPlatformGetGammaRamp(&_glfwLibrary.originalRamp); _glfwPlatformGetGammaRamp(&_glfwLibrary.originalRamp);
_glfwLibrary.currentRamp = _glfwLibrary.originalRamp;
return GL_TRUE; return GL_TRUE;
} }

View File

@ -118,9 +118,18 @@ GLFWAPI int glfwGetVideoModes(GLFWmonitor handle, GLFWvidmode* list, int maxcoun
return 0; return 0;
} }
if (maxcount <= 0 || list == NULL) if (maxcount <= 0)
{ {
// TODO: Figure out if this is an error _glfwSetError(GLFW_INVALID_VALUE,
"glfwGetVideoModes: Parameter 'maxcount' must be "
"greater than zero");
return 0;
}
if (list == NULL)
{
_glfwSetError(GLFW_INVALID_VALUE,
"glfwGetVideoModes: Parameter 'list' cannot be NULL");
return 0; return 0;
} }

View File

@ -59,6 +59,10 @@
#include "config.h" #include "config.h"
#include "../include/GL/glfw3.h" #include "../include/GL/glfw3.h"
// This path may need to be changed if you build GLFW using your own setup
// We ship and use our own copy of glext.h since GLFW uses fairly new
// extensions and not all operating systems come with an up-to-date version
#include "../support/GL/glext.h" #include "../support/GL/glext.h"
#if defined(_GLFW_COCOA_NSGL) #if defined(_GLFW_COCOA_NSGL)

View File

@ -163,6 +163,7 @@ int _glfwPlatformInit(void)
// Save the original gamma ramp // Save the original gamma ramp
_glfwLibrary.originalRampSize = 256; _glfwLibrary.originalRampSize = 256;
_glfwPlatformGetGammaRamp(&_glfwLibrary.originalRamp); _glfwPlatformGetGammaRamp(&_glfwLibrary.originalRamp);
_glfwLibrary.currentRamp = _glfwLibrary.originalRamp;
_glfwInitMonitors(); _glfwInitMonitors();

View File

@ -43,6 +43,9 @@
#include <windows.h> #include <windows.h>
#include <mmsystem.h> #include <mmsystem.h>
// This path may need to be changed if you build GLFW using your own setup
// We ship and use our own copy of wglext.h since GLFW uses fairly new
// extensions and not all operating systems come with an up-to-date version
#include "../support/GL/wglext.h" #include "../support/GL/wglext.h"

View File

@ -33,6 +33,7 @@
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
//======================================================================== //========================================================================
// Convert BPP to RGB bits based on "best guess" // Convert BPP to RGB bits based on "best guess"
//======================================================================== //========================================================================
@ -145,48 +146,6 @@ static void setForegroundWindow(HWND hWnd)
} }
//========================================================================
// Hide mouse cursor (lock it)
//========================================================================
static void hideMouseCursor(_GLFWwindow* window)
{
ShowCursor(FALSE);
}
//========================================================================
// Show mouse cursor (unlock it)
//========================================================================
static void showMouseCursor(_GLFWwindow* window)
{
// Un-capture cursor
ReleaseCapture();
// Release the cursor from the window
ClipCursor(NULL);
ShowCursor(TRUE);
}
//========================================================================
// Capture mouse cursor
//========================================================================
static void captureMouseCursor(_GLFWwindow* window)
{
RECT ClipWindowRect;
// Clip cursor to the window
if (GetWindowRect(window->Win32.handle, &ClipWindowRect))
ClipCursor(&ClipWindowRect);
// Capture cursor to user window
SetCapture(window->Win32.handle);
}
//======================================================================== //========================================================================
// Returns the specified attribute of the specified pixel format // Returns the specified attribute of the specified pixel format
// NOTE: Do not call this unless we have found WGL_ARB_pixel_format // NOTE: Do not call this unless we have found WGL_ARB_pixel_format
@ -513,6 +472,50 @@ static GLboolean createContext(_GLFWwindow* window,
} }
//========================================================================
// Hide mouse cursor
//========================================================================
static void hideMouseCursor(_GLFWwindow* window)
{
}
//========================================================================
// Capture mouse cursor
//========================================================================
static void captureMouseCursor(_GLFWwindow* window)
{
RECT ClipWindowRect;
ShowCursor(FALSE);
// Clip cursor to the window
if (GetWindowRect(window->Win32.handle, &ClipWindowRect))
ClipCursor(&ClipWindowRect);
// Capture cursor to user window
SetCapture(window->Win32.handle);
}
//========================================================================
// Show mouse cursor
//========================================================================
static void showMouseCursor(_GLFWwindow* window)
{
// Un-capture cursor
ReleaseCapture();
// Release the cursor from the window
ClipCursor(NULL);
ShowCursor(TRUE);
}
//======================================================================== //========================================================================
// Translates a Windows key to the corresponding GLFW key // Translates a Windows key to the corresponding GLFW key
//======================================================================== //========================================================================
@ -1903,6 +1906,7 @@ void _glfwPlatformSetMouseCursorPos(_GLFWwindow* window, int x, int y)
SetCursorPos(pos.x, pos.y); SetCursorPos(pos.x, pos.y);
} }
//======================================================================== //========================================================================
// Set physical mouse cursor mode // Set physical mouse cursor mode
//======================================================================== //========================================================================

View File

@ -45,21 +45,16 @@
int _glfwGetClosestVideoMode(int screen, int* width, int* height, int* rate) int _glfwGetClosestVideoMode(int screen, int* width, int* height, int* rate)
{ {
int i, match, bestmatch; int i, match, bestmatch;
if (_glfwLibrary.X11.RandR.available)
{
#if defined(_GLFW_HAS_XRANDR) #if defined(_GLFW_HAS_XRANDR)
int sizecount, bestsize; int sizecount, bestsize;
int ratecount, bestrate; int ratecount, bestrate;
short* ratelist; short* ratelist;
XRRScreenConfiguration* sc; XRRScreenConfiguration* sc;
XRRScreenSize* sizelist; XRRScreenSize* sizelist;
#endif /*_GLFW_HAS_XRANDR*/
#if defined(_GLFW_HAS_XF86VIDMODE)
XF86VidModeModeInfo** modelist;
int bestmode, modecount;
#endif /*_GLFW_HAS_XF86VIDMODE*/
if (_glfwLibrary.X11.RandR.available)
{
#if defined(_GLFW_HAS_XRANDR)
sc = XRRGetScreenInfo(_glfwLibrary.X11.display, sc = XRRGetScreenInfo(_glfwLibrary.X11.display,
RootWindow(_glfwLibrary.X11.display, screen)); RootWindow(_glfwLibrary.X11.display, screen));
@ -108,7 +103,6 @@ int _glfwGetClosestVideoMode(int screen, int* width, int* height, int* rate)
} }
} }
// Free modelist
XRRFreeScreenConfigInfo(sc); XRRFreeScreenConfigInfo(sc);
if (bestsize != -1) if (bestsize != -1)
@ -118,6 +112,9 @@ int _glfwGetClosestVideoMode(int screen, int* width, int* height, int* rate)
else if (_glfwLibrary.X11.VidMode.available) else if (_glfwLibrary.X11.VidMode.available)
{ {
#if defined(_GLFW_HAS_XF86VIDMODE) #if defined(_GLFW_HAS_XF86VIDMODE)
XF86VidModeModeInfo** modelist;
int bestmode, modecount;
// Get a list of all available display modes // Get a list of all available display modes
XF86VidModeGetAllModeLines(_glfwLibrary.X11.display, screen, XF86VidModeGetAllModeLines(_glfwLibrary.X11.display, screen,
&modecount, &modelist); &modecount, &modelist);
@ -145,7 +142,6 @@ int _glfwGetClosestVideoMode(int screen, int* width, int* height, int* rate)
*height = modelist[bestmode]->vdisplay; *height = modelist[bestmode]->vdisplay;
} }
// Free modelist
XFree(modelist); XFree(modelist);
if (bestmode != -1) if (bestmode != -1)
@ -167,18 +163,12 @@ int _glfwGetClosestVideoMode(int screen, int* width, int* height, int* rate)
void _glfwSetVideoModeMODE(int screen, int mode, int rate) void _glfwSetVideoModeMODE(int screen, int mode, int rate)
{ {
#if defined(_GLFW_HAS_XRANDR)
XRRScreenConfiguration* sc;
Window root;
#endif /*_GLFW_HAS_XRANDR*/
#if defined(_GLFW_HAS_XF86VIDMODE)
XF86VidModeModeInfo **modelist;
int modecount;
#endif /*_GLFW_HAS_XF86VIDMODE*/
if (_glfwLibrary.X11.RandR.available) if (_glfwLibrary.X11.RandR.available)
{ {
#if defined(_GLFW_HAS_XRANDR) #if defined(_GLFW_HAS_XRANDR)
XRRScreenConfiguration* sc;
Window root;
root = RootWindow(_glfwLibrary.X11.display, screen); root = RootWindow(_glfwLibrary.X11.display, screen);
sc = XRRGetScreenInfo(_glfwLibrary.X11.display, root); sc = XRRGetScreenInfo(_glfwLibrary.X11.display, root);
@ -220,6 +210,9 @@ void _glfwSetVideoModeMODE(int screen, int mode, int rate)
else if (_glfwLibrary.X11.VidMode.available) else if (_glfwLibrary.X11.VidMode.available)
{ {
#if defined(_GLFW_HAS_XF86VIDMODE) #if defined(_GLFW_HAS_XF86VIDMODE)
XF86VidModeModeInfo **modelist;
int modecount;
// Get a list of all available display modes // Get a list of all available display modes
XF86VidModeGetAllModeLines(_glfwLibrary.X11.display, screen, XF86VidModeGetAllModeLines(_glfwLibrary.X11.display, screen,
&modecount, &modelist); &modecount, &modelist);
@ -229,8 +222,7 @@ void _glfwSetVideoModeMODE(int screen, int mode, int rate)
XF86VidModeLockModeSwitch(_glfwLibrary.X11.display, screen, 0); XF86VidModeLockModeSwitch(_glfwLibrary.X11.display, screen, 0);
// Change the video mode to the desired mode // Change the video mode to the desired mode
XF86VidModeSwitchToMode(_glfwLibrary.X11.display, screen, XF86VidModeSwitchToMode(_glfwLibrary.X11.display, screen, modelist[mode]);
modelist[mode]);
// Set viewport to upper left corner (where our window will be) // Set viewport to upper left corner (where our window will be)
XF86VidModeSetViewPort(_glfwLibrary.X11.display, screen, 0, 0); XF86VidModeSetViewPort(_glfwLibrary.X11.display, screen, 0, 0);
@ -245,7 +237,6 @@ void _glfwSetVideoModeMODE(int screen, int mode, int rate)
_glfwLibrary.X11.FS.modeChanged = GL_TRUE; _glfwLibrary.X11.FS.modeChanged = GL_TRUE;
} }
// Free mode list
XFree(modelist); XFree(modelist);
#endif /*_GLFW_HAS_XF86VIDMODE*/ #endif /*_GLFW_HAS_XF86VIDMODE*/
} }
@ -353,16 +344,13 @@ int _glfwPlatformGetVideoModes(_GLFWmonitor* monitor, GLFWvidmode* list, int max
int viscount, rgbcount, rescount; int viscount, rgbcount, rescount;
int* rgbarray; int* rgbarray;
struct _glfwResolution* resarray; struct _glfwResolution* resarray;
#if defined(_GLFW_HAS_XF86VIDMODE)
XF86VidModeModeInfo** modelist;
int modecount, width, height;
#endif /*_GLFW_HAS_XF86VIDMODE*/
// Get list of visuals // Get list of visuals
vislist = XGetVisualInfo(_glfwLibrary.X11.display, 0, &dummy, &viscount); vislist = XGetVisualInfo(_glfwLibrary.X11.display, 0, &dummy, &viscount);
if (vislist == NULL) if (vislist == NULL)
{ {
// TODO: Figure out which error this is _glfwSetError(GLFW_PLATFORM_ERROR,
"X11/GLX: Failed to retrieve the available visuals");
return 0; return 0;
} }
@ -443,6 +431,9 @@ int _glfwPlatformGetVideoModes(_GLFWmonitor* monitor, GLFWvidmode* list, int max
else if (_glfwLibrary.X11.VidMode.available) else if (_glfwLibrary.X11.VidMode.available)
{ {
#if defined(_GLFW_HAS_XF86VIDMODE) #if defined(_GLFW_HAS_XF86VIDMODE)
XF86VidModeModeInfo** modelist;
int modecount, width, height;
XF86VidModeGetAllModeLines(_glfwLibrary.X11.display, screen, &modecount, &modelist); XF86VidModeGetAllModeLines(_glfwLibrary.X11.display, screen, &modecount, &modelist);
resarray = (struct _glfwResolution*) _glfwMalloc(sizeof(struct _glfwResolution) * modecount); resarray = (struct _glfwResolution*) _glfwMalloc(sizeof(struct _glfwResolution) * modecount);
@ -495,7 +486,6 @@ int _glfwPlatformGetVideoModes(_GLFWmonitor* monitor, GLFWvidmode* list, int max
} }
} }
// Free visuals list
XFree(vislist); XFree(vislist);
_glfwFree(resarray); _glfwFree(resarray);
@ -512,15 +502,9 @@ int _glfwPlatformGetVideoModes(_GLFWmonitor* monitor, GLFWvidmode* list, int max
void _glfwPlatformGetDesktopMode(GLFWvidmode* mode) void _glfwPlatformGetDesktopMode(GLFWvidmode* mode)
{ {
int bpp; int bpp;
#if defined(_GLFW_HAS_XF86VIDMODE)
XF86VidModeModeInfo** modelist;
int modecount;
#endif /*_GLFW_HAS_XF86VIDMODE*/
// Get display depth // Get and split display depth
bpp = DefaultDepth(_glfwLibrary.X11.display, _glfwLibrary.X11.screen); bpp = DefaultDepth(_glfwLibrary.X11.display, _glfwLibrary.X11.screen);
// Convert BPP to RGB bits
_glfwSplitBPP(bpp, &mode->redBits, &mode->greenBits, &mode->blueBits); _glfwSplitBPP(bpp, &mode->redBits, &mode->greenBits, &mode->blueBits);
if (_glfwLibrary.X11.FS.modeChanged) if (_glfwLibrary.X11.FS.modeChanged)

View File

@ -502,6 +502,7 @@ static void initGammaRamp(void)
// Save the original gamma ramp // Save the original gamma ramp
_glfwPlatformGetGammaRamp(&_glfwLibrary.originalRamp); _glfwPlatformGetGammaRamp(&_glfwLibrary.originalRamp);
_glfwLibrary.currentRamp = _glfwLibrary.originalRamp;
} }

View File

@ -41,6 +41,9 @@
#define GLX_GLXEXT_LEGACY #define GLX_GLXEXT_LEGACY
#include <GL/glx.h> #include <GL/glx.h>
// This path may need to be changed if you build GLFW using your own setup
// We ship and use our own copy of glxext.h since GLFW uses fairly new
// extensions and not all operating systems come with an up-to-date version
#include "../support/GL/glxext.h" #include "../support/GL/glxext.h"

View File

@ -62,7 +62,7 @@ static void window_size_callback(GLFWwindow window, int width, int height)
static int window_close_callback(GLFWwindow window) static int window_close_callback(GLFWwindow window)
{ {
printf("Close callback triggered\n"); printf("Close callback triggered\n");
window_handle = NULL; closed = GL_TRUE;
return 0; return 0;
} }

View File

@ -66,7 +66,10 @@ int main(void)
glfwSetWindowPos(windows[i], 100 + (i & 1) * 300, 100 + (i >> 1) * 300); glfwSetWindowPos(windows[i], 100 + (i & 1) * 300, 100 + (i >> 1) * 300);
glClearColor((GLclampf) (i & 1), (GLclampf) (i >> 1), 0.0, 0.0); glClearColor((GLclampf) (i & 1),
(GLclampf) (i >> 1),
i ? 0.0 : 1.0,
0.0);
} }
while (running) while (running)