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;
|
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()
|
void GLProgram_Init()
|
||||||
{
|
{
|
||||||
ruby_class = rb_define_class("GLProgram", rb_cObject);
|
ruby_class = rb_define_class("GLProgram", rb_cObject);
|
||||||
rb_define_singleton_method(ruby_class, "new", (VALUE(*)(...))GLProgram_new, -1);
|
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, "attach_shader", (VALUE(*)(...))GLProgram_attach_shader, 1);
|
||||||
rb_define_method(ruby_class, "bind_attribute", (VALUE(*)(...))GLProgram_bind_attribute, 2);
|
rb_define_method(ruby_class, "bind_attribute", (VALUE(*)(...))GLProgram_bind_attribute, 2);
|
||||||
|
rb_define_method(ruby_class, "link", (VALUE(*)(...))GLProgram_link, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 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)
|
GLint GLProgram::get_uniform(const std::string & uniform_name)
|
||||||
{
|
{
|
||||||
if (m_id > 0u)
|
if (m_id > 0u)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user