Render to multiple buffer/outputs (?)

I was just reading a thread in the Advanced section about fast rendering of a scene for a cube map which implied rendering the scene 6 times with the same openGL commands (projection and modelview matrix excepted) and an idea just came to me. Wouldn’t be interesting to have multiple T&L pipelines each connected to a different output buffer to manage these kind of problems? We would just position the N modelview / projection / viewport and maybe scissor parameters for each enabled pipeline, specify the output buffer for each and issue a single set of openGL commands. The upload of vertices would be done only once as well as state changes etc… For each primitive the driver (?) would sequentially transform N times and issue N rasterizations in each buffer. Apart from rendering to cubemaps this would be interesting for stereo rendering, approximating spherical/cylindrical projections etc…

I don’t know if there would be a significant speed improvement but its and idea.

This is not a very good idea for cube map generation, and probably also not for most cases where multiple images are needed (except perhaps stereo). A lof of the rendering speed comes from culling objects, and when you’re rendering the faces of the cube map, you may be rendering very similarly, but you’re culling different objects for each view. If you render everything at once, you’ll get, say, 4 times the transformations. If the hardware has 6 T&L units, then your idea may be beneficial, but most hardware will not have this, and this won’t simplify code by much, anyway, so people probably won’t use it.

Rendering directly to textures would be nice, though.

You’re right about cube maps. It would be very slow because of the necessary absence of culling at object level. I’ve also found a case where it could be interesting : focus blurring. Render the scene N times at slightly varying angles and then accumulate them (in accum buffer ?). Again I’m not sure the gain in speed would be interesting for most cases (apart for stereo again where I’m sure it would help on complex scenes. We have a professional application here that has to render approx 150k triangles on a Wildcat 4110 with stereo on and it’s twice as fast with stereo off)

[This message has been edited by Olive (edited 05-09-2001).]

I think that stereo is a strange beast, that on one hand keeps getting attention, and on the other hand keeps getting neglected. I have two different shutter glasses (3D-Spex and Revelator), and can’t use either (3D-Spex worked with very few DOS games; Revelators don’t have a Win2K driver). Stereo is pretty nice, so it’s a pity that it’s not better supported.

The nice thing about stereo support is that it can be done at the driver level. And it could probably make it easier to use stereo if the drivers could do two trasnformations at once, and render into two buffers.

I never really researched what 3dfx’s T-Buffer was about, but wasn’t it something similar to this?

I think T-Buffers, from what I understood, has some sort of functionnality approaching this, except that you can’t specify a different Transform matrix for each. But I think the idea is to render the scene in each buffer and mix them when building the video signal.

About stereo, I agree with you that it never really got any real interest. Partly because its very tiring for the eyes because the frequency is halved both in terms of animation and video refresh rates. This application which I’ve talked about was initially planned to work with a VR Helmet with stereo but we had to switch back to mono because the low frame rate made the user sick ! Pity…

[This message has been edited by Olive (edited 05-10-2001).]

[This message has been edited by Olive (edited 05-10-2001).]

T-buffer was done by the hardware I beleived. It wiggled the projection matrix and rendered with blending basically.
There is more to it too (for doing shadowing, depth cuing). It was a good idea but requires a lot of horsepower to produce quality images.

But for doing all 6 faces of the cube map, isn’t there an extension already?

V-man