我正在使用 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 生成相同的数字吗?
这取决于您正在运行的特定 OpenGL ES 驱动程序的实现,但是是的,这些值可以相同,因为它们是不同类型对象的句柄,不一定是内存指针。 将它们视为不同数据结构的索引。
OpenGL 返回的 Id 实际上是引用其内部存储的名称。内部 OpenGL 存储按专业划分,因此可以随意优化其内存访问。这违反直觉的地方是,id实际上不是唯一的,而是取决于你在谈论OpenGL的内容:例如当前绑定的内容。
OpenGL给你相同的id是绝对正确的,只要它们引用不同的东西:纹理ID和缓冲区ID可以重叠,这不是问题。
请注意,它们可能会也可能不会重叠,并且按顺序以 0 开头,或者只是给你一个似乎是随机数的数字,这取决于实现。