cyberarm_engine 0.13.0 → 0.17.0
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.
- checksums.yaml +4 -4
- data/.gitignore +8 -8
- data/.rubocop.yml +8 -0
- data/.travis.yml +5 -5
- data/Gemfile +6 -6
- data/LICENSE.txt +21 -21
- data/README.md +73 -43
- data/Rakefile +10 -10
- data/assets/textures/default.png +0 -0
- data/bin/console +14 -14
- data/bin/setup +8 -8
- data/cyberarm_engine.gemspec +39 -36
- data/lib/cyberarm_engine.rb +64 -47
- data/lib/cyberarm_engine/animator.rb +56 -54
- data/lib/cyberarm_engine/background.rb +179 -175
- data/lib/cyberarm_engine/background_nine_slice.rb +125 -0
- data/lib/cyberarm_engine/bounding_box.rb +150 -150
- data/lib/cyberarm_engine/cache.rb +4 -0
- data/lib/cyberarm_engine/cache/download_manager.rb +121 -0
- data/lib/cyberarm_engine/common.rb +96 -96
- data/lib/cyberarm_engine/config_file.rb +46 -0
- data/lib/cyberarm_engine/game_object.rb +248 -257
- data/lib/cyberarm_engine/game_state.rb +92 -89
- data/lib/cyberarm_engine/model.rb +207 -0
- data/lib/cyberarm_engine/model/material.rb +21 -0
- data/lib/cyberarm_engine/model/model_object.rb +131 -0
- data/lib/cyberarm_engine/model/parser.rb +74 -0
- data/lib/cyberarm_engine/model/parsers/collada_parser.rb +138 -0
- data/lib/cyberarm_engine/model/parsers/wavefront_parser.rb +154 -0
- data/lib/cyberarm_engine/model_cache.rb +31 -0
- data/lib/cyberarm_engine/opengl.rb +28 -0
- data/lib/cyberarm_engine/opengl/light.rb +50 -0
- data/lib/cyberarm_engine/opengl/orthographic_camera.rb +46 -0
- data/lib/cyberarm_engine/opengl/perspective_camera.rb +38 -0
- data/lib/cyberarm_engine/opengl/renderer/bounding_box_renderer.rb +249 -0
- data/lib/cyberarm_engine/opengl/renderer/g_buffer.rb +164 -0
- data/lib/cyberarm_engine/opengl/renderer/opengl_renderer.rb +289 -0
- data/lib/cyberarm_engine/opengl/renderer/renderer.rb +22 -0
- data/lib/cyberarm_engine/opengl/shader.rb +406 -0
- data/lib/cyberarm_engine/opengl/texture.rb +69 -0
- data/lib/cyberarm_engine/ray.rb +56 -56
- data/lib/cyberarm_engine/stats.rb +21 -0
- data/lib/cyberarm_engine/text.rb +160 -146
- data/lib/cyberarm_engine/timer.rb +23 -23
- data/lib/cyberarm_engine/transform.rb +296 -273
- data/lib/cyberarm_engine/ui/border_canvas.rb +102 -101
- data/lib/cyberarm_engine/ui/dsl.rb +138 -99
- data/lib/cyberarm_engine/ui/element.rb +315 -276
- data/lib/cyberarm_engine/ui/elements/button.rb +160 -67
- data/lib/cyberarm_engine/ui/elements/check_box.rb +51 -59
- data/lib/cyberarm_engine/ui/elements/container.rb +256 -176
- data/lib/cyberarm_engine/ui/elements/edit_box.rb +179 -0
- data/lib/cyberarm_engine/ui/elements/edit_line.rb +262 -172
- data/lib/cyberarm_engine/ui/elements/flow.rb +15 -17
- data/lib/cyberarm_engine/ui/elements/image.rb +72 -52
- data/lib/cyberarm_engine/ui/elements/label.rb +156 -50
- data/lib/cyberarm_engine/ui/elements/list_box.rb +82 -0
- data/lib/cyberarm_engine/ui/elements/progress.rb +51 -50
- data/lib/cyberarm_engine/ui/elements/radio.rb +6 -0
- data/lib/cyberarm_engine/ui/elements/slider.rb +104 -0
- data/lib/cyberarm_engine/ui/elements/stack.rb +11 -13
- data/lib/cyberarm_engine/ui/elements/text_block.rb +156 -0
- data/lib/cyberarm_engine/ui/elements/toggle_button.rb +65 -56
- data/lib/cyberarm_engine/ui/event.rb +47 -47
- data/lib/cyberarm_engine/ui/gui_state.rb +226 -135
- data/lib/cyberarm_engine/ui/style.rb +38 -37
- data/lib/cyberarm_engine/ui/theme.rb +182 -120
- data/lib/cyberarm_engine/vector.rb +293 -203
- data/lib/cyberarm_engine/version.rb +4 -4
- data/lib/cyberarm_engine/{engine.rb → window.rb} +114 -101
- metadata +88 -18
- data/lib/cyberarm_engine/gosu_ext/circle.rb +0 -9
- data/lib/cyberarm_engine/shader.rb +0 -262
@@ -1,262 +0,0 @@
|
|
1
|
-
module CyberarmEngine
|
2
|
-
# Ref: https://github.com/vaiorabbit/ruby-opengl/blob/master/sample/OrangeBook/brick.rb
|
3
|
-
class Shader
|
4
|
-
include OpenGL
|
5
|
-
@@shaders = {}
|
6
|
-
PREPROCESSOR_CHARACTER = "@"
|
7
|
-
|
8
|
-
def self.add(name, instance)
|
9
|
-
@@shaders[name] = instance
|
10
|
-
end
|
11
|
-
|
12
|
-
def self.use(name, &block)
|
13
|
-
shader = @@shaders.dig(name)
|
14
|
-
if shader
|
15
|
-
shader.use(&block)
|
16
|
-
else
|
17
|
-
raise ArgumentError, "Shader '#{name}' not found!"
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
def self.available?(name)
|
22
|
-
@@shaders.dig(name).is_a?(Shader)
|
23
|
-
end
|
24
|
-
|
25
|
-
def self.get(name)
|
26
|
-
@@shaders.dig(name)
|
27
|
-
end
|
28
|
-
|
29
|
-
def self.active_shader
|
30
|
-
@active_shader
|
31
|
-
end
|
32
|
-
|
33
|
-
def self.active_shader=(instance)
|
34
|
-
@active_shader = instance
|
35
|
-
end
|
36
|
-
|
37
|
-
def self.stop
|
38
|
-
shader = Shader.active_shader
|
39
|
-
|
40
|
-
if shader
|
41
|
-
shader.stop
|
42
|
-
else
|
43
|
-
raise ArgumentError, "No active shader to stop!"
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
def self.attribute_location(variable)
|
48
|
-
raise RuntimeError, "No active shader!" unless Shader.active_shader
|
49
|
-
Shader.active_shader.attribute_location(variable)
|
50
|
-
end
|
51
|
-
|
52
|
-
def self.set_uniform(variable, value)
|
53
|
-
raise RuntimeError, "No active shader!" unless Shader.active_shader
|
54
|
-
Shader.active_shader.set_uniform(variable, value)
|
55
|
-
end
|
56
|
-
|
57
|
-
attr_reader :name, :program
|
58
|
-
def initialize(name:, includes_dir: nil, vertex: "shaders/default.vert", fragment:)
|
59
|
-
raise "Shader name can not be blank" if name.length == 0
|
60
|
-
|
61
|
-
@name = name
|
62
|
-
@includes_dir = includes_dir
|
63
|
-
@compiled = false
|
64
|
-
|
65
|
-
@program = nil
|
66
|
-
|
67
|
-
@error_buffer_size = 1024
|
68
|
-
@variable_missing = {}
|
69
|
-
|
70
|
-
@data = {shaders: {}}
|
71
|
-
|
72
|
-
unless shader_files_exist?(vertex: vertex, fragment: fragment)
|
73
|
-
raise ArgumentError, "Shader files not found: #{vertex} or #{fragment}"
|
74
|
-
end
|
75
|
-
|
76
|
-
create_shader(type: :vertex, source: File.read(vertex))
|
77
|
-
create_shader(type: :fragment, source: File.read(fragment))
|
78
|
-
|
79
|
-
compile_shader(type: :vertex)
|
80
|
-
compile_shader(type: :fragment)
|
81
|
-
link_shaders
|
82
|
-
|
83
|
-
# Only add shader if it successfully compiles
|
84
|
-
if @compiled
|
85
|
-
puts "compiled!"
|
86
|
-
puts "Compiled shader: #{@name}"
|
87
|
-
Shader.add(@name, self)
|
88
|
-
else
|
89
|
-
warn "FAILED to compile shader: #{@name}", ""
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
def shader_files_exist?(vertex:, fragment:)
|
94
|
-
File.exist?(vertex) && File.exist?(fragment)
|
95
|
-
end
|
96
|
-
|
97
|
-
def create_shader(type:, source:)
|
98
|
-
_shader = nil
|
99
|
-
|
100
|
-
case type
|
101
|
-
when :vertex
|
102
|
-
_shader = glCreateShader(GL_VERTEX_SHADER)
|
103
|
-
when :fragment
|
104
|
-
_shader = glCreateShader(GL_FRAGMENT_SHADER)
|
105
|
-
else
|
106
|
-
warn "Unsupported shader type: #{type.inspect}"
|
107
|
-
end
|
108
|
-
|
109
|
-
processed_source = preprocess_source(source: source)
|
110
|
-
|
111
|
-
_source = [processed_source].pack("p")
|
112
|
-
_size = [processed_source.length].pack("I")
|
113
|
-
glShaderSource(_shader, 1, _source, _size)
|
114
|
-
|
115
|
-
@data[:shaders][type] =_shader
|
116
|
-
end
|
117
|
-
|
118
|
-
def preprocess_source(source:)
|
119
|
-
lines = source.lines
|
120
|
-
|
121
|
-
lines.each_with_index do |line, i|
|
122
|
-
if line.start_with?(PREPROCESSOR_CHARACTER)
|
123
|
-
preprocessor = line.strip.split(" ")
|
124
|
-
lines.delete(line)
|
125
|
-
|
126
|
-
case preprocessor.first
|
127
|
-
when "@include"
|
128
|
-
raise ArgumentError, "Shader preprocessor include directory was not given for shader #{@name}" unless @includes_dir
|
129
|
-
|
130
|
-
preprocessor[1..preprocessor.length - 1].join.scan(/"([^"]*)"/).flatten.each do |file|
|
131
|
-
source = File.read("#{@includes_dir}/#{file}.glsl")
|
132
|
-
|
133
|
-
lines.insert(i, source)
|
134
|
-
end
|
135
|
-
else
|
136
|
-
warn "Unsupported preprocessor #{preprocessor.first} for #{@name}"
|
137
|
-
end
|
138
|
-
end
|
139
|
-
end
|
140
|
-
|
141
|
-
lines.join
|
142
|
-
end
|
143
|
-
|
144
|
-
def compile_shader(type:)
|
145
|
-
_compiled = false
|
146
|
-
_shader = @data[:shaders][type]
|
147
|
-
raise ArgumentError, "No shader for #{type.inspect}" unless _shader
|
148
|
-
|
149
|
-
glCompileShader(_shader)
|
150
|
-
buffer = ' '
|
151
|
-
glGetShaderiv(_shader, GL_COMPILE_STATUS, buffer)
|
152
|
-
compiled = buffer.unpack('L')[0]
|
153
|
-
|
154
|
-
if compiled == 0
|
155
|
-
log = ' ' * @error_buffer_size
|
156
|
-
glGetShaderInfoLog(_shader, @error_buffer_size, nil, log)
|
157
|
-
puts "Shader Error: Program \"#{@name}\""
|
158
|
-
puts " #{type.to_s.capitalize} Shader InfoLog:", " #{log.strip.split("\n").join("\n ")}\n\n"
|
159
|
-
puts " Shader Compiled status: #{compiled}"
|
160
|
-
puts " NOTE: assignment of uniforms in shaders is illegal!"
|
161
|
-
puts
|
162
|
-
else
|
163
|
-
_compiled = true
|
164
|
-
end
|
165
|
-
|
166
|
-
return _compiled
|
167
|
-
end
|
168
|
-
|
169
|
-
def link_shaders
|
170
|
-
@program = glCreateProgram
|
171
|
-
@data[:shaders].values.each do |_shader|
|
172
|
-
glAttachShader(@program, _shader)
|
173
|
-
end
|
174
|
-
glLinkProgram(@program)
|
175
|
-
|
176
|
-
buffer = ' '
|
177
|
-
glGetProgramiv(@program, GL_LINK_STATUS, buffer)
|
178
|
-
linked = buffer.unpack('L')[0]
|
179
|
-
|
180
|
-
if linked == 0
|
181
|
-
log = ' ' * @error_buffer_size
|
182
|
-
glGetProgramInfoLog(@program, @error_buffer_size, nil, log)
|
183
|
-
puts "Shader Error: Program \"#{@name}\""
|
184
|
-
puts " Program InfoLog:", " #{log.strip.split("\n").join("\n ")}\n\n"
|
185
|
-
end
|
186
|
-
|
187
|
-
@compiled = linked == 0 ? false : true
|
188
|
-
end
|
189
|
-
|
190
|
-
# Returns the location of a uniform variable
|
191
|
-
def variable(variable)
|
192
|
-
loc = glGetUniformLocation(@program, variable)
|
193
|
-
if (loc == -1)
|
194
|
-
puts "Shader Error: Program \"#{@name}\" has no such uniform named \"#{variable}\"", " Is it used in the shader? GLSL may have optimized it out.", " Is it miss spelled?" unless @variable_missing[variable]
|
195
|
-
@variable_missing[variable] = true
|
196
|
-
end
|
197
|
-
return loc
|
198
|
-
end
|
199
|
-
|
200
|
-
def use(&block)
|
201
|
-
return unless compiled?
|
202
|
-
raise "Another shader is already in use! #{Shader.active_shader.name.inspect}" if Shader.active_shader
|
203
|
-
Shader.active_shader=self
|
204
|
-
|
205
|
-
glUseProgram(@program)
|
206
|
-
|
207
|
-
if block
|
208
|
-
block.call(self)
|
209
|
-
stop
|
210
|
-
end
|
211
|
-
end
|
212
|
-
|
213
|
-
def stop
|
214
|
-
Shader.active_shader = nil if Shader.active_shader == self
|
215
|
-
glUseProgram(0)
|
216
|
-
end
|
217
|
-
|
218
|
-
def compiled?
|
219
|
-
@compiled
|
220
|
-
end
|
221
|
-
|
222
|
-
def attribute_location(variable)
|
223
|
-
glGetUniformLocation(@program, variable)
|
224
|
-
end
|
225
|
-
|
226
|
-
def uniform_transform(variable, value, location = nil)
|
227
|
-
attr_loc = location ? location : attribute_location(variable)
|
228
|
-
|
229
|
-
glUniformMatrix4fv(attr_loc, 1, GL_FALSE, value.to_gl.pack("F16"))
|
230
|
-
end
|
231
|
-
|
232
|
-
def uniform_boolean(variable, value, location = nil)
|
233
|
-
attr_loc = location ? location : attribute_location(variable)
|
234
|
-
|
235
|
-
glUniform1i(attr_loc, value ? 1 : 0)
|
236
|
-
end
|
237
|
-
|
238
|
-
def uniform_integer(variable, value, location = nil)
|
239
|
-
attr_loc = location ? location : attribute_location(variable)
|
240
|
-
|
241
|
-
glUniform1i(attr_loc, value)
|
242
|
-
end
|
243
|
-
|
244
|
-
def uniform_float(variable, value, location = nil)
|
245
|
-
attr_loc = location ? location : attribute_location(variable)
|
246
|
-
|
247
|
-
glUniform1f(attr_loc, value)
|
248
|
-
end
|
249
|
-
|
250
|
-
def uniform_vec3(variable, value, location = nil)
|
251
|
-
attr_loc = location ? location : attribute_location(variable)
|
252
|
-
|
253
|
-
glUniform3f(attr_loc, *value.to_a[0..2])
|
254
|
-
end
|
255
|
-
|
256
|
-
def uniform_vec4(variable, value, location = nil)
|
257
|
-
attr_loc = location ? location : attribute_location(variable)
|
258
|
-
|
259
|
-
glUniform4f(attr_loc, *value.to_a)
|
260
|
-
end
|
261
|
-
end
|
262
|
-
end
|