add GLProgram#link
This commit is contained in:
parent
43487eb415
commit
41855c4e89
@ -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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user