Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl GL_帧缓冲区_将立方体贴图纹理附着到帧缓冲区对象(FBO)时未完成_附着_Opengl_Framebuffer - Fatal编程技术网

Opengl GL_帧缓冲区_将立方体贴图纹理附着到帧缓冲区对象(FBO)时未完成_附着

Opengl GL_帧缓冲区_将立方体贴图纹理附着到帧缓冲区对象(FBO)时未完成_附着,opengl,framebuffer,Opengl,Framebuffer,为了支持点光源的阴影贴图,我需要将深度值渲染到立方体贴图的6条边上 我的init函数如下所示: 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_

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

我的init函数如下所示:

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是不完整的,我不知道为什么。该网站说:“并非所有的帧缓冲区连接点都是帧缓冲区 附件已完成。这意味着至少有一个 带有渲染缓冲区或纹理的附着点 “附加”的附加对象已不存在 或具有宽度或高度为的附加图像 零,或颜色附着点具有 附加的非彩色可渲染图像,或 深度附着点具有不可渲染的深度 图像已附着,或模具附着点具有 附加了非模具可渲染图像。 颜色可渲染格式包括GL_RGBA4, GL_RGB5_A1,以及 德国劳埃德船级社RGB565。 GL_深度_组件16是唯一 深度渲染格式。 GL_STENCIL_INDEX8是唯一的 模具可渲染格式。”

我没有破坏立方体贴图,宽度/高度>0。我不明白为什么GL_DEPTH_component 16是唯一的深度可渲染格式,因为我用于聚光灯阴影贴图的FBO与GL_DEPTH_component 32配合得很好。如果我将其更改为GL_DEPTH_COMPONENT16,同样的错误仍然会发生

有什么建议吗?

我发现了问题:

如果目标是六个立方体贴图2D图像目标之一,且宽度和高度参数不相等,则生成GL_无效_枚举。
.

那么,调用bindForWriting的是什么呢?调用bindForWriting的是立方体的侧面,用于写入:GL13.GL\u TEXTURE\u cube\u MAP\u正片,GL13.GL\u TEXTURE\u cube\u MAP\u负片,GL13.GL\u TEXTURE\u cube\u MAP\u正片,GL13.GL\u TEXTURE\u TEXTURE\u cube\u MAP\u负片,GL13.GL13.GL\u TEXTURE\u cube\u正片,GL13.GL_纹理_立方体_贴图_负片_ZI使用glGetError查看哪一行生成错误。它看起来像
GL11.glTexImage2D(GL13.GL_纹理_立方体_贴图_正X+i,0,GL14.GL_深度_组件32,宽度,高度,0,GL11.GL_深度_组件,GL11.GL_浮点,(FloatBuffer)null)生成
GL\u无效值
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);
}