我有一个复杂的Android OpenGL ES2.0应用程序,它可以正常工作,但我遇到了一个我无法解决的问题。
我正在尝试不同的EGLConfig
,当我选择具有16位深度缓冲区的EGLConfig
时,我发现场景的一部分未呈现,尽管如果整个场景都正确呈现,我使用24位深度缓冲区。我比较了EGLConfigs
,除了深度缓冲区的大小,模板缓冲区(8位(当然还有ID))之外,它们之间找不到任何差异。
我的第一个想法是,这可能是一个精确问题,但我的近平面是2.0f,我的远处飞机是25.0f,我的物体是几个单位宽,所以不可能。
此外,我尝试使用不同的深度函数,令我惊讶的是,我发现如果我使用GL_GREATER渲染场景,尽管按预期排序不正确。这彻底排除了精确度。
我想也许模板缓冲区可能会以某种方式干扰,尽管我根本不使用模板测试。我尝试明确禁用它,但没有产生任何结果。
这只发生在我在AVD上运行我的应用程序时(在这种情况下,它正在模拟Nexus 7)。我在一个真实设备上尝试过,它可以正常使用16位和24位缓冲区,但我想确保它是模拟器的问题。
导致此行为的原因是什么?我真的很想了解导致这种情况的原因,如果没有必要,我不会强迫我的应用程序请求24位深度缓冲区。