opengl3 0.0.1.pre3 → 0.0.1.pre4

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.
@@ -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