使用GL_TEXTURE_2D_ARRAY和深度组件的不完整附件

时间:2013-04-23 09:22:08

标签: arrays opengl textures fbo shadow-mapping

我正在尝试使用opengl纹理数组存储大量阴影贴图。 不幸的是,我总是在检查帧缓冲区时出现“不完整的附件”错误。 我尝试在nvidia的级联阴影映射示例中设置我的纹理数组(参见Cascaded Shadow Mapping example by NVIDIA)。

所以这里有一些代码:

  1. 创建纹理:

    glGenTextures(1, &shadowMapArray_);
    glBindTexture(GL_TEXTURE_2D_ARRAY, shadowMapArray_);
    //maxArrayDepth_ = GL_MAX_ARRAY_TEXTURE_LAYERS
    glTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_DEPTH_COMPONENT, size_, size_, maxArrayDepth_, 0, GL_DEPTH_COMPONENT, GL_FLOAT, 0);
    glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
    glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
    glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
    glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
    glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_COMPARE_FUNC, GL_LESS);
    glBindTexture(GL_TEXTURE_2D_ARRAY, 0);
    
  2. 创建FBO:

    glGenFramebuffers(1, &fbo_);
    glBindFramebuffer(GL_FRAMEBUFFER, fbo_);
    glDrawBuffer(GL_NONE);
    glBindFramebuffer(GL_FRAMEBUFFER, 0);
    
  3. 将阴影贴图绘制到图层中:

    glUseProgram(programID_);
    glBindFramebuffer(GL_FRAMEBUFFER, fbo_);
    glFramebufferTextureLayer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, shadowMapArray_, 0, currArraySize_);
    GLView::checkGLFramebuffer("ShadowMapGenerator::createShadowMap()"); //here i get the incomplete attachment
    [...]
    currArraySize_++;
    
  4. 系统规格:

    Debian使用Nvidia驱动程序304.60和GTX 560 Ti挤压64位。 旧的驱动程序版本是由于较新版本中的着色器编译器错误。

0 个答案:

没有答案