OpenGL纹理加载问题
这是一个非常模糊的问题,所以请随时澄清这个项目的任何事情。
我正在研究一个非常大的应用程序,最近一个非常令人困惑的错误已经出现在纹理上。 我们正在加载的一些纹理正在加载 - 我已经加入代码并运行 - 但所有OpenGL渲染的纹理都是奇怪的粉色/白色条纹纹理。
你甚至会建议你开始调试这种情况?
我很困惑,不知道还有什么可能是错的。 是否有一个OpenGL命令可以在glTexImage之后调用,这会强制纹理变得可用?
编辑:这不是关于命令失败,主要是时间问题。 粉红色/白色纹理显示一段时间,直到加载更多纹理。 就好像纹理排队了,队列在某个时间暂停。
下一步编辑:我得到了glIntercept日志正常工作,这是它输出(在整个程序崩溃之前)
http://freetexthost.com/1kdkksabdg
下一步编辑:我知道一个事实,纹理加载在OpenGL内存中,但由于某些原因,它们并没有在程序中进行渲染。
检查你的纹理坐标。 如果它们设置错误,则可以看到只有一个或两个texels映射到整个基元。 请记住,OpenGL是一个状态机。 检查你是否在错误的时间改变纹理坐标状态。 您可能会在代码中稍后设置纹理坐标,然后当您重新绘制这些元素时,状态对于将纹理映射到代码是可以接受的。
如果它只是一个时间问题,其中纹理加载OpenGL调用没有及时执行,并且线程代码是正确的,请尝试在加载纹理后添加对glFlush()的调用。 glFlush()会导致执行所有挂起的OpenGL命令。
如果你的纹理颜色不正确,那么很可能是你加载了错误的RGB顺序。 确保在你的glTexImage2D中使用了适合你的图像格式的正确枚举。 确保组件的数量是正确的,并且您在格式参数右侧获得RGB像素的顺序。
尽管可能与您的纹理不相关,但OpenGL不支持多线程绘制,因此请确保您没有在拥有该上下文的线程上执行任何绘制工作。
编辑:你有一个参考渲染器,所以你可以验证图像像素是否按预期加载? 我强烈建议编写一个小例程来加载,然后立即将像素保存到一个文件中,这样您就可以确保获得正确的纹理结果。
当你说:
该项目是多线程的,但互斥量确保所有OpenGL调用都不会被其他任何中断。
这听起来不像对我有足够的保护:记住OpenGL是一个具有大量内部状态的状态机。 您需要确保OpenGL状态与您打电话时期望的一致,并且某些调用序列不会被来自其他线程的调用中断。
我不是OpenGL线程安全方面的专家,但是在我看来,您的问题可能在哪里。
链接地址: http://www.djcxy.com/p/33979.html上一篇: OpenGL texture loading issue
下一篇: Drawing on top of previous frame with an offscreen texture