我正在查看CUDA的“粒子”示例,但找不到它们在顶点数组和着色器中的变量之间建立链接的位置。从我所读到的,实际上我一直在做的事情是
...
glGenBuffers(1, &VBO);
glBindBuffer(GL_ARRAY_BUFFER, VBO);
glBufferData( ... )
glEnableVertexAttribArray(0);
glVertexAttribPointer( ... );
...
但是我在Nvidia的例子中发现
glBindBufferARB(GL_ARRAY_BUFFER_ARB, m_vbo);
glVertexPointer(4, GL_FLOAT, 0, 0);
glEnableClientState(GL_VERTEX_ARRAY);
if (m_colorVBO)
{
glBindBufferARB(GL_ARRAY_BUFFER_ARB, m_colorVBO);
glColorPointer(4, GL_FLOAT, 0, 0);
glEnableClientState(GL_COLOR_ARRAY);
}
glDrawArrays(GL_POINTS, 0, m_numParticles);
glBindBufferARB(GL_ARRAY_BUFFER_ARB, 0);
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_COLOR_ARRAY);
我相信这与我所做的类似。所以我的问题是
这两种将数据传递到着色器的方式有什么区别?
我应该优先选择另一个吗?
最佳答案
第一种方法是发送属性的现代通用方法。第二个是较旧的,其中顶点,法线,颜色等具有自己的硬编码属性。它不应在现代代码中使用。