2011-12-16 161 views
1

我的游戏通常使用GL_TEXTURE_RECTANGLE_EXT绘制2D纹理。但是,由于这不是所有硬件都支持的,我试图让GL_TEXTURE_2D工作。最初大多数图像显示为纯白色,直到我开始呼叫当使用GL_TEXTURE_2D时,OpenGL纹理首次绘制白色

glTexParameteri(caps->extension, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
glTexParameteri(caps->extension, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 

每个图像绘制一次,而不是每帧一次。 (使用RECTANGLE_EXT,我可以每帧删除一次,并且工作正常。)

好的,现在图像显示出来。问题在于,在第一次绘制纹理时,它们会画成纯白色。之后,他们正确绘制。这会导致在第一次绘制任何图像时出现大量白色闪光,并且随着图像被重新使用而解决。任何想法可能导致这种情况?

我现在还打开了“2次幂”四舍五入,所以当第一次创建时,所有纹理四舍五入到最接近的2次幂。

+0

首先实际使用`GL_TEXTURE_RECTANGLE`的奇怪原因是......? – 2011-12-16 00:21:29

回答

1

有人在SDL论坛上回答了这个问题。 “默认情况下,除非你明确地告诉它在glTexParameteri()中使用GL_LINEAR或GL_NEAREST,否则OpenGL DOES将启用mipmapping,这就是为什么它将是白色的,直到你将它设置为否则。” (即mipmap正在使用,但他们没有设置。)

另一张海报写道:“技术上OpenGL期望(默认情况下)你上传所有的mipmap,就像在每个纹理上调用gluBuild2DMipmaps(甚至2D UI艺术)或者你自己的mipmapping例程(我的选择,至少比Windows上的glu32.dll快得多),但是当然,我们甚至不希望对这些纹理进行mipmap处理(或者浪费了33%的额外内存),所以它远远不止优雅地改变glTexParameter设置。“

0

表示需要工作的某些状态只在第一帧被绘制后才设置。看看NeHe纹理教程,以及它应该如何正确完成。