alltom-glapp 0.0.4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- data/README.textile +11 -14
- data/VERSION +1 -1
- data/examples/sprite.rb +5 -6
- data/examples/triangles.rb +2 -3
- data/examples/triangles2.rb +2 -3
- data/glapp.gemspec +1 -1
- data/lib/glapp.rb +93 -116
- metadata +1 -1
data/README.textile
CHANGED
@@ -2,12 +2,8 @@ h1. GLApp - A tiny wrapper for ruby-opengl
|
|
2
2
|
|
3
3
|
It's simple:
|
4
4
|
|
5
|
-
# require "
|
6
|
-
# Include GLApp
|
7
|
-
|
8
|
-
<pre><code>class MyGame
|
9
|
-
include GLApp::Engine
|
10
|
-
end</code></pre>
|
5
|
+
# require "glapp"
|
6
|
+
# Include GLApp
|
11
7
|
# Override as many of the callbacks as you need:
|
12
8
|
|
13
9
|
* setup
|
@@ -20,24 +16,25 @@ end</code></pre>
|
|
20
16
|
* mouse_click(button, state, x, y)
|
21
17
|
* mouse_dragging_motion(x, y)
|
22
18
|
* mouse_passive_motion(x, y)
|
23
|
-
#
|
19
|
+
# If you need more control, override the default behavior of these:
|
24
20
|
|
25
|
-
|
26
|
-
|
27
|
-
|
21
|
+
* setup_context
|
22
|
+
* pre_draw
|
23
|
+
* post_draw
|
24
|
+
* resize
|
25
|
+
# Call show with width, height, title, and whether to be full-screen
|
28
26
|
|
29
27
|
Look at the scripts in the examples/ directory.
|
30
28
|
In fact, here's one:
|
31
29
|
|
32
|
-
require '
|
30
|
+
require 'glapp'
|
33
31
|
|
34
32
|
class MyGame
|
35
|
-
include GLApp
|
33
|
+
include GLApp
|
36
34
|
def draw
|
37
35
|
glTranslate(0, 0, -5)
|
38
36
|
glutSolidCube(2)
|
39
37
|
end
|
40
38
|
end
|
41
39
|
|
42
|
-
|
43
|
-
app.show
|
40
|
+
MyGame.new.show 800, 600, "My Game"
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.5
|
data/examples/sprite.rb
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
require "rubygems"
|
2
2
|
require "glapp"
|
3
3
|
|
4
|
-
include GLApp
|
5
|
-
public
|
4
|
+
include GLApp
|
6
5
|
|
7
6
|
class Texture
|
8
7
|
attr_reader :num, :width, :height
|
@@ -157,15 +156,15 @@ def draw
|
|
157
156
|
# change coordinate system to match screen pixels
|
158
157
|
glMatrixMode(GL_PROJECTION)
|
159
158
|
glLoadIdentity
|
160
|
-
glOrtho(0,
|
159
|
+
glOrtho(0, width, height, 0, -1000, 1000)
|
161
160
|
glMatrixMode(GL_MODELVIEW)
|
162
161
|
glLoadIdentity
|
163
|
-
|
162
|
+
|
164
163
|
# draw a hedgehog in the center of the screen
|
165
164
|
glPushMatrix
|
166
|
-
glTranslate(
|
165
|
+
glTranslate(width/2, height/2, 0)
|
167
166
|
@sprites[@animator.frame].render
|
168
167
|
glPopMatrix
|
169
168
|
end
|
170
169
|
|
171
|
-
|
170
|
+
show 300, 300, "sprite demo"
|
data/examples/triangles.rb
CHANGED
@@ -34,7 +34,7 @@ class Triangle
|
|
34
34
|
end
|
35
35
|
|
36
36
|
class TriangleDemo
|
37
|
-
include GLApp
|
37
|
+
include GLApp
|
38
38
|
|
39
39
|
def setup
|
40
40
|
@triangles = Triangle.boom(10)
|
@@ -53,5 +53,4 @@ class TriangleDemo
|
|
53
53
|
end
|
54
54
|
end
|
55
55
|
|
56
|
-
|
57
|
-
app.show
|
56
|
+
TriangleDemo.new.show 800, 300, "triangle demo"
|
data/examples/triangles2.rb
CHANGED
@@ -4,8 +4,7 @@
|
|
4
4
|
require "rubygems"
|
5
5
|
require "glapp"
|
6
6
|
|
7
|
-
include GLApp
|
8
|
-
public
|
7
|
+
include GLApp
|
9
8
|
|
10
9
|
class Triangle
|
11
10
|
attr_accessor :angle
|
@@ -53,4 +52,4 @@ end
|
|
53
52
|
|
54
53
|
@triangles = Triangle.boom(10)
|
55
54
|
|
56
|
-
|
55
|
+
show 800, 300, "triangle demo"
|
data/glapp.gemspec
CHANGED
data/lib/glapp.rb
CHANGED
@@ -1,58 +1,106 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'opengl'
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
|
4
|
+
module GLApp
|
5
|
+
attr_reader :width, :height, :title
|
6
|
+
|
7
|
+
def show(width, height, title = "glapp", fullscreen = false)
|
8
|
+
glutInit
|
9
|
+
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH)
|
10
|
+
|
7
11
|
@width = width
|
8
12
|
@height = height
|
9
13
|
@title = title
|
10
|
-
|
11
|
-
|
14
|
+
|
15
|
+
fullscreen ? go_fullscreen : go_windowed
|
16
|
+
setup
|
17
|
+
|
18
|
+
setup_context
|
19
|
+
wire
|
20
|
+
glutMainLoop
|
12
21
|
end
|
22
|
+
|
23
|
+
def go_windowed
|
24
|
+
if glutGameModeGet(GLUT_GAME_MODE_ACTIVE) != 0
|
25
|
+
glutLeaveGameMode
|
26
|
+
end
|
13
27
|
|
14
|
-
|
15
|
-
|
28
|
+
unless @window
|
29
|
+
glutInitWindowSize(width, height)
|
30
|
+
@window = glutCreateWindow(title)
|
31
|
+
end
|
16
32
|
end
|
17
33
|
|
18
|
-
def
|
19
|
-
|
34
|
+
def go_fullscreen
|
35
|
+
glutGameModeString([width, height].join("x"))
|
36
|
+
|
37
|
+
if glutGameModeGet(GLUT_GAME_MODE_POSSIBLE)
|
38
|
+
glutEnterGameMode
|
39
|
+
if glutGameModeGet(GLUT_GAME_MODE_ACTIVE) == 0
|
40
|
+
go_windowed
|
41
|
+
end
|
42
|
+
else
|
43
|
+
go_windowed
|
44
|
+
end
|
20
45
|
end
|
46
|
+
|
47
|
+
# begin hooks
|
21
48
|
|
22
|
-
def
|
23
|
-
|
49
|
+
def setup_context
|
50
|
+
glEnable(GL_DEPTH_TEST)
|
51
|
+
glEnable(GL_BLEND)
|
52
|
+
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
|
53
|
+
glutIgnoreKeyRepeat(1)
|
54
|
+
end
|
55
|
+
|
56
|
+
def setup
|
24
57
|
end
|
58
|
+
|
59
|
+
def pre_draw
|
60
|
+
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
|
61
|
+
glMatrixMode(GL_PROJECTION)
|
62
|
+
glLoadIdentity
|
63
|
+
gluPerspective(30.0, width / height, 0.1, 1000.0)
|
25
64
|
|
65
|
+
glMatrixMode(GL_MODELVIEW)
|
66
|
+
glLoadIdentity
|
67
|
+
end
|
68
|
+
|
69
|
+
def draw
|
70
|
+
end
|
71
|
+
|
72
|
+
def post_draw
|
73
|
+
glutSwapBuffers
|
74
|
+
end
|
75
|
+
|
76
|
+
def update(seconds)
|
77
|
+
end
|
78
|
+
|
79
|
+
def keyboard_down(key, modifiers)
|
80
|
+
end
|
81
|
+
|
26
82
|
def keyboard_up(key, modifiers)
|
27
|
-
@engine.keyboard_up(key, modifiers)
|
28
83
|
end
|
29
|
-
|
30
|
-
def
|
31
|
-
@engine.special_keyboard_down(key, modifiers)
|
84
|
+
|
85
|
+
def special_keyboard_down(key, modifiers)
|
32
86
|
end
|
33
|
-
|
87
|
+
|
34
88
|
def special_keyboard_up(key, modifiers)
|
35
|
-
@engine.special_keyboard_up(key, modifiers)
|
36
89
|
end
|
37
|
-
|
90
|
+
|
38
91
|
def mouse_click(button, state, x, y)
|
39
|
-
@engine.mouse_click(button, state, x, y)
|
40
92
|
end
|
41
|
-
|
42
|
-
def
|
43
|
-
@engine.mouse_dragging_motion(x, y)
|
44
|
-
@engine.mouse_motion(x, y)
|
93
|
+
|
94
|
+
def mouse_dragging_motion(x, y)
|
45
95
|
end
|
46
|
-
|
96
|
+
|
47
97
|
def mouse_passive_motion(x, y)
|
48
|
-
@engine.mouse_passive_motion(x, y)
|
49
|
-
@engine.mouse_motion(x, y)
|
50
98
|
end
|
51
|
-
|
52
|
-
def
|
53
|
-
|
54
|
-
|
55
|
-
|
99
|
+
|
100
|
+
def mouse_motion(x, y)
|
101
|
+
end
|
102
|
+
|
103
|
+
def resize
|
56
104
|
# Reset the coordinate system
|
57
105
|
glMatrixMode(GL_PROJECTION)
|
58
106
|
glLoadIdentity
|
@@ -67,72 +115,15 @@ class GLApp
|
|
67
115
|
gluLookAt(0, 0, 5,
|
68
116
|
0, 0, -1,
|
69
117
|
0, 1, 0)
|
70
|
-
|
71
|
-
@width, @height = width, height
|
72
118
|
end
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
end
|
78
|
-
|
79
|
-
unless @window
|
80
|
-
glutInitWindowSize(@width, @height)
|
81
|
-
@window = glutCreateWindow(@title)
|
82
|
-
end
|
83
|
-
|
84
|
-
self.setup_context
|
85
|
-
self.go unless running?
|
86
|
-
end
|
87
|
-
|
88
|
-
protected
|
89
|
-
|
90
|
-
def go_fullscreen(width, height, title = "")
|
91
|
-
glutGameModeString([width, height].join("x"))
|
92
|
-
|
93
|
-
if glutGameModeGet(GLUT_GAME_MODE_POSSIBLE)
|
94
|
-
glutEnterGameMode
|
95
|
-
if glutGameModeGet(GLUT_GAME_MODE_ACTIVE) == 0
|
96
|
-
self.go_windowed
|
97
|
-
end
|
98
|
-
else
|
99
|
-
go_windowed
|
100
|
-
end
|
101
|
-
|
102
|
-
self.setup_context
|
103
|
-
self.go unless self.running?
|
104
|
-
end
|
105
|
-
|
106
|
-
def go
|
107
|
-
@running = true
|
108
|
-
@engine.setup
|
109
|
-
glutMainLoop
|
110
|
-
end
|
111
|
-
|
112
|
-
def running?
|
113
|
-
@running
|
114
|
-
end
|
115
|
-
|
116
|
-
def gl_init
|
117
|
-
glutInit
|
118
|
-
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH)
|
119
|
-
end
|
120
|
-
|
121
|
-
def setup_context
|
122
|
-
glEnable(GL_DEPTH_TEST)
|
123
|
-
|
124
|
-
glutIgnoreKeyRepeat(1)
|
125
|
-
|
119
|
+
|
120
|
+
# end hooks
|
121
|
+
|
122
|
+
def wire
|
126
123
|
glutDisplayFunc(lambda do
|
127
|
-
|
128
|
-
glMatrixMode(GL_PROJECTION)
|
129
|
-
glLoadIdentity
|
130
|
-
gluPerspective(30.0, @width / @height, 0.1, 1000.0)
|
131
|
-
|
132
|
-
glMatrixMode(GL_MODELVIEW)
|
133
|
-
glLoadIdentity
|
124
|
+
pre_draw
|
134
125
|
draw
|
135
|
-
|
126
|
+
post_draw
|
136
127
|
end)
|
137
128
|
|
138
129
|
glutIdleFunc(lambda do
|
@@ -145,7 +136,7 @@ class GLApp
|
|
145
136
|
end)
|
146
137
|
|
147
138
|
glutKeyboardFunc(lambda do |key, x, y|
|
148
|
-
|
139
|
+
keyboard_down(key, glutGetModifiers)
|
149
140
|
end)
|
150
141
|
|
151
142
|
glutKeyboardUpFunc(lambda do |key, x, y|
|
@@ -153,7 +144,7 @@ class GLApp
|
|
153
144
|
end)
|
154
145
|
|
155
146
|
glutSpecialFunc(lambda do |key, x, y|
|
156
|
-
|
147
|
+
special_keyboard_down(key, glutGetModifiers)
|
157
148
|
end)
|
158
149
|
|
159
150
|
glutSpecialUpFunc(lambda do |key, x, y|
|
@@ -165,33 +156,19 @@ class GLApp
|
|
165
156
|
end)
|
166
157
|
|
167
158
|
glutMotionFunc(lambda do |x, y|
|
168
|
-
|
159
|
+
mouse_dragging_motion(x, y)
|
160
|
+
mouse_motion(x, y)
|
169
161
|
end)
|
170
162
|
|
171
163
|
glutPassiveMotionFunc(lambda do |x, y|
|
172
164
|
mouse_passive_motion(x, y)
|
165
|
+
mouse_motion(x, y)
|
173
166
|
end)
|
174
167
|
|
175
168
|
glutReshapeFunc(lambda do |width, height|
|
176
|
-
|
169
|
+
@width = width
|
170
|
+
@height = height
|
171
|
+
resize
|
177
172
|
end)
|
178
|
-
|
179
|
-
glEnable(GL_BLEND)
|
180
|
-
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
|
181
|
-
end
|
182
|
-
|
183
|
-
module Engine
|
184
|
-
def setup() end
|
185
|
-
def update(seconds) end
|
186
|
-
def draw() end
|
187
|
-
def keyboard_down(key, modifiers) end
|
188
|
-
def keyboard_up(key, modifiers) end
|
189
|
-
def special_keyboard_down(key, modifiers) end
|
190
|
-
def special_keyboard_up(key, modifiers) end
|
191
|
-
def mouse_click(button, state, x, y) end
|
192
|
-
def mouse_dragging_motion(x, y) end
|
193
|
-
def mouse_passive_motion(x, y) end
|
194
|
-
def mouse_motion(x, y) end
|
195
173
|
end
|
196
174
|
end
|
197
|
-
|