gpt4 book ai didi

java - Android 没有定义 GL_DEPTH_COMPONENT24?

转载 作者:搜寻专家 更新时间:2023-11-01 07:57:35 26 4
gpt4 key购买 nike

我在我的 android 项目中使用 OpenGL ES 2.0(使用 java,而不是 NDK)实现了阴影映射。我用的是eclipse adt 2014_07_02版本。

症状是近距离物体不会在地面上转换阴影。经过一些尝试,我意识到,附加到 FBO 的 16 位深度缓冲区需要更高的精度。

我这样设置深度缓冲区附件:

GLES20.glRenderbufferStorage(GLES20.GL_RENDERBUFFER,
GLES20.GL_DEPTH_COMPONENT16, width, height);

现在,问题是似乎没有GL_DEPTH_COMPONENT24这样的常量。我用谷歌搜索了它的实际枚举代码 (33190),并用该代码替换了 GL_DEPTH_COMPONENT16,一切正常,阴影精细而精确。

我的问题是,使用此代码是否安全,它未在 SDK 中定义,或者这可能不适用于其他手机?

我的计划是使用 glGetError() 实现一些 try-catch 机制,然后回退到 16 位深度缓冲区。这完全可行吗?

最佳答案

GL_DEPTH_COMPONENT24 不是核心 ES 2.0 的一部分。使用它需要一个支持 GL_OES_depth24 extension 的设备.它包含定义:

DEPTH_COMPONENT24_OES 0x81A6

转换为十进制,这是您使用的 33190 值。由于它可以在您的设备上运行,因此看起来它支持该扩展程序。这并不奇怪,因为它得到了相当广泛的支持。 ES 3.0 需要支持 24 位深度缓冲区,因此任何可以支持 ES3 的 GPU 都具有必要的硬件功能,并且可以选择通过扩展将这种格式公开给 ES 2.0 应用程序。

为了使您的代码可移植,干净的解决方案是检查扩展是否存在。您可以通过调用 glGetString(GL_EXTENSIONS) 来做到这一点,并检查 OES_depth24 是否出现在返回的字符串中。

一旦您确认扩展程序受支持,Android 框架中的值定义为 GLES11Ext.GL_DEPTH_COMPONENT24_OES ( documentation )。

关于java - Android 没有定义 GL_DEPTH_COMPONENT24?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25906776/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com