[osg-users] Fast cycling of textured rectangles

Sebastian Messerschmidt sebastian.messerschmidt at gmx.de
Sun Nov 15 14:10:05 PST 2015


Am 15.11.2015 18:58, schrieb Christoph Heindl:
> Hi Sebastian,
>
> thanks for coming back to me.
>
>     Changing texture coordinates or switching binding is fast enough.
>
>
> Will give that a try for sure! I guess the reason I'm trying to still 
> push further is to understand how to translate raw OpenGL to osg.
>
>     Rasterizing has to be done in any case you want to put it to screen.
>
>
> I'm not so sure here. Assuming a static scene with only three 
> viewpoints ,couldn't I render each viewpoint to an 'image' ? Then 
> depending on the user's choice all I would have to do is copy the 
> pixels of the image to the screen. That would not require 
> rasterization, would it?

Putting anything to the screen is "rasterizing".
Scanning through your example I got what you are trying to achieve. But 
seriously I'd call this premature optimization.
For presenting anything to an output device you will have a lot of time 
(~16ms at 60Hz), so simply rendering a fullscreen quad with an image 
will definitely fit in a frame, so your optimization is not really 
useful except for some  caching that might occur by uploading the 
texture beforehand.
Usually you solve a problem, benchmark it, see if it fits your needs and 
optimize it if it doesn't...

Cheers
Sebastian


>
> The way I'd like to implement this is to render each CPU image using a 
> textured quad to a custom FBO with a renderbuffer attached. Then, upon 
> user request copy the pixels of the FBO to the default DRAW buffer.
>
> Here's a sketch in raw OpenGL
>
> // Initialization: Called n-times for each image to be pre-rendered.
> GLuint uploadImageGPU(const char *imgdata)
> {
>     GLuint fb;
>
>     glGenFramebuffers(1, &fb);
>     glBindFramebuffer(GL_DRAW_FRAMEBUFFER, fb);
>
>     GLuint rb;
>     glGenRenderbuffers(1,&rb);
>     glBindRenderbuffer(GL_RENDERBUFFER, rb);
>     glRenderbufferStorage(GL_RENDERBUFFER,GL_RGBA8, resX, resY);
>     glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, 
> GL_RENDERBUFFER, rb);
>     // Check state...
>     // Generate textured quad
>     glTexImage2D(GL_TEXTURE_2D, ..., imgdata);
>     glBegin(GL_QUADS);
>         // ... Skipped for readability
>     glEnd();
>     return fb;
> }
>
> // Run-time: Quickly switch between pre-rendered images (textured quads)
> void showImageGPU(GLuint fbo)
> {
>     glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
>     glBindFramebuffer(GL_READ_FRAMEBUFFER, fbo);
>     glBlitFramebuffer(0, 0, resX, resY, 0, 0, resX, resY, 
> GL_COLOR_BUFFER_BIT, GL_NEAREST);
>     // Swap buffers, glFinish();
> }
>
> As I would like to use the convenience of osg as far as setting up 
> windows and other things, I would love to translate this to osg if 
> possible.
>
> Best,
> Christoph
>
>
> _______________________________________________
> osg-users mailing list
> osg-users at lists.openscenegraph.org
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openscenegraph.org/pipermail/osg-users-openscenegraph.org/attachments/20151116/7aff3996/attachment-0003.htm>


More information about the osg-users mailing list