在某些Android设备上添加混合人工制品与OpenGL ES 2.0

时间:2013-05-16 06:03:18

标签: android opengl-es opengl-es-2.0

我正在为Android和iOS开发一款跨平台游戏。对于几个类似广告牌的对象,我使用添加剂混合(glBlend(GL_ONE, GL_ONE))和黑色背景纹理。渲染的对象看起来很好(即纹理中的黑色像素看起来完全透明)几乎无处不在。但是在Adreno GPU的两个不同Android设备上(一个是Nexus 4,另一个是Sony Xperia Go)我有这样的人工制品:enter image description here

使用汉堡包图标可以看到,背景颜色会渗透到渲染的四边形中。我假设它是背景颜色流血,因为当广告牌四边形直接在背景前时效果不可见。为了使事物变得更奇怪,当我从设备截取屏幕截图时,效果是不可见的,所以我必须用另一个相机拍摄屏幕的照片。我还注意到,当我从Android开发人员设置中启用Disable HW Overlays时,人工制品就会消失。当我在屏幕上有另一个透明窗口时,人工制品也会消失,例如当我按下音量按钮时的音量滑块。

当我渲染场景时,我首先在第一遍中渲染不透明物体,然后在第二遍中使用glBlend(GL_ONE, GL_ONE)渲染透明广告牌并禁用深度写入。

1 个答案:

答案 0 :(得分:0)

仅仅为了记录,我花了很长时间才找到罪魁祸首,但最后我发现了原因。事实证明,并非所有我所谓的“不透明”物体都是不透明的(即它们具有α值<1.0)。

因此,在使用硬件覆盖的设备上,在具有单个硬件覆盖的设备上,人工制品变得可见,它看起来很好。我不是100%肯定,但是当我有一个覆盖窗口(例如我的应用程序窗口顶部的系统音量栏)批准这与覆盖有关时会产生影响。

在我确定所有不透明物体都是不透明的问题后,问题就消失了。