PDA

View Full Version : FBO: Texture Re-attachment Problem



awhig
07-11-2009, 06:00 PM
Hello All,

I am calling two shader functions in a loop. Just before calling shader function I prepare resources for it to compute on.


Assume 3 textures of equal dimensions are to be attached to FBO fb


Steps:

1. Enable Texture GL_TEXTURE_RECTANGLE_2D

2. Bind to off-screen frame buffer.
glBindFrameBufferEXT(GL_FRAMEBUFFER_EXT, fb); [Assumed that fb was generated in some contstructor] and change viewport settings.


3. set up textures
setTexture(W , H, data , texture unit number , tex) ;

where parameters are self explanatory.

4. Attach to FBO
glFrameBufferTextureEXT(..)


5. Call shader function to perform calculations


6. unbind texture units.
glActiveTexture(GL_TEXTURE0)
glBindTexture(GL_TEXTURE_RECTANGLE , 0);

....
[same for GL_TEXTURE1 and GL_TEXTURE2 ]


7. disable texture
glDisable(GL_TEXTURE_RECTANGLE_ARB) ;


8. switch to on-screen or main frame buffer
glBindFrameBuffer(.. , 0);


..... [Rest of the code]
Note: After this I do not plan to delte texture ids and fbo id as I am calling shader in a loop.


9. //to solve other problem using a different shader
switch back to off-screen FBO and change viewport settings

10 . set up 2 textures of same dimensions but different from that used previously ( for previous shader)

11. call shader function number 2

12. same steps as 1-8 , but no FBO will have two attachments.



The Problem:

Q1 . I know that EXT version FBO does not permit 2 attachments of different formats and dimensions, but I need to know that after applying step no. 6 and step no.7 , why there should be any complaints of different dimensions attachment prohibited -- by the same FBO identifier named "fb" ???

The error is thrown at step 10 when I am trying to attach my first texture identified by tex[0] at GL_COLOR_ATTACHMENT0_EXT to the FBO?


One of the solutions can be to go for ARB_FBO but that is supported at OGL 3.0 and + . I have OGL 3.0+ but need to know why there be an error of different dimensionality when I am removing textures from the attachments and then disabling GL_TEXTURE_RECTANGLE_ARB ???


Q2. Or is there another way to remove attachments from FBO ?

I used reference: http://www.opengl.org/wiki/GL_EXT_framebuffer_object

Q3. When I write


//assuming this is done when current frame buffer is "fb" [Off-screen frame buffer]
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_RECTANGLE , 0);
..


Will it remove the attachment from FBO or just detach texture data from texture unit GL_TEXTURE0???


Q4. If for Q3, texture data is removed from GL_TEXTURE0 then how come FBO remembers previously attached texture's dimensions ?


Help appreciated.

awhig
07-11-2009, 10:38 PM
Solved.