微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Vao和动态VBO

如何解决Vao和动态VBO

我正在使用动态vbo-ibo进行抽奖。
初始化缓冲区:

qglGenBuffers(1,&vbo.vbo_shadowDynamic);
  qglBindBuffer(GL_ARRAY_BUFFER,vbo.vbo_shadowDynamic);
  qglBufferData(GL_ARRAY_BUFFER,MAX_STREAM_VBO_VERTS * sizeof(vec4_t),GL_STREAM_DRAW);
  qglBindBuffer(GL_ARRAY_BUFFER,0);

  qglGenBuffers(1,&vbo.ibo_shadowDynamic);
  qglBindBuffer(GL_ELEMENT_ARRAY_BUFFER,vbo.ibo_shadowDynamic);
  qglBufferData(GL_ELEMENT_ARRAY_BUFFER,MAX_STREAM_IBO_IDX * sizeof(uint),GL_STREAM_DRAW);
  qglBindBuffer(GL_ELEMENT_ARRAY_BUFFER,0);

绘制:

qglBindBuffer(GL_ARRAY_BUFFER,vbo.vbo_shadowDynamic); qglBindBuffer(GL_ELEMENT_ARRAY_BUFFER,vbo.ibo_shadowDynamic);

qglEnabLevertexAttribArray(ATT_POSITION);
qglVertexAttribPointer(ATT_POSITION,4,GL_FLOAT,qfalse,0);
qglBufferSubData(GL_ARRAY_BUFFER,numVerts * sizeof(vec4_t),vcache4);
qglBufferSubData(GL_ELEMENT_ARRAY_BUFFER,id * sizeof(uint),icache);

qglDrawElements (GL_TRIANGLES,id,GL_UNSIGNED_INT,NULL);

qgldisabLevertexAttribArray(ATT_POSITION);
qglBindBuffer(GL_ARRAY_BUFFER,0);
qglBindBuffer(GL_ELEMENT_ARRAY_BUFFER,0);

一切正常。然后,我尝试将这些缓冲区绑定到VAO。

创建vao并绑定vbo-ibo:

glGenVertexArrays(1,&vao.shadow);
    glBindVertexArray(vao.shadow);
    qglBindBuffer(GL_ARRAY_BUFFER,vbo.vbo_shadowDynamic);
    qglBindBuffer(GL_ELEMENT_ARRAY_BUFFER,vbo.ibo_shadowDynamic);
    
    qglEnabLevertexAttribArray(ATT_POSITION);
    qglVertexAttribPointer(ATT_POSITION,0);
    
    glBindVertexArray(0);
    qglBindBuffer(GL_ARRAY_BUFFER,0);
    qglBindBuffer(GL_ELEMENT_ARRAY_BUFFER,0);

并绘制它:

glBindVertexArray(vao.shadow);
qglBufferSubData(GL_ARRAY_BUFFER,vcache4);
        qglBufferSubData(GL_ELEMENT_ARRAY_BUFFER,icache);
    
        qglDrawElements (GL_TRIANGLES,NULL);
glBindVertexArray(0);

在渲染中,我们看到了来自多边形的垃圾。我哪里可能出错。静态缓冲区正常工作

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。