c – OpenGL 4向顶点缓冲区提供数据
发布时间:2020-12-16 09:59:49 所属栏目:百科 来源:网络整理
导读:我使用旧方法将数据提供给OpenGL中的顶点缓冲区 glGenBuffers(1,buffer);glBindBuffer(GL_ARRAY_BUFFER,buffer);glBufferData(GL_ARRAY_BUFFER,sizeof(pos),pos,GL_STATIC_DRAW);glVertexAttribPointer(1,3,GL_FLOAT,GL_FALSE,0);glEnableVertexAttribArray(
我使用旧方法将数据提供给OpenGL中的顶点缓冲区
glGenBuffers(1,buffer); glBindBuffer(GL_ARRAY_BUFFER,buffer); glBufferData(GL_ARRAY_BUFFER,sizeof(pos),pos,GL_STATIC_DRAW); glVertexAttribPointer(1,3,GL_FLOAT,GL_FALSE,0); glEnableVertexAttribArray(1); 从OpenGL 4.3开始,出现了一种新的略微更清晰的方法来向顶点着色器提供数据 const GLfloat colors[] = { 1.0f,0.0f,1.0f,1.0f }; glBindVertexBuffer(1,buffer,3 * sizeof(GLfloat)); glVertexAttribFormat(1,0); glVertexAttribBinding(1,1); glEnableVertexAttribArray(1); 但我找不到任何解释如何使用新方式提供数据的资源.我当然可以这样做 glBindBuffer(GL_ARRAY_BUFFER,sizeof(colors),colors,GL_STATIC_DRAW); glBindBuffer(GL_ARRAY_BUFFER,0); //i can do even so,and later I can use glBindVertexBuffer 但它看起来并不优雅.如果我不使用glBindBuffer并且只使用glBindVertexBuffer然后使用glBufferData,我将覆盖使用glBindBuffer绑定的缓冲区中的数据. 解决方法
从我从OpenGL 4.3规范中可以看出,您仍然需要将顶点缓冲区绑定到“常规”绑定点以便更新其数据:
glBindBuffer(GL_ARRAY_BUFFER,vbo); glBufferSubData(GL_ARRAY_BUFFER,offset,size,data); 这个问题在4.5规范中已经有效地解决了,引入了DSA函数,它允许你更新缓冲区数据而不首先将它绑定到插槽: glNamedBufferSubData(buffer,data); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |