Skip to main content
gamedev.net
🔒 Locked

Rendering to Texture Array using FBO

Started by EonStrife 0 replies 2.8k views
Original Post
EonStrife
EonStrife
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 ?

//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 );

Thanks

Topic Locked

This topic has been locked by a moderator. New replies are not allowed.

Sign in to reply to this topic.