jes-ruby/runtime/lib/window.rb
2014-07-27 09:28:35 -04:00

46 lines
960 B
Ruby

require "set"
class Window
include Widget
@windows = Set.new
class << self
def register(window)
@windows << window
end
def remove(window)
@windows.delete(window)
end
end
def initialize
@programs = {}
load_shaders
Window.register(self)
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_shader = GLShader.new(:vertex, Runtime.read(:shader, v_src_fname))
v_shader or raise "Could not find shader #{v_src_fname}"
f_shader = GLShader.new(:fragment, Runtime.read(:shader, f_src_fname))
f_shader or raise "Could not find shader #{f_src_fname}"
@programs[program] = GLProgram.new(v_shader, f_shader)
end
end
end