I'm working on an application which has the following design:
- several rendering processes which could be seen as several independent applications; each needs to render graphics using the OpenGL API. Each process renders into a texture (as of today using a frame buffer object).
- a kind of arbiter process which owns the actual visible window and "chooses" at a given time the source of the image to actually render into that window (from the different rendering processes). The actual rendering is done inside the arbiter process by using a textured full screen quad; the texture content being selected from one of the rendering processes.
For now, I have this working by downloading, inside each rendering process, the frame buffer object into a shared memory region (shared between the rendering process and the arbiter process). The arbiter process then uploads this content as a texture into a pixel buffer object and renders the full screen quad. However I find this very inefficient performance wise.
Is there any mean to avoid that download/upload sequence and just leave the texture all the time in the GPU memory and get access to it directly from the arbiter process (although it would be created/updated by the rendering process) ? I'm open to any kind of ideas, whatever technology or design change is required (mixing OpenGL with whatever else technology and/or using something different than pixel buffer objects/frame buffer objects).
For information, I'm in control of the source code of each rendering process as well as the arbiter process so I can do whatever I want in each of those. Moreover, one process creates all the others at run time so if there is a need to play with security settings or whatever, this is possible also as all the rendering processes are children from the arbiter process. The only limitations are that I need to keep those seperate processes (and not just threads inside one process) and the rendering processes have to use the OpenGL API for rendering.
Finally, this is using C/C++, targeting Windows XP.