Original Post
Hi, I'm using GeForce 8800 GTX, and I'm trying to render to each slice of texture array using FBO, and I'm planning to use the mipmap of each slice of the texture layer. But so far, nothing is rendered. Any suggestion on how to solve this problem ? Thanks
//initialize the texture array
glEnable(GL_TEXTURE_2D_ARRAY_EXT);
glGenTextures(1, &envTexArray);
glBindTexture( GL_TEXTURE_2D_ARRAY_EXT, envTexArray);
glTexParameteri( GL_TEXTURE_2D_ARRAY_EXT, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri( GL_TEXTURE_2D_ARRAY_EXT, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glTexParameteri( GL_TEXTURE_2D_ARRAY_EXT, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri( GL_TEXTURE_2D_ARRAY_EXT, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri( GL_TEXTURE_2D_ARRAY_EXT, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE);
glTexImage3D(GL_TEXTURE_2D_ARRAY_EXT, 0, GL_RGBA_FLOAT32_ATI, fbo3BufferSize, fbo3BufferSize, modelInfo.numLightDirs, 0, GL_RGBA, GL_FLOAT, 0);
glGenerateMipmapEXT(GL_TEXTURE_2D_ARRAY_EXT);
glGenTextures(1, &envTexArrayDepth);
glBindTexture( GL_TEXTURE_2D_ARRAY_EXT, envTexArrayDepth);
glTexParameteri( GL_TEXTURE_2D_ARRAY_EXT, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri( GL_TEXTURE_2D_ARRAY_EXT, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri( GL_TEXTURE_2D_ARRAY_EXT, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE);
glTexImage3D(GL_TEXTURE_2D_ARRAY_EXT, 0, GL_DEPTH_COMPONENT24, fbo3BufferSize, fbo3BufferSize, modelInfo.numLightDirs, 0, GL_DEPTH_COMPONENT, GL_FLOAT, 0);
glDisable(GL_TEXTURE_2D_ARRAY_EXT);
//initialize the fbo
glEnable( GL_FRAMEBUFFER_EXT );
glGenFramebuffersEXT(1, &fbo3);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo3);
// glGenRenderbuffersEXT(1, &fbo3MyDepthBuffer);
// glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, fbo3MyDepthBuffer);
// glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT24, fbo3BufferSize, fbo3BufferSize);
// glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, fbo3MyDepthBuffer);
glFramebufferTextureEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, envTexArrayDepth,0);
//glFramebufferTextureEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, envTexArray,0);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
glDisable(GL_FRAMEBUFFER_EXT);
//rendering to texture array
glEnable( GL_FRAMEBUFFER_EXT );
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo3);
for(GLuint i=0; i<modelInfo.numLightDirs; i++)
{
glFramebufferTextureLayerEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, envTexArray, 0, i);
// glFramebufferTextureLayerEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, envTexArrayDepth, 0, i);
// glFramebufferTextureEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, envTexArrayDepth,0);
glViewport(0, 0, fbo3BufferSize, fbo3BufferSize);
.
.
.
//render the object
.
.
.
}
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
glDisable( GL_FRAMEBUFFER_EXT );