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

PowerNow

我将场景的颜色(GL_COLOR_ATTACHMENT0)和深度渲染(GL_DEPTH_ATTACHMENT)FBO中,这在使用OpenGL 4+的PC上运行良好

但是在带有OpenGL ES 3.1+的智能手机上,我总是通过来获得深度glCheckFramebufferStatus(GL_FRAMEBUFFER)的了解status = 36054

glGenTextures(1, &m_textCol);
glBindTexture(GL_TEXTURE_2D, m_textCol);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, wth, hgt, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
glBindTexture(GL_TEXTURE_2D, 0);

glGenTextures(1, &m_textDepth);
glBindTexture(GL_TEXTURE_2D, m_textDepth);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, wth, hgt, 0, GL_DEPTH_COMPONENT, GL_FLOAT, NULL);
glBindTexture(GL_TEXTURE_2D, 0);

GLuint framebuffer;
glGenFramebuffers(1, &framebuffer);
glBindFramebuffer(GL_FRAMEBUFFER, framebuffer);

glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, m_textCol, 0);
GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER); always 36053 -> ok

glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, m_textDepth, 0);
status = glCheckFramebufferStatus(GL_FRAMEBUFFER); // always 36054 -> not ok

我也尝试过

glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, wth, hgt, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, NULL);

但没有变化。

也许有人知道我在做什么错?谢谢。

比目鱼

状态36054为GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT

如果我们看一下OpenGL ES3.1规范的9.4节,它列出了internalFormat深度附件的以下有效值

  • DEPTH_COMPONENT16
  • DEPTH_COMPONENT24
  • DEPTH_COMPONENT32F
  • DEPTH24_STENCIL8
  • DEPTH32F_STENCIL8

请注意,最后两个还包含模板部分。您可以将它们用于深度组件,如果不需要,可以忽略模板附件。特别DEPTH24_STENCIL8是很有可能得到广泛支持。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

OpenGL ES 3(iOS)纹理奇数-想知道为什么

来自分类Dev

为什么(1 + 3)[a]与a [1 + 3]相同?

来自分类Dev

为什么null不in(1,2,3)为false

来自分类Dev

为什么VBA认为-1 <3 <2为真?

来自分类Dev

PHP计算-为什么1 + 1 = 3?

来自分类Dev

为什么将4 + 20 /(3-1)* 2解释为4 +(20)/((3-1-1)* 2)是错误的?

来自分类Dev

为什么3-1 * 8 + 2 * 3等于1

来自分类Dev

为什么是-2?为什么不是-3或-1?

来自分类Dev

为什么返回3,1?

来自分类Dev

为什么“数字&(〜(1 << 3))”对0无效?

来自分类Dev

为什么1 === 1 === 1为假?

来自分类Dev

为什么-1 >> 1计算为-1?

来自分类Dev

为什么echo> 1 2 3创建一个名为1且内容为2 3的文件?

来自分类Dev

为什么'(1 2 3)求结果为Lisp(方案)的列表?

来自分类Dev

为什么在皮质m3中为复位分配了start +1的值

来自分类Dev

为什么我需要3个节点的k安全值为1

来自分类Dev

为什么C ++认为8 ^ 1/3 = 1?

来自分类常见问题

为什么1 ... 1评估为10.1?

来自分类Dev

iOS和OpenGL ES 3上的单通道纹理

来自分类Dev

为什么许多移动GPU支持OpenGL ES,但不支持OpenGL?

来自分类Dev

为什么许多移动GPU支持OpenGL ES,但不支持OpenGL?

来自分类Dev

为什么ZipEntry.Size始终为-1

来自分类Dev

为什么我的轨迹栏的值始终为-1

来自分类Dev

为什么(state == 1 && 3)有道理?

来自分类Dev

为什么1 << 3等于8而不是6?

来自分类Dev

为什么arraylist的新容量是(oldCapacity * 3)/ 2 + 1?

来自分类Dev

为什么`“%,2,%”之类的“,1,2,3,”`返回零?

来自分类Dev

为什么下面的 3 行代码返回 1?

来自分类Dev

为什么我的OpenGL版本在Mac OS X上始终为2.1?

Related 相关文章

热门标签

归档