第一次在这里提问,谢谢您的耐心配合。
我正在按照教程在OpenGL中渲染三角形。在这里,我将缓冲区初始化为无符号int并将其用于glGenBuffers的第二个参数来存储生成的缓冲区对象:
unsigned int buffer;
glGenBuffers(1, &buffer);
glBindBuffer(GL_ARRAY_BUFFER, buffer);
但是我想生成2个缓冲区,所以我用glGenBuffers(2, &buffer)
替换了第二行,但是它抛出了Stack around variable 'buffer' was corrupted.
我知道这一定是因为unsigned int只有足够的字节可容纳1个缓冲区。因此,让我们尝试使用数组。
此外,根据文档http://docs.gl/gl4/glGenBuffers,glGenBuffers中的第二个参数应该是指向数组的指针。
这是我的尝试:
尝试#1
unsigned int *buffer[2];
glGenBuffers(2, buffer[0]);
glBindBuffer(GL_ARRAY_BUFFER, *buffer[0]);
这会导致
Unhandled exception at 0x00000000544DA7F3 (nvoglv64.dll) in OpenGL.exe: 0xC0000005: Access violation reading location 0xFFFFFFFFFFFFFFFF.
即使我打电话给glGenBuffers(1, buffer[0])
为什么?
尝试#2
unsigned int buffer[2];
glGenBuffers(2, buffer);
glBindBuffer(GL_ARRAY_BUFFER, *buffer);
这有效。但为什么?该文档要求第二个参数的指针,那么为什么按值传递有效?不应该打破吗?
我对C ++还是很陌生,所以很抱歉,如果这是一个基本的C ++指针问题。