ruby-glfw 0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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,51 @@
|
|
|
1
|
+
//========================================================================
|
|
2
|
+
// GLFW - An OpenGL framework
|
|
3
|
+
// File: x11_enable.c
|
|
4
|
+
// Platform: X11 (Unix)
|
|
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
|
+
//**** Platform implementation functions ****
|
|
36
|
+
//************************************************************************
|
|
37
|
+
|
|
38
|
+
//========================================================================
|
|
39
|
+
// _glfwPlatformEnableSystemKeys() - Enable system keys
|
|
40
|
+
// _glfwPlatformDisableSystemKeys() - Disable system keys
|
|
41
|
+
//========================================================================
|
|
42
|
+
|
|
43
|
+
void _glfwPlatformEnableSystemKeys( void )
|
|
44
|
+
{
|
|
45
|
+
// Not supported under X11 (yet)
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
void _glfwPlatformDisableSystemKeys( void )
|
|
49
|
+
{
|
|
50
|
+
// Not supported under X11 (yet)
|
|
51
|
+
}
|
|
@@ -0,0 +1,524 @@
|
|
|
1
|
+
//========================================================================
|
|
2
|
+
// GLFW - An OpenGL framework
|
|
3
|
+
// File: x11_fullscreen.c
|
|
4
|
+
// Platform: X11 (Unix)
|
|
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
|
+
//**** GLFW internal functions ****
|
|
36
|
+
//************************************************************************
|
|
37
|
+
|
|
38
|
+
//========================================================================
|
|
39
|
+
// _glfwBPP2RGB() - Convert BPP to RGB bits (based on "best guess")
|
|
40
|
+
//========================================================================
|
|
41
|
+
|
|
42
|
+
static void _glfwBPP2RGB( int bpp, int *r, int *g, int *b )
|
|
43
|
+
{
|
|
44
|
+
int delta;
|
|
45
|
+
|
|
46
|
+
// Special case: BPP = 32 (I don't think this is necessary for X11??)
|
|
47
|
+
if( bpp == 32 )
|
|
48
|
+
bpp = 24;
|
|
49
|
+
|
|
50
|
+
// Convert "bits per pixel" to red, green & blue sizes
|
|
51
|
+
*r = *g = *b = bpp / 3;
|
|
52
|
+
delta = bpp - (*r * 3);
|
|
53
|
+
if( delta >= 1 )
|
|
54
|
+
{
|
|
55
|
+
*g = *g + 1;
|
|
56
|
+
}
|
|
57
|
+
if( delta == 2 )
|
|
58
|
+
{
|
|
59
|
+
*r = *r + 1;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
//========================================================================
|
|
65
|
+
// Finds the video mode closest in size to the specified desired size
|
|
66
|
+
//========================================================================
|
|
67
|
+
|
|
68
|
+
int _glfwGetClosestVideoMode( int screen, int *width, int *height, int *rate )
|
|
69
|
+
{
|
|
70
|
+
#if defined( _GLFW_HAS_XRANDR )
|
|
71
|
+
int i, match, bestmatch;
|
|
72
|
+
int sizecount, bestsize;
|
|
73
|
+
int ratecount, bestrate;
|
|
74
|
+
short *ratelist;
|
|
75
|
+
XRRScreenConfiguration *sc;
|
|
76
|
+
XRRScreenSize *sizelist;
|
|
77
|
+
|
|
78
|
+
if( _glfwLibrary.XRandR.Available )
|
|
79
|
+
{
|
|
80
|
+
sc = XRRGetScreenInfo( _glfwLibrary.Dpy,
|
|
81
|
+
RootWindow( _glfwLibrary.Dpy, screen ) );
|
|
82
|
+
|
|
83
|
+
sizelist = XRRConfigSizes( sc, &sizecount );
|
|
84
|
+
|
|
85
|
+
// Find the best matching mode
|
|
86
|
+
bestsize = -1;
|
|
87
|
+
bestmatch = 999999;
|
|
88
|
+
for( i = 0; i < sizecount; i++ )
|
|
89
|
+
{
|
|
90
|
+
match = (*width - sizelist[i].width) *
|
|
91
|
+
(*width - sizelist[i].width) +
|
|
92
|
+
(*height - sizelist[i].height) *
|
|
93
|
+
(*height - sizelist[i].height);
|
|
94
|
+
if( match < bestmatch )
|
|
95
|
+
{
|
|
96
|
+
bestmatch = match;
|
|
97
|
+
bestsize = i;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
if( bestsize != -1 )
|
|
102
|
+
{
|
|
103
|
+
// Report width & height of best matching mode
|
|
104
|
+
*width = sizelist[bestsize].width;
|
|
105
|
+
*height = sizelist[bestsize].height;
|
|
106
|
+
|
|
107
|
+
if( *rate > 0 )
|
|
108
|
+
{
|
|
109
|
+
ratelist = XRRConfigRates( sc, bestsize, &ratecount );
|
|
110
|
+
|
|
111
|
+
bestrate = -1;
|
|
112
|
+
bestmatch = 999999;
|
|
113
|
+
for( i = 0; i < ratecount; i++ )
|
|
114
|
+
{
|
|
115
|
+
match = abs( ratelist[i] - *rate );
|
|
116
|
+
if( match < bestmatch )
|
|
117
|
+
{
|
|
118
|
+
bestmatch = match;
|
|
119
|
+
bestrate = ratelist[i];
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
if( bestrate != -1 )
|
|
124
|
+
{
|
|
125
|
+
*rate = bestrate;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
// Free modelist
|
|
131
|
+
XRRFreeScreenConfigInfo( sc );
|
|
132
|
+
|
|
133
|
+
if( bestsize != -1 )
|
|
134
|
+
{
|
|
135
|
+
return bestsize;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
#elif defined( _GLFW_HAS_XF86VIDMODE )
|
|
139
|
+
XF86VidModeModeInfo **modelist;
|
|
140
|
+
int modecount, i, bestmode, bestmatch, match;
|
|
141
|
+
|
|
142
|
+
// Use the XF86VidMode extension to control video resolution
|
|
143
|
+
if( _glfwLibrary.XF86VidMode.Available )
|
|
144
|
+
{
|
|
145
|
+
// Get a list of all available display modes
|
|
146
|
+
XF86VidModeGetAllModeLines( _glfwLibrary.Dpy, screen,
|
|
147
|
+
&modecount, &modelist );
|
|
148
|
+
|
|
149
|
+
// Find the best matching mode
|
|
150
|
+
bestmode = -1;
|
|
151
|
+
bestmatch = 999999;
|
|
152
|
+
for( i = 0; i < modecount; i++ )
|
|
153
|
+
{
|
|
154
|
+
match = (*width - modelist[i]->hdisplay) *
|
|
155
|
+
(*width - modelist[i]->hdisplay) +
|
|
156
|
+
(*height - modelist[i]->vdisplay) *
|
|
157
|
+
(*height - modelist[i]->vdisplay);
|
|
158
|
+
if( match < bestmatch )
|
|
159
|
+
{
|
|
160
|
+
bestmatch = match;
|
|
161
|
+
bestmode = i;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
if( bestmode != -1 )
|
|
166
|
+
{
|
|
167
|
+
// Report width & height of best matching mode
|
|
168
|
+
*width = modelist[ bestmode ]->hdisplay;
|
|
169
|
+
*h = modelist[ bestmode ]->vdisplay;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
// Free modelist
|
|
173
|
+
XFree( modelist );
|
|
174
|
+
|
|
175
|
+
if( bestmode != -1 )
|
|
176
|
+
{
|
|
177
|
+
return bestmode;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
#endif
|
|
181
|
+
|
|
182
|
+
// Default: Simply use the screen resolution
|
|
183
|
+
*width = DisplayWidth( _glfwLibrary.Dpy, screen );
|
|
184
|
+
*height = DisplayHeight( _glfwLibrary.Dpy, screen );
|
|
185
|
+
|
|
186
|
+
return 0;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
|
|
190
|
+
//========================================================================
|
|
191
|
+
// Change the current video mode
|
|
192
|
+
//========================================================================
|
|
193
|
+
|
|
194
|
+
void _glfwSetVideoModeMODE( int screen, int mode, int rate )
|
|
195
|
+
{
|
|
196
|
+
#if defined( _GLFW_HAS_XRANDR )
|
|
197
|
+
XRRScreenConfiguration *sc;
|
|
198
|
+
Window root;
|
|
199
|
+
|
|
200
|
+
if( _glfwLibrary.XRandR.Available )
|
|
201
|
+
{
|
|
202
|
+
root = RootWindow( _glfwLibrary.Dpy, screen );
|
|
203
|
+
sc = XRRGetScreenInfo( _glfwLibrary.Dpy, root );
|
|
204
|
+
|
|
205
|
+
// Remember old size and flag that we have changed the mode
|
|
206
|
+
if( !_glfwWin.FS.ModeChanged )
|
|
207
|
+
{
|
|
208
|
+
_glfwWin.FS.OldSizeID = XRRConfigCurrentConfiguration( sc, &_glfwWin.FS.OldRotation );
|
|
209
|
+
_glfwWin.FS.OldWidth = DisplayWidth( _glfwLibrary.Dpy, screen );
|
|
210
|
+
_glfwWin.FS.OldHeight = DisplayHeight( _glfwLibrary.Dpy, screen );
|
|
211
|
+
|
|
212
|
+
_glfwWin.FS.ModeChanged = GL_TRUE;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
if( rate > 0 )
|
|
216
|
+
{
|
|
217
|
+
// Set desired configuration
|
|
218
|
+
XRRSetScreenConfigAndRate( _glfwLibrary.Dpy,
|
|
219
|
+
sc,
|
|
220
|
+
root,
|
|
221
|
+
mode,
|
|
222
|
+
RR_Rotate_0,
|
|
223
|
+
(short) rate,
|
|
224
|
+
CurrentTime );
|
|
225
|
+
}
|
|
226
|
+
else
|
|
227
|
+
{
|
|
228
|
+
// Set desired configuration
|
|
229
|
+
XRRSetScreenConfig( _glfwLibrary.Dpy,
|
|
230
|
+
sc,
|
|
231
|
+
root,
|
|
232
|
+
mode,
|
|
233
|
+
RR_Rotate_0,
|
|
234
|
+
CurrentTime );
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
XRRFreeScreenConfigInfo( sc );
|
|
238
|
+
}
|
|
239
|
+
#elif defined( _GLFW_HAS_XF86VIDMODE )
|
|
240
|
+
XF86VidModeModeInfo **modelist;
|
|
241
|
+
int modecount;
|
|
242
|
+
|
|
243
|
+
// Use the XF86VidMode extension to control video resolution
|
|
244
|
+
if( _glfwLibrary.XF86VidMode.Available )
|
|
245
|
+
{
|
|
246
|
+
// Get a list of all available display modes
|
|
247
|
+
XF86VidModeGetAllModeLines( _glfwLibrary.Dpy, screen,
|
|
248
|
+
&modecount, &modelist );
|
|
249
|
+
|
|
250
|
+
// Unlock mode switch if necessary
|
|
251
|
+
if( _glfwWin.FS.ModeChanged )
|
|
252
|
+
{
|
|
253
|
+
XF86VidModeLockModeSwitch( _glfwLibrary.Dpy, screen, 0 );
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
// Change the video mode to the desired mode
|
|
257
|
+
XF86VidModeSwitchToMode( _glfwLibrary.Dpy, screen,
|
|
258
|
+
modelist[ mode ] );
|
|
259
|
+
|
|
260
|
+
// Set viewport to upper left corner (where our window will be)
|
|
261
|
+
XF86VidModeSetViewPort( _glfwLibrary.Dpy, screen, 0, 0 );
|
|
262
|
+
|
|
263
|
+
// Lock mode switch
|
|
264
|
+
XF86VidModeLockModeSwitch( _glfwLibrary.Dpy, screen, 1 );
|
|
265
|
+
|
|
266
|
+
// Remember old mode and flag that we have changed the mode
|
|
267
|
+
if( !_glfwWin.FS.ModeChanged )
|
|
268
|
+
{
|
|
269
|
+
_glfwWin.FS.OldMode = *modelist[ 0 ];
|
|
270
|
+
_glfwWin.FS.ModeChanged = GL_TRUE;
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
// Free mode list
|
|
274
|
+
XFree( modelist );
|
|
275
|
+
}
|
|
276
|
+
#endif
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
|
|
280
|
+
//========================================================================
|
|
281
|
+
// Change the current video mode
|
|
282
|
+
//========================================================================
|
|
283
|
+
|
|
284
|
+
void _glfwSetVideoMode( int screen, int *width, int *height, int *rate )
|
|
285
|
+
{
|
|
286
|
+
int bestmode;
|
|
287
|
+
|
|
288
|
+
// Find a best match mode
|
|
289
|
+
bestmode = _glfwGetClosestVideoMode( screen, width, height, rate );
|
|
290
|
+
|
|
291
|
+
// Change mode
|
|
292
|
+
_glfwSetVideoModeMODE( screen, bestmode, *rate );
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
|
|
296
|
+
|
|
297
|
+
//************************************************************************
|
|
298
|
+
//**** Platform implementation functions ****
|
|
299
|
+
//************************************************************************
|
|
300
|
+
|
|
301
|
+
struct _glfwResolution {
|
|
302
|
+
int width;
|
|
303
|
+
int height;
|
|
304
|
+
};
|
|
305
|
+
|
|
306
|
+
//========================================================================
|
|
307
|
+
// List available video modes
|
|
308
|
+
//========================================================================
|
|
309
|
+
|
|
310
|
+
int _glfwPlatformGetVideoModes( GLFWvidmode *list, int maxcount )
|
|
311
|
+
{
|
|
312
|
+
int count, k, l, r, g, b, rgba, gl;
|
|
313
|
+
int depth, screen;
|
|
314
|
+
Display *dpy;
|
|
315
|
+
XVisualInfo *vislist, dummy;
|
|
316
|
+
int viscount, rgbcount, rescount;
|
|
317
|
+
int *rgbarray;
|
|
318
|
+
struct _glfwResolution *resarray;
|
|
319
|
+
#if defined( _GLFW_HAS_XRANDR )
|
|
320
|
+
XRRScreenConfiguration *sc;
|
|
321
|
+
XRRScreenSize *sizelist;
|
|
322
|
+
int sizecount;
|
|
323
|
+
#elif defined( _GLFW_HAS_XF86VIDMODE )
|
|
324
|
+
XF86VidModeModeInfo **modelist;
|
|
325
|
+
int modecount, width, height;
|
|
326
|
+
#endif
|
|
327
|
+
|
|
328
|
+
// Get display and screen
|
|
329
|
+
dpy = _glfwLibrary.Dpy;
|
|
330
|
+
screen = DefaultScreen( dpy );
|
|
331
|
+
|
|
332
|
+
// Get list of visuals
|
|
333
|
+
vislist = XGetVisualInfo( dpy, 0, &dummy, &viscount );
|
|
334
|
+
if( vislist == NULL )
|
|
335
|
+
{
|
|
336
|
+
return 0;
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
rgbarray = (int*) malloc( sizeof(int) * viscount );
|
|
340
|
+
rgbcount = 0;
|
|
341
|
+
|
|
342
|
+
// Build RGB array
|
|
343
|
+
for( k = 0; k < viscount; k++ )
|
|
344
|
+
{
|
|
345
|
+
// Does the visual support OpenGL & true color?
|
|
346
|
+
glXGetConfig( dpy, &vislist[k], GLX_USE_GL, &gl );
|
|
347
|
+
glXGetConfig( dpy, &vislist[k], GLX_RGBA, &rgba );
|
|
348
|
+
if( gl && rgba )
|
|
349
|
+
{
|
|
350
|
+
// Get color depth for this visual
|
|
351
|
+
depth = vislist[k].depth;
|
|
352
|
+
|
|
353
|
+
// Convert to RGB
|
|
354
|
+
_glfwBPP2RGB( depth, &r, &g, &b );
|
|
355
|
+
depth = (r<<16) | (g<<8) | b;
|
|
356
|
+
|
|
357
|
+
// Is this mode unique?
|
|
358
|
+
for( l = 0; l < rgbcount; l++ )
|
|
359
|
+
{
|
|
360
|
+
if( depth == rgbarray[ l ] )
|
|
361
|
+
{
|
|
362
|
+
break;
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
if( l >= rgbcount )
|
|
366
|
+
{
|
|
367
|
+
rgbarray[ rgbcount ] = depth;
|
|
368
|
+
rgbcount++;
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
rescount = 0;
|
|
374
|
+
resarray = NULL;
|
|
375
|
+
|
|
376
|
+
// Build resolution array
|
|
377
|
+
#if defined( _GLFW_HAS_XRANDR )
|
|
378
|
+
if( _glfwLibrary.XRandR.Available )
|
|
379
|
+
{
|
|
380
|
+
sc = XRRGetScreenInfo( dpy, RootWindow( dpy, screen ) );
|
|
381
|
+
sizelist = XRRConfigSizes( sc, &sizecount );
|
|
382
|
+
|
|
383
|
+
resarray = (struct _glfwResolution*) malloc( sizeof(struct _glfwResolution) * sizecount );
|
|
384
|
+
|
|
385
|
+
for( k = 0; k < sizecount; k++ )
|
|
386
|
+
{
|
|
387
|
+
resarray[ rescount ].width = sizelist[ k ].width;
|
|
388
|
+
resarray[ rescount ].height = sizelist[ k ].height;
|
|
389
|
+
rescount++;
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
XRRFreeScreenConfigInfo( sc );
|
|
393
|
+
}
|
|
394
|
+
#elif defined( _GLFW_HAS_XF86VIDMODE )
|
|
395
|
+
if( _glfwLibrary.XF86VidMode.Available )
|
|
396
|
+
{
|
|
397
|
+
XF86VidModeGetAllModeLines( dpy, screen, &modecount, &modelist );
|
|
398
|
+
|
|
399
|
+
resarray = (struct _glfwResolution*) malloc( sizeof(struct _glfwResolution) * modecount );
|
|
400
|
+
|
|
401
|
+
for( k = 0; k < modecount; k++ )
|
|
402
|
+
{
|
|
403
|
+
width = modelist[ k ]->hdisplay;
|
|
404
|
+
height = modelist[ k ]->vdisplay;
|
|
405
|
+
|
|
406
|
+
// Is this mode unique?
|
|
407
|
+
for( l = 0; l < rescount; l++ )
|
|
408
|
+
{
|
|
409
|
+
if( width == resarray[ l ].width && height == resarray[ l ].height )
|
|
410
|
+
{
|
|
411
|
+
break;
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
if( l >= rescount )
|
|
415
|
+
{
|
|
416
|
+
resarray[ rescount ].width = width;
|
|
417
|
+
resarray[ rescount ].height = height;
|
|
418
|
+
rescount++;
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
XFree( modelist );
|
|
423
|
+
}
|
|
424
|
+
#endif
|
|
425
|
+
|
|
426
|
+
if( !resarray )
|
|
427
|
+
{
|
|
428
|
+
rescount = 1;
|
|
429
|
+
resarray = (struct _glfwResolution*) malloc( sizeof(struct _glfwResolution) * rescount );
|
|
430
|
+
|
|
431
|
+
resarray[ 0 ].width = DisplayWidth( dpy, screen );
|
|
432
|
+
resarray[ 0 ].height = DisplayHeight( dpy, screen );
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
// Build permutations of colors and resolutions
|
|
436
|
+
count = 0;
|
|
437
|
+
for( k = 0; k < rgbcount && count < maxcount; k++ )
|
|
438
|
+
{
|
|
439
|
+
for( l = 0; l < rescount && count < maxcount; l++ )
|
|
440
|
+
{
|
|
441
|
+
list[count].Width = resarray[ l ].width;
|
|
442
|
+
list[count].Height = resarray[ l ].height;
|
|
443
|
+
list[count].RedBits = (rgbarray[ k ] >> 16) & 255;
|
|
444
|
+
list[count].GreenBits = (rgbarray[ k ] >> 8) & 255;
|
|
445
|
+
list[count].BlueBits = rgbarray[ k ] & 255;
|
|
446
|
+
count++;
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
// Free visuals list
|
|
451
|
+
XFree( vislist );
|
|
452
|
+
|
|
453
|
+
free( resarray );
|
|
454
|
+
free( rgbarray );
|
|
455
|
+
|
|
456
|
+
return count;
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
|
|
460
|
+
//========================================================================
|
|
461
|
+
// Get the desktop video mode
|
|
462
|
+
//========================================================================
|
|
463
|
+
|
|
464
|
+
void _glfwPlatformGetDesktopMode( GLFWvidmode *mode )
|
|
465
|
+
{
|
|
466
|
+
Display *dpy;
|
|
467
|
+
int bpp, screen;
|
|
468
|
+
#if defined( _GLFW_HAS_XF86VIDMODE )
|
|
469
|
+
XF86VidModeModeInfo **modelist;
|
|
470
|
+
int modecount;
|
|
471
|
+
#endif
|
|
472
|
+
|
|
473
|
+
// Get display and screen
|
|
474
|
+
dpy = _glfwLibrary.Dpy;
|
|
475
|
+
screen = DefaultScreen( dpy );
|
|
476
|
+
|
|
477
|
+
// Get display depth
|
|
478
|
+
bpp = DefaultDepth( dpy, screen );
|
|
479
|
+
|
|
480
|
+
// Convert BPP to RGB bits
|
|
481
|
+
_glfwBPP2RGB( bpp, &mode->RedBits, &mode->GreenBits, &mode->BlueBits );
|
|
482
|
+
|
|
483
|
+
#if defined( _GLFW_HAS_XRANDR )
|
|
484
|
+
if( _glfwLibrary.XRandR.Available )
|
|
485
|
+
{
|
|
486
|
+
if( _glfwWin.FS.ModeChanged )
|
|
487
|
+
{
|
|
488
|
+
mode->Width = _glfwWin.FS.OldWidth;
|
|
489
|
+
mode->Height = _glfwWin.FS.OldHeight;
|
|
490
|
+
return;
|
|
491
|
+
}
|
|
492
|
+
}
|
|
493
|
+
#elif defined( _GLFW_HAS_XF86VIDMODE )
|
|
494
|
+
if( _glfwLibrary.XF86VidMode.Available )
|
|
495
|
+
{
|
|
496
|
+
if( _glfwWin.FS.ModeChanged )
|
|
497
|
+
{
|
|
498
|
+
// The old (desktop) mode is stored in _glfwWin.FS.OldMode
|
|
499
|
+
mode->Width = _glfwWin.FS.OldMode.hdisplay;
|
|
500
|
+
mode->Height = _glfwWin.FS.OldMode.vdisplay;
|
|
501
|
+
}
|
|
502
|
+
else
|
|
503
|
+
{
|
|
504
|
+
// Use the XF86VidMode extension to get list of video modes
|
|
505
|
+
XF86VidModeGetAllModeLines( dpy, screen, &modecount,
|
|
506
|
+
&modelist );
|
|
507
|
+
|
|
508
|
+
// The first mode in the list is the current (desktio) mode
|
|
509
|
+
mode->Width = modelist[ 0 ]->hdisplay;
|
|
510
|
+
mode->Height = modelist[ 0 ]->vdisplay;
|
|
511
|
+
|
|
512
|
+
// Free list
|
|
513
|
+
XFree( modelist );
|
|
514
|
+
}
|
|
515
|
+
|
|
516
|
+
return;
|
|
517
|
+
}
|
|
518
|
+
#endif
|
|
519
|
+
|
|
520
|
+
// Get current display width and height
|
|
521
|
+
mode->Width = DisplayWidth( dpy, screen );
|
|
522
|
+
mode->Height = DisplayHeight( dpy, screen );
|
|
523
|
+
}
|
|
524
|
+
|