Re: [info-performer] Subload pfTexture across multiple pipes

Date view Thread view Subject view Author view

From: Brian Furtaw (brian++at++sgi.com)
Date: 10/31/2003 04:23:54


Using glCopyTexSubImage2D will copy the pixel information directly from
framebuffer to texture memory without the need to copy back to main
memory, (which is really slow). This will not allow you to access the
rear view texture on multiple pipes only the pipe it was rendered on.
Rendering to an offscreen buffer will not buy you any speed because it
still resides on the IR pipes memory.

You have to figure out if it is faster to render the rearview on each
pipe then glCopyTexSubImage2D the pixels to texture memory for
reprojection, or is it faster to render on one pipe glReadPixels back to
main memory then copy that texture by glTexSubImage2D to each of the
pipes it needs to be viewed in. I would do an experiment to find out
which way is better.

You should be able to get away with a much lower res view of your scene
for the rearview mirror which will save you in clear, copy and fill
time. You could also set your LOD scale up and render far less polygons
in the rearview channel which will give you less time in T&L. As Dick
mentioned use a second pfChannel not a second pfPipeWindow. Chis had
some good insghts into subloading the textures. I have found that
resolutions up to 128x128 pixels copy very fast.

Brian

Volodymyr Kindratenko wrote:
> This is almost what I did initially, except I was using texture subload
> instead of glCopyTexSubImage2D. This does not work however when the same
> texture needs to be shared across multiple pipes.
>
> Volodymyr
>
>
>>-----Original Message-----
>>From: Brian Furtaw [mailto:brian++at++sgi.com]
>>Sent: Thursday, October 30, 2003 6:40 AM
>>To: Volodymyr Kindratenko
>>Cc: 'Dorosky, Christopher G'; 'Dick Rous'; info-performer++at++sgi.com
>>Subject: Re: [info-performer] Subload pfTexture across multiple pipes
>>
>>
>>Try this create two pfChannels attach the rear view mirror channel to
>>your pfPipeWindow first then your out-the-window(OTW) channel second.
>>This will cause Performer to render them in the order you
>>attached them.
>>
>>In the Channel DRAW callback for the rearview mirror,
>>(pfChannel::setTravFuncs(PFTRAV_DRAW,...) ) call
>>glCopyTexSubImage2D ()
>>to move the pixels from the rearview channel to a texture
>>that will be
>>applied when the OTW channel is rendered.
>>
>>Rearview channel draw callback...
>>
>>RearChanDraw() {
>>
>>chan->clear();
>>
>>// pre -Draw stuff
>>
>>pfDraw();
>>
>>// copy pixels to texture
>>glCopyTexSubImage2D (...);
>>
>>}
>>
>>Brian
>>
>>Volodymyr Kindratenko wrote:
>>
>>>Chris:
>>>
>>>Thanks for the explanation, it helps.
>>>
>>>Well, I came up with a different solution. I render the
>>
>>mirror image
>>
>>>in a separate pfPipeWindow and copy it from the screen
>>
>>buffer to the
>>
>>>texture's image memory via glReadPixels. This is done in the
>>>pfPipeWindow's channel draw callback. This works as long as
>>>pfPipeWindow is visible on the screen. Setting pfPipeWindow type to
>>>PFPWIN_TYPE_PBUFFER results in not calling the
>>
>>pfPipeWindow's channel
>>
>>>draw callback, so, no texture is rendered. How can I render to an
>>>off-screen buffer?
>>>
>>>Volodymyr
>>>
>>>
>>>
>>>>-----Original Message-----
>>>>From: Dorosky, Christopher G [mailto:christopher.g.dorosky++at++lmco.com]
>>>>Sent: Wednesday, October 29, 2003 4:27 PM
>>>>To: Volodymyr Kindratenko; Dick Rous
>>>>Cc: info-performer++at++sgi.com
>>>>Subject: RE: [info-performer] Subload pfTexture across
>>
>>multiple pipes
>>
>>>>
>>>>You have to subload them on each pipe.
>>>>No way around it, unless you want to take the frame hit and
>>>>have Performer call the tex->load() implicitly.
>>>>
>>>>Pipe 0 CANNOT share it's texture memory with Pipe 1.
>>>>Channel 0 CAN (and does) share it's texture memory with
>>>>channel 1, IF Channel 0&1 are on the same pipe.
>>>>
>>>>That saying was misleading. pfTexture's can have different
>>>>images in different pipes. Both must be directly subloaded,
>>>>even if they are the same.
>>>>
>>>>Think of the texture beign texture for a tank. One pipe could
>>>>be visual, the other IR. Possibly the same pfTexture, but
>>>>different image data.
>>>>
>>>>Chris
>>>>
>>>>-----Original Message-----
>>>>From: owner-info-performer++at++performer.engr.sgi.com
>>>>[mailto:owner-info-performer++at++performer.engr.sgi.com]On Behalf
>>>>Of Volodymyr Kindratenko
>>>>Sent: Wednesday, October 29, 2003 10:20 AM
>>>>To: 'Dick Rous'
>>>>Cc: info-performer++at++sgi.com
>>>>Subject: RE: [info-performer] Subload pfTexture across
>>
>>multiple pipes
>>
>>>>
>>>>Dick:
>>>>
>>>>Actually, it does not, and why should it be? Ideally I want
>>>>the texture image to be rendered only once on a separate pipe
>>>>and then be distributed to the remaining pipes (4-IR SGI
>>>>connected to a 3-wall CAVE). At the moment, the texture
>>>>rendering channel is attached to one of the 3 pipes used to
>>>>render the CAVE imagery. And sure enough, this pipe has the
>>>>right texture. How can I grab this texture and distribute it
>>>>to the remaining channels?
>>>>
>>>>Chapter 9. Graphics State from the OpenGL Performer
>>
>>Programmer's Guide
>>
>>>>says:
>>>>"... pfSubloadTex() and pfSubloadTexLevel() can also be used
>>>>in the drawing process to do an immediate load of texture
>>>>memory managed by the given pfTexture and these routines
>>>>allow you to specify all loading parameters (source, origin,
>>>>size, etc.). THIS IS USEFUL FOR LOADING DIFFERENT IMAGES FOR
>>>>THE SAME pfTexture IN DIFFERENT GRAPHICS PIPELINES. ..." And
>>>>I need just the opposite, loading the same image in different
>>>>graphics pipelines.
>>>>
>>>>Volodymyr
>>>>
>>>>
>>>>
>>>>>-----Original Message-----
>>>>>From: Dick Rous [mailto:dick++at++sgi.com]
>>>>>Sent: Wednesday, October 29, 2003 4:48 AM
>>>>>To: 'Volodymyr Kindratenko'; info-performer++at++sgi.com
>>>>>Subject: RE: [info-performer] Subload pfTexture across
>>>>
>>>>multiple pipes
>>>>
>>>>
>>>>>Have you checked if the subload code in the draw callback
>>
>>is executed
>>
>>>>>for each pipe?
>>>>>
>>>>>- Dick.
>>>>>
>>>>>
>>>>>
>>>>>>-----Original Message-----
>>>>>>From: Volodymyr Kindratenko [mailto:kindr++at++ncsa.uiuc.edu]
>>>>>>Sent: Wednesday, 29 October, 2003 01:08
>>>>>>To: info-performer++at++sgi.com
>>>>>>Subject: [info-performer] Subload pfTexture across multiple pipes
>>>>>>
>>>>>>
>>>>>>
>>>>>> Hello:
>>>>>>
>>>>>> I need to build a rear view mirror for a driver
>>>>>>simulator. To do
>>>>>>this, I define a separate channel for rendering rear view mirror
>>>>>>image and in that channel's draw callback I subload the relevant
>>>>>>portion of the frame
>>>>>>buffer to the appropriate pfTexture. This works just fine on
>>>>>>a single pipe
>>>>>>system. How can I share this texture across multiple pipes
>>>>>>(CAVE)? In the
>>>>>>CAVE I see that the correct image is applied to a portion of
>>>>>>the mirror
>>>>>>polygon residing on the front wall (I use the front wall's
>>>>>>pipe rendering
>>>>>>the rear view channel), and nothing is applied to the portion
>>>>>>of the polygon
>>>>>>residing for example on the left wall. Basically, the
>>>>>>texture image is not
>>>>>>shared between the pipes. Please help!
>>>>>>
>>>>>> Volodymyr Kindratenko
>>>>>> NCSA, UIUC
>>>>>>
>>>>>>
>>>>>>--------------------------------------------------------------
>>>>>>---------
>>>>>> List Archives, Info, FAQ:
>>>>
>>>>http://www.sgi.com/software/performer/
>>>>
>>>>
>>>>>> Open
>>>>
>>>>Development Project: http://oss.sgi.com/projects/performer/
>>>>
>>>>
>>>>>> Submissions: info-performer++at++sgi.com
>>>>>> Admin. requests: info-performer-request++at++sgi.com
>>>>>>--------------------------------------------------------------
>>>>>>---------
>>>>>>
>>>>>
>>>>--------------------------------------------------------------
>>>>---------
>>>> List Archives, Info, FAQ: http://www.sgi.com/software/performer/
>>>> Open Development Project: http://oss.sgi.com/projects/performer/
>>>> Submissions: info-performer++at++sgi.com
>>>> Admin. requests: info-performer-request++at++sgi.com
>>>>--------------------------------------------------------------
>>>>---------
>>>>
>>>
>>>
>>>
>>>
>>--------------------------------------------------------------
>>---------
>>
>>> List Archives, Info, FAQ: http://www.sgi.com/software/performer/
>>> Open Development Project: http://oss.sgi.com/projects/performer/
>>> Submissions: info-performer++at++sgi.com
>>> Admin. requests: info-performer-request++at++sgi.com
>>>
>>
>>----------------------------------------------------------------------
>>
>>>-
>>
>>--
>> ----oOOo---- ----oOOo---- ----oOOo---- ----oOOo----
>>
>>Brian Furtaw (brian++at++sgi.com) Mailstop: DSE-2612
>>Graphics Guru Office:(301)814.6858
>>Fax: (253)323-8182
>>12200-G Plum Orchard Drive OpenGL/OpenGL
>>Performer/Commodity Graphics
>>Silver Spring, Maryland 20904 Solutions and Integration Services
>>

-- 
     ----oOOo----    ----oOOo----    ----oOOo----    ----oOOo----

Brian Furtaw (brian++at++sgi.com) Mailstop: DSE-2612 Graphics Guru Office:(301)814.6858 Fax: (253)323-8182 12200-G Plum Orchard Drive OpenGL/OpenGL Performer/Commodity Graphics Silver Spring, Maryland 20904 Solutions and Integration Services


Date view Thread view Subject view Author view

This archive was generated by hypermail 2b29 : Fri Oct 31 2003 - 04:39:21 PST