Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在一些安卓设备上添加混合人工制品与OpenGL ES 2.0_Android_Opengl Es_Opengl Es 2.0 - Fatal编程技术网

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

Android 在一些安卓设备上添加混合人工制品与OpenGL ES 2.0,android,opengl-es,opengl-es-2.0,Android,Opengl Es,Opengl Es 2.0,我正在为Android和iOS开发一款跨平台游戏。对于两个类似广告牌的对象,我使用黑色背景纹理的加法混合(glBlend(GL\u ONE,GL\u ONE))。渲染对象几乎处处看起来都很好(即,纹理中的黑色像素看起来完全透明)。然而,在两个不同的安卓设备上(一个是Nexus 4,另一个是Sony Xperia Go),我有如下人工制品: 当汉堡图标可见时,背景色会流入渲染的四边形中。我假设它是背景色出血,因为当广告牌四边形直接位于背景前面时,效果不可见。更奇怪的是,当我从设备上拍摄屏幕截图时,

我正在为Android和iOS开发一款跨平台游戏。对于两个类似广告牌的对象,我使用黑色背景纹理的加法混合(
glBlend(GL\u ONE,GL\u ONE)
)。渲染对象几乎处处看起来都很好(即,纹理中的黑色像素看起来完全透明)。然而,在两个不同的安卓设备上(一个是Nexus 4,另一个是Sony Xperia Go),我有如下人工制品:

当汉堡图标可见时,背景色会流入渲染的四边形中。我假设它是背景色出血,因为当广告牌四边形直接位于背景前面时,效果不可见。更奇怪的是,当我从设备上拍摄屏幕截图时,效果是不可见的,所以我必须用另一台相机拍摄屏幕。我还注意到,当我从Android开发者设置中启用
禁用硬件覆盖时,人工制品消失了。当我在屏幕上有另一个透明窗口时,人工制品也会消失,例如当我按下音量按钮时的音量滑块


当我渲染场景时,我首先在第一遍渲染不透明对象,然后在第二遍渲染透明广告牌,使用
glBlend(GL\u ONE,GL\u ONE)
和禁用深度写入。

仅为了记录,我花了很长时间才找到罪犯,但最终我找到了原因。事实证明,并非所有“假定”不透明对象都是真正不透明的(即,它们的alpha值小于1.0)

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


在我确定我所有的不透明对象都是真正的不透明对象之后,问题就消失了。

除了在这里发帖,还可以在高通开发者网络论坛上试试。你尝试过不同的纹理内部格式吗?谢谢你的建议,我也会尝试的。