【问题标题】:glGenTextures not returning a texture nameglGenTextures 不返回纹理名称
【发布时间】:2011-04-12 09:23:20
【问题描述】:

我正在使用 VS2010 在 Windows 7 机器上创建 OpenGL 游戏。此外,还使用了 SDL、QtCore、QtXML 和 FbxSdk 来辅助开发。在调试模式外运行时,我遇到了 glGenTextures 的一个非常特殊的问题。让我解释一下。

当我在调试模式下编译和运行应用程序时,模型被纹理化并正确显示。一旦我调试应用程序或使用发布模式编译和运行应用程序,纹理就不再应用于模型。

我已经找到 glGenTextures 没有给我一个有效名称的问题。它也没有给我任何错误。我加载所有内容的方式如下:

模型通过 FbxSdk 加载为 FBX,加载模型时加载所需的纹理。所有模型都加载到另一个线程中,我确保在该线程加载模型时不会在任何地方调用 OpenGL 函数。如果我不在另一个线程中加载模型,一切正常。我尝试了所有我能想到的方法,包括在加载模型时暂停主线程,以保证在加载模型时不会发生其他任何事情。都不行。

同样,除了编译为调试工作之外,这不会那么奇怪。发布和调试应用程序不起作用。有什么想法吗?

【问题讨论】:

  • 在调试模式下,一些未初始化的变量可能被设置为 0。由于 0 在大多数 OpenGL 函数调用中具有特殊含义,这可能是错误的来源。查找未初始化的变量,或向我们展示 glGetTextures 周围的代码
  • 我同意,但在调试模式下调试应用程序不起作用。

标签: multithreading visual-studio-2010 opengl windows-7


【解决方案1】:

我只能猜测,但您可能没有在模型加载线程上使 GL 上下文成为当前的吗?请记住,OpenGL 上下文是特定于线程的!

另一方面,通常建议不要在不同的线程中使用相同的 GL 上下文。要么使用不同的上下文并共享资源,要么将所有 GL 调用推迟到主 GL 线程。

使用调试模式的不同之处在于,VS 在调试时会使用调试堆,而在没有实际调试的情况下仅运行调试构建时不会使用它。

但是,如果你把线程搞错了,调试堆可能会“隐藏”各种疯狂的副作用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多