我习惯用 ASM 编写代码,并且需要为某些 OpenGL 项目切换到 C++。无论如何,我得到了以下程序:
glGenBuffers(Size, PointerToBuff);
据我了解,根据 Size 参数(缓冲区数量)的句柄将存储在 PointerToBuff 上。所以我想使用一个结构来保存我将获得的 2 个句柄,以防我使用:
glGenBuffers(2, *PointerToBuff);
所以我创建了一个结构:
struct VertexHandlers
{
GLuint cubevertex;
GLuint trianglevertex;
}VBHandlers;
然后像这样使用过程:
glGenBuffers(2, &VBHandlers);
我得到的错误:
error C2664: 'void (GLsizei,GLuint *)' : cannot convert parameter 2 from 'main::VertexHandlers *' to 'GLuint *'
2> Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
2>C:\Documents and Settings\Owner\My Documents\Downloads\OpenGL-tutorial_v0003\playground\playground.cpp(181): error C2664: 'void (GLsizei,GLuint *)' : cannot convert parameter 1 from 'main::VertexHandlers *' to 'GLsizei'
2> There is no context in which this conversion is possible
我不习惯“类型转换”,几乎什么都不知道,但是当涉及到指针时,我认为 (&) 运算符将获取创建的局部变量的地址。希望我能得到一些帮助,谢谢。
最佳答案
glGenBuffers()
需要一个 GLuint
数组,而不是指向恰好连续有两个 GLuint
的对象的指针.这就是编译器提示它的原因。是的,它们在您的机器上可能具有相同的内存表示,但在另一台机器上可能并非如此。
如果你想将 glGenBuffers()
的结果存储到一个结构中,你可以这样做:
GLuint buffers[2];
glGenBuffers(2, buffers);
VBHandlers.cubevertex = buffers[0];
VBHandlers.trianglevertex = buffers[1];
假设 glGenBuffers
不会失败,这是最安全、可移植的方法。
关于c++ - 将指针传递给结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9049499/