我正在使用VS2010在Windows 7机器上创建OpenGL游戏。此外,SDL,QtCore,QtXML和FbxSdk也用于协助开发。在调试模式外运行时,我遇到了glGenTextures的一个非常奇怪的问题。让我解释一下。
当我在调试模式下编译并运行应用程序时,模型会被纹理化并正确显示。一旦我调试应用程序或使用发布模式编译和运行应用程序,纹理就不再应用于模型。
我已经将问题追溯到glGenTextures没有给我一个有效的名字。它也没有给我任何错误。我加载所有内容的方式如下:
模型通过FbxSdk作为FBX加载,在加载模型时加载必需的纹理。所有模型都加载到另一个线程中,我确保在此线程加载模型时不会调用任何OpenGL函数。如果我不在另一个线程中加载模型,一切正常。我尝试了所有我能想到的东西,包括在模型加载时停止主线程以保证在模型加载时发生的其他事情。它都不起作用。
再次这不会像编译调试那样奇怪。发布和调试应用程序不起作用。有什么想法吗?
答案 0 :(得分:4)
我只能猜测,但你是否可能没有在模型加载线程上使GL上下文最新?请记住,OpenGL上下文是特定于线程的!
另一方面,通常建议不要在不同的线程中使用相同的GL上下文。使用不同的上下文并共享资源,或将所有GL调用推迟到主GL线程。
使用调试模式的不同之处在于VS在调试时会使用调试堆,但是在没有实际调试的情况下运行调试版本时将不会使用它。
但是,如果你的线程出错了,那么调试堆可能会“隐藏”各种疯狂的副作用。