在Android emulator上未使用16位深度缓冲区渲染场景

在Android emulator上未使用16位深度缓冲区渲染场景,android,opengl-es,3d,Android,Opengl Es,3d,我有一个复杂的Android OpenGL ES2.0应用程序可以正常工作,但我遇到了一个无法解决的问题 我尝试了不同的EGLConfigs,当我选择具有16位深度缓冲区的EGLConfig时,我发现部分场景没有渲染,尽管如果使用24位深度缓冲区,整个场景渲染正确。我比较了EGLConfigs,除了深度缓冲区、模具缓冲区(8位)(当然还有ID)的大小之外,找不到它们之间的任何差异 我的第一个想法是,这可能是一个精度问题,但我的近平面在2.0华氏度,远平面在25.0华氏度,我的物体有几个单位宽,所

我有一个复杂的Android OpenGL ES2.0应用程序可以正常工作,但我遇到了一个无法解决的问题

我尝试了不同的
EGLConfig
s,当我选择具有16位深度缓冲区的
EGLConfig
时,我发现部分场景没有渲染,尽管如果使用24位深度缓冲区,整个场景渲染正确。我比较了
EGLConfigs
,除了深度缓冲区、模具缓冲区(8位)(当然还有ID)的大小之外,找不到它们之间的任何差异

我的第一个想法是,这可能是一个精度问题,但我的近平面在2.0华氏度,远平面在25.0华氏度,我的物体有几个单位宽,所以这不可能

此外,我尝试使用不同的深度函数,令我惊讶的是,我发现如果我使用GL_,场景的渲染效果会更大,尽管按预期顺序排列不正确。这完全排除了精确性

我想可能模具缓冲区会以某种方式干扰,尽管我根本不使用模具测试。我尝试显式禁用它,但没有结果

只有在AVD上运行我的应用程序时才会发生这种情况(在本例中,它模拟的是Nexus7)。我在一个真实的设备上试过,它在16位和24位缓冲区上都能正常工作,但我想确定这是模拟器的问题


是什么导致了这种行为?我真的很想了解是什么导致了这种情况,如果不需要的话,不要强迫我的应用程序请求24位深度缓冲区。

Long shot,但您是否验证在每帧之前清除深度缓冲区?是的,深度缓冲区对每帧都是
glClear
ed,使用24位深度缓冲区,渲染结果是正确的。您使用什么GPU来测试它?我在Android虚拟设备上测试它,模拟Nexus7。GPU的使用是启用的,如果用户像前面描述的那样选择一个EGLConfig,它就会正常工作。Emulator以其糟糕的OpenGL ES漏斗而闻名。在我的例子中,在运行超过10分钟后,模拟器会出现奇怪的闪烁,有时会崩溃,但这取决于您拥有的主机OS/GPU/驱动程序。我建议您仅在真实设备上测试OpenGL ES应用程序。