X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fprogram.cpp;h=1f28e9565e19905e1770bce0de872621b25225f7;hb=42ace9ac1350d3ae009bdd2fb335ac1e57d1b36b;hp=01644c02400d739b82f737a4e90aee8c886b3189;hpb=927a1aa0a3a27e463ec0efc08bd08e7c4e969909;p=libs%2Fgl.git diff --git a/source/program.cpp b/source/program.cpp index 01644c02..1f28e956 100644 --- a/source/program.cpp +++ b/source/program.cpp @@ -38,8 +38,8 @@ void Program::init() { static RequireExtension _ext("GL_ARB_shader_objects"); - linked=false; - id=glCreateProgramObjectARB(); + linked = false; + id = glCreateProgramObjectARB(); } Program::~Program() @@ -63,7 +63,7 @@ void Program::attach_shader(Shader &shader) void Program::detach_shader(Shader &shader) { - list::iterator i=remove(shaders.begin(), shaders.end(), &shader); + list::iterator i = remove(shaders.begin(), shaders.end(), &shader); if(i!=shaders.end()) { shaders.erase(i, shaders.end()); @@ -73,10 +73,10 @@ void Program::detach_shader(Shader &shader) void Program::set_del_shaders(bool ds) { - del_shaders=ds; + del_shaders = ds; } -void Program::bind_attribute(uint index, const string &name) +void Program::bind_attribute(unsigned index, const string &name) { static RequireExtension _ext("GL_ARB_vertex_shader"); glBindAttribLocationARB(id, index, name.c_str()); @@ -89,7 +89,7 @@ void Program::link() (*i)->compile(); glLinkProgramARB(id); - if(!(linked=get_param(GL_LINK_STATUS))) + if(!(linked = get_param(GL_LINK_STATUS))) throw CompileError(get_info_log()); } @@ -102,9 +102,9 @@ int Program::get_param(GLenum param) const string Program::get_info_log() const { - sizei len=get_param(GL_INFO_LOG_LENGTH); + GLsizei len = get_param(GL_INFO_LOG_LENGTH); char log[len+1]; - glGetInfoLogARB(id, len+1, reinterpret_cast(&len), log); + glGetInfoLogARB(id, len+1, &len, log); return string(log, len); } @@ -113,8 +113,10 @@ void Program::bind() const if(!linked) throw InvalidState("Program is not linked"); + if(!set_current(this)) + return; + glUseProgramObjectARB(id); - cur_prog=this; } int Program::get_uniform_location(const string &n) const @@ -124,21 +126,12 @@ int Program::get_uniform_location(const string &n) const void Program::unbind() { - if(cur_prog) - { - glUseProgramObjectARB(0); - cur_prog=0; - } -} + if(!set_current(0)) + return; -void Program::maybe_bind() -{ - if(cur_prog!=this) - bind(); + glUseProgramObjectARB(0); } -const Program *Program::cur_prog=0; - Program::Loader::Loader(Program &p): DataFile::ObjectLoader(p) @@ -160,7 +153,7 @@ void Program::Loader::fragment_shader(const string &src) obj.attach_shader(*new Shader(FRAGMENT_SHADER, src)); } -void Program::Loader::attribute(uint i, const string &n) +void Program::Loader::attribute(unsigned i, const string &n) { obj.bind_attribute(i, n); }