ruby-glfw 0.9
Sign up to get free protection for your applications and to get access to all the features.
- data/README +1 -0
- data/README.API +73 -0
- data/Rakefile +120 -0
- data/examples/boing.rb +519 -0
- data/examples/gears.rb +327 -0
- data/examples/keytest.rb +117 -0
- data/examples/listmodes.rb +20 -0
- data/examples/mipmaps.rb +104 -0
- data/examples/mipmaps.tga +0 -0
- data/examples/particles.rb +837 -0
- data/examples/pong3d.rb +741 -0
- data/examples/pong3d_field.tga +0 -0
- data/examples/pong3d_instr.tga +0 -0
- data/examples/pong3d_menu.tga +0 -0
- data/examples/pong3d_title.tga +0 -0
- data/examples/pong3d_winner1.tga +0 -0
- data/examples/pong3d_winner2.tga +0 -0
- data/examples/splitview.rb +432 -0
- data/examples/triangle.rb +89 -0
- data/examples/wave.rb +294 -0
- data/ext/glfw/glfw.c +1094 -0
- data/ext/glfw/mkrf_conf.rb +70 -0
- data/glfw-src/Makefile +220 -0
- data/glfw-src/compile.ami +61 -0
- data/glfw-src/compile.bat +217 -0
- data/glfw-src/compile.sh +607 -0
- data/glfw-src/docs/Makefile +57 -0
- data/glfw-src/docs/Reference.pdf +0 -0
- data/glfw-src/docs/UsersGuide.pdf +0 -0
- data/glfw-src/docs/cleanup.bat +22 -0
- data/glfw-src/docs/glfwdoc.sty +80 -0
- data/glfw-src/docs/glfwrm.tex +3034 -0
- data/glfw-src/docs/glfwug.tex +2024 -0
- data/glfw-src/docs/readme.txt +80 -0
- data/glfw-src/examples/Makefile.amigaos.gcc +70 -0
- data/glfw-src/examples/Makefile.amigaos.vbcc +70 -0
- data/glfw-src/examples/Makefile.dos.djgpp +71 -0
- data/glfw-src/examples/Makefile.macosx.gcc +96 -0
- data/glfw-src/examples/Makefile.win32.bcc +75 -0
- data/glfw-src/examples/Makefile.win32.cross-mgw +79 -0
- data/glfw-src/examples/Makefile.win32.cygwin +79 -0
- data/glfw-src/examples/Makefile.win32.lcc +74 -0
- data/glfw-src/examples/Makefile.win32.mgw +75 -0
- data/glfw-src/examples/Makefile.win32.msvc +74 -0
- data/glfw-src/examples/Makefile.win32.ow +74 -0
- data/glfw-src/examples/Makefile.win32.pellesc +74 -0
- data/glfw-src/examples/Makefile.x11.in +54 -0
- data/glfw-src/examples/boing.c +606 -0
- data/glfw-src/examples/bundle.sh +46 -0
- data/glfw-src/examples/gears.c +382 -0
- data/glfw-src/examples/keytest.c +264 -0
- data/glfw-src/examples/listmodes.c +48 -0
- data/glfw-src/examples/mipmaps.c +126 -0
- data/glfw-src/examples/mipmaps.tga +0 -0
- data/glfw-src/examples/mtbench.c +301 -0
- data/glfw-src/examples/mthello.c +48 -0
- data/glfw-src/examples/particles.c +1148 -0
- data/glfw-src/examples/pong3d.c +839 -0
- data/glfw-src/examples/pong3d_field.tga +0 -0
- data/glfw-src/examples/pong3d_instr.tga +0 -0
- data/glfw-src/examples/pong3d_menu.tga +0 -0
- data/glfw-src/examples/pong3d_title.tga +0 -0
- data/glfw-src/examples/pong3d_winner1.tga +0 -0
- data/glfw-src/examples/pong3d_winner2.tga +0 -0
- data/glfw-src/examples/splitview.c +506 -0
- data/glfw-src/examples/triangle.c +108 -0
- data/glfw-src/examples/wave.c +397 -0
- data/glfw-src/images/opengl.gif +0 -0
- data/glfw-src/images/osicert.gif +0 -0
- data/glfw-src/include/GL/glfw.h +486 -0
- data/glfw-src/lib/amigaos/Makefile.amigaos.gcc +128 -0
- data/glfw-src/lib/amigaos/Makefile.amigaos.vbcc +128 -0
- data/glfw-src/lib/amigaos/SDI_compiler.h +94 -0
- data/glfw-src/lib/amigaos/amigaos_enable.c +51 -0
- data/glfw-src/lib/amigaos/amigaos_fullscreen.c +319 -0
- data/glfw-src/lib/amigaos/amigaos_glext.c +61 -0
- data/glfw-src/lib/amigaos/amigaos_init.c +284 -0
- data/glfw-src/lib/amigaos/amigaos_joystick.c +359 -0
- data/glfw-src/lib/amigaos/amigaos_thread.c +494 -0
- data/glfw-src/lib/amigaos/amigaos_time.c +206 -0
- data/glfw-src/lib/amigaos/amigaos_window.c +830 -0
- data/glfw-src/lib/amigaos/platform.h +337 -0
- data/glfw-src/lib/dos/Makefile.dos.djgpp +146 -0
- data/glfw-src/lib/dos/dos_enable.c +51 -0
- data/glfw-src/lib/dos/dos_events.c +173 -0
- data/glfw-src/lib/dos/dos_fullscreen.c +101 -0
- data/glfw-src/lib/dos/dos_glext.c +59 -0
- data/glfw-src/lib/dos/dos_init.c +105 -0
- data/glfw-src/lib/dos/dos_irq.s +246 -0
- data/glfw-src/lib/dos/dos_joystick.c +94 -0
- data/glfw-src/lib/dos/dos_keyboard.c +694 -0
- data/glfw-src/lib/dos/dos_mouse.c +337 -0
- data/glfw-src/lib/dos/dos_thread.c +267 -0
- data/glfw-src/lib/dos/dos_time.c +309 -0
- data/glfw-src/lib/dos/dos_window.c +563 -0
- data/glfw-src/lib/dos/platform.h +341 -0
- data/glfw-src/lib/enable.c +295 -0
- data/glfw-src/lib/fullscreen.c +95 -0
- data/glfw-src/lib/glext.c +201 -0
- data/glfw-src/lib/image.c +629 -0
- data/glfw-src/lib/init.c +108 -0
- data/glfw-src/lib/input.c +280 -0
- data/glfw-src/lib/internal.h +210 -0
- data/glfw-src/lib/joystick.c +101 -0
- data/glfw-src/lib/macosx/Makefile.macosx.gcc +172 -0
- data/glfw-src/lib/macosx/Makefile.macosx.gcc.universal +166 -0
- data/glfw-src/lib/macosx/libglfw.pc.in +11 -0
- data/glfw-src/lib/macosx/macosx_enable.c +42 -0
- data/glfw-src/lib/macosx/macosx_fullscreen.c +126 -0
- data/glfw-src/lib/macosx/macosx_glext.c +52 -0
- data/glfw-src/lib/macosx/macosx_init.c +194 -0
- data/glfw-src/lib/macosx/macosx_joystick.c +50 -0
- data/glfw-src/lib/macosx/macosx_thread.c +414 -0
- data/glfw-src/lib/macosx/macosx_time.c +112 -0
- data/glfw-src/lib/macosx/macosx_window.c +1279 -0
- data/glfw-src/lib/macosx/platform.h +349 -0
- data/glfw-src/lib/stream.c +194 -0
- data/glfw-src/lib/tga.c +405 -0
- data/glfw-src/lib/thread.c +340 -0
- data/glfw-src/lib/time.c +83 -0
- data/glfw-src/lib/win32/Makefile.win32.bcc +265 -0
- data/glfw-src/lib/win32/Makefile.win32.cross-mgw +274 -0
- data/glfw-src/lib/win32/Makefile.win32.cygwin +279 -0
- data/glfw-src/lib/win32/Makefile.win32.lcc +246 -0
- data/glfw-src/lib/win32/Makefile.win32.mgw +243 -0
- data/glfw-src/lib/win32/Makefile.win32.msvc +242 -0
- data/glfw-src/lib/win32/Makefile.win32.ow +242 -0
- data/glfw-src/lib/win32/Makefile.win32.pellesc +242 -0
- data/glfw-src/lib/win32/glfwdll.def +67 -0
- data/glfw-src/lib/win32/glfwdll_mgw1.def +67 -0
- data/glfw-src/lib/win32/glfwdll_mgw2.def +67 -0
- data/glfw-src/lib/win32/glfwdll_pellesc.def +65 -0
- data/glfw-src/lib/win32/libglfw.pc.in +11 -0
- data/glfw-src/lib/win32/platform.h +474 -0
- data/glfw-src/lib/win32/win32_dllmain.c +60 -0
- data/glfw-src/lib/win32/win32_enable.c +155 -0
- data/glfw-src/lib/win32/win32_fullscreen.c +317 -0
- data/glfw-src/lib/win32/win32_glext.c +85 -0
- data/glfw-src/lib/win32/win32_init.c +356 -0
- data/glfw-src/lib/win32/win32_joystick.c +234 -0
- data/glfw-src/lib/win32/win32_thread.c +511 -0
- data/glfw-src/lib/win32/win32_time.c +146 -0
- data/glfw-src/lib/win32/win32_window.c +1714 -0
- data/glfw-src/lib/window.c +727 -0
- data/glfw-src/lib/x11/Makefile.x11.in +243 -0
- data/glfw-src/lib/x11/platform.h +415 -0
- data/glfw-src/lib/x11/x11_enable.c +51 -0
- data/glfw-src/lib/x11/x11_fullscreen.c +524 -0
- data/glfw-src/lib/x11/x11_glext.c +69 -0
- data/glfw-src/lib/x11/x11_init.c +275 -0
- data/glfw-src/lib/x11/x11_joystick.c +371 -0
- data/glfw-src/lib/x11/x11_keysym2unicode.c +902 -0
- data/glfw-src/lib/x11/x11_thread.c +507 -0
- data/glfw-src/lib/x11/x11_time.c +154 -0
- data/glfw-src/lib/x11/x11_window.c +1746 -0
- data/glfw-src/license.txt +21 -0
- data/glfw-src/readme.html +927 -0
- data/glfw-src/support/d/examples/Makefile +59 -0
- data/glfw-src/support/d/examples/boing.d +610 -0
- data/glfw-src/support/d/examples/gears.d +379 -0
- data/glfw-src/support/d/examples/keytest.d +272 -0
- data/glfw-src/support/d/examples/listmodes.d +48 -0
- data/glfw-src/support/d/examples/mipmaps.d +126 -0
- data/glfw-src/support/d/examples/mtbench.d +304 -0
- data/glfw-src/support/d/examples/mthello.d +54 -0
- data/glfw-src/support/d/examples/particles.d +1150 -0
- data/glfw-src/support/d/examples/pong3d.d +840 -0
- data/glfw-src/support/d/examples/splitview.d +486 -0
- data/glfw-src/support/d/examples/triangle.d +108 -0
- data/glfw-src/support/d/examples/wave.d +400 -0
- data/glfw-src/support/d/imports/gl.d +4539 -0
- data/glfw-src/support/d/imports/glfw.d +349 -0
- data/glfw-src/support/d/imports/glu.d +328 -0
- data/glfw-src/support/d/lib/glfwdll.def +64 -0
- data/glfw-src/support/d/lib/glu32.def +56 -0
- data/glfw-src/support/d/lib/makefile +12 -0
- data/glfw-src/support/d/lib/opengl32.def +372 -0
- data/glfw-src/support/d/readme.html +83 -0
- data/glfw-src/support/delphi/examples/Triangle.dpr +105 -0
- data/glfw-src/support/delphi/lib/glfw.pas +437 -0
- data/glfw-src/support/delphi/readme.html +97 -0
- data/glfw-src/support/lua/examples/gears.lua +383 -0
- data/glfw-src/support/lua/examples/test1.lua +68 -0
- data/glfw-src/support/lua/readme.html +128 -0
- data/glfw-src/support/lua/src/luaglfw.c +1179 -0
- data/glfw-src/support/lua/src/luaglfw.h +48 -0
- data/glfw-src/support/lua/src/runlua.c +82 -0
- data/glfw-src/support/masm/examples/fpc.mac +47 -0
- data/glfw-src/support/masm/examples/makeit.bat +66 -0
- data/glfw-src/support/masm/examples/triangle.asm +232 -0
- data/glfw-src/support/masm/include/glfw.inc +326 -0
- data/glfw-src/support/masm/include/glu32.inc +55 -0
- data/glfw-src/support/masm/include/opengl32.inc +372 -0
- data/glfw-src/support/masm/lib/glfwdll.lib +0 -0
- data/glfw-src/support/masm/readme.html +170 -0
- data/glfw-src/support/msvc80/GLFW.sln +26 -0
- data/glfw-src/support/msvc80/GLFW.vcproj +257 -0
- data/glfw-src/support/msvc80/GLFWDLL.vcproj +287 -0
- data/glfw-src/support/visualbasic/bindings/glfw.bas +320 -0
- data/glfw-src/support/visualbasic/bindings/glu32.bas +284 -0
- data/glfw-src/support/visualbasic/bindings/opengl32.bas +999 -0
- data/glfw-src/support/visualbasic/examples/Triangle.bas +101 -0
- data/glfw-src/support/visualbasic/readme.html +164 -0
- data/website/index.html +84 -0
- data/website/style.css +110 -0
- metadata +301 -0
@@ -0,0 +1,727 @@
|
|
1
|
+
//========================================================================
|
2
|
+
// GLFW - An OpenGL framework
|
3
|
+
// File: window.c
|
4
|
+
// Platform: Any
|
5
|
+
// API version: 2.6
|
6
|
+
// WWW: http://glfw.sourceforge.net
|
7
|
+
//------------------------------------------------------------------------
|
8
|
+
// Copyright (c) 2002-2006 Camilla Berglund
|
9
|
+
//
|
10
|
+
// This software is provided 'as-is', without any express or implied
|
11
|
+
// warranty. In no event will the authors be held liable for any damages
|
12
|
+
// arising from the use of this software.
|
13
|
+
//
|
14
|
+
// Permission is granted to anyone to use this software for any purpose,
|
15
|
+
// including commercial applications, and to alter it and redistribute it
|
16
|
+
// freely, subject to the following restrictions:
|
17
|
+
//
|
18
|
+
// 1. The origin of this software must not be misrepresented; you must not
|
19
|
+
// claim that you wrote the original software. If you use this software
|
20
|
+
// in a product, an acknowledgment in the product documentation would
|
21
|
+
// be appreciated but is not required.
|
22
|
+
//
|
23
|
+
// 2. Altered source versions must be plainly marked as such, and must not
|
24
|
+
// be misrepresented as being the original software.
|
25
|
+
//
|
26
|
+
// 3. This notice may not be removed or altered from any source
|
27
|
+
// distribution.
|
28
|
+
//
|
29
|
+
//========================================================================
|
30
|
+
|
31
|
+
#include "internal.h"
|
32
|
+
|
33
|
+
|
34
|
+
|
35
|
+
//************************************************************************
|
36
|
+
//**** GLFW internal functions ****
|
37
|
+
//************************************************************************
|
38
|
+
|
39
|
+
//========================================================================
|
40
|
+
// Clear all open window hints
|
41
|
+
//========================================================================
|
42
|
+
|
43
|
+
void _glfwClearWindowHints( void )
|
44
|
+
{
|
45
|
+
_glfwWinHints.RefreshRate = 0;
|
46
|
+
_glfwWinHints.AccumRedBits = 0;
|
47
|
+
_glfwWinHints.AccumGreenBits = 0;
|
48
|
+
_glfwWinHints.AccumBlueBits = 0;
|
49
|
+
_glfwWinHints.AccumAlphaBits = 0;
|
50
|
+
_glfwWinHints.AuxBuffers = 0;
|
51
|
+
_glfwWinHints.Stereo = 0;
|
52
|
+
_glfwWinHints.WindowNoResize = 0;
|
53
|
+
_glfwWinHints.Samples = 0;
|
54
|
+
}
|
55
|
+
|
56
|
+
|
57
|
+
//========================================================================
|
58
|
+
// Handle the input tracking part of window deactivation
|
59
|
+
//========================================================================
|
60
|
+
|
61
|
+
void _glfwInputDeactivation( void )
|
62
|
+
{
|
63
|
+
int i;
|
64
|
+
|
65
|
+
// Release all keyboard keys
|
66
|
+
for( i = 0; i <= GLFW_KEY_LAST; i ++ )
|
67
|
+
{
|
68
|
+
if( _glfwInput.Key[ i ] == GLFW_PRESS )
|
69
|
+
{
|
70
|
+
_glfwInputKey( i, GLFW_RELEASE );
|
71
|
+
}
|
72
|
+
}
|
73
|
+
|
74
|
+
// Release all mouse buttons
|
75
|
+
for( i = 0; i <= GLFW_MOUSE_BUTTON_LAST; i ++ )
|
76
|
+
{
|
77
|
+
if( _glfwInput.MouseButton[ i ] == GLFW_PRESS )
|
78
|
+
{
|
79
|
+
_glfwInputMouseClick( i, GLFW_RELEASE );
|
80
|
+
}
|
81
|
+
}
|
82
|
+
}
|
83
|
+
|
84
|
+
|
85
|
+
//========================================================================
|
86
|
+
// _glfwClearInput() - Clear all input state
|
87
|
+
//========================================================================
|
88
|
+
|
89
|
+
void _glfwClearInput( void )
|
90
|
+
{
|
91
|
+
int i;
|
92
|
+
|
93
|
+
// Release all keyboard keys
|
94
|
+
for( i = 0; i <= GLFW_KEY_LAST; i ++ )
|
95
|
+
{
|
96
|
+
_glfwInput.Key[ i ] = GLFW_RELEASE;
|
97
|
+
}
|
98
|
+
|
99
|
+
// Clear last character
|
100
|
+
_glfwInput.LastChar = 0;
|
101
|
+
|
102
|
+
// Release all mouse buttons
|
103
|
+
for( i = 0; i <= GLFW_MOUSE_BUTTON_LAST; i ++ )
|
104
|
+
{
|
105
|
+
_glfwInput.MouseButton[ i ] = GLFW_RELEASE;
|
106
|
+
}
|
107
|
+
|
108
|
+
// Set mouse position to (0,0)
|
109
|
+
_glfwInput.MousePosX = 0;
|
110
|
+
_glfwInput.MousePosY = 0;
|
111
|
+
|
112
|
+
// Set mouse wheel position to 0
|
113
|
+
_glfwInput.WheelPos = 0;
|
114
|
+
|
115
|
+
// The default is to use non sticky keys and mouse buttons
|
116
|
+
_glfwInput.StickyKeys = GL_FALSE;
|
117
|
+
_glfwInput.StickyMouseButtons = GL_FALSE;
|
118
|
+
|
119
|
+
// The default is to disable key repeat
|
120
|
+
_glfwInput.KeyRepeat = GL_FALSE;
|
121
|
+
}
|
122
|
+
|
123
|
+
|
124
|
+
//========================================================================
|
125
|
+
// _glfwInputKey() - Register keyboard activity
|
126
|
+
//========================================================================
|
127
|
+
|
128
|
+
void _glfwInputKey( int key, int action )
|
129
|
+
{
|
130
|
+
int keyrepeat = 0;
|
131
|
+
|
132
|
+
if( key < 0 || key > GLFW_KEY_LAST )
|
133
|
+
{
|
134
|
+
return;
|
135
|
+
}
|
136
|
+
|
137
|
+
// Are we trying to release an already released key?
|
138
|
+
if( action == GLFW_RELEASE && _glfwInput.Key[ key ] != GLFW_PRESS )
|
139
|
+
{
|
140
|
+
return;
|
141
|
+
}
|
142
|
+
|
143
|
+
// Register key action
|
144
|
+
if( action == GLFW_RELEASE && _glfwInput.StickyKeys )
|
145
|
+
{
|
146
|
+
_glfwInput.Key[ key ] = GLFW_STICK;
|
147
|
+
}
|
148
|
+
else
|
149
|
+
{
|
150
|
+
keyrepeat = (_glfwInput.Key[ key ] == GLFW_PRESS) &&
|
151
|
+
(action == GLFW_PRESS);
|
152
|
+
_glfwInput.Key[ key ] = (char) action;
|
153
|
+
}
|
154
|
+
|
155
|
+
// Call user callback function
|
156
|
+
if( _glfwWin.KeyCallback && (_glfwInput.KeyRepeat || !keyrepeat) )
|
157
|
+
{
|
158
|
+
_glfwWin.KeyCallback( key, action );
|
159
|
+
}
|
160
|
+
}
|
161
|
+
|
162
|
+
|
163
|
+
//========================================================================
|
164
|
+
// _glfwInputChar() - Register (keyboard) character activity
|
165
|
+
//========================================================================
|
166
|
+
|
167
|
+
void _glfwInputChar( int character, int action )
|
168
|
+
{
|
169
|
+
int keyrepeat = 0;
|
170
|
+
|
171
|
+
// Valid Unicode (ISO 10646) character?
|
172
|
+
if( !( (character >= 32 && character <= 126) || character >= 160 ) )
|
173
|
+
{
|
174
|
+
return;
|
175
|
+
}
|
176
|
+
|
177
|
+
// Is this a key repeat?
|
178
|
+
if( action == GLFW_PRESS && _glfwInput.LastChar == character )
|
179
|
+
{
|
180
|
+
keyrepeat = 1;
|
181
|
+
}
|
182
|
+
|
183
|
+
// Store this character as last character (or clear it, if released)
|
184
|
+
if( action == GLFW_PRESS )
|
185
|
+
{
|
186
|
+
_glfwInput.LastChar = character;
|
187
|
+
}
|
188
|
+
else
|
189
|
+
{
|
190
|
+
_glfwInput.LastChar = 0;
|
191
|
+
}
|
192
|
+
|
193
|
+
// Call user callback function
|
194
|
+
if( _glfwWin.CharCallback && (_glfwInput.KeyRepeat || !keyrepeat) )
|
195
|
+
{
|
196
|
+
_glfwWin.CharCallback( character, action );
|
197
|
+
}
|
198
|
+
}
|
199
|
+
|
200
|
+
|
201
|
+
//========================================================================
|
202
|
+
// _glfwInputMouseClick() - Register mouse button clicks
|
203
|
+
//========================================================================
|
204
|
+
|
205
|
+
void _glfwInputMouseClick( int button, int action )
|
206
|
+
{
|
207
|
+
if( button >= 0 && button <= GLFW_MOUSE_BUTTON_LAST )
|
208
|
+
{
|
209
|
+
// Register mouse button action
|
210
|
+
if( action == GLFW_RELEASE && _glfwInput.StickyMouseButtons )
|
211
|
+
{
|
212
|
+
_glfwInput.MouseButton[ button ] = GLFW_STICK;
|
213
|
+
}
|
214
|
+
else
|
215
|
+
{
|
216
|
+
_glfwInput.MouseButton[ button ] = (char) action;
|
217
|
+
}
|
218
|
+
|
219
|
+
// Call user callback function
|
220
|
+
if( _glfwWin.MouseButtonCallback )
|
221
|
+
{
|
222
|
+
_glfwWin.MouseButtonCallback( button, action );
|
223
|
+
}
|
224
|
+
}
|
225
|
+
}
|
226
|
+
|
227
|
+
|
228
|
+
|
229
|
+
//************************************************************************
|
230
|
+
//**** GLFW user functions ****
|
231
|
+
//************************************************************************
|
232
|
+
|
233
|
+
//========================================================================
|
234
|
+
// glfwOpenWindow() - Here is where the window is created, and the OpenGL
|
235
|
+
// rendering context is created
|
236
|
+
//========================================================================
|
237
|
+
|
238
|
+
GLFWAPI int GLFWAPIENTRY glfwOpenWindow( int width, int height,
|
239
|
+
int redbits, int greenbits, int bluebits, int alphabits,
|
240
|
+
int depthbits, int stencilbits, int mode )
|
241
|
+
{
|
242
|
+
int x;
|
243
|
+
_GLFWhints hints;
|
244
|
+
|
245
|
+
// Is GLFW initialized?
|
246
|
+
if( !_glfwInitialized || _glfwWin.Opened )
|
247
|
+
{
|
248
|
+
return GL_FALSE;
|
249
|
+
}
|
250
|
+
|
251
|
+
// Copy and clear window hints
|
252
|
+
hints = _glfwWinHints;
|
253
|
+
_glfwClearWindowHints();
|
254
|
+
|
255
|
+
// Check input arguments
|
256
|
+
if( mode != GLFW_WINDOW && mode != GLFW_FULLSCREEN )
|
257
|
+
{
|
258
|
+
return GL_FALSE;
|
259
|
+
}
|
260
|
+
|
261
|
+
// Clear GLFW window state
|
262
|
+
_glfwWin.Active = GL_TRUE;
|
263
|
+
_glfwWin.Iconified = GL_FALSE;
|
264
|
+
_glfwWin.MouseLock = GL_FALSE;
|
265
|
+
_glfwWin.AutoPollEvents = GL_TRUE;
|
266
|
+
_glfwClearInput();
|
267
|
+
|
268
|
+
// Unregister all callback functions
|
269
|
+
_glfwWin.WindowSizeCallback = NULL;
|
270
|
+
_glfwWin.WindowCloseCallback = NULL;
|
271
|
+
_glfwWin.WindowRefreshCallback = NULL;
|
272
|
+
_glfwWin.KeyCallback = NULL;
|
273
|
+
_glfwWin.CharCallback = NULL;
|
274
|
+
_glfwWin.MousePosCallback = NULL;
|
275
|
+
_glfwWin.MouseButtonCallback = NULL;
|
276
|
+
_glfwWin.MouseWheelCallback = NULL;
|
277
|
+
|
278
|
+
// Check width & height
|
279
|
+
if( width > 0 && height <= 0 )
|
280
|
+
{
|
281
|
+
// Set the window aspect ratio to 4:3
|
282
|
+
height = (width * 3) / 4;
|
283
|
+
}
|
284
|
+
else if( width <= 0 && height > 0 )
|
285
|
+
{
|
286
|
+
// Set the window aspect ratio to 4:3
|
287
|
+
width = (height * 4) / 3;
|
288
|
+
}
|
289
|
+
else if( width <= 0 && height <= 0 )
|
290
|
+
{
|
291
|
+
// Default window size
|
292
|
+
width = 640;
|
293
|
+
height = 480;
|
294
|
+
}
|
295
|
+
|
296
|
+
// Remember window settings
|
297
|
+
_glfwWin.Width = width;
|
298
|
+
_glfwWin.Height = height;
|
299
|
+
_glfwWin.Fullscreen = (mode == GLFW_FULLSCREEN ? 1 : 0);
|
300
|
+
|
301
|
+
// Platform specific window opening routine
|
302
|
+
if( !_glfwPlatformOpenWindow( width, height, redbits, greenbits,
|
303
|
+
bluebits, alphabits, depthbits, stencilbits, mode, &hints ) )
|
304
|
+
{
|
305
|
+
return GL_FALSE;
|
306
|
+
}
|
307
|
+
|
308
|
+
// Flag that window is now opened
|
309
|
+
_glfwWin.Opened = GL_TRUE;
|
310
|
+
|
311
|
+
// Get window parameters (such as color buffer bits etc)
|
312
|
+
_glfwPlatformRefreshWindowParams();
|
313
|
+
|
314
|
+
// Get OpenGL version
|
315
|
+
glfwGetGLVersion( &_glfwWin.GLVerMajor, &_glfwWin.GLVerMinor, &x );
|
316
|
+
|
317
|
+
// Do we have non-power-of-two textures?
|
318
|
+
_glfwWin.Has_GL_ARB_texture_non_power_of_two =
|
319
|
+
glfwExtensionSupported( "GL_ARB_texture_non_power_of_two" );
|
320
|
+
|
321
|
+
// Do we have automatic mipmap generation?
|
322
|
+
_glfwWin.Has_GL_SGIS_generate_mipmap =
|
323
|
+
(_glfwWin.GLVerMajor >= 2) || (_glfwWin.GLVerMinor >= 4) ||
|
324
|
+
glfwExtensionSupported( "GL_SGIS_generate_mipmap" );
|
325
|
+
|
326
|
+
// If full-screen mode was requested, disable mouse cursor
|
327
|
+
if( mode == GLFW_FULLSCREEN )
|
328
|
+
{
|
329
|
+
glfwDisable( GLFW_MOUSE_CURSOR );
|
330
|
+
}
|
331
|
+
|
332
|
+
return GL_TRUE;
|
333
|
+
}
|
334
|
+
|
335
|
+
|
336
|
+
//========================================================================
|
337
|
+
// glfwOpenWindowHint() - Set hints for opening the window
|
338
|
+
//========================================================================
|
339
|
+
|
340
|
+
GLFWAPI void GLFWAPIENTRY glfwOpenWindowHint( int target, int hint )
|
341
|
+
{
|
342
|
+
// Is GLFW initialized?
|
343
|
+
if( !_glfwInitialized )
|
344
|
+
{
|
345
|
+
return;
|
346
|
+
}
|
347
|
+
|
348
|
+
switch( target )
|
349
|
+
{
|
350
|
+
case GLFW_REFRESH_RATE:
|
351
|
+
_glfwWinHints.RefreshRate = hint;
|
352
|
+
break;
|
353
|
+
case GLFW_ACCUM_RED_BITS:
|
354
|
+
_glfwWinHints.AccumRedBits = hint;
|
355
|
+
break;
|
356
|
+
case GLFW_ACCUM_GREEN_BITS:
|
357
|
+
_glfwWinHints.AccumGreenBits = hint;
|
358
|
+
break;
|
359
|
+
case GLFW_ACCUM_BLUE_BITS:
|
360
|
+
_glfwWinHints.AccumBlueBits = hint;
|
361
|
+
break;
|
362
|
+
case GLFW_ACCUM_ALPHA_BITS:
|
363
|
+
_glfwWinHints.AccumAlphaBits = hint;
|
364
|
+
break;
|
365
|
+
case GLFW_AUX_BUFFERS:
|
366
|
+
_glfwWinHints.AuxBuffers = hint;
|
367
|
+
break;
|
368
|
+
case GLFW_STEREO:
|
369
|
+
_glfwWinHints.Stereo = hint;
|
370
|
+
break;
|
371
|
+
case GLFW_WINDOW_NO_RESIZE:
|
372
|
+
_glfwWinHints.WindowNoResize = hint;
|
373
|
+
break;
|
374
|
+
case GLFW_FSAA_SAMPLES:
|
375
|
+
_glfwWinHints.Samples = hint;
|
376
|
+
break;
|
377
|
+
default:
|
378
|
+
break;
|
379
|
+
}
|
380
|
+
}
|
381
|
+
|
382
|
+
|
383
|
+
//========================================================================
|
384
|
+
// glfwCloseWindow() - Properly kill the window / video display
|
385
|
+
//========================================================================
|
386
|
+
|
387
|
+
GLFWAPI void GLFWAPIENTRY glfwCloseWindow( void )
|
388
|
+
{
|
389
|
+
// Is GLFW initialized?
|
390
|
+
if( !_glfwInitialized )
|
391
|
+
{
|
392
|
+
return;
|
393
|
+
}
|
394
|
+
|
395
|
+
// Show mouse pointer again (if hidden)
|
396
|
+
glfwEnable( GLFW_MOUSE_CURSOR );
|
397
|
+
|
398
|
+
// Close window
|
399
|
+
_glfwPlatformCloseWindow();
|
400
|
+
|
401
|
+
// Window is no longer opened
|
402
|
+
_glfwWin.Opened = GL_FALSE;
|
403
|
+
}
|
404
|
+
|
405
|
+
|
406
|
+
//========================================================================
|
407
|
+
// glfwSetWindowTitle() - Set the window title
|
408
|
+
//========================================================================
|
409
|
+
|
410
|
+
GLFWAPI void GLFWAPIENTRY glfwSetWindowTitle( const char *title )
|
411
|
+
{
|
412
|
+
// Is GLFW initialized?
|
413
|
+
if( !_glfwInitialized || !_glfwWin.Opened )
|
414
|
+
{
|
415
|
+
return;
|
416
|
+
}
|
417
|
+
|
418
|
+
// Set window title
|
419
|
+
_glfwPlatformSetWindowTitle( title );
|
420
|
+
}
|
421
|
+
|
422
|
+
|
423
|
+
//========================================================================
|
424
|
+
// glfwGetWindowSize() - Get the window size
|
425
|
+
//========================================================================
|
426
|
+
|
427
|
+
GLFWAPI void GLFWAPIENTRY glfwGetWindowSize( int *width, int *height )
|
428
|
+
{
|
429
|
+
if( width != NULL )
|
430
|
+
{
|
431
|
+
*width = _glfwWin.Width;
|
432
|
+
}
|
433
|
+
if( height != NULL )
|
434
|
+
{
|
435
|
+
*height = _glfwWin.Height;
|
436
|
+
}
|
437
|
+
}
|
438
|
+
|
439
|
+
|
440
|
+
//========================================================================
|
441
|
+
// glfwSetWindowSize() - Set the window size
|
442
|
+
//========================================================================
|
443
|
+
|
444
|
+
GLFWAPI void GLFWAPIENTRY glfwSetWindowSize( int width, int height )
|
445
|
+
{
|
446
|
+
// Is GLFW initialized?
|
447
|
+
if( !_glfwInitialized || !_glfwWin.Opened || _glfwWin.Iconified )
|
448
|
+
{
|
449
|
+
return;
|
450
|
+
}
|
451
|
+
|
452
|
+
// Don't do anything if the window size did not change
|
453
|
+
if( width == _glfwWin.Width && height == _glfwWin.Height )
|
454
|
+
{
|
455
|
+
return;
|
456
|
+
}
|
457
|
+
|
458
|
+
// Change window size
|
459
|
+
_glfwPlatformSetWindowSize( width, height );
|
460
|
+
|
461
|
+
// Refresh window parameters (may have changed due to changed video
|
462
|
+
// modes)
|
463
|
+
_glfwPlatformRefreshWindowParams();
|
464
|
+
}
|
465
|
+
|
466
|
+
|
467
|
+
//========================================================================
|
468
|
+
// glfwSetWindowPos() - Set the window position
|
469
|
+
//========================================================================
|
470
|
+
|
471
|
+
GLFWAPI void GLFWAPIENTRY glfwSetWindowPos( int x, int y )
|
472
|
+
{
|
473
|
+
// Is GLFW initialized?
|
474
|
+
if( !_glfwInitialized || !_glfwWin.Opened || _glfwWin.Fullscreen ||
|
475
|
+
_glfwWin.Iconified )
|
476
|
+
{
|
477
|
+
return;
|
478
|
+
}
|
479
|
+
|
480
|
+
// Set window position
|
481
|
+
_glfwPlatformSetWindowPos( x, y );
|
482
|
+
}
|
483
|
+
|
484
|
+
|
485
|
+
//========================================================================
|
486
|
+
// glfwIconfyWindow() - Window iconification
|
487
|
+
//========================================================================
|
488
|
+
|
489
|
+
GLFWAPI void GLFWAPIENTRY glfwIconifyWindow( void )
|
490
|
+
{
|
491
|
+
// Is GLFW initialized?
|
492
|
+
if( !_glfwInitialized || !_glfwWin.Opened || _glfwWin.Iconified )
|
493
|
+
{
|
494
|
+
return;
|
495
|
+
}
|
496
|
+
|
497
|
+
// Iconify window
|
498
|
+
_glfwPlatformIconifyWindow();
|
499
|
+
}
|
500
|
+
|
501
|
+
|
502
|
+
//========================================================================
|
503
|
+
// glfwRestoreWindow() - Window un-iconification
|
504
|
+
//========================================================================
|
505
|
+
|
506
|
+
GLFWAPI void GLFWAPIENTRY glfwRestoreWindow( void )
|
507
|
+
{
|
508
|
+
// Is GLFW initialized?
|
509
|
+
if( !_glfwInitialized || !_glfwWin.Opened || !_glfwWin.Iconified )
|
510
|
+
{
|
511
|
+
return;
|
512
|
+
}
|
513
|
+
|
514
|
+
// Restore iconified window
|
515
|
+
_glfwPlatformRestoreWindow();
|
516
|
+
|
517
|
+
// Refresh window parameters
|
518
|
+
_glfwPlatformRefreshWindowParams();
|
519
|
+
}
|
520
|
+
|
521
|
+
|
522
|
+
//========================================================================
|
523
|
+
// glfwSwapBuffers() - Swap buffers (double-buffering) and poll any new
|
524
|
+
// events
|
525
|
+
//========================================================================
|
526
|
+
|
527
|
+
GLFWAPI void GLFWAPIENTRY glfwSwapBuffers( void )
|
528
|
+
{
|
529
|
+
// Is GLFW initialized?
|
530
|
+
if( !_glfwInitialized || !_glfwWin.Opened )
|
531
|
+
{
|
532
|
+
return;
|
533
|
+
}
|
534
|
+
|
535
|
+
// Check for window messages
|
536
|
+
if( _glfwWin.AutoPollEvents )
|
537
|
+
{
|
538
|
+
glfwPollEvents();
|
539
|
+
}
|
540
|
+
|
541
|
+
// Update display-buffer
|
542
|
+
if( _glfwWin.Opened )
|
543
|
+
{
|
544
|
+
_glfwPlatformSwapBuffers();
|
545
|
+
}
|
546
|
+
}
|
547
|
+
|
548
|
+
|
549
|
+
//========================================================================
|
550
|
+
// glfwSwapInterval() - Set double buffering swap interval (0 = vsync off)
|
551
|
+
//========================================================================
|
552
|
+
|
553
|
+
GLFWAPI void GLFWAPIENTRY glfwSwapInterval( int interval )
|
554
|
+
{
|
555
|
+
// Is GLFW initialized?
|
556
|
+
if( !_glfwInitialized || !_glfwWin.Opened )
|
557
|
+
{
|
558
|
+
return;
|
559
|
+
}
|
560
|
+
|
561
|
+
// Set double buffering swap interval
|
562
|
+
_glfwPlatformSwapInterval( interval );
|
563
|
+
}
|
564
|
+
|
565
|
+
|
566
|
+
//========================================================================
|
567
|
+
// glfwGetWindowParam() - Get window parameter
|
568
|
+
//========================================================================
|
569
|
+
|
570
|
+
GLFWAPI int GLFWAPIENTRY glfwGetWindowParam( int param )
|
571
|
+
{
|
572
|
+
// Is GLFW initialized?
|
573
|
+
if( !_glfwInitialized )
|
574
|
+
{
|
575
|
+
return 0;
|
576
|
+
}
|
577
|
+
|
578
|
+
// Is the window opened?
|
579
|
+
if( !_glfwWin.Opened )
|
580
|
+
{
|
581
|
+
if( param == GLFW_OPENED )
|
582
|
+
{
|
583
|
+
return GL_FALSE;
|
584
|
+
}
|
585
|
+
return 0;
|
586
|
+
}
|
587
|
+
|
588
|
+
// Window parameters
|
589
|
+
switch( param )
|
590
|
+
{
|
591
|
+
case GLFW_OPENED:
|
592
|
+
return GL_TRUE;
|
593
|
+
case GLFW_ACTIVE:
|
594
|
+
return _glfwWin.Active;
|
595
|
+
case GLFW_ICONIFIED:
|
596
|
+
return _glfwWin.Iconified;
|
597
|
+
case GLFW_ACCELERATED:
|
598
|
+
return _glfwWin.Accelerated;
|
599
|
+
case GLFW_RED_BITS:
|
600
|
+
return _glfwWin.RedBits;
|
601
|
+
case GLFW_GREEN_BITS:
|
602
|
+
return _glfwWin.GreenBits;
|
603
|
+
case GLFW_BLUE_BITS:
|
604
|
+
return _glfwWin.BlueBits;
|
605
|
+
case GLFW_ALPHA_BITS:
|
606
|
+
return _glfwWin.AlphaBits;
|
607
|
+
case GLFW_DEPTH_BITS:
|
608
|
+
return _glfwWin.DepthBits;
|
609
|
+
case GLFW_STENCIL_BITS:
|
610
|
+
return _glfwWin.StencilBits;
|
611
|
+
case GLFW_ACCUM_RED_BITS:
|
612
|
+
return _glfwWin.AccumRedBits;
|
613
|
+
case GLFW_ACCUM_GREEN_BITS:
|
614
|
+
return _glfwWin.AccumGreenBits;
|
615
|
+
case GLFW_ACCUM_BLUE_BITS:
|
616
|
+
return _glfwWin.AccumBlueBits;
|
617
|
+
case GLFW_ACCUM_ALPHA_BITS:
|
618
|
+
return _glfwWin.AccumAlphaBits;
|
619
|
+
case GLFW_AUX_BUFFERS:
|
620
|
+
return _glfwWin.AuxBuffers;
|
621
|
+
case GLFW_STEREO:
|
622
|
+
return _glfwWin.Stereo;
|
623
|
+
case GLFW_REFRESH_RATE:
|
624
|
+
return _glfwWin.RefreshRate;
|
625
|
+
case GLFW_WINDOW_NO_RESIZE:
|
626
|
+
return _glfwWin.WindowNoResize;
|
627
|
+
case GLFW_FSAA_SAMPLES:
|
628
|
+
return _glfwWin.Samples;
|
629
|
+
default:
|
630
|
+
return 0;
|
631
|
+
}
|
632
|
+
}
|
633
|
+
|
634
|
+
|
635
|
+
//========================================================================
|
636
|
+
// glfwSetWindowSizeCallback() - Set callback function for window size
|
637
|
+
// changes
|
638
|
+
//========================================================================
|
639
|
+
|
640
|
+
GLFWAPI void GLFWAPIENTRY glfwSetWindowSizeCallback( GLFWwindowsizefun cbfun )
|
641
|
+
{
|
642
|
+
// Is GLFW initialized?
|
643
|
+
if( !_glfwInitialized || !_glfwWin.Opened )
|
644
|
+
{
|
645
|
+
return;
|
646
|
+
}
|
647
|
+
|
648
|
+
// Set callback function
|
649
|
+
_glfwWin.WindowSizeCallback = cbfun;
|
650
|
+
|
651
|
+
// Call the callback function to let the application know the current
|
652
|
+
// window size
|
653
|
+
if( cbfun )
|
654
|
+
{
|
655
|
+
cbfun( _glfwWin.Width, _glfwWin.Height );
|
656
|
+
}
|
657
|
+
}
|
658
|
+
|
659
|
+
//========================================================================
|
660
|
+
// glfwSetWindowCloseCallback() - Set callback function for window close
|
661
|
+
// events
|
662
|
+
//========================================================================
|
663
|
+
|
664
|
+
GLFWAPI void GLFWAPIENTRY glfwSetWindowCloseCallback( GLFWwindowclosefun cbfun )
|
665
|
+
{
|
666
|
+
// Is GLFW initialized?
|
667
|
+
if( !_glfwInitialized || !_glfwWin.Opened )
|
668
|
+
{
|
669
|
+
return;
|
670
|
+
}
|
671
|
+
|
672
|
+
// Set callback function
|
673
|
+
_glfwWin.WindowCloseCallback = cbfun;
|
674
|
+
}
|
675
|
+
|
676
|
+
|
677
|
+
//========================================================================
|
678
|
+
// glfwSetWindowRefreshCallback() - Set callback function for window
|
679
|
+
// refresh events
|
680
|
+
//========================================================================
|
681
|
+
|
682
|
+
GLFWAPI void GLFWAPIENTRY glfwSetWindowRefreshCallback( GLFWwindowrefreshfun cbfun )
|
683
|
+
{
|
684
|
+
// Is GLFW initialized?
|
685
|
+
if( !_glfwInitialized || !_glfwWin.Opened )
|
686
|
+
{
|
687
|
+
return;
|
688
|
+
}
|
689
|
+
|
690
|
+
// Set callback function
|
691
|
+
_glfwWin.WindowRefreshCallback = cbfun;
|
692
|
+
}
|
693
|
+
|
694
|
+
|
695
|
+
//========================================================================
|
696
|
+
// glfwPollEvents() - Poll for new window and input events
|
697
|
+
//========================================================================
|
698
|
+
|
699
|
+
GLFWAPI void GLFWAPIENTRY glfwPollEvents( void )
|
700
|
+
{
|
701
|
+
// Is GLFW initialized?
|
702
|
+
if( !_glfwInitialized || !_glfwWin.Opened )
|
703
|
+
{
|
704
|
+
return;
|
705
|
+
}
|
706
|
+
|
707
|
+
// Poll for new events
|
708
|
+
_glfwPlatformPollEvents();
|
709
|
+
}
|
710
|
+
|
711
|
+
|
712
|
+
//========================================================================
|
713
|
+
// glfwWaitEvents() - Wait for new window and input events
|
714
|
+
//========================================================================
|
715
|
+
|
716
|
+
GLFWAPI void GLFWAPIENTRY glfwWaitEvents( void )
|
717
|
+
{
|
718
|
+
// Is GLFW initialized?
|
719
|
+
if( !_glfwInitialized || !_glfwWin.Opened )
|
720
|
+
{
|
721
|
+
return;
|
722
|
+
}
|
723
|
+
|
724
|
+
// Poll for new events
|
725
|
+
_glfwPlatformWaitEvents();
|
726
|
+
}
|
727
|
+
|