我有一个jogl应用程序,它在调用glDisable时(本地)崩溃(我不认为堆栈的细节在这里很重要-它是发生在EDT上的调用)。
我的问题实际上是关于glDisable如何可能导致本机崩溃。它总是被传递一个有效的标志来禁用。
我对此有两个想法:
1)显卡错误(虽然我已经尝试过更新驱动程序,但它仍然只出现在一些计算机上,所以仍然有可能是与显卡相关的)。
2) Java应用程序正在使用大量内存。我不知道是否有可能,如果分配了太多内存,本机代码中可能会发生不好的事情。不过,如果只是Java内存使用率很高,而不是整个系统内存,我认为错误会显示为Java错误。
你有没有想过这到底是怎么发生的?
发布于 2012-01-13 15:43:50
大多数情况下,OpenGL会通过忽略带有错误的调用来处理自己的错误,但也有一些错误会导致应用程序崩溃。我遇到过的唯一问题就是访问违规和糟糕的驱动程序。我有一种感觉,它不是glDisable调用(它只能触发GL_INVALID_ENUM或GL_INVALID_OPERATION错误,由OpenGL自己用glGetError处理),而是前一个调用。
看看错误周围的代码会很好,但我将假设它是在纹理加载(glTexImage2D)或绘图调用(gl*Pointer或glDraw*)期间进行的。如果长度变量大于实际用于纹理/缓冲区的内存,OpenGL仍将尝试从这些地址读取,并且操作系统应抛出访问冲突异常。仔细检查这些变量,记住除了glDraw*调用之外,所有的变量都使用字节长度,这些调用使用的是元素的数量。
如果这不是您的问题,那么您的glDisable调用是您进行的第一个实际OpenGL调用,错误是JOGL找不到opengl32.dll或libgl.so或任何在您的操作系统上的OpenGL实现。在这种情况下,你只需要安装适当的驱动程序,它就会工作。有时,如果在驱动程序支持的版本之后调用在OpenGL中引入的方法,则会得到相同的错误。你可以用glGetString(GL_VERSION)检查你的OpenGL版本。
https://stackoverflow.com/questions/8846062
复制相似问题