|
都没个人回,问题倒是解决了,就是不知道原因。解决方法如下:
glCompressedTexImage2D(*,...,*,0);//最后参数为0,不传输数据
glCompressedsSubTexImage2D();//此时才传输数据。
--------------------------------------------------------------------------------
问题已经明确:
我用dds格式的贴图,dds的文件格式为dxt3,而且纹理数据在内存中仍是压缩状态,然后用函数glCompressedTexImage2D将压缩纹理送到显存。这个过程是由我的加载资源的线程完成的。
绘制的是我另外的一个线程。
难道glCompressedTexImage2D不是现成安全的?或者GeForce 9400 GT的驱动程序6.14.11.9107版本实现的这个函数不是线程安全的?
------------------------------------------------------------------------------
我碰到的情况是这样的:
我的显卡是GeForce 9400 GT,以前用的驱动程序比较低,版本是:6.14.11.7***(后面3位数忘了),此时绘制模型时,贴图正常显示。
当我更新了驱动程序后,更新后驱动程序的版本是:6.14.11.9107,此时用opengl绘制模型会出现花屏。
花屏的具体表现是:人物模型上的一个mesh贴图要不是全黑,要么是五颜六色的,而不是原来的纹理。
但是当我退出程序,然后再启动程序后,人物模型的贴图就正常了。
我使用opengl的情况:
我在windows下使用opengl,用了glew库,使用了opengl扩展。用一个线程负责绘制模型,另外一个线程负责加载模型(包括加载模型的顶点数据,模型需要的纹理贴图)。
现在确定是由于异步加载导致的,因为我改成由一个线程负责加载和绘制就不会出现问题。
难道opengl支持多线程有问题? |
|