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
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,432 @@
|
|
|
1
|
+
#========================================================================
|
|
2
|
+
# This is a small test application for GLFW.
|
|
3
|
+
# The program uses a "split window" view, rendering four views of the
|
|
4
|
+
# same scene in one window (e.g. uesful for 3D modelling software). This
|
|
5
|
+
# demo uses scissors to separete the four different rendering areas from
|
|
6
|
+
# each other.
|
|
7
|
+
#
|
|
8
|
+
# (If the code seems a little bit strange here and there, it may be
|
|
9
|
+
# because I am not a friend of orthogonal projections)
|
|
10
|
+
#========================================================================
|
|
11
|
+
# Converted to ruby from GLFW example splitview.c
|
|
12
|
+
|
|
13
|
+
require 'opengl'
|
|
14
|
+
require 'glfw'
|
|
15
|
+
include Gl,Glu,Glfw,Math
|
|
16
|
+
|
|
17
|
+
#========================================================================
|
|
18
|
+
# Global variables
|
|
19
|
+
#========================================================================
|
|
20
|
+
|
|
21
|
+
# Mouse position
|
|
22
|
+
$xpos,$ypos = 0,0
|
|
23
|
+
|
|
24
|
+
# Window size
|
|
25
|
+
$width,$height = 0,0
|
|
26
|
+
|
|
27
|
+
# Active view: 0 = none, 1 = upper left, 2 = upper right, 3 = lower left,
|
|
28
|
+
# 4 = lower right
|
|
29
|
+
$active_view = 0
|
|
30
|
+
|
|
31
|
+
# Rotation around each axis
|
|
32
|
+
$rot_x,$rot_y,$rot_z = 0,0,0
|
|
33
|
+
|
|
34
|
+
# Do redraw?
|
|
35
|
+
$do_redraw = 1
|
|
36
|
+
|
|
37
|
+
#========================================================================
|
|
38
|
+
# DrawTorus() - Draw a solid torus (use a display list for the model)
|
|
39
|
+
#========================================================================
|
|
40
|
+
|
|
41
|
+
TORUS_MAJOR = 1.5
|
|
42
|
+
TORUS_MINOR = 0.5
|
|
43
|
+
TORUS_MAJOR_RES = 32
|
|
44
|
+
TORUS_MINOR_RES = 32
|
|
45
|
+
|
|
46
|
+
def DrawTorus
|
|
47
|
+
@@torus_list ||= 0 # static(class) variable, initialize or no-op if already initialized
|
|
48
|
+
if (@@torus_list==0)
|
|
49
|
+
# Start recording displaylist
|
|
50
|
+
@@torus_list = glGenLists( 1 )
|
|
51
|
+
glNewList( @@torus_list, GL_COMPILE_AND_EXECUTE )
|
|
52
|
+
|
|
53
|
+
# Draw torus
|
|
54
|
+
twopi = 2.0 * PI;
|
|
55
|
+
TORUS_MINOR_RES.times do |i|
|
|
56
|
+
glBegin(GL_QUAD_STRIP)
|
|
57
|
+
0.upto(TORUS_MAJOR_RES) do |j|
|
|
58
|
+
1.downto(0) do |k| # inclusive row
|
|
59
|
+
s = (i + k) % TORUS_MINOR_RES + 0.5
|
|
60
|
+
t = j % TORUS_MAJOR_RES
|
|
61
|
+
|
|
62
|
+
# Calculate point on surface
|
|
63
|
+
x = (TORUS_MAJOR+TORUS_MINOR*cos(s*twopi/TORUS_MINOR_RES))*cos(t*twopi/TORUS_MAJOR_RES)
|
|
64
|
+
y = TORUS_MINOR * sin(s * twopi / TORUS_MINOR_RES);
|
|
65
|
+
z = (TORUS_MAJOR+TORUS_MINOR*cos(s*twopi/TORUS_MINOR_RES))*sin(t*twopi/TORUS_MAJOR_RES)
|
|
66
|
+
|
|
67
|
+
# Calculate surface normal
|
|
68
|
+
nx = x - TORUS_MAJOR*cos(t*twopi/TORUS_MAJOR_RES)
|
|
69
|
+
ny = y
|
|
70
|
+
nz = z - TORUS_MAJOR*sin(t*twopi/TORUS_MAJOR_RES)
|
|
71
|
+
scale = 1.0 / sqrt( nx*nx + ny*ny + nz*nz )
|
|
72
|
+
nx *= scale
|
|
73
|
+
ny *= scale
|
|
74
|
+
nz *= scale
|
|
75
|
+
|
|
76
|
+
glNormal3f( nx, ny, nz )
|
|
77
|
+
glVertex3f( x, y, z )
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
glEnd()
|
|
81
|
+
end
|
|
82
|
+
# Stop recording displaylist
|
|
83
|
+
glEndList()
|
|
84
|
+
else
|
|
85
|
+
# Playback displaylist
|
|
86
|
+
glCallList( @@torus_list )
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
#========================================================================
|
|
91
|
+
# DrawScene() - Draw the scene (a rotating torus)
|
|
92
|
+
#========================================================================
|
|
93
|
+
def DrawScene
|
|
94
|
+
model_diffuse = [1.0, 0.8, 0.8, 1.0]
|
|
95
|
+
model_specular = [0.6, 0.6, 0.6, 1.0]
|
|
96
|
+
model_shininess = 20.0
|
|
97
|
+
|
|
98
|
+
glPushMatrix()
|
|
99
|
+
|
|
100
|
+
# Rotate the object
|
|
101
|
+
glRotatef( $rot_x*0.5, 1.0, 0.0, 0.0 )
|
|
102
|
+
glRotatef( $rot_y*0.5, 0.0, 1.0, 0.0 )
|
|
103
|
+
glRotatef( $rot_z*0.5, 0.0, 0.0, 1.0 )
|
|
104
|
+
|
|
105
|
+
# Set model color (used for orthogonal views, lighting disabled)
|
|
106
|
+
glColor4fv( model_diffuse )
|
|
107
|
+
|
|
108
|
+
# Set model material (used for perspective view, lighting enabled)
|
|
109
|
+
glMaterialfv( GL_FRONT, GL_DIFFUSE, model_diffuse )
|
|
110
|
+
glMaterialfv( GL_FRONT, GL_SPECULAR, model_specular )
|
|
111
|
+
glMaterialf( GL_FRONT, GL_SHININESS, model_shininess )
|
|
112
|
+
|
|
113
|
+
# Draw torus
|
|
114
|
+
DrawTorus()
|
|
115
|
+
|
|
116
|
+
glPopMatrix()
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
#========================================================================
|
|
120
|
+
# DrawGrid() - Draw a 2D grid (used for orthogonal views)
|
|
121
|
+
#========================================================================
|
|
122
|
+
def DrawGrid(scale,steps)
|
|
123
|
+
glPushMatrix()
|
|
124
|
+
|
|
125
|
+
# Set background to some dark bluish grey
|
|
126
|
+
glClearColor( 0.05, 0.05, 0.2, 0.0)
|
|
127
|
+
glClear( GL_COLOR_BUFFER_BIT )
|
|
128
|
+
|
|
129
|
+
# Setup modelview matrix (flat XY view)
|
|
130
|
+
glLoadIdentity()
|
|
131
|
+
gluLookAt( 0.0, 0.0, 1.0,
|
|
132
|
+
0.0, 0.0, 0.0,
|
|
133
|
+
0.0, 1.0, 0.0 )
|
|
134
|
+
|
|
135
|
+
# We don't want to update the Z-buffer
|
|
136
|
+
glDepthMask( GL_FALSE )
|
|
137
|
+
|
|
138
|
+
# Set grid color
|
|
139
|
+
glColor3f( 0.0, 0.5, 0.5 )
|
|
140
|
+
|
|
141
|
+
glBegin( GL_LINES )
|
|
142
|
+
|
|
143
|
+
# Horizontal lines
|
|
144
|
+
x = scale * 0.5 * (steps-1)
|
|
145
|
+
y = -scale * 0.5 * (steps-1)
|
|
146
|
+
steps.times do |i|
|
|
147
|
+
glVertex3f( -x, y, 0.0 )
|
|
148
|
+
glVertex3f( x, y, 0.0 )
|
|
149
|
+
y += scale
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
# Vertical lines
|
|
153
|
+
x = -scale * 0.5 * (steps-1)
|
|
154
|
+
y = scale * 0.5 * (steps-1)
|
|
155
|
+
steps.times do |i|
|
|
156
|
+
glVertex3f( x, -y, 0.0 )
|
|
157
|
+
glVertex3f( x, y, 0.0 )
|
|
158
|
+
x += scale
|
|
159
|
+
end
|
|
160
|
+
glEnd();
|
|
161
|
+
|
|
162
|
+
# Enable Z-buffer writing again
|
|
163
|
+
glDepthMask( GL_TRUE )
|
|
164
|
+
|
|
165
|
+
glPopMatrix()
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
#========================================================================
|
|
169
|
+
# DrawAllViews()
|
|
170
|
+
#========================================================================
|
|
171
|
+
def DrawAllViews
|
|
172
|
+
light_position = [0.0, 8.0, 8.0, 1.0]
|
|
173
|
+
light_diffuse = [1.0, 1.0, 1.0, 1.0]
|
|
174
|
+
light_specular = [1.0, 1.0, 1.0, 1.0]
|
|
175
|
+
light_ambient = [0.2, 0.2, 0.3, 1.0]
|
|
176
|
+
|
|
177
|
+
# Calculate aspect of window
|
|
178
|
+
if( $height > 0 )
|
|
179
|
+
aspect = $width.to_f / $height.to_f
|
|
180
|
+
else
|
|
181
|
+
aspect = 1.0
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
# Clear screen
|
|
185
|
+
glClearColor( 0.0, 0.0, 0.0, 0.0)
|
|
186
|
+
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT )
|
|
187
|
+
|
|
188
|
+
# Enable scissor test
|
|
189
|
+
glEnable( GL_SCISSOR_TEST )
|
|
190
|
+
|
|
191
|
+
# Enable depth test
|
|
192
|
+
glEnable( GL_DEPTH_TEST )
|
|
193
|
+
glDepthFunc( GL_LEQUAL )
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
# ** ORTHOGONAL VIEWS **
|
|
197
|
+
|
|
198
|
+
# For orthogonal views, use wireframe rendering
|
|
199
|
+
glPolygonMode( GL_FRONT_AND_BACK, GL_LINE )
|
|
200
|
+
|
|
201
|
+
# Enable line anti-aliasing
|
|
202
|
+
glEnable( GL_LINE_SMOOTH )
|
|
203
|
+
glEnable( GL_BLEND )
|
|
204
|
+
glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA )
|
|
205
|
+
|
|
206
|
+
# Setup orthogonal projection matrix
|
|
207
|
+
glMatrixMode( GL_PROJECTION )
|
|
208
|
+
glLoadIdentity()
|
|
209
|
+
glOrtho( -3.0*aspect, 3.0*aspect, -3.0, 3.0, 1.0, 50.0 )
|
|
210
|
+
|
|
211
|
+
# Upper left view (TOP VIEW)
|
|
212
|
+
glViewport( 0, $height/2, $width/2, $height/2 )
|
|
213
|
+
glScissor( 0, $height/2, $width/2, $height/2 )
|
|
214
|
+
glMatrixMode( GL_MODELVIEW )
|
|
215
|
+
glLoadIdentity()
|
|
216
|
+
gluLookAt( 0.0, 10.0, 1e-3, # Eye-position (above)
|
|
217
|
+
0.0, 0.0, 0.0, # View-point
|
|
218
|
+
0.0, 1.0, 0.0 ) # Up-vector
|
|
219
|
+
DrawGrid( 0.5, 12 )
|
|
220
|
+
DrawScene()
|
|
221
|
+
|
|
222
|
+
# Lower left view (FRONT VIEW)
|
|
223
|
+
glViewport( 0, 0, $width/2, $height/2 )
|
|
224
|
+
glScissor( 0, 0, $width/2, $height/2 )
|
|
225
|
+
glMatrixMode( GL_MODELVIEW )
|
|
226
|
+
glLoadIdentity()
|
|
227
|
+
gluLookAt( 0.0, 0.0, 10.0, # Eye-position (in front of)
|
|
228
|
+
0.0, 0.0, 0.0, # View-point
|
|
229
|
+
0.0, 1.0, 0.0 ) # Up-vector
|
|
230
|
+
DrawGrid( 0.5, 12 )
|
|
231
|
+
DrawScene()
|
|
232
|
+
|
|
233
|
+
# Lower right view (SIDE VIEW)
|
|
234
|
+
glViewport( $width/2, 0, $width/2, $height/2 )
|
|
235
|
+
glScissor( $width/2, 0, $width/2, $height/2 )
|
|
236
|
+
glMatrixMode( GL_MODELVIEW )
|
|
237
|
+
glLoadIdentity()
|
|
238
|
+
gluLookAt( 10.0, 0.0, 0.0, # Eye-position (to the right)
|
|
239
|
+
0.0, 0.0, 0.0, # View-point
|
|
240
|
+
0.0, 1.0, 0.0 ) # Up-vector
|
|
241
|
+
DrawGrid( 0.5, 12 )
|
|
242
|
+
DrawScene()
|
|
243
|
+
|
|
244
|
+
# Disable line anti-aliasing
|
|
245
|
+
glDisable( GL_LINE_SMOOTH )
|
|
246
|
+
glDisable( GL_BLEND )
|
|
247
|
+
|
|
248
|
+
# ** PERSPECTIVE VIEW **
|
|
249
|
+
|
|
250
|
+
# For perspective view, use solid rendering
|
|
251
|
+
glPolygonMode( GL_FRONT_AND_BACK, GL_FILL )
|
|
252
|
+
|
|
253
|
+
# Enable face culling (faster rendering)
|
|
254
|
+
glEnable( GL_CULL_FACE )
|
|
255
|
+
glCullFace( GL_BACK )
|
|
256
|
+
glFrontFace( GL_CW )
|
|
257
|
+
|
|
258
|
+
# Setup perspective projection matrix
|
|
259
|
+
glMatrixMode( GL_PROJECTION )
|
|
260
|
+
glLoadIdentity()
|
|
261
|
+
gluPerspective( 65.0, aspect, 1.0, 50.0 )
|
|
262
|
+
|
|
263
|
+
# Upper right view (PERSPECTIVE VIEW)
|
|
264
|
+
glViewport( $width/2, $height/2, $width/2, $height/2 )
|
|
265
|
+
glScissor( $width/2, $height/2, $width/2, $height/2 )
|
|
266
|
+
glMatrixMode( GL_MODELVIEW )
|
|
267
|
+
glLoadIdentity()
|
|
268
|
+
gluLookAt( 3.0, 1.5, 3.0, # Eye-position
|
|
269
|
+
0.0, 0.0, 0.0, # View-point
|
|
270
|
+
0.0, 1.0, 0.0 ) # Up-vector
|
|
271
|
+
|
|
272
|
+
# Configure and enable light source 1
|
|
273
|
+
glLightfv( GL_LIGHT1, GL_POSITION, light_position )
|
|
274
|
+
glLightfv( GL_LIGHT1, GL_AMBIENT, light_ambient )
|
|
275
|
+
glLightfv( GL_LIGHT1, GL_DIFFUSE, light_diffuse )
|
|
276
|
+
glLightfv( GL_LIGHT1, GL_SPECULAR, light_specular )
|
|
277
|
+
glEnable( GL_LIGHT1 )
|
|
278
|
+
glEnable( GL_LIGHTING )
|
|
279
|
+
|
|
280
|
+
# Draw scene
|
|
281
|
+
DrawScene()
|
|
282
|
+
|
|
283
|
+
# Disable lighting
|
|
284
|
+
glDisable( GL_LIGHTING )
|
|
285
|
+
|
|
286
|
+
# Disable face culling
|
|
287
|
+
glDisable( GL_CULL_FACE )
|
|
288
|
+
|
|
289
|
+
# Disable depth test
|
|
290
|
+
glDisable( GL_DEPTH_TEST )
|
|
291
|
+
|
|
292
|
+
# Disable scissor test
|
|
293
|
+
glDisable( GL_SCISSOR_TEST )
|
|
294
|
+
|
|
295
|
+
# Draw a border around the active view
|
|
296
|
+
if( $active_view > 0 && $active_view != 2 )
|
|
297
|
+
glViewport( 0, 0, $width, $height )
|
|
298
|
+
glMatrixMode( GL_PROJECTION )
|
|
299
|
+
glLoadIdentity()
|
|
300
|
+
glOrtho( 0.0, 2.0, 0.0, 2.0, 0.0, 1.0 )
|
|
301
|
+
glMatrixMode( GL_MODELVIEW )
|
|
302
|
+
glLoadIdentity()
|
|
303
|
+
glColor3f( 1.0, 1.0, 0.6 )
|
|
304
|
+
glTranslatef( ($active_view-1)&1, 1-($active_view-1)/2, 0.0 )
|
|
305
|
+
glBegin( GL_LINE_STRIP )
|
|
306
|
+
glVertex2i( 0, 0 )
|
|
307
|
+
glVertex2i( 1, 0 )
|
|
308
|
+
glVertex2i( 1, 1 )
|
|
309
|
+
glVertex2i( 0, 1 )
|
|
310
|
+
glVertex2i( 0, 0 )
|
|
311
|
+
glEnd()
|
|
312
|
+
end
|
|
313
|
+
end
|
|
314
|
+
|
|
315
|
+
#=======================================================================
|
|
316
|
+
# WindowSizeFun() - Window size callback function
|
|
317
|
+
#========================================================================
|
|
318
|
+
|
|
319
|
+
WindowSizeFun = lambda do |w,h|
|
|
320
|
+
$width = w
|
|
321
|
+
$height = h > 0 ? h : 1
|
|
322
|
+
$do_redraw = 1
|
|
323
|
+
end
|
|
324
|
+
|
|
325
|
+
#========================================================================
|
|
326
|
+
# WindowRefreshFun() - Window refresh callback function
|
|
327
|
+
#========================================================================
|
|
328
|
+
|
|
329
|
+
WindowRefreshFun = lambda do
|
|
330
|
+
$do_redraw = 1
|
|
331
|
+
end
|
|
332
|
+
|
|
333
|
+
|
|
334
|
+
#========================================================================
|
|
335
|
+
# MousePosFun() - Mouse position callback function
|
|
336
|
+
#========================================================================
|
|
337
|
+
|
|
338
|
+
MousePosFun = lambda do |x,y|
|
|
339
|
+
case $active_view
|
|
340
|
+
when 1:
|
|
341
|
+
$rot_x += y - $ypos
|
|
342
|
+
$rot_z += x - $xpos
|
|
343
|
+
$do_redraw = 1
|
|
344
|
+
when 3:
|
|
345
|
+
$rot_x += y - $ypos
|
|
346
|
+
$rot_y += x - $xpos
|
|
347
|
+
$do_redraw = 1
|
|
348
|
+
when 4:
|
|
349
|
+
$rot_y += x - $xpos
|
|
350
|
+
$rot_z += y - $ypos
|
|
351
|
+
$do_redraw = 1
|
|
352
|
+
else
|
|
353
|
+
# Do nothing for perspective view, or if no view is selected
|
|
354
|
+
end
|
|
355
|
+
$xpos = x
|
|
356
|
+
$ypos = y
|
|
357
|
+
end
|
|
358
|
+
|
|
359
|
+
#========================================================================
|
|
360
|
+
# MouseButtonFun() - Mouse button callback function
|
|
361
|
+
#========================================================================
|
|
362
|
+
|
|
363
|
+
MouseButtonFun = lambda do |button,action|
|
|
364
|
+
# Button clicked?
|
|
365
|
+
if( ( button == GLFW_MOUSE_BUTTON_LEFT ) && action == GLFW_PRESS )
|
|
366
|
+
# Detect which of the four views was clicked
|
|
367
|
+
$active_view = 1
|
|
368
|
+
if( $xpos >= $width/2 )
|
|
369
|
+
$active_view += 1
|
|
370
|
+
end
|
|
371
|
+
if( $ypos >= $height/2 )
|
|
372
|
+
$active_view += 2
|
|
373
|
+
end
|
|
374
|
+
|
|
375
|
+
# Button released?
|
|
376
|
+
elsif( button == GLFW_MOUSE_BUTTON_LEFT )
|
|
377
|
+
# Deselect any previously selected view
|
|
378
|
+
$active_view = 0
|
|
379
|
+
end
|
|
380
|
+
|
|
381
|
+
$do_redraw = 1
|
|
382
|
+
end
|
|
383
|
+
|
|
384
|
+
#========================================================================
|
|
385
|
+
# main()
|
|
386
|
+
#========================================================================
|
|
387
|
+
|
|
388
|
+
running = true
|
|
389
|
+
|
|
390
|
+
# Open OpenGL window
|
|
391
|
+
if( glfwOpenWindow( 500, 500, 0,0,0,0, 16,0, GLFW_WINDOW ) == false )
|
|
392
|
+
exit
|
|
393
|
+
end
|
|
394
|
+
|
|
395
|
+
# Set window title
|
|
396
|
+
glfwSetWindowTitle( "Split view demo" )
|
|
397
|
+
|
|
398
|
+
# Enable sticky keys
|
|
399
|
+
glfwEnable( GLFW_STICKY_KEYS )
|
|
400
|
+
|
|
401
|
+
# Enable mouse cursor (only needed for fullscreen mode)
|
|
402
|
+
glfwEnable( GLFW_MOUSE_CURSOR )
|
|
403
|
+
|
|
404
|
+
# Disable automatic event polling
|
|
405
|
+
glfwDisable( GLFW_AUTO_POLL_EVENTS )
|
|
406
|
+
|
|
407
|
+
# Set callback functions
|
|
408
|
+
glfwSetWindowSizeCallback( WindowSizeFun )
|
|
409
|
+
glfwSetWindowRefreshCallback( WindowRefreshFun )
|
|
410
|
+
glfwSetMousePosCallback( MousePosFun )
|
|
411
|
+
glfwSetMouseButtonCallback( MouseButtonFun )
|
|
412
|
+
|
|
413
|
+
# Main loop
|
|
414
|
+
while running
|
|
415
|
+
# Only redraw if we need to
|
|
416
|
+
if( $do_redraw )
|
|
417
|
+
# Draw all views
|
|
418
|
+
DrawAllViews()
|
|
419
|
+
|
|
420
|
+
# Swap buffers
|
|
421
|
+
glfwSwapBuffers()
|
|
422
|
+
|
|
423
|
+
$do_redraw = 0
|
|
424
|
+
end
|
|
425
|
+
|
|
426
|
+
# Wait for new events
|
|
427
|
+
glfwWaitEvents()
|
|
428
|
+
|
|
429
|
+
# Check if the ESC key was pressed or the window was closed
|
|
430
|
+
running = (glfwGetKey( GLFW_KEY_ESC ) == GLFW_RELEASE) &&
|
|
431
|
+
(glfwGetWindowParam( GLFW_OPENED ) == true)
|
|
432
|
+
end
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
#========================================================================
|
|
2
|
+
# This is a small test application for GLFW.
|
|
3
|
+
# The program opens a window (640x480), and renders a spinning colored
|
|
4
|
+
# triangle (it is controlled with both the GLFW timer and the mouse). It
|
|
5
|
+
# also calculates the rendering speed (FPS), which is displayed in the
|
|
6
|
+
# window title bar.
|
|
7
|
+
#========================================================================
|
|
8
|
+
# Converted to ruby from GLFW example triangle.c
|
|
9
|
+
|
|
10
|
+
require 'opengl'
|
|
11
|
+
require 'glfw'
|
|
12
|
+
include Gl,Glu,Glfw
|
|
13
|
+
|
|
14
|
+
# main
|
|
15
|
+
|
|
16
|
+
# Open OpenGL window
|
|
17
|
+
if (glfwOpenWindow( 640, 480, 0,0,0,0, 0,0, GLFW_WINDOW ) == false)
|
|
18
|
+
exit
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# Enable sticky keys
|
|
22
|
+
glfwEnable( GLFW_STICKY_KEYS )
|
|
23
|
+
|
|
24
|
+
# Disable vertical sync (on cards that support it)
|
|
25
|
+
glfwSwapInterval( 0 )
|
|
26
|
+
|
|
27
|
+
# Main loop
|
|
28
|
+
running = true
|
|
29
|
+
frames = 0
|
|
30
|
+
t0 = glfwGetTime()
|
|
31
|
+
|
|
32
|
+
while running == true
|
|
33
|
+
# Get time and mouse position
|
|
34
|
+
t = glfwGetTime()
|
|
35
|
+
x,y = glfwGetMousePos()
|
|
36
|
+
|
|
37
|
+
# Calculate and display FPS (frames per second)
|
|
38
|
+
if( (t-t0) > 1.0 || frames == 0 )
|
|
39
|
+
fps = frames.to_f / (t-t0)
|
|
40
|
+
titlestr = sprintf("Spinning Triangle (%.1f FPS)", fps )
|
|
41
|
+
glfwSetWindowTitle( titlestr )
|
|
42
|
+
t0 = t
|
|
43
|
+
frames = 0
|
|
44
|
+
end
|
|
45
|
+
frames += 1
|
|
46
|
+
|
|
47
|
+
# Get window size (may be different than the requested size)
|
|
48
|
+
width,height = glfwGetWindowSize()
|
|
49
|
+
height = height > 0 ? height : 1
|
|
50
|
+
|
|
51
|
+
# Set viewport
|
|
52
|
+
glViewport( 0, 0, width, height )
|
|
53
|
+
|
|
54
|
+
# Clear color buffer
|
|
55
|
+
glClearColor( 0.0, 0.0, 0.0, 0.0 )
|
|
56
|
+
glClear( GL_COLOR_BUFFER_BIT )
|
|
57
|
+
|
|
58
|
+
# Select and setup the projection matrix
|
|
59
|
+
glMatrixMode( GL_PROJECTION )
|
|
60
|
+
glLoadIdentity()
|
|
61
|
+
gluPerspective( 65.0, width.to_f/height.to_f, 1.0, 100.0 )
|
|
62
|
+
|
|
63
|
+
# Select and setup the modelview matrix
|
|
64
|
+
glMatrixMode( GL_MODELVIEW )
|
|
65
|
+
glLoadIdentity()
|
|
66
|
+
gluLookAt( 0.0, 1.0, 0.0, # Eye-position
|
|
67
|
+
0.0, 20.0, 0.0, # View-point
|
|
68
|
+
0.0, 0.0, 1.0 ) # Up-vector
|
|
69
|
+
|
|
70
|
+
# Draw a rotating colorful triangle
|
|
71
|
+
glTranslatef( 0.0, 14.0, 0.0 )
|
|
72
|
+
glRotatef( 0.3*x.to_f + t.to_f*100.0, 0.0, 0.0, 1.0 )
|
|
73
|
+
glBegin( GL_TRIANGLES )
|
|
74
|
+
glColor3f( 1.0, 0.0, 0.0 )
|
|
75
|
+
glVertex3f( -5.0, 0.0, -4.0 )
|
|
76
|
+
glColor3f( 0.0, 1.0, 0.0 )
|
|
77
|
+
glVertex3f( 5.0, 0.0, -4.0 )
|
|
78
|
+
glColor3f( 0.0, 0.0, 1.0 )
|
|
79
|
+
glVertex3f( 0.0, 0.0, 6.0 )
|
|
80
|
+
glEnd()
|
|
81
|
+
|
|
82
|
+
# Swap buffers
|
|
83
|
+
glfwSwapBuffers()
|
|
84
|
+
|
|
85
|
+
# Check if the ESC key was pressed or the window was closed
|
|
86
|
+
running = ( glfwGetKey( GLFW_KEY_ESC ) == GLFW_RELEASE &&
|
|
87
|
+
glfwGetWindowParam( GLFW_OPENED ) == true )
|
|
88
|
+
end
|
|
89
|
+
|