OpenGL中的Unsigned Int导致“变量'buffer'周围的堆栈损坏。”

时间:2019-11-07 19:36:17

标签: c++ opengl

第一次在这里提问,谢谢您的耐心配合。

我正在按照教程在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 ++指针问题。

0 个答案:

没有答案
相关问题