opengl es shader program id和vbo buffer id相同

时间:2013-11-14 06:31:43

标签: opengl-es shader vbo

我使用vbo在opengl es 2.0中绘制了2个三角形。

程序句柄(hProgramHandle)

hProgramHandle = glCreateProgram(); // value is 210003

与iVertBuffId

相同
glGenBuffers(1, &iVertBuffId1); // for vertices   // 70001
    ...
    ...
glGenBuffers(1, &iVertBuffId2); // for color   // 140002
    ...
    ...
glGenBuffers(1, &iVertBuffId3); // for texture  // 210003

我创建了3个缓冲区(每个缓冲区用于位置,颜色和纹理)。 在为纹理生成缓冲区时会出现上述问题。

我没有得到输出。

opengl会为程序ID和vbo缓冲区id生成相同的数字吗?

2 个答案:

答案 0 :(得分:3)

这取决于您正在运行的特定OpenGL ES驱动程序的实现,但是值可以是相同的,因为它们是不同类型对象的句柄,而不一定是内存指针。将它们视为不同数据结构的索引。

答案 1 :(得分:1)

OpenGL返回的ID实际上是指其内部存储的名称。 内部OpenGL存储按专业划分,因此可以随意优化其内存访问。 这是违反直觉的,因为ID实际上并不是唯一的,而是取决于您所谈论的OpenGL:例如目前的约束力。

OpenGL为你提供相同的id是绝对正确的,只要它们引用不同的东西:纹理ID和缓冲区ID可以重叠,这不是问题。

注意它们可能会重叠,也可能不会重叠,并按顺序从0开始,或者只是给你一些看似随机的数字,这取决于实现。