Dan*_*lai 10 opengl macos mono png alphablending
下图中有3个背景:黑色白色和灰色
每个都有3个条形:黑色 - >透明,白色 - >透明,颜色 - >透明
我正在使用glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); 我所有的顶点颜色都是1,1,1,0.
缺陷在白色 - >透明的白色背景上非常明显.
在Windows XP(以及其他Windows风格)上,它完美运行,我完全变白了.然而,在Mac上,我在中间变灰了!
什么会导致这种情况,为什么当我在白色混合白色时会变暗?
屏幕截图的完整尺寸是@ http://dl.dropbox.com/u/9410632/mac-colorbad.png
更新信息:
在Windows上,它似乎与opengl版本无关.所有工作都是2.0到3.2.在我现在面前的Mac上,它是2.1.
渐变保持在纹理中,并且所有顶点都是彩色的1,1,1,1(白色rgb,完整的alpha).背景只是1x1像素纹理(用渐变着色),顶点根据需要着色,带有完整的alpha.
地图集是用glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, GL_BGRA, GL_UNSIGNED_BYTE, data);
我自己编写的ARGB dds文件创建的.
我还应该注意,所有内容都是使用一个简单的简单着色器绘制的:
uniform sampler2D tex1; uniform float alpha; void main() { gl_FragColor = gl_Color * texture2D(tex1, gl_TexCoord[0].st) * vec4(1.0, 1.0, 1.0, alpha); }
alpha uniform设置为1.0
现在,我确实尝试改变它,所以白色渐变不是纹理,而只是4个顶点,其中左边是纯白色和不透明,右边是1,1,1,0,这是有效的!
我现在已经对纹理进行了三次检查,它只是白色,具有不同的alpha 1.0-> 0.0.
我想这可能是默认问题.opengl或驱动程序的版本可能会以不同方式初始化事物.
例如,我最近发现默认情况下每个人都有GL_TEXTURE_2D glEnabled,而不是Intel GME965.
找到解决方案
首先,多一点背景.这个程序实际上是用.NET编写的(在OS X上使用Mono),而我正在编写的DDS文件是通过将24位PNG文件的目录压缩成最小的纹理而自动生成的图集.我正在使用System.Drawing.Bitmap加载这些PNG,并在确定布局后将它们渲染为更大的Bitmap.然后锁定后布局位图(以获得它的字节),然后通过我编写的代码将其写入DDS.
在阅读Bahbar的建议后,我检查了记忆中的纹理,它们确实不同!我的DDS加载似乎是罪魁祸首,而不是任何OpenGL设置.在今天的预感中,我在两个平台上检查了DDS文件本身(使用字节进行字节比较),实际上,它们是不同的!当我使用WTV(http://developer.nvidia.com/object/windows_texture_viewer.html)加载DDS文件时,它们看起来完全相同.但是,使用WTV,您可以关闭每个频道(RGBA).当我切换掉Alpha通道时,在Windows上我看到了一个非常糟糕的图像.没有alpha会导致没有抗锯齿边缘,所以当然看起来很可怕.当我关闭OSX DDS上的alpha通道时,它看起来很好!
Mono中的PNG加载程序是预乘,导致我的所有问题.我为他们输入了一张票(https://bugzilla.novell.com/show_bug.cgi?id=679242)并直接使用了libpng.
感谢大家!
检查你的 dds 加载程序。它可能只是在一个平台上进行约翰·巴塞洛缪(John Bartholomew)在负载上谈论的预乘。
一种简单的验证方法是在调用 glTexImage 时查看正在加载到纹理中的数据。该数据完全统一吗?
归档时间: |
|
查看次数: |
1912 次 |
最近记录: |