add GL module; move OpenGL loading from Window to GL
This commit is contained in:
1 parent
f620f2b335
commit
e2608b1d29
7 files changed
+156
-120
No files matched your search
@@ -0,0 +1,34 @@
|
||||
module GL
|
||||
@programs = {}
|
||||
|
||||
class << self
|
||||
|
||||
def load_shaders
|
||||
program_sources = {
|
||||
text: ["text.v.glsl", "text.f.glsl"],
|
||||
basic: ["basic.v.glsl", "basic.f.glsl"],
|
||||
rect: ["rect.v.glsl", "basic.f.glsl"],
|
||||
}
|
||||
|
||||
program_sources.each do |program, (v_src_fname, f_src_fname)|
|
||||
v_src = Runtime.read(:shader, v_src_fname)
|
||||
v_shader = GLShader.new(:vertex, v_src)
|
||||
v_shader or raise "Could not find shader #{v_src_fname}"
|
||||
|
||||
f_src = Runtime.read(:shader, f_src_fname)
|
||||
f_shader = GLShader.new(:fragment, f_src)
|
||||
f_shader or raise "Could not find shader #{f_src_fname}"
|
||||
|
||||
uniforms = (v_src + f_src).lines.map do |line|
|
||||
if line =~ /\buniform\s.*\s(\S+);/
|
||||
$1
|
||||
end
|
||||
end.compact
|
||||
|
||||
@programs[program] = GLProgram.new(v_shader, f_shader,
|
||||
uniforms: uniforms)
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
+2
-31
@@ -1,6 +1,7 @@
|
||||
require "set"
|
||||
|
||||
class Window
|
||||
|
||||
include Widget
|
||||
|
||||
@windows = Set.new
|
||||
@@ -16,42 +17,12 @@ class Window
|
||||
end
|
||||
|
||||
def initialize
|
||||
super
|
||||
@programs = {}
|
||||
load_shaders
|
||||
Window.register(self)
|
||||
super
|
||||
end
|
||||
|
||||
def close
|
||||
Window.remove(self)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def load_shaders
|
||||
program_sources = {
|
||||
text: ["text.v.glsl", "text.f.glsl"],
|
||||
basic: ["basic.v.glsl", "basic.f.glsl"],
|
||||
rect: ["rect.v.glsl", "basic.f.glsl"],
|
||||
}
|
||||
|
||||
program_sources.each do |program, (v_src_fname, f_src_fname)|
|
||||
v_src = Runtime.read(:shader, v_src_fname)
|
||||
v_shader = GLShader.new(:vertex, v_src)
|
||||
v_shader or raise "Could not find shader #{v_src_fname}"
|
||||
|
||||
f_src = Runtime.read(:shader, f_src_fname)
|
||||
f_shader = GLShader.new(:fragment, f_src)
|
||||
f_shader or raise "Could not find shader #{f_src_fname}"
|
||||
|
||||
uniforms = (v_src + f_src).lines.map do |line|
|
||||
if line =~ /\buniform\s.*\s(\S+);/
|
||||
$1
|
||||
end
|
||||
end.compact
|
||||
|
||||
@programs[program] = GLProgram.new(v_shader, f_shader,
|
||||
uniforms: uniforms)
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -3,6 +3,7 @@ def init_loadpath
|
||||
end
|
||||
|
||||
def load_lib_files
|
||||
require "gl"
|
||||
require "gl_program"
|
||||
require "runtime"
|
||||
require "widget"
|
||||
|
||||
Reference in new issue
Block a user