Re-used config structs for hints.

This commit is contained in:
Camilla Berglund 2015-06-07 18:14:07 +02:00
parent 58c2c10cdb
commit 96b3f17d02
2 changed files with 63 additions and 120 deletions

View File

@ -323,36 +323,10 @@ struct _GLFWcursor
struct _GLFWlibrary struct _GLFWlibrary
{ {
struct { struct {
int redBits; _GLFWfbconfig framebuffer;
int greenBits; _GLFWwndconfig window;
int blueBits; _GLFWctxconfig context;
int alphaBits; int refreshRate;
int depthBits;
int stencilBits;
int accumRedBits;
int accumGreenBits;
int accumBlueBits;
int accumAlphaBits;
int auxBuffers;
int stereo;
int resizable;
int visible;
int decorated;
int focused;
int autoIconify;
int floating;
int samples;
int sRGB;
int refreshRate;
int doublebuffer;
int api;
int major;
int minor;
int forward;
int debug;
int profile;
int robustness;
int release;
} hints; } hints;
double cursorPosX, cursorPosY; double cursorPosX, cursorPosY;

View File

@ -132,45 +132,15 @@ GLFWAPI GLFWwindow* glfwCreateWindow(int width, int height,
return NULL; return NULL;
} }
// Set up desired framebuffer config fbconfig = _glfw.hints.framebuffer;
fbconfig.redBits = _glfw.hints.redBits; ctxconfig = _glfw.hints.context;
fbconfig.greenBits = _glfw.hints.greenBits; wndconfig = _glfw.hints.window;
fbconfig.blueBits = _glfw.hints.blueBits;
fbconfig.alphaBits = _glfw.hints.alphaBits;
fbconfig.depthBits = _glfw.hints.depthBits;
fbconfig.stencilBits = _glfw.hints.stencilBits;
fbconfig.accumRedBits = _glfw.hints.accumRedBits;
fbconfig.accumGreenBits = _glfw.hints.accumGreenBits;
fbconfig.accumBlueBits = _glfw.hints.accumBlueBits;
fbconfig.accumAlphaBits = _glfw.hints.accumAlphaBits;
fbconfig.auxBuffers = _glfw.hints.auxBuffers;
fbconfig.stereo = _glfw.hints.stereo ? GL_TRUE : GL_FALSE;
fbconfig.samples = _glfw.hints.samples;
fbconfig.sRGB = _glfw.hints.sRGB;
fbconfig.doublebuffer = _glfw.hints.doublebuffer ? GL_TRUE : GL_FALSE;
// Set up desired window config wndconfig.width = width;
wndconfig.width = width; wndconfig.height = height;
wndconfig.height = height; wndconfig.title = title;
wndconfig.title = title; wndconfig.monitor = (_GLFWmonitor*) monitor;
wndconfig.resizable = _glfw.hints.resizable ? GL_TRUE : GL_FALSE; ctxconfig.share = (_GLFWwindow*) share;
wndconfig.visible = _glfw.hints.visible ? GL_TRUE : GL_FALSE;
wndconfig.decorated = _glfw.hints.decorated ? GL_TRUE : GL_FALSE;
wndconfig.focused = _glfw.hints.focused ? GL_TRUE : GL_FALSE;
wndconfig.autoIconify = _glfw.hints.autoIconify ? GL_TRUE : GL_FALSE;
wndconfig.floating = _glfw.hints.floating ? GL_TRUE : GL_FALSE;
wndconfig.monitor = (_GLFWmonitor*) monitor;
// Set up desired context config
ctxconfig.api = _glfw.hints.api;
ctxconfig.major = _glfw.hints.major;
ctxconfig.minor = _glfw.hints.minor;
ctxconfig.forward = _glfw.hints.forward ? GL_TRUE : GL_FALSE;
ctxconfig.debug = _glfw.hints.debug ? GL_TRUE : GL_FALSE;
ctxconfig.profile = _glfw.hints.profile;
ctxconfig.robustness = _glfw.hints.robustness;
ctxconfig.release = _glfw.hints.release;
ctxconfig.share = (_GLFWwindow*) share;
// Check the OpenGL bits of the window config // Check the OpenGL bits of the window config
if (!_glfwIsValidContextConfig(&ctxconfig)) if (!_glfwIsValidContextConfig(&ctxconfig))
@ -180,19 +150,18 @@ GLFWAPI GLFWwindow* glfwCreateWindow(int width, int height,
window->next = _glfw.windowListHead; window->next = _glfw.windowListHead;
_glfw.windowListHead = window; _glfw.windowListHead = window;
window->videoMode.width = width;
window->videoMode.height = height;
window->videoMode.redBits = fbconfig.redBits;
window->videoMode.greenBits = fbconfig.greenBits;
window->videoMode.blueBits = fbconfig.blueBits;
window->videoMode.refreshRate = _glfw.hints.refreshRate;
if (wndconfig.monitor) if (wndconfig.monitor)
{ {
wndconfig.resizable = GL_TRUE; wndconfig.resizable = GL_TRUE;
wndconfig.visible = GL_TRUE; wndconfig.visible = GL_TRUE;
wndconfig.focused = GL_TRUE; wndconfig.focused = GL_TRUE;
// Set up desired video mode
window->videoMode.width = width;
window->videoMode.height = height;
window->videoMode.redBits = _glfw.hints.redBits;
window->videoMode.greenBits = _glfw.hints.greenBits;
window->videoMode.blueBits = _glfw.hints.blueBits;
window->videoMode.refreshRate = _glfw.hints.refreshRate;
} }
// Transfer window hints that are persistent settings and not // Transfer window hints that are persistent settings and not
@ -272,29 +241,29 @@ void glfwDefaultWindowHints(void)
memset(&_glfw.hints, 0, sizeof(_glfw.hints)); memset(&_glfw.hints, 0, sizeof(_glfw.hints));
// The default is OpenGL with minimum version 1.0 // The default is OpenGL with minimum version 1.0
_glfw.hints.api = GLFW_OPENGL_API; _glfw.hints.context.api = GLFW_OPENGL_API;
_glfw.hints.major = 1; _glfw.hints.context.major = 1;
_glfw.hints.minor = 0; _glfw.hints.context.minor = 0;
// The default is a focused, visible, resizable window with decorations // The default is a focused, visible, resizable window with decorations
_glfw.hints.resizable = GL_TRUE; _glfw.hints.window.resizable = GL_TRUE;
_glfw.hints.visible = GL_TRUE; _glfw.hints.window.visible = GL_TRUE;
_glfw.hints.decorated = GL_TRUE; _glfw.hints.window.decorated = GL_TRUE;
_glfw.hints.focused = GL_TRUE; _glfw.hints.window.focused = GL_TRUE;
_glfw.hints.autoIconify = GL_TRUE; _glfw.hints.window.autoIconify = GL_TRUE;
// The default is to select the highest available refresh rate // The default is to select the highest available refresh rate
_glfw.hints.refreshRate = GLFW_DONT_CARE; _glfw.hints.refreshRate = GLFW_DONT_CARE;
// The default is 24 bits of color, 24 bits of depth and 8 bits of stencil, // The default is 24 bits of color, 24 bits of depth and 8 bits of stencil,
// double buffered // double buffered
_glfw.hints.redBits = 8; _glfw.hints.framebuffer.redBits = 8;
_glfw.hints.greenBits = 8; _glfw.hints.framebuffer.greenBits = 8;
_glfw.hints.blueBits = 8; _glfw.hints.framebuffer.blueBits = 8;
_glfw.hints.alphaBits = 8; _glfw.hints.framebuffer.alphaBits = 8;
_glfw.hints.depthBits = 24; _glfw.hints.framebuffer.depthBits = 24;
_glfw.hints.stencilBits = 8; _glfw.hints.framebuffer.stencilBits = 8;
_glfw.hints.doublebuffer = GL_TRUE; _glfw.hints.framebuffer.doublebuffer = GL_TRUE;
} }
GLFWAPI void glfwWindowHint(int target, int hint) GLFWAPI void glfwWindowHint(int target, int hint)
@ -304,94 +273,94 @@ GLFWAPI void glfwWindowHint(int target, int hint)
switch (target) switch (target)
{ {
case GLFW_RED_BITS: case GLFW_RED_BITS:
_glfw.hints.redBits = hint; _glfw.hints.framebuffer.redBits = hint;
break; break;
case GLFW_GREEN_BITS: case GLFW_GREEN_BITS:
_glfw.hints.greenBits = hint; _glfw.hints.framebuffer.greenBits = hint;
break; break;
case GLFW_BLUE_BITS: case GLFW_BLUE_BITS:
_glfw.hints.blueBits = hint; _glfw.hints.framebuffer.blueBits = hint;
break; break;
case GLFW_ALPHA_BITS: case GLFW_ALPHA_BITS:
_glfw.hints.alphaBits = hint; _glfw.hints.framebuffer.alphaBits = hint;
break; break;
case GLFW_DEPTH_BITS: case GLFW_DEPTH_BITS:
_glfw.hints.depthBits = hint; _glfw.hints.framebuffer.depthBits = hint;
break; break;
case GLFW_STENCIL_BITS: case GLFW_STENCIL_BITS:
_glfw.hints.stencilBits = hint; _glfw.hints.framebuffer.stencilBits = hint;
break; break;
case GLFW_ACCUM_RED_BITS: case GLFW_ACCUM_RED_BITS:
_glfw.hints.accumRedBits = hint; _glfw.hints.framebuffer.accumRedBits = hint;
break; break;
case GLFW_ACCUM_GREEN_BITS: case GLFW_ACCUM_GREEN_BITS:
_glfw.hints.accumGreenBits = hint; _glfw.hints.framebuffer.accumGreenBits = hint;
break; break;
case GLFW_ACCUM_BLUE_BITS: case GLFW_ACCUM_BLUE_BITS:
_glfw.hints.accumBlueBits = hint; _glfw.hints.framebuffer.accumBlueBits = hint;
break; break;
case GLFW_ACCUM_ALPHA_BITS: case GLFW_ACCUM_ALPHA_BITS:
_glfw.hints.accumAlphaBits = hint; _glfw.hints.framebuffer.accumAlphaBits = hint;
break; break;
case GLFW_AUX_BUFFERS: case GLFW_AUX_BUFFERS:
_glfw.hints.auxBuffers = hint; _glfw.hints.framebuffer.auxBuffers = hint;
break; break;
case GLFW_STEREO: case GLFW_STEREO:
_glfw.hints.stereo = hint; _glfw.hints.framebuffer.stereo = hint ? GL_TRUE : GL_FALSE;
break; break;
case GLFW_REFRESH_RATE: case GLFW_REFRESH_RATE:
_glfw.hints.refreshRate = hint; _glfw.hints.refreshRate = hint;
break; break;
case GLFW_DOUBLEBUFFER: case GLFW_DOUBLEBUFFER:
_glfw.hints.doublebuffer = hint; _glfw.hints.framebuffer.doublebuffer = hint ? GL_TRUE : GL_FALSE;
break; break;
case GLFW_RESIZABLE: case GLFW_RESIZABLE:
_glfw.hints.resizable = hint; _glfw.hints.window.resizable = hint ? GL_TRUE : GL_FALSE;
break; break;
case GLFW_DECORATED: case GLFW_DECORATED:
_glfw.hints.decorated = hint; _glfw.hints.window.decorated = hint ? GL_TRUE : GL_FALSE;
break; break;
case GLFW_FOCUSED: case GLFW_FOCUSED:
_glfw.hints.focused = hint; _glfw.hints.window.focused = hint ? GL_TRUE : GL_FALSE;
break; break;
case GLFW_AUTO_ICONIFY: case GLFW_AUTO_ICONIFY:
_glfw.hints.autoIconify = hint; _glfw.hints.window.autoIconify = hint ? GL_TRUE : GL_FALSE;
break; break;
case GLFW_FLOATING: case GLFW_FLOATING:
_glfw.hints.floating = hint; _glfw.hints.window.floating = hint ? GL_TRUE : GL_FALSE;
break; break;
case GLFW_VISIBLE: case GLFW_VISIBLE:
_glfw.hints.visible = hint; _glfw.hints.window.visible = hint ? GL_TRUE : GL_FALSE;
break; break;
case GLFW_SAMPLES: case GLFW_SAMPLES:
_glfw.hints.samples = hint; _glfw.hints.framebuffer.samples = hint;
break; break;
case GLFW_SRGB_CAPABLE: case GLFW_SRGB_CAPABLE:
_glfw.hints.sRGB = hint; _glfw.hints.framebuffer.sRGB = hint ? GL_TRUE : GL_FALSE;
break; break;
case GLFW_CLIENT_API: case GLFW_CLIENT_API:
_glfw.hints.api = hint; _glfw.hints.context.api = hint;
break; break;
case GLFW_CONTEXT_VERSION_MAJOR: case GLFW_CONTEXT_VERSION_MAJOR:
_glfw.hints.major = hint; _glfw.hints.context.major = hint;
break; break;
case GLFW_CONTEXT_VERSION_MINOR: case GLFW_CONTEXT_VERSION_MINOR:
_glfw.hints.minor = hint; _glfw.hints.context.minor = hint;
break; break;
case GLFW_CONTEXT_ROBUSTNESS: case GLFW_CONTEXT_ROBUSTNESS:
_glfw.hints.robustness = hint; _glfw.hints.context.robustness = hint;
break; break;
case GLFW_OPENGL_FORWARD_COMPAT: case GLFW_OPENGL_FORWARD_COMPAT:
_glfw.hints.forward = hint; _glfw.hints.context.forward = hint ? GL_TRUE : GL_FALSE;
break; break;
case GLFW_OPENGL_DEBUG_CONTEXT: case GLFW_OPENGL_DEBUG_CONTEXT:
_glfw.hints.debug = hint; _glfw.hints.context.debug = hint ? GL_TRUE : GL_FALSE;
break; break;
case GLFW_OPENGL_PROFILE: case GLFW_OPENGL_PROFILE:
_glfw.hints.profile = hint; _glfw.hints.context.profile = hint;
break; break;
case GLFW_CONTEXT_RELEASE_BEHAVIOR: case GLFW_CONTEXT_RELEASE_BEHAVIOR:
_glfw.hints.release = hint; _glfw.hints.context.release = hint;
break; break;
default: default:
_glfwInputError(GLFW_INVALID_ENUM, "Invalid window hint"); _glfwInputError(GLFW_INVALID_ENUM, "Invalid window hint");