Android没有定义GL_DEPTH_COMPONENT24?

agnu17

我在使用OpenGL ES 2.0的android项目中实现了阴影映射(使用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位depthbuffer。这可以工作吗?

雷托·科拉迪(Reto Koradi)

GL_DEPTH_COMPONENT24不是核心ES 2.0的一部分。使用它需要支持GL_OES_depth24扩展的设备它包含以下定义:

DEPTH_COMPONENT24_OES 0x81A6

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

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

确认支持扩展后,Android框架中值的定义为GLES11Ext.GL_DEPTH_COMPONENT24_OESdocumentation)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

GL_DEPTH_COMPONENT24_OES的等距拼贴图闪烁

来自分类Dev

GL_DEPTH_COMPONENT24_OES的等距图块贴图闪烁

来自分类Dev

Android NDK打开GL ES 2没有Java的设置

来自分类Dev

Android gl没有当前上下文

来自分类Dev

无法使用QOpenGLWidget读取GL_DEPTH_COMPONENT

来自分类Dev

具有API级别24+的android模拟器上没有可用的备份传输

来自分类Dev

没有图像的自定义箭头:Android

来自分类Dev

Android SDK Manager中没有Kindle Fire设备的定义

来自分类Dev

我的自定义Android Toast没有文字

来自分类Dev

Android SDK Manager中没有Kindle Fire设备的定义

来自分类Dev

没有偏好活动的自定义偏好UI android

来自分类Dev

Laravel没有定义

来自分类Dev

没有定义Heroku

来自分类Dev

没有定义AfterViewInit?

来自分类Dev

ReactDom 没有定义?

来自分类Dev

路由没有定义?

来自分类Dev

.then 没有定义?

来自分类Dev

NavigationService 没有定义

来自分类Dev

android native活动中的opengl es,gl_depth_test和gl_depth_buffer_bit不起作用

来自分类Dev

Thrift / Fedora 24没有Python库

来自分类Dev

为什么OpenGL ES 3.1+上的gl_DEPTH_COMPONENT的glCheckFramebufferStatus始终为36054?

来自分类Dev

gl.DEPTH_COMPONENT 可以用作立方体贴图的格式吗?

来自分类Dev

没有定义的构造函数

来自分类Dev

没有定义Heroku'DATABASES'

来自分类Dev

没有定义的函数声明

来自分类Dev

Viewmodel没有定义键

来自分类Dev

没有资源定义drbd

来自分类Dev

没有在视图中定义$

来自分类Dev

没有定义的typedef结构