add GL module; move OpenGL loading from Window to GL

This commit is contained in:
josh committed 2014-08-04 14:21:10 -04:00
1 parent f620f2b335
commit e2608b1d29
7 files changed
+156 -120

No files matched your search

+34
View File
@@ -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
View File
@@ -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