X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fbackends%2Fopengl%2Fvertexsetup_backend.cpp;h=6dc97411113a21bd0d3d9aae9ca0292415c7d243;hb=3b98e13c823d4cb7e4d2d4d14e8440b44bc71f91;hp=d45481f996b5eba732c1a1512c7e8d1a3619c077;hpb=8a8cce8ef4ee28b3572a72958b8b407759f9f826;p=libs%2Fgl.git diff --git a/source/backends/opengl/vertexsetup_backend.cpp b/source/backends/opengl/vertexsetup_backend.cpp index d45481f9..6dc97411 100644 --- a/source/backends/opengl/vertexsetup_backend.cpp +++ b/source/backends/opengl/vertexsetup_backend.cpp @@ -51,15 +51,17 @@ void OpenGLVertexSetup::update(unsigned mask) const { static bool direct = ARB_direct_state_access && ARB_vertex_attrib_binding; + const VertexSetup &self = *static_cast(this); + if(mask&VertexSetup::VERTEX_ARRAY) - update_vertex_array(*static_cast(this)->vertex_array, 0, 0, direct); + update_vertex_array(*self.vertex_array, 0, 0, direct); if(mask&VertexSetup::INSTANCE_ARRAY) - update_vertex_array(*static_cast(this)->inst_array, 1, 1, direct); + update_vertex_array(*self.inst_array, 1, 1, direct); if(mask&VertexSetup::INDEX_BUFFER) { - unsigned buf_id = static_cast(this)->index_buffer->id; + unsigned buf_id = self.index_buffer->id; if(direct) glVertexArrayElementBuffer(id, buf_id); else @@ -83,7 +85,7 @@ void OpenGLVertexSetup::update_vertex_array(const VertexArray &array, unsigned b glVertexArrayBindingDivisor(id, binding, divisor); } - unsigned offset = 0; + unsigned offset = array.get_offset(); for(VertexAttribute a: fmt) { unsigned sem = get_attribute_semantic(a); @@ -129,17 +131,19 @@ void OpenGLVertexSetup::unload() } else { + const VertexSetup &self = *static_cast(this); + glBindVertexArray(id); glBindBuffer(GL_ARRAY_BUFFER, 0); - for(VertexAttribute a: static_cast(this)->vertex_format) + for(VertexAttribute a: self.vertex_format) if(!is_padding(a)) { unsigned sem = get_attribute_semantic(a); glDisableVertexAttribArray(sem); glVertexAttribPointer(sem, 1, GL_FLOAT, false, 0, 0); } - for(VertexAttribute a: static_cast(this)->inst_format) + for(VertexAttribute a: self.inst_format) if(!is_padding(a)) { unsigned sem = get_attribute_semantic(a);