diff --git a/src/GLProgram.cc b/src/GLProgram.cc index f84c9a5..6a0c8e9 100644 --- a/src/GLProgram.cc +++ b/src/GLProgram.cc @@ -1,27 +1,47 @@ -#if 0 #include "GLProgram.h" -#include -#include +#include "ruby.h" +#include "gl3w.h" -using namespace std; - -GLProgram::GLProgram() +typedef struct { - m_id = glCreateProgram(); - if (m_id == 0u) + GLuint id; +} GLProgram; + +static VALUE ruby_class; + +static void GLProgram_free(void * ptr) +{ + GLProgram * program = (GLProgram *)ptr; + + if (program->id > 0u) { - cerr << "Error allocating GL program object" << endl; + glDeleteProgram(program->id); } + + delete program; } -GLProgram::~GLProgram() +static VALUE GLProgram_new(VALUE klass) { - if (m_id > 0u) + GLProgram * glprogram = new GLProgram(); + + glprogram->id = glCreateProgram(); + if (glprogram->id == 0u) { - glDeleteProgram(m_id); + rb_raise(rb_eRuntimeError, "Error allocating GL program object"); } + + return Data_Wrap_Struct(klass, NULL, GLProgram_free, glprogram); } +void GLProgram_Init() +{ + ruby_class = rb_define_class("GLProgram", rb_cObject); + rb_define_singleton_method(ruby_class, "new", (VALUE(*)(...))GLProgram_new, 0); + rb_define_attr(ruby_class, "id", 0, 1); +} + +#if 0 GLProgram & GLProgram::attach_shader(GLShaderRef shader) { if (m_id > 0u) diff --git a/src/GLProgram.h b/src/GLProgram.h index f3851e3..6b2c438 100644 --- a/src/GLProgram.h +++ b/src/GLProgram.h @@ -1,29 +1,6 @@ -#if 0 #ifndef GLPROGRAM_H #define GLPROGRAM_H -#include "Ref.h" -#include "GLShader.h" -#include -#include -#include - -class GLProgram -{ -public: - GLProgram(); - ~GLProgram(); - GLProgram & attach_shader(GLShaderRef shader); - GLProgram & bind_attribute(const char * attribute, GLuint index); - bool link(); - GLuint get_id() { return m_id; } - void use() { glUseProgram(m_id); } - GLint get_uniform(const std::string & uniform_name); -protected: - GLuint m_id; - std::map m_uniforms; -}; -typedef Ref GLProgramRef; +void GLProgram_Init(); #endif -#endif diff --git a/src/main.cc b/src/main.cc index eb9640d..84eb0fb 100644 --- a/src/main.cc +++ b/src/main.cc @@ -1,6 +1,8 @@ #include #include "ruby.h" #include "Window.h" +#include "GLShader.h" +#include "GLProgram.h" using namespace std; @@ -47,7 +49,11 @@ static int bootstrap() { int rv = 0; int err_state = 0; + Window_Init(); + GLShader_Init(); + GLProgram_Init(); + rb_eval_string_protect( "load File.expand_path('../../runtime/main.rb', $0)", &err_state);