Thanks Sergey, Right now I'm using multiple cameras rendered one after another... but I have the feeling the performances are not too good (with 17 pre render cameras...). Do you think I'm right to assume I could really improve the performances by using pure GL code instead and create only one FBO ?
as a matter of fact, my second idea would be to encapsulate all this using approximately the code snippet of the previous mail in a special drawable. But i'm wondering if this will not lead to other issues (I'm not that familiar with pure GL code and creating special drawables): is it possible to allocate by FBO and everything I could need from within the renderImplementation of a drawable ? Could somebody predict a big issue doing this ? Cheers, Manu. 2011/9/23 Sergey Polischuk <[email protected]> > Hi, Manu > > There are no convenient support for renderbuffer ping-ponging. You can > either use pure gl, graph with lots of cameras setup with correct render > order and output textures, or osgppu graph with chain of units > > Cheers, > Sergey. > 22.09.2011, 16:28, "Emmanuel Roche" <[email protected]>: > > Hi everyone, > > I have a question regarding FBO usage and Draw/Read buffer changes: > > - I have one pre render camera using FBO and with 2 textures attached (to > COLOR_BUFFER0 and COLOR_BUFFER1) > - Under that camera I would like to add multiple screen aligned quads that > would use the attached textures this way: (call them tex0 and tex1): > - quad0 would using the tex0 as input and draw on tex1 > - quad1 would then use tex1 as input and draw on tex0 > - quad2 would using the tex0 as input and draw on tex1 > - quad3 would then use tex1 as input and draw on tex0 > - etc. > > This is possible in pure OpenGL using something like that: > > * glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fftFbo2); > glUseProgram(fftx->program); > glUniform1i(glGetUniformLocation(fftx->program, "nLayers"), choppy ? 5 > : 3); > for (int i = 0; i < PASSES; ++i) { > glUniform1f(glGetUniformLocation(fftx->program, "pass"), float(i + > 0.5) / PASSES); > if (i%2 == 0) { > glUniform1i(glGetUniformLocation(fftx->program, "imgSampler"), > FFT_A_UNIT); > glDrawBuffer(GL_COLOR_ATTACHMENT1_EXT); > } else { > glUniform1i(glGetUniformLocation(fftx->program, "imgSampler"), > FFT_B_UNIT); > glDrawBuffer(GL_COLOR_ATTACHMENT0_EXT); > } > drawQuad(); > } > glUseProgram(ffty->program); > glUniform1i(glGetUniformLocation(ffty->program, "nLayers"), choppy ? 5 > : 3); > for (int i = PASSES; i < 2 * PASSES; ++i) { > glUniform1f(glGetUniformLocation(ffty->program, "pass"), float(i - > PASSES + 0.5) / PASSES); > if (i%2 == 0) { > glUniform1i(glGetUniformLocation(ffty->program, "imgSampler"), > FFT_A_UNIT); > glDrawBuffer(GL_COLOR_ATTACHMENT1_EXT); > } else { > glUniform1i(glGetUniformLocation(ffty->program, "imgSampler"), > FFT_B_UNIT); > glDrawBuffer(GL_COLOR_ATTACHMENT0_EXT); > } > drawQuad(); > } > > glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);* > > .. but I can't figure out how to do something equivalent to the internal > calls to glDrawBuffer in the previous snippet when I have a single camera. > (as calling setDrawBuffer() is done once and for all before rendering > anything... Any idea what could be worth trying here ? > > Cheers, > Manu. > > _______________________________________________ > osg-users mailing list > [email protected] > http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org > > > _______________________________________________ > osg-users mailing list > [email protected] > http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org > >
_______________________________________________ osg-users mailing list [email protected] http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

