为什么glDrawElements给我GL_OUT_OF_MEMORY
Why is glDrawElements giving me GL_OUT_OF_MEMORY?
我只画了4个顶点。我试图渲染一个简单的四边形使用glDrawElements
,但似乎没有工作。我也用Java写过相同的代码,它可以工作。
这是绘图代码:
glUseProgram(mProgram);
glBindBuffer(GL_ARRAY_BUFFER, mBuffers[0]);
glEnableVertexAttribArray(mPosAttr);
glVertexAttribPointer(mPosAttr, 3, GL_FLOAT, GL_FALSE, 0, (void*)0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, mBuffers[1]);
if (er == 0){ er = glGetError(); std::cout<<gluErrorString(er)<<std::endl; }
glDrawElements(GL_TRIANGLE_STRIP, 4, GL_UNSIGNED_SHORT, (void*)0);
glDisableVertexAttribArray(mPosAttr);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
glUseProgram(0);
我已经离开了无用的东西,如glUniform__
调用,我得到相同的结果。无论如何,这第一次打印"no error",然后第二次打印"out of memory"。这意味着它绝对是由glDrawElements引起的。
为什么会发生这种情况?怎样才能解决这个问题?我应该提供更多的代码吗?
在评论中OP说:
正如我所说的,我绝对确定它来自glDrawElements。
但是在给定的源代码中
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, mBuffers[1]);
if (er == 0){ er = glGetError(); std::cout<<gluErrorString(er)<<std::endl; }
glDrawElements(GL_TRIANGLE_STRIP, 4, GL_UNSIGNED_SHORT, (void*)0);
错误检查在 glDrawElements之前执行。而且错误检查代码是错误的。正确的方法是:
while( (er = glGetError()) != GL_NO_ERROR ){ std::cerr << gluErrorString(er) << std::endl; }
如前所述,在这样的循环中,错误会累积,并且必须查询到耗尽为止。
如果不了解程序的更多信息,就无法知道为什么会发生这个错误:上下文是如何创建的,扩展是否正确初始化,诸如。理想情况下,一个人有完整的源代码,或者一个最小的(不可)可编译的例子。
相关文章:
- IN, OUT, INOUT Parameters
- Python ctype 'c_char_p' Memory Leak
- 即使使用调试编译标志,表达式也是"optimized out"
- C++双重释放或损坏(out)
- 将 out/in out 参数与 if/switch 的 init 语句一起使用
- 模式"allocate memory or use existing data"
- 在命令行上将输入显示到数组中时如何删除 ./a.out?
- 为什么我的向量::擦除调用会抛出"vector subscript out of range"?
- Win32 API - HWND "{unused = ???} Unable to read memory"错误
- 解决方案在第 25 行执行错误'out of bounds'
- C++ 向量加减抛出"expression: vector subscript out of range."错误
- 对函数的 out 字符串参数使用 swap 与赋值
- "in-situ without memory allocation" 字符串的愚蠢实现意味着什么?
- C++ "Using Uninitialized Memory.. (variable name) "
- "Memory Fragmentation"这仍然是一个问题?
- "[ilink32] Fatal: Out of memory" in C++生成器
- 如何在中等规模的项目中诊断g ++错误"cc1plus.exe: out of memory allocating 838860800 bytes"?
- 什么可能导致错误:"Fatal Error: Out of memory - aborting"简单地包含头文件?
- 在 Linux 上的源文件上运行'gcc' C++会给出"cc1plus: out of memory allocating ..."错误消息
- 在 VSP 中为乘客编写 apache 时出错"out of memory allocating"