我有一个程序,它使用OpenGL绘制纹理图像并在3d模型上渲染它们。一切正常,直到我将最大纹理大小设置为16384,然后我崩溃了。我在我的代码中有调试跟踪,它显示每次发生在不同位置的崩溃,调试器在nvoglv32.dll中报告崩溃,位置0x6a24e899。异常代码是0xC0000406,这是堆栈溢出。这是在图形驱动程序内部,而不是在我的代码中,所以我试图弄清楚我可以做些什么来检测并防止这种崩溃。
它也是断断续续的。我可以多次运行相同的代码,它将在前10个运行正常,然后崩溃。
我意识到16K纹理非常大,而且我正在使用它们中的几个,所以内存使用率非常高 - 仅纹理可能只有1Gb左右,但是我对所有分配都进行了错误检查,并且也通过我的渲染代码在很多方面调用glGetError(),一切看起来都没问题。如果大纹理的创建失败,我的代码会自动缩小图像的尺寸,直到它们成功。
我还能做些什么来找出原因,检测错误并防止崩溃?