add GLProgram#link

This commit is contained in:
Josh Holtrop 2014-07-23 15:14:02 -04:00
parent 43487eb415
commit 41855c4e89

View File

@ -58,41 +58,51 @@ static VALUE GLProgram_bind_attribute(VALUE self, VALUE attr_name, VALUE index)
return Qnil;
}
static VALUE GLProgram_link(VALUE self)
{
GLProgram * glprogram;
Data_Get_Struct(self, GLProgram, glprogram);
glLinkProgram(glprogram->id);
GLint link_status;
glGetProgramiv(glprogram->id, GL_LINK_STATUS, &link_status);
if (link_status != GL_TRUE)
{
GLint log_length;
glGetProgramiv(glprogram->id, GL_INFO_LOG_LENGTH, &log_length);
if (log_length > 0)
{
char log[log_length + 1];
glGetProgramInfoLog(glprogram->id, log_length, &log_length, log);
log[log_length] = '\0';
glDeleteProgram(glprogram->id);
rb_raise(rb_eRuntimeError,
"Error linking program:\n%s\n%s\n%s\n",
"--------------------",
log,
"--------------------");
}
else
{
glDeleteProgram(glprogram->id);
rb_raise(rb_eRuntimeError, "Error linking program");
}
}
return Qnil;
}
void GLProgram_Init()
{
ruby_class = rb_define_class("GLProgram", rb_cObject);
rb_define_singleton_method(ruby_class, "new", (VALUE(*)(...))GLProgram_new, -1);
rb_define_method(ruby_class, "attach_shader", (VALUE(*)(...))GLProgram_attach_shader, 1);
rb_define_method(ruby_class, "bind_attribute", (VALUE(*)(...))GLProgram_bind_attribute, 2);
rb_define_method(ruby_class, "link", (VALUE(*)(...))GLProgram_link, 0);
}
#if 0
bool GLProgram::link()
{
if (m_id == 0u)
return false;
glLinkProgram(m_id);
GLint link_status;
glGetProgramiv(m_id, GL_LINK_STATUS, &link_status);
if (link_status != GL_TRUE)
{
GLint log_length;
glGetProgramiv(m_id, GL_INFO_LOG_LENGTH, &log_length);
if (log_length > 0)
{
char *log = new char[log_length];
glGetProgramInfoLog(m_id, log_length, &log_length, log);
cerr << "Program log:" << endl << log << endl;
delete[] log;
}
return false;
}
return true;
}
GLint GLProgram::get_uniform(const std::string & uniform_name)
{
if (m_id > 0u)