Hi Jp,

my initial implementation used osg:Image attached to a camera and it was
just as slow.

I will see what I can do with PBO's.


regards,
tugkan

> Hi,
> 
> Tugkan Calapoglu wrote:
>> hi Jp,
>>
>> unfortunately that method is easy but very slow. I think it also uses
>> glGetTexImage.
> 
> You might be surprised. Have you read the threads I linked to? Attach
> uses glReadPixels (while doing the FBO rendering, so you don't have to
> bind anything yourself later) and in many cases this is the fastest. If
> you want something more elaborate, such as async PBO use, see the
> osgscreencapture example. Also, test whatever you use for your setup,
> all sorts of things can change the efficiency of reading data back to
> CPU. YMMV.
> 
> Like Robert said tho, not reading anything back to CPU if you can help
> it is the best.
> 
> rgds
> jp
> 
>>
>> cheers,
>> tugkan
>>
>>
>>> Hi Tugkan,
>>>
>>> Tugkan Calapoglu wrote:
>>>> Hi Robert, Wojciech
>>>>
>>>> my initial guess was that the lengthy draw dispatch of the master view
>>>> and failing cull & draw parallelism was the result of the same problem.
>>>>
>>>> However, they actually seem to be different problems and I'll focus
>>>> first on the draw dispatch.
>>>>
>>>> The master camera draws only a screen aligned quad and nothing else
>>>> (scene with shadows is rendered by the slave camera). Also no dynamic
>>>> geometry. But, I indeed have a read buffer operation: a glGetTexImage
>>>> call in the postdraw callback of the master camera. This call takes
>>>> ~12 ms.
>>>>
>>>> I read back a small texture that is rendered by a camera in the current
>>>> frame. The camera uses FRAME_BUFFER_OBJECT as render target
>>>> implementation.
>>>>
>>>> It looks like using glReadPixels to read directly from the FBO is the
>>>> advised method for getting data back to the system memory. How do I get
>>>> the FBO that the camera is rendering to? Or, is there a better
>>>> method to
>>>> get the texture data back to the sysmem?
>>>>
>>> Simplest is to just attach an osg::Image to the RTT (to FBO) camera. See
>>> the attach method of osg::Camera. Think there is an example in
>>> osgprerender.
>>>
>>> Also see here:
>>> http://thread.gmane.org/gmane.comp.graphics.openscenegraph.user/52651
>>> and
>>> http://thread.gmane.org/gmane.comp.graphics.openscenegraph.user/53432
>>>
>>> rgds
>>> jp
>>>
>>>> cheers,
>>>> tugkan
>>>>
>>>>> Hi Tugkan,
>>>>>
>>>>> Robert mentioned lengthy read operation. It may be related to read
>>>>> buffer operation thats used to compute shadow volume in
>>>>> LightSpacePerpspectiveShadowMapDB. If your slave view uses
>>>>> osgShadow::LightSpacePerpspectiveShadowMapDB then you may check if
>>>>> osgShadow::LightSpacePerpspectiveShadowMapCB (cull bounds flavour) has
>>>>> the same problem.
>>>>>
>>>>> I am aware of LightSpacePerpspectiveShadowMapDB glReadBuffer
>>>>> limitation
>>>>> but I could not find quick and easy to implement workaround that would
>>>>> do this without scanning the image by CPU. I allocate small 64x64
>>>>> texture and render the scene there, then read it into CPU memory
>>>>> and use
>>>>> CPU to scan pixels to optimzie shadow volume from depths and pixel
>>>>> locations strored in this prerender image.
>>>>>
>>>>> Wojtek
>>>>>
>>>>> ----- Original Message ----- From: "Robert Osfield"
>>>>> <[email protected]>
>>>>> To: "OpenSceneGraph Users" <[email protected]>
>>>>> Sent: Wednesday, January 13, 2010 1:04 PM
>>>>> Subject: Re: [osg-users] RTT slave views and multi-threading
>>>>>
>>>>>
>>>>> Hi Tugkan,
>>>>>
>>>>> The osgdistortion example works a bit like what you are describing,
>>>>> could you try this to see what performance it's getting.
>>>>>
>>>>> As for general notes about threading, if you are working on the same
>>>>> graphics context as you are then all the draw dispatch and the draw
>>>>> GPU can only be done by a single graphics thread so there is little
>>>>> opportunity to make it more parallel without using another graphics
>>>>> card/graphics context and interleaving of frames.
>>>>>
>>>>> As for why the second camera is very expensive on draw dispatch, this
>>>>> suggest to me that it's blocking either due to the OpenGL fifo being
>>>>> full or that it contains a GL read back operation of some kind.
>>>>>
>>>>> Robert.
>>>>>
>>>>> On Wed, Jan 13, 2010 at 11:34 AM, Tugkan Calapoglu <[email protected]>
>>>>> wrote:
>>>>>> Hi All,
>>>>>>
>>>>>> I am using a slave view for rendering the scene to a texture.
>>>>>> Initially
>>>>>> I tried with a camera node, however, this did not work well due to a
>>>>>> problem in LiSPSM shadows and I was suggested to use RTT slave views.
>>>>>>
>>>>>> My setup is as follows: There is a single main view and I attach a
>>>>>> slave
>>>>>> view to it. This slave view is attached with addSlave( slave ,
>>>>>> false );
>>>>>> so that it does *not* automatically use the master scene.
>>>>>>
>>>>>> I attach a texture to the slave view and make my scene child of this
>>>>>> view. I attach a screen aligned quad to the main view. This quad
>>>>>> visualizes the RTT texture from the slave view.
>>>>>>
>>>>>> Now I have a threading problem which can be seen on the snapshot I
>>>>>> attached. There are two issues:
>>>>>> 1- The main view (cam1) has a very large draw time even though it
>>>>>> only
>>>>>> renders the screen aligned quad. I double checked to see whether it
>>>>>> also
>>>>>> renders the actual scene but this is not the case.
>>>>>>
>>>>>> 2- Slave view does not run cull and draw in parallel. Cull and
>>>>>> draw do
>>>>>> run in parallel if they are not rendered with the slave view.
>>>>>> Moreover,
>>>>>> if I change the render order of the slave camera from PRE_RENDER to
>>>>>> POST_RENDER it is ok.
>>>>>>
>>>>>> I could simply use POST_RENDER but I am afraid it introduces an extra
>>>>>> one frame latency. If I render the screen aligned quad first and the
>>>>>> scene later than what I see on the quad is the texture from previous
>>>>>> frame (right?).
>>>>>>
>>>>>> Any ideas?
>>>>>>
>>>>>> cheers,
>>>>>> tugkan
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> _______________________________________________
>>>>>> 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
>>>>>
>>>>>
>>>>>
>>>>
>>
>>
> 


-- 
Tugkan Calapoglu

-------------------------------------
VIRES Simulationstechnologie GmbH
Oberaustrasse 34
83026 Rosenheim
Germany
phone    +49.8031.463641
fax      +49.8031.463645
email    [email protected]
internet www.vires.com
-------------------------------------
Sitz der Gesellschaft: Rosenheim
Handelsregister Traunstein  HRB 10410
Geschaeftsfuehrer: Marius Dupuis
                   Wunibald Karl
-------------------------------------
_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to