opengl3 0.0.1.pre3 → 0.0.1.pre4

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,115 +0,0 @@
1
- require 'rubygems'
2
- require 'bundler/setup'
3
- require 'opengl'
4
- require 'glut'
5
-
6
- class TestApp
7
- include GLUT
8
- include OpenGL::Constants
9
-
10
- def initialize
11
- glutInit()
12
- caps = GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE
13
- glutInitDisplayMode(caps)
14
- glutInitWindowPosition(300, 200)
15
- glutInitWindowSize(512, 512)
16
- glutCreateWindow('test')
17
-
18
- # prevent callback proc from being garbage-collected
19
- glutDisplayFunc(@draw_proc ||= method(:draw).to_proc)
20
- end
21
-
22
- def start
23
- self.extend OpenGL::GL.entrypoints
24
- puts glGetString(GL_VERSION)
25
- puts glGetVersion().inspect
26
- puts glGetShadingLanguageVersion().inspect
27
- puts glGetAvailableExtensions().inspect
28
-
29
- @quad = begin
30
- buffer = glGenBuffers(1)[0]
31
- glBindBuffer(GL_ARRAY_BUFFER, buffer)
32
- glBufferData(GL_ARRAY_BUFFER, 3 * 4 * 4, nil, GL_STATIC_DRAW)
33
- glMapBuffer(GL_ARRAY_BUFFER, GL_WRITE_ONLY) do |ptr|
34
- ptr.put_array_of_GLfloat( 0, [-0.5, 0.5, 0.0])
35
- ptr.put_array_of_GLfloat(12, [-0.5,-0.5, 0.0])
36
- ptr.put_array_of_GLfloat(24, [ 0.5, 0.5, 0.0])
37
- ptr.put_array_of_GLfloat(36, [ 0.5,-0.5, 0.0])
38
- end
39
-
40
- buffer
41
- end
42
-
43
- @program = begin
44
- vertex_shader = glCreateShader(:vertex)
45
- glShaderSource(vertex_shader, VS_CODE)
46
- glCompileShader(vertex_shader)
47
- err_msg = glGetShaderInfoLog(vertex_shader)
48
- unless glIsShaderCompiled?(vertex_shader)
49
- raise RuntimeError, "vertex_shader:\n#{err_msg}"
50
- else
51
- $stderr.puts "vertex_shader:\n#{err_msg}"
52
- end
53
-
54
- fragment_shader = glCreateShader(:fragment)
55
- glShaderSource(fragment_shader, FS_CODE)
56
- glCompileShader(fragment_shader)
57
- err_msg = glGetShaderInfoLog(fragment_shader)
58
- unless glIsShaderCompiled?(fragment_shader)
59
- raise RuntimeError, "fragment_shader:\n#{err_msg}"
60
- else
61
- $stderr.puts "fragment_shader:\n#{err_msg}"
62
- end
63
-
64
- program = glCreateProgram()
65
- glAttachShader(program, vertex_shader)
66
- glAttachShader(program, fragment_shader)
67
- glBindAttribLocation(program, 0, "in_Position")
68
- glLinkProgram(program)
69
- err_msg = glGetProgramInfoLog(program)
70
- unless glIsProgramLinked?(program)
71
- raise RuntimeError, "program:\n#{err_msg}"
72
- else
73
- $stderr.puts "program:\n#{err_msg}"
74
- end
75
- glDeleteShader(vertex_shader)
76
- glDeleteShader(fragment_shader)
77
- program
78
- end
79
-
80
- glutMainLoop()
81
- end
82
-
83
- def draw
84
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
85
-
86
- glUseProgram(@program)
87
- glBindBuffer(GL_ARRAY_BUFFER, @quad)
88
- glEnableVertexAttribArray(0)
89
- glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, nil)
90
- glDrawArrays(GL_TRIANGLE_STRIP, 0, 4)
91
-
92
- glutSwapBuffers()
93
- end
94
-
95
- VS_CODE =<<-GLSL
96
- attribute vec4 in_Position;
97
- varying vec2 vs_TexCoord;
98
- void main()
99
- {
100
- gl_Position = in_Position;
101
- vs_TexCoord = in_Position.xy + 0.5;
102
- }
103
- GLSL
104
-
105
- FS_CODE =<<-GLSL
106
- varying vec2 vs_TexCoord;
107
- void main()
108
- {
109
- gl_FragColor = vec4(vs_TexCoord, 0.0, 1.0);
110
- }
111
- GLSL
112
-
113
- end
114
-
115
- TestApp.new.start
@@ -1,119 +0,0 @@
1
- require 'rubygems'
2
- require 'bundler/setup'
3
- require 'opengl'
4
- require 'glut'
5
-
6
- class TestApp
7
- include GLUT
8
- include OpenGL::Constants
9
-
10
- def initialize
11
- glutInit()
12
- caps = GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE
13
- if FFI::Platform.mac?
14
- caps |= GLUT_3_2_CORE_PROFILE
15
- else
16
- glutInitContextVersion(3, 2)
17
- glutInitContextProfile(:core)
18
- end
19
- glutInitDisplayMode(caps)
20
- glutInitWindowPosition(300, 200)
21
- glutInitWindowSize(512, 512)
22
- glutCreateWindow('test')
23
-
24
- # prevent callback proc from being garbage-collected
25
- glutDisplayFunc(@draw_proc ||= method(:draw).to_proc)
26
- end
27
-
28
- def start
29
- self.extend OpenGL::GL.entrypoints
30
- puts glGetString(GL_VERSION)
31
- puts glGetBooleanv(GL_DEPTH_TEST, 1).inspect
32
- puts glGetDoublev(GL_COLOR_CLEAR_VALUE, 4).inspect
33
- puts glGetFloatv(GL_LINE_WIDTH, 1).inspect
34
- puts glGetIntegerv(GL_VIEWPORT, 4).inspect
35
- puts glGetVersion().inspect
36
- puts glGetShadingLanguageVersion().inspect
37
- puts glGetAvailableExtensions().inspect
38
-
39
- @dummy = glGenVertexArrays(1)[0]
40
-
41
- @program = begin
42
- vertex_shader = glCreateShader(:vertex)
43
- glShaderSource(vertex_shader, VS_CODE)
44
- glCompileShader(vertex_shader)
45
- err_msg = glGetShaderInfoLog(vertex_shader)
46
- unless glIsShaderCompiled?(vertex_shader)
47
- raise RuntimeError, "vertex_shader:\n#{err_msg}"
48
- else
49
- $stderr.puts "vertex_shader:\n#{err_msg}"
50
- end
51
-
52
- fragment_shader = glCreateShader(:fragment)
53
- glShaderSource(fragment_shader, FS_CODE)
54
- glCompileShader(fragment_shader)
55
- err_msg = glGetShaderInfoLog(fragment_shader)
56
- unless glIsShaderCompiled?(fragment_shader)
57
- raise RuntimeError, "fragment_shader:\n#{err_msg}"
58
- else
59
- $stderr.puts "fragment_shader:\n#{err_msg}"
60
- end
61
-
62
- program = glCreateProgram()
63
- glAttachShader(program, vertex_shader)
64
- glAttachShader(program, fragment_shader)
65
- glBindFragDataLocation(program, 0, "fs_FragColor")
66
- glLinkProgram(program)
67
- err_msg = glGetProgramInfoLog(program)
68
- unless glIsProgramLinked?(program)
69
- raise RuntimeError, "program:\n#{err_msg}"
70
- else
71
- $stderr.puts "program:\n#{err_msg}"
72
- end
73
- glDeleteShader(vertex_shader)
74
- glDeleteShader(fragment_shader)
75
- program
76
- end
77
-
78
- glutMainLoop()
79
- end
80
-
81
- def draw
82
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
83
-
84
- glUseProgram(@program)
85
- glBindVertexArray(@dummy)
86
- glDrawArrays(GL_TRIANGLE_STRIP, 0, 4)
87
-
88
- glutSwapBuffers()
89
- end
90
-
91
- VS_CODE =<<-GLSL
92
- #version 150 core
93
- out vec2 vs_TexCoord;
94
-
95
- const vec2 data[4] = vec2[](
96
- vec2(-1.0, 1.0), vec2(-1.0,-1.0), vec2( 1.0, 1.0), vec2( 1.0,-1.0)
97
- );
98
-
99
- void main()
100
- {
101
- vec3 pos = vec3(data[gl_VertexID], 0.0);
102
- gl_Position = vec4(pos * 0.5, 1.0);
103
- vs_TexCoord = pos.xy * 0.5 + 0.5;
104
- }
105
- GLSL
106
-
107
- FS_CODE =<<-GLSL
108
- #version 150 core
109
- in vec2 vs_TexCoord;
110
- out vec4 fs_FragColor;
111
- void main()
112
- {
113
- fs_FragColor = vec4(vs_TexCoord, 0.0, 1.0);
114
- }
115
- GLSL
116
-
117
- end
118
-
119
- TestApp.new.start
@@ -1,136 +0,0 @@
1
- require 'rubygems'
2
- require 'bundler/setup'
3
- require 'opengl'
4
- require 'glut'
5
-
6
- class TestApp
7
- include GLUT
8
- include OpenGL::Constants
9
-
10
- def initialize
11
- glutInit()
12
- caps = GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE
13
- if FFI::Platform.mac?
14
- caps |= GLUT_3_2_CORE_PROFILE
15
- else
16
- glutInitContextVersion(3, 2)
17
- glutInitContextProfile(:core)
18
- end
19
- glutInitDisplayMode(caps)
20
- glutInitWindowPosition(300, 200)
21
- glutInitWindowSize(512, 512)
22
- glutCreateWindow('test')
23
-
24
- # prevent callback proc from being garbage-collected
25
- glutDisplayFunc(@draw_proc ||= method(:draw).to_proc)
26
- end
27
-
28
- def start
29
- self.extend OpenGL::GL.entrypoints
30
- puts glGetString(GL_VERSION)
31
- puts glGetBooleanv(GL_DEPTH_TEST, 1).inspect
32
- puts glGetDoublev(GL_COLOR_CLEAR_VALUE, 4).inspect
33
- puts glGetFloatv(GL_LINE_WIDTH, 1).inspect
34
- puts glGetIntegerv(GL_VIEWPORT, 4).inspect
35
- puts glGetVersion().inspect
36
- puts glGetShadingLanguageVersion().inspect
37
- puts glGetAvailableExtensions().inspect
38
-
39
- @quad = begin
40
- buffer = glGenBuffers(1)[0]
41
- glBindBuffer(GL_ARRAY_BUFFER, buffer)
42
- glBufferData(GL_ARRAY_BUFFER, 3 * 4 * 4, nil, GL_STATIC_DRAW)
43
- glMapBuffer(GL_ARRAY_BUFFER, GL_WRITE_ONLY) do |ptr|
44
- ptr.put_array_of_GLfloat( 0, [-0.5, 0.5, 0.0])
45
- ptr.put_array_of_GLfloat(12, [-0.5,-0.5, 0.0])
46
- ptr.put_array_of_GLfloat(24, [ 0.5, 0.5, 0.0])
47
- ptr.put_array_of_GLfloat(36, [ 0.5,-0.5, 0.0])
48
- end
49
-
50
- array = glGenVertexArrays(1)[0]
51
- glBindVertexArray(array)
52
- glBindBuffer(GL_ARRAY_BUFFER, buffer)
53
- glEnableVertexAttribArray(0)
54
- glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, nil)
55
-
56
- glBindVertexArray(0)
57
- glBindBuffer(GL_ARRAY_BUFFER, 0)
58
-
59
- array
60
- end
61
-
62
- @program = begin
63
- vertex_shader = glCreateShader(:vertex)
64
- glShaderSource(vertex_shader, VS_CODE)
65
- glCompileShader(vertex_shader)
66
- err_msg = glGetShaderInfoLog(vertex_shader)
67
- unless glIsShaderCompiled?(vertex_shader)
68
- raise RuntimeError, "vertex_shader:\n#{err_msg}"
69
- else
70
- $stderr.puts "vertex_shader:\n#{err_msg}"
71
- end
72
-
73
- fragment_shader = glCreateShader(:fragment)
74
- glShaderSource(fragment_shader, FS_CODE)
75
- glCompileShader(fragment_shader)
76
- err_msg = glGetShaderInfoLog(fragment_shader)
77
- unless glIsShaderCompiled?(fragment_shader)
78
- raise RuntimeError, "fragment_shader:\n#{err_msg}"
79
- else
80
- $stderr.puts "fragment_shader:\n#{err_msg}"
81
- end
82
-
83
- program = glCreateProgram()
84
- glAttachShader(program, vertex_shader)
85
- glAttachShader(program, fragment_shader)
86
- glBindAttribLocation(program, 0, "in_Position")
87
- glBindFragDataLocation(program, 0, "fs_FragColor")
88
- glLinkProgram(program)
89
- err_msg = glGetProgramInfoLog(program)
90
- unless glIsProgramLinked?(program)
91
- raise RuntimeError, "program:\n#{err_msg}"
92
- else
93
- $stderr.puts "program:\n#{err_msg}"
94
- end
95
- glDeleteShader(vertex_shader)
96
- glDeleteShader(fragment_shader)
97
- program
98
- end
99
-
100
- glutMainLoop()
101
- end
102
-
103
- def draw
104
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
105
-
106
- glUseProgram(@program)
107
- glBindVertexArray(@quad)
108
- glDrawArrays(GL_TRIANGLE_STRIP, 0, 4)
109
-
110
- glutSwapBuffers()
111
- end
112
-
113
- VS_CODE =<<-GLSL
114
- #version 150 core
115
- in vec4 in_Position;
116
- out vec2 vs_TexCoord;
117
- void main()
118
- {
119
- gl_Position = in_Position;
120
- vs_TexCoord = in_Position.xy + 0.5;
121
- }
122
- GLSL
123
-
124
- FS_CODE =<<-GLSL
125
- #version 150 core
126
- in vec2 vs_TexCoord;
127
- out vec4 fs_FragColor;
128
- void main()
129
- {
130
- fs_FragColor = vec4(vs_TexCoord, 0.0, 1.0);
131
- }
132
- GLSL
133
-
134
- end
135
-
136
- TestApp.new.start
@@ -1,204 +0,0 @@
1
- require 'rubygems'
2
- require 'bundler/setup'
3
- require 'opengl'
4
- require 'glut'
5
- require_relative 'math3d'
6
-
7
- class TestApp
8
- include GLUT
9
- include OpenGL::Constants
10
-
11
- def initialize
12
- glutInit()
13
- caps = GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE
14
- if FFI::Platform.mac?
15
- caps |= GLUT_3_2_CORE_PROFILE
16
- else
17
- glutInitContextVersion(3, 2)
18
- glutInitContextProfile(:core)
19
- end
20
- glutInitDisplayMode(caps)
21
- glutInitWindowPosition(300, 200)
22
- glutInitWindowSize(512, 512)
23
- glutCreateWindow('cube')
24
-
25
- glutDisplayFunc(@draw_method ||= method(:draw))
26
- glutReshapeFunc(@resize_method ||= method(:resize))
27
- glutMouseFunc(@mouse_press_method ||= method(:mouse_press))
28
- glutMotionFunc(@mouse_track_method ||= method(:mouse_track))
29
- end
30
-
31
- def start
32
- self.extend OpenGL::GL.entrypoints
33
- puts glGetString(GL_VERSION)
34
-
35
- @cube = begin
36
- vertex_buffer, index_buffer = glGenBuffers(2)
37
- glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer)
38
- glBufferData(GL_ARRAY_BUFFER, 3 * 4 * 8, nil, GL_STATIC_DRAW)
39
- glMapBuffer(GL_ARRAY_BUFFER, GL_WRITE_ONLY) do |ptr|
40
- ptr.put_array_of_GLfloat( 0, [-1.0, 1.0, 1.0]) # 0
41
- ptr.put_array_of_GLfloat(12, [-1.0,-1.0, 1.0]) # 1
42
- ptr.put_array_of_GLfloat(24, [ 1.0, 1.0, 1.0]) # 2
43
- ptr.put_array_of_GLfloat(36, [ 1.0,-1.0, 1.0]) # 3
44
- ptr.put_array_of_GLfloat(48, [ 1.0, 1.0,-1.0]) # 4
45
- ptr.put_array_of_GLfloat(60, [ 1.0,-1.0,-1.0]) # 5
46
- ptr.put_array_of_GLfloat(72, [-1.0, 1.0,-1.0]) # 6
47
- ptr.put_array_of_GLfloat(84, [-1.0,-1.0,-1.0]) # 7
48
- end
49
- glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, index_buffer)
50
- glBufferData(GL_ELEMENT_ARRAY_BUFFER, 2 * 4 * 6, nil, GL_STATIC_DRAW)
51
- glMapBuffer(GL_ELEMENT_ARRAY_BUFFER, GL_WRITE_ONLY) do |ptr|
52
- ptr.write_array_of_GLushort [0,1,2,3,4,5,6,7,0,1,0xffff]
53
- ptr.put_array_of_GLushort(22, [6,0,4,2,0xffff,1,7,3,5])
54
- #ptr.put_array_of_GLushort( 0, [0, 1, 2, 3]) # front
55
- #ptr.put_array_of_GLushort( 8, [2, 3, 4, 5]) # right
56
- #ptr.put_array_of_GLushort(16, [4, 5, 6, 7]) # back
57
- #ptr.put_array_of_GLushort(24, [6, 7, 0, 1]) # left
58
- #ptr.put_array_of_GLushort(32, [6, 0, 4, 2]) # top
59
- #ptr.put_array_of_GLushort(40, [1, 7, 3, 5]) # bottom
60
- end
61
-
62
- array = glGenVertexArrays(1)[0]
63
- glBindVertexArray(array)
64
- glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer)
65
- glEnableVertexAttribArray(0)
66
- glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, nil)
67
- glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, index_buffer)
68
-
69
- glBindVertexArray(0)
70
- glBindBuffer(GL_ARRAY_BUFFER, 0)
71
- glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0)
72
-
73
- array
74
- end
75
-
76
- @program = begin
77
- vertex_shader = glCreateShader(:vertex)
78
- glShaderSource(vertex_shader, VS_CODE)
79
- glCompileShader(vertex_shader)
80
- unless glIsShaderCompiled?(vertex_shader)
81
- msg = glGetShaderInfoLog(vertex_shader)
82
- raise RuntimeError, "vertex_shader:\n#{msg}"
83
- end
84
-
85
- fragment_shader = glCreateShader(:fragment)
86
- glShaderSource(fragment_shader, FS_CODE)
87
- glCompileShader(fragment_shader)
88
- unless glIsShaderCompiled?(fragment_shader)
89
- msg = glGetShaderInfoLog(fragment_shader)
90
- raise RuntimeError, "fragment_shader:\n#{msg}"
91
- end
92
-
93
- program = glCreateProgram()
94
- glAttachShader(program, vertex_shader)
95
- glAttachShader(program, fragment_shader)
96
- glBindAttribLocation(program, 0, "in_Position")
97
- glBindFragDataLocation(program, 0, "fs_FragColor")
98
- glLinkProgram(program)
99
- unless glIsProgramLinked?(program)
100
- msg = glGetProgramInfoLog(program)
101
- raise RuntimeError, "program:\n#{msg}"
102
- end
103
- glDeleteShader(vertex_shader)
104
- glDeleteShader(fragment_shader)
105
- program
106
- end
107
-
108
- @view = Matrix.translate(0, 0, -5)
109
- @world = Matrix.identity(4)
110
-
111
- glutMainLoop()
112
- end
113
-
114
- def draw
115
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
116
-
117
- glEnable(GL_CULL_FACE)
118
- #glPolygonMode(GL_FRONT_AND_BACK, GL_LINE)
119
- glEnable(GL_DEPTH_TEST)
120
-
121
- glUseProgram(@program)
122
-
123
- if (loc = glGetUniformLocation(@program, "u_Projection")) != -1
124
- #glUniformMatrix4fv(loc, [ @projection ], true)
125
- OpenGL::Type.GLfloat(16) do |ptr|
126
- ptr.write_array_of_GLfloat(@projection.to_a.flatten)
127
- glUniformMatrix4fv(loc, 1, GL_TRUE, ptr)
128
- end
129
- end
130
-
131
- if (loc = glGetUniformLocation(@program, "u_ModelView")) != -1
132
- OpenGL::Type.GLfloat(16) do |ptr|
133
- modelview = @view * @world
134
- ptr.write_array_of_GLfloat(modelview.to_a.flatten)
135
- glUniformMatrix4fv(loc, 1, GL_TRUE, ptr)
136
- end
137
- end
138
-
139
- glBindVertexArray(@cube)
140
- glEnable(GL_PRIMITIVE_RESTART)
141
- glPrimitiveRestartIndex(0xffff)
142
- glDrawElements(GL_TRIANGLE_STRIP, 20, GL_UNSIGNED_SHORT, nil)
143
-
144
- glutSwapBuffers()
145
- end
146
-
147
- def resize(width, height)
148
- glViewport(0, 0, width, height)
149
-
150
- fovy = 45.0 / 180.0 * Math::PI
151
- aspect = Float(width) / Float(height)
152
- z_near, z_far = 1.0, 100.0
153
- @projection = Matrix.perspective(fovy, aspect, z_near, z_far)
154
- end
155
-
156
- def mouse_press(button, button_state, x, y)
157
- if button == :LEFT
158
- case button_state
159
- when :DOWN
160
- @mouse_tracking_pos = [x, y]
161
- when :UP
162
- remove_instance_variable(:@mouse_tracking_pos)
163
- end
164
- end
165
- end
166
-
167
- def mouse_track(x, y)
168
- if defined? @mouse_tracking_pos
169
- delta_x = (x - @mouse_tracking_pos[0]) * 0.01
170
- delta_y = (y - @mouse_tracking_pos[1]) * 0.01
171
-
172
- @world = Matrix.rotate_x(delta_y) * Matrix.rotate_y(delta_x) * @world
173
-
174
- @mouse_tracking_pos = [x, y]
175
- glutPostRedisplay()
176
- end
177
- end
178
-
179
- VS_CODE =<<-GLSL
180
- #version 150 core
181
- uniform mat4 u_Projection;
182
- uniform mat4 u_ModelView;
183
- in vec4 in_Position;
184
- out vec3 vs_Vertex;
185
- void main()
186
- {
187
- gl_Position = u_Projection * u_ModelView * in_Position;
188
- vs_Vertex = in_Position.xyz;
189
- }
190
- GLSL
191
-
192
- FS_CODE =<<-GLSL
193
- #version 150 core
194
- in vec3 vs_Vertex;
195
- out vec4 fs_FragColor;
196
- void main()
197
- {
198
- fs_FragColor = vec4(vs_Vertex * 0.5 + 0.5, 1.0);
199
- }
200
- GLSL
201
-
202
- end
203
-
204
- TestApp.new.start