将立方体贴图纹理附加到帧缓冲区对象(FBO)时为GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT

乌利·霍尔特曼(Uli Holtmann)

为了支持点光源的阴影贴图,我需要将深度值渲染到立方体贴图的6面。

我的初始化函数如下所示:

public void init(int width, int height) {
    fboId = GL30.glGenFramebuffers();

    GL11.glEnable(GL13.GL_TEXTURE_CUBE_MAP);
    cubeMap = GL11.glGenTextures();

    GL11.glBindTexture(GL13.GL_TEXTURE_CUBE_MAP, cubeMap);

    GL11.glTexParameteri(GL13.GL_TEXTURE_CUBE_MAP,
            GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_NEAREST);
    GL11.glTexParameteri(GL13.GL_TEXTURE_CUBE_MAP,
            GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_NEAREST);
    GL11.glTexParameteri(GL13.GL_TEXTURE_CUBE_MAP, GL11.GL_TEXTURE_WRAP_S,
            GL11.GL_CLAMP);
    GL11.glTexParameteri(GL13.GL_TEXTURE_CUBE_MAP, GL11.GL_TEXTURE_WRAP_T,
            GL11.GL_CLAMP);
    GL11.glTexParameteri(GL13.GL_TEXTURE_CUBE_MAP, GL12.GL_TEXTURE_WRAP_R,
            GL11.GL_CLAMP);

    for (int i = 0; i < 6; i++)
        GL11.glTexImage2D(GL13.GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 0,
                GL14.GL_DEPTH_COMPONENT32, width, height, 0,
                GL11.GL_DEPTH_COMPONENT, GL11.GL_FLOAT, (FloatBuffer) null);

    GL11.glBindTexture(GL13.GL_TEXTURE_CUBE_MAP, 0);
}

这是我用来将立方体贴图的一侧绑定到我的FBO的函数:

public void bindForWriting(int target) {
    // target is GL13.GL_TEXTURE_CUBE_MAP_POSITIVE_X etc.

    GL30.glBindFramebuffer(GL30.GL_DRAW_FRAMEBUFFER, fboId);
    GL30.glFramebufferTexture2D(GL30.GL_DRAW_FRAMEBUFFER,
            GL30.GL_DEPTH_ATTACHMENT, target, cubeMap, 0);

    // Disable writes to the color buffer.
    GL11.glDrawBuffer(GL11.GL_NONE);

    int fboStat = GL30.glCheckFramebufferStatus(GL30.GL_DRAW_FRAMEBUFFER);

    if (fboStat != GL30.GL_FRAMEBUFFER_COMPLETE) {
        // fboStat is always == GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT
    }

    GL11.glClear(GL11.GL_DEPTH_BUFFER_BIT);
}

不幸的是,FBO并不完整,我不知道为什么。Khronos的网站说:“不是所有的帧缓冲器附连点是帧缓冲器附着完成,这意味着附加有渲染或纹理的至少一个附接点有其附加的对象不再存在或具有为零的宽度或高度的附加的图像。 ,或者颜色附着点附着了不可渲染的图像,深度附着点附着了不可深度渲染的图像,或者模板附着点附着了不可渲染的图像。包括GL_RGBA4,GL_RGB5_A1和GL_RGB565。GL_DEPTH_COMPONENT16是唯一的深度可渲染格式。GL_STENCIL_INDEX8是唯一的可模板渲染格式。

我没有销毁多维数据集贴图,并且width / height>0。我看不到为什么GL_DEPTH_COMPONENT16是唯一的深度可渲染格式,因为我用于点光源阴影贴图的FBO在GL_DEPTH_COMPONENT32上可以正常工作。如果我将其更改为GL_DEPTH_COMPONENT16,仍然会发生相同的错误。

有什么建议吗?

乌利·霍尔特曼(Uli Holtmann)

我发现了问题:

如果target是六个立方体贴图2D图像目标之一,并且width和height参数不相等,则生成GL_INVALID_ENUM 来源

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用帧缓冲区渲染为立方体贴图纹理

来自分类Dev

使用帧缓冲区渲染为立方体贴图纹理

来自分类Dev

GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT尝试创建多样本帧缓冲区

来自分类Dev

使用立方体贴图时的OpenGL清除缓冲区

来自分类Dev

使用内部格式为GL_R16_SNORM的纹理时,GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT

来自分类Dev

CUDA立方体贴图纹理

来自分类Dev

清除DRAW帧缓冲区仅在附加到GL_COLOR_ATTACHMENT0时才有效吗?

来自分类Dev

glDeleteFramebuffers删除帧缓冲区对象,它是否删除附加到该帧缓冲区的纹理?

来自分类Dev

OpenGL:立方体贴图纹理,无UV贴图

来自分类Dev

是否可以将纹理作为渲染目标附加到默认帧缓冲区?

来自分类Dev

将GL_2D_ARRAY_TEXTURE中的特定层附加到帧缓冲区

来自分类Dev

OpenGL黑色/空白立方体贴图纹理

来自分类Dev

COLOR_ATTACHMENT's-如何在帧缓冲区对象内将多个纹理作为颜色附件渲染?

来自分类Dev

如何将Scenekit背景的内容设置为立方体贴图

来自分类Dev

OpenGL-将立方体贴图的面渲染为四边形

来自分类Dev

glCheckFramebufferStatus返回36054 GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT

来自分类Dev

附加到帧缓冲区的OpenGL多样本整数纹理无法正确解析

来自分类Dev

附加到帧缓冲区的OpenGL多样本整数纹理无法正确解析

来自分类Dev

调整大小后是否应将纹理重新附加到帧缓冲区

来自分类Dev

WebGL将纹理帧缓冲区复制到纹理帧缓冲区?

来自分类Dev

绑定FBO(帧缓冲区对象)的成本有多高

来自分类Dev

渲染动态立方体贴图(OpenGL)

来自分类Dev

Unity构建太大的立方体贴图

来自分类Dev

动态立方体贴图 - opengl

来自分类Dev

是否可以在立方体贴图中将视频文件添加为纹理面?

来自分类Dev

OpenGL ES 2.0 / 3.0中带有位图的立方体贴图纹理

来自分类Dev

无法同时使用立方体贴图和2D纹理

来自分类Dev

OpenGL ES 2.0将纹理附加到模板缓冲区

来自分类Dev

glTextureStorage3D 上的 GL_INVALID_VALUE 与立方体贴图数组

Related 相关文章

  1. 1

    使用帧缓冲区渲染为立方体贴图纹理

  2. 2

    使用帧缓冲区渲染为立方体贴图纹理

  3. 3

    GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT尝试创建多样本帧缓冲区

  4. 4

    使用立方体贴图时的OpenGL清除缓冲区

  5. 5

    使用内部格式为GL_R16_SNORM的纹理时,GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT

  6. 6

    CUDA立方体贴图纹理

  7. 7

    清除DRAW帧缓冲区仅在附加到GL_COLOR_ATTACHMENT0时才有效吗?

  8. 8

    glDeleteFramebuffers删除帧缓冲区对象,它是否删除附加到该帧缓冲区的纹理?

  9. 9

    OpenGL:立方体贴图纹理,无UV贴图

  10. 10

    是否可以将纹理作为渲染目标附加到默认帧缓冲区?

  11. 11

    将GL_2D_ARRAY_TEXTURE中的特定层附加到帧缓冲区

  12. 12

    OpenGL黑色/空白立方体贴图纹理

  13. 13

    COLOR_ATTACHMENT's-如何在帧缓冲区对象内将多个纹理作为颜色附件渲染?

  14. 14

    如何将Scenekit背景的内容设置为立方体贴图

  15. 15

    OpenGL-将立方体贴图的面渲染为四边形

  16. 16

    glCheckFramebufferStatus返回36054 GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT

  17. 17

    附加到帧缓冲区的OpenGL多样本整数纹理无法正确解析

  18. 18

    附加到帧缓冲区的OpenGL多样本整数纹理无法正确解析

  19. 19

    调整大小后是否应将纹理重新附加到帧缓冲区

  20. 20

    WebGL将纹理帧缓冲区复制到纹理帧缓冲区?

  21. 21

    绑定FBO(帧缓冲区对象)的成本有多高

  22. 22

    渲染动态立方体贴图(OpenGL)

  23. 23

    Unity构建太大的立方体贴图

  24. 24

    动态立方体贴图 - opengl

  25. 25

    是否可以在立方体贴图中将视频文件添加为纹理面?

  26. 26

    OpenGL ES 2.0 / 3.0中带有位图的立方体贴图纹理

  27. 27

    无法同时使用立方体贴图和2D纹理

  28. 28

    OpenGL ES 2.0将纹理附加到模板缓冲区

  29. 29

    glTextureStorage3D 上的 GL_INVALID_VALUE 与立方体贴图数组

热门标签

归档