Skip to content

Commit

Permalink
Merge pull request #402 from mp3butcher/VAS
Browse files Browse the repository at this point in the history
add a fix in order setArray  work with an user managed interleaved array
  • Loading branch information
OpenSceneGraph git repository committed Dec 7, 2017
2 parents 37dbb04 + 7f2481e commit b8fd3ab
Showing 1 changed file with 12 additions and 14 deletions.
26 changes: 12 additions & 14 deletions src/osg/VertexArrayState.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -483,6 +483,14 @@ struct VertexAttribArrayDispatch : public VertexArrayState::ArrayDispatch
callVertexAttribPointer(ext, new_array, (const GLvoid *)(vbo->getOffset(new_array->getBufferIndex())));
}

virtual void enable_and_dispatch(osg::State& state, GLint size, GLenum type, GLsizei stride, const GLvoid *ptr, GLboolean normalized)
{
GLExtensions* ext = state.get<GLExtensions>();

ext->glEnableVertexAttribArray( unit );
ext->glVertexAttribPointer(static_cast<GLuint>(unit), size, type, normalized, stride, ptr);
}

virtual void dispatch(osg::State& state, const osg::Array* new_array)
{
GLExtensions* ext = state.get<GLExtensions>();
Expand Down Expand Up @@ -713,30 +721,20 @@ void VertexArrayState::setArray(ArrayDispatch* vad, osg::State& state, const osg

void VertexArrayState::setArray(ArrayDispatch* vad, osg::State& state, GLint size, GLenum type, GLsizei stride, const GLvoid *ptr, GLboolean normalized)
{
if (ptr)
{
if(!vad->array){

if (!vad->active)
{
vad->active = true;
_activeDispatchers.push_back(vad);
}

if (vad->array==0)
{
unbindVertexBufferObject();
vad->enable_and_dispatch(state, size, type, stride, ptr, normalized);
}
else
{
unbindVertexBufferObject();
vad->dispatch(state, size, type, stride, ptr, normalized);
}
vad->enable_and_dispatch(state, size, type, stride, ptr, normalized);

vad->array = 0;
vad->modifiedCount = 0xffffffff;

}
else if (vad->array)
else
{
disable(vad, state);
}
Expand Down

0 comments on commit b8fd3ab

Please sign in to comment.