load shaders from Ruby on Window creation
This commit is contained in:
parent
d85a0de9df
commit
8604d6d5ad
24
runtime/lib/window.rb
Normal file
24
runtime/lib/window.rb
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
class Window
|
||||||
|
def initialize
|
||||||
|
@programs = {}
|
||||||
|
load_shaders
|
||||||
|
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
|
@ -3,8 +3,9 @@ def init_loadpath
|
|||||||
end
|
end
|
||||||
|
|
||||||
def load_lib_files
|
def load_lib_files
|
||||||
require "runtime"
|
|
||||||
require "gl_program"
|
require "gl_program"
|
||||||
|
require "runtime"
|
||||||
|
require "window"
|
||||||
end
|
end
|
||||||
|
|
||||||
def main(argv)
|
def main(argv)
|
||||||
|
42
src/GUI.cc
42
src/GUI.cc
@ -21,48 +21,6 @@ bool GUI::load()
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GUI::load_shaders()
|
|
||||||
{
|
|
||||||
static const char * shader_sources[PROGRAM_COUNT][2] = {
|
|
||||||
{"text.v.glsl", "text.f.glsl"},
|
|
||||||
{"basic.v.glsl", "basic.f.glsl"},
|
|
||||||
{"rect.v.glsl", "basic.f.glsl"},
|
|
||||||
};
|
|
||||||
|
|
||||||
for (int i = 0; i < PROGRAM_COUNT; i++)
|
|
||||||
{
|
|
||||||
PathRef shader_paths[2];
|
|
||||||
GLShaderRef shaders[2];
|
|
||||||
|
|
||||||
m_programs[i] = new GLProgram();
|
|
||||||
|
|
||||||
for (int j = 0; j < 2; j++)
|
|
||||||
{
|
|
||||||
/* TODO */
|
|
||||||
shader_paths[j] = NULL;
|
|
||||||
#if 0
|
|
||||||
shader_paths[j] = Runtime::locate(Runtime::SHADER, shader_sources[i][j]);
|
|
||||||
#endif
|
|
||||||
if (shader_paths[j] == NULL)
|
|
||||||
{
|
|
||||||
std::cerr << "Could not find shader source " << shader_sources[i][j] << std::endl;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
shaders[j] = new GLShader();
|
|
||||||
if (!shaders[j]->create(j == 0 ? GL_VERTEX_SHADER : GL_FRAGMENT_SHADER, shader_paths[j]))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
m_programs[i]->attach_shader(shaders[j]);
|
|
||||||
}
|
|
||||||
if (!m_programs[i]->link())
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool GUI::load_buffers()
|
bool GUI::load_buffers()
|
||||||
{
|
{
|
||||||
static const GLint rect_coords[4][2] = {
|
static const GLint rect_coords[4][2] = {
|
||||||
|
@ -91,7 +91,10 @@ static VALUE Window_new(VALUE klass)
|
|||||||
|
|
||||||
one_created = true;
|
one_created = true;
|
||||||
|
|
||||||
return Data_Wrap_Struct(ruby_class, NULL, Window_free, window);
|
VALUE rv = Data_Wrap_Struct(ruby_class, NULL, Window_free, window);
|
||||||
|
rb_obj_call_init(rv, 0, NULL);
|
||||||
|
|
||||||
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Window_Init(void)
|
void Window_Init(void)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user