[osg-users] Most efficient way to use osg::DrawElementsUInt?

Tomlinson, Gordon GTOMLINSON at overwatch.textron.com
Thu Mar 26 05:22:15 PDT 2009


FYI

"push_back() on an pre-reserved() vector/container should not be a
performance issue."

Under debug in visual studio, if you are storing anything other than a
pointer, then a push_back etc  will still incure a 'new and a copy' and
this can get expensive if your doing a lot of them, 
under release this handled more efficiently 
 


Gordon
Product Manager 3d
__________________________________________________________
Gordon Tomlinson
Email  : gtomlinson @ overwatch.textron.com
__________________________________________________________


-----Original Message-----
From: osg-users-bounces at lists.openscenegraph.org
[mailto:osg-users-bounces at lists.openscenegraph.org] On Behalf Of Peter
Hrenka
Sent: Thursday, March 26, 2009 8:16 AM
To: OpenSceneGraph Users
Subject: Re: [osg-users] Most efficient way to use
osg::DrawElementsUInt?

Hi Jesper,

Jesper D. Thomsen schrieb:
> Hi, and thank you.
> 
> I naturally tried to use reserve() (but thanks for suggesting it) and
this of course helped somewhat, but it still seems to be the primary
bottleneck. I've changed most of the rest of the per-frame geometry
generation code to use static arrays rather than std::vector and this
caused a major speedup (factor 10 or more) of my own part of the code,
but I'm still stuck with the push_backs on osg::DrawElementsUInt.
> Maybe there's just no faster way to do it, or maybe I'm just using OSG
in a somewhat un-intended way.
> 
> Jesper D. Thomsen

Just some more ideas/comments:

Are you testing a release build? Debug-Verions (especially on Windows)
are known to have dramatically slower implementations.

What profiling tool are you using? Sometimes the output is misleading
and can point you in the wrong direction. As from my experience
push_back() on an pre-reserved() vector should not be a performace
issue.

If you can spare the memory you could also try swap(), implementing your
own double-buffering for your osg::DrawElements.

Cheers,

Peter


> ________________________________________
> From: osg-users-bounces at lists.openscenegraph.org 
> [osg-users-bounces at lists.openscenegraph.org] On Behalf Of Peter Hrenka

> [p.hrenka at science-computing.de]
> Sent: Thursday, March 26, 2009 12:00 PM
> To: OpenSceneGraph Users
> Subject: Re: [osg-users] Most efficient way to use
osg::DrawElementsUInt?
> 
> Hi Jesper,
> 
> Jesper D. Thomsen schrieb:
>> Hi all, I'm developing an application where I have to create up to 
>> 1000 osg:geometry objects per frame during certain interaction modes.
>> I'm using osg::DrawElementsUInt push_back() to define the geometry 
>> primitive sets, and this push_back() seems to be the primary 
>> bottleneck for my applications graphical performance. Is there a more

>> efficient way to define the primitive sets than to fill a 
>> osg::DrawElementsUInt by push_back and add it to the geometry?
>>
>> This is currently bringing me down to about 1 second per frame, which

>> is kind of a roadblock.
> 
> You can use reserve() to pre-allocate the needed memory.
> After that push_back() will not perform any reallocations/copies until

> the limit is reached.
> 
>> regards,
>>
>>
>> Jesper D. Thomsen
>>
> 
> Cheers,
> 
> Peter

--
Vorstand/Board of Management:
Dr. Bernd Finkbeiner, Dr. Roland Niemeier, Dr. Arno Steitz, Dr. Ingrid
Zech Vorsitzender des Aufsichtsrats/ Chairman of the Supervisory Board:
Michel Lepert
Sitz/Registered Office: Tuebingen
Registergericht/Registration Court: Stuttgart Registernummer/Commercial
Register No.: HRB 382196 


_______________________________________________
osg-users mailing list
osg-users at lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.or
g



More information about the osg-users mailing list