Jon*_*röm 0 opengl nvidia visual-c++
使用glDrawElements()时,我遇到了一个可疑的错误.我正在尝试渲染简单的图元(主要是矩形)以加快文本的绘制等等,但是当我调用glDrawElements()时,整个屏幕闪烁黑色(不仅仅是我的窗口区域)一帧左右.下一帧它变回与以前相同的"Windows颜色".所以它闪烁了几秒钟,最后在一个消息框中说
The NVIDIA OpenGL Driver encountered an unrecoverable error
and must close this application.
Error 12
Run Code Online (Sandbox Code Playgroud)
在调用glDrawElements()之前,我需要重置GL的任何设置吗?我知道这不是一些悬空的glEnableClientState(),我检查了它(我曾经有过其中一个,但后来glDrawElements()崩溃了).
想到它,它几乎看起来像一些后台缓冲区错误...有什么想法尝试?
显然你正在混合VBO模式和VA模式.这是完全可能的,但必须小心使用.
你打电话的时候:
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
Run Code Online (Sandbox Code Playgroud)
这意味着下次渲染时glDrawElements(..., ..., ..., x),它将使用x作为索引数据的指针,最后一次调用glVertexPointer指向顶点数据.
如果你不取消绑定当前VBO和IBO(与上述两个glBindBuffer调用),这意味着具有相同glDrawElements渲染时,x是用作对指标数据偏移的IBO,最后调用glVertexPointer作为VBO中顶点数据的偏移量.
根据x和glVertexPointer的值,您可以使驱动程序崩溃,因为偏移超出范围和/或底层数据的类型错误(NaN).
因此,为了回答您的问题,在使用VBO模式绘制然后使用VA模式绘制之后:
glVertexPointerglDrawElements然后就没事了.
| 归档时间: |
|
| 查看次数: |
1577 次 |
| 最近记录: |