Hi Daniel,

So good detective work.

Is it possible to get OSX to initialize like other OSs?

If not then we'll need to register all the buffers to be later
initialized to the correct size.  Will need to think more about this.

Robert.

On 7/25/06, Daniel Larimer <[EMAIL PROTECTED]> wrote:
Robert,
        That is effectively the 2nd line executed in main and I set num ==
10 for my application so I know that I haven't hit 10.

        Upon closer inspection of include/osg/buffered_value I think I have
identified the REAL problem.

        There is a difference between Linux and OS X when it comes to
allocating static variables.  On OS X the static variables such as
        s_extentions get allocated BEFORE main(), but Linux doesn't allocate
them until their first reference.

        Further testing reveals that Drawable::getExtensions(),
Shader::flushDeleted...(), and several other places are still
crashing even with
        my patch.

        The solution to this problem is non-trivial and would require some
form of direct initialization of these values OR some way to set
DisplaySettings::instance()->getMaxNumberOfGraphicsContexts() before
main().

        I put a print statement in the constructor of buffered_value to see
when it is initialized and to what size.  I then put a print
statement at the first line in main(), here is the out put.

buffered_value size: 1
buffered_value size: 1
buffered_value size: 1
buffered_value size: 1
buffered_value size: 1
buffered_value size: 1
buffered_value size: 1
buffered_value size: 1
buffered_value size: 1
buffered_value size: 1
buffered_value size: 1
buffered_value size: 1
buffered_value size: 1
buffered_value size: 1
buffered_value size: 1
buffered_value size: 1
buffered_value size: 1
buffered_value size: 1
buffered_value size: 1
buffered_value size: 1
buffered_value size: 1
buffered_value size: 1
buffered_value size: 1
buffered_value size: 1
buffered_value size: 1
buffered_value size: 1
buffered_value size: 1
buffered_value size: 1
buffered_value size: 1
buffered_value size: 1
buffered_value size: 1
buffered_value size: 1
buffered_value size: 1
buffered_value size: 1
buffered_value size: 1
buffered_value size: 1
[thread: (?)] [CoveAppInit.cpp:27 in CoveAppInit] Initializing static
Cove objects...
[thread: (?)] [AutoreleasePool.cpp:143 in init] Created static
AutoreleasePool stack.
[thread: (?)] [AutoreleasePool.cpp:29 in AutoreleasePool] Created new
AutoreleasePool at address 0xa422e30.
[thread: (?)] [CoveAppInit.cpp:34 in CoveAppInit] Finished
initializing static Cove objects.
[thread: (?)] [cove.cpp:15 in main] main


        Ideas?

Dan

On Jul 25, 2006, at 2:36 PM, Robert Osfield wrote:

> On 7/25/06, Robert Osfield <[EMAIL PROTECTED]> wrote:
>> I realise this is an unsual caveat of multi-threaded multi-context
>> work, but this its a small hurdle which gains you much better
>> performance - otherwise you have mutex commonly access methods which
>> would kill performance.
>
> I forgot to mention the magic line is:
>
>  osg::DisplaySettings::instance()->setMaxNumberOfGraphicsContexts(num)
>
> osgProducer::OsgCameraGroup sets atomatically this for you in its
> constructor, so as long as you construct it before loading the scene
> graph then everything is fine.
>
> Robert.
> _______________________________________________
> osg-users mailing list
> [email protected]
> http://openscenegraph.net/mailman/listinfo/osg-users
> http://www.openscenegraph.org/

_______________________________________________
osg-users mailing list
[email protected]
http://openscenegraph.net/mailman/listinfo/osg-users
http://www.openscenegraph.org/

_______________________________________________
osg-users mailing list
[email protected]
http://openscenegraph.net/mailman/listinfo/osg-users
http://www.openscenegraph.org/

Reply via email to