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

时间:2015-01-28 20:16:20

标签: android opengl-es 3d

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

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

我的第一个想法是,这可能是一个精确问题,但我的近平面是2.0f,我的远处飞机是25.0f,我的物体是几个单位宽,所以不可能。

此外,我尝试使用不同的深度函数,令我惊讶的是,我发现如果我使用GL_GREATER渲染场景,尽管按预期排序不正确。这彻底排除了精确度。

我想也许模板缓冲区可能会以某种方式干扰,尽管我根本不使用模板测试。我尝试明确禁用它,但没有产生任何结果。

这只发生在我在AVD上运行我的应用程序时(在这种情况下,它正在模拟Nexus 7)。我在一个真实设备上尝试过,它可以正常使用16位和24位缓冲区,但我想确保它是模拟器的问题。

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

0 个答案:

没有答案