我习惯在ASM中编码,并且需要为某些OpenGL项目切换到C ++。无论如何,我得到了以下程序:
glGenBuffers(Size, PointerToBuff);
据我所知,根据Size参数(缓冲区数)的句柄将存储在PointerToBuff上。所以我想使用一个结构来保存我将使用的2个句柄:
glGenBuffers(2, *PointerToBuff);
所以我创建了一个结构:
struct VertexHandlers
{
GLuint cubevertex;
GLuint trianglevertex;
}VBHandlers;
并使用proc作为:
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
我不习惯“Typecast”几乎不知道某些东西,但是当关于指针时,我应该(&)运算符将采用创建的局部变量的addr。希望我得到一些帮助,谢谢。
答案 0 :(得分:1)
glGenBuffers()
需要一个GLuint
数组,而不是指向一个恰好有两个GLuint
s的对象的指针。这就是编译器抱怨它的原因。是的,它们在您的机器上可能具有相同的内存表示,但在另一个机器上可能不是这种情况。
如果要将glGenBuffers()
的结果存储到结构中,可以执行以下操作:
GLuint buffers[2];
glGenBuffers(2, buffers);
VBHandlers.cubevertex = buffers[0];
VBHandlers.trianglevertex = buffers[1];
这是最安全,最便携的方式,假设glGenBuffers
没有失败。
答案 1 :(得分:0)
编译器错误告诉您正在将错误的类型传递给函数。它期待一个指向GLuint的指针,你可以给它一个指向VertexHandler的指针。如果类型在内存中是完全相同的表示,则可以使用glGenBuffers(2, (GLuint*) &VBHandlers);
强制转换参数。但是这很可能会崩溃,因为类型可能是内存中不同的表示形式。