Re: [osg-users] Problem with corrupted textures when sharing instances of models loaded from IVE format.

2012-01-16 Thread Sergey Polischuk
Hi all

I'm gonna add my 5 cents on this topic. I was having similar problems in app 
which recreates viewer in runtime (there are preview window and viewer created 
when widget shows up), using osg version 3.0(?). In my case problem was not 
only with textures - i was getting corrupted vertex arrays after viewer 
re-creation. I tried some voodoo magic with osgDB::Registry and caching 
settings, tried to clear gl objects with osg::deleteAllGLObjects() 
osg::flushAllDeletedGLObjects() etc, but without any luck. I've had different 
graphics context ids after viewer recreation. In my case problem was solved 
when using vertex buffer objects instead of display lists, i didnt dig any 
further after that. IIRC problem was showing itself only on windows, but i cant 
say for sure now.

Cheers

14.01.2012, 14:58, Robert Osfield robert.osfi...@gmail.com:
 Hi Chris,

 On 14 January 2012 09:30, Chris Denham c.m.den...@gmail.com wrote:

  Hi Robert,
  To answer your question about how I manage the graphics contexts.
  I just create a new one for the window handle provided by each instance of 
 my browser plugin e.g

  Code:
  traits-inheritedWindowData = new WindowData(hWnd);
  gc = osg::GraphicsContext::createGraphicsContext(traits);

 After gc is assigned check the value of gc-getState()-getContextID()
 for each of the contexts created.  In theory for multiple contexts
 they should read 0,1,2,etc.

 Robert.
 ___
 osg-users mailing list
 osg-users@lists.openscenegraph.org
 http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
___
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org


Re: [osg-users] Problem with corrupted textures when sharing instances of models loaded from IVE format.

2012-01-16 Thread Chris Denham
Hi Robert,
Yep, I can confirm the return value of  gc-getState()-getContextID() is 
increasing as you describe for each brower plugin instance created.
Does that mean I should be ok sharing scengraph between viewers?
It certainly seems ok now I've disabled the unref images after apply flag on 
the textures.
Chris Denham.


robertosfield wrote:
 Hi Chris,
 
 On 14 January 2012 09:30, Chris Denham  wrote:
 
  Hi Robert,
  To answer your question about how I manage the graphics contexts.
  I just create a new one for the window handle provided by each instance of 
  my browser plugin e.g
  
  Code:
  traits-inheritedWindowData = new WindowData(hWnd);
  gc = osg::GraphicsContext::createGraphicsContext(traits);
  
 
 After gc is assigned check the value of gc-getState()-getContextID()
 for each of the contexts created.  In theory for multiple contexts
 they should read 0,1,2,etc.
 
 Robert.
 ___
 osg-users mailing list
 
 http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
 
  --
 Post generated by Mail2Forum


--
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=44855#44855





___
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org


Re: [osg-users] Problem with corrupted textures when sharing instances of models loaded from IVE format.

2012-01-16 Thread Chris Denham
Hi Hybr,
Corrupted vertex arrays? Do you mean the OpenSceneGraph geometry data, or a 
problem with the OGL compiled display list? I've not seen that, and I hope I 
don't. ;-)
I'll keep an eye out for trouble though.
Cheers,
Chris.


hybr wrote:
 Hi all
 
 I'm gonna add my 5 cents on this topic. I was having similar problems in app 
 which recreates viewer in runtime (there are preview window and viewer 
 created when widget shows up), using osg version 3.0(?). In my case problem 
 was not only with textures - i was getting corrupted vertex arrays after 
 viewer re-creation. I tried some voodoo magic with osgDB::Registry and 
 caching settings, tried to clear gl objects with osg::deleteAllGLObjects() 
 osg::flushAllDeletedGLObjects() etc, but without any luck. I've had different 
 graphics context ids after viewer recreation. In my case problem was solved 
 when using vertex buffer objects instead of display lists, i didnt dig any 
 further after that. IIRC problem was showing itself only on windows, but i 
 cant say for sure now.
 
 Cheers
 
 


--
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=44857#44857





___
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org


Re: [osg-users] Problem with corrupted textures when sharing instances of models loaded from IVE format.

2012-01-16 Thread Sergey Polischuk
I've destroyed complete scene with viewer and graphics context, and recreated 
it all with reading new models from files with disabled cache etc. On first run 
all was ok, and on next runs mesh would look all distorted (some vertices of 
mesh randomly displaced etc). Dont know if it problem with display lists or 
geometry data arrays in osg, but display lists should be brand new each time, 
because i've deleted all opengl objects before shutting down graphics context, 
and new context have different id, also object cache disabled, cleared and 
model reloaded each time from file, so there shouldn't be problem with osg data 
arrays. I have no idea what goes wrong.

Cheers

16.01.2012, 14:52, Chris Denham c.m.den...@gmail.com:
 Hi Hybr,
 Corrupted vertex arrays? Do you mean the OpenSceneGraph geometry data, or a 
 problem with the OGL compiled display list? I've not seen that, and I hope I 
 don't. ;-)
 I'll keep an eye out for trouble though.
 Cheers,
 Chris.

 hybr wrote:

  Hi all

  I'm gonna add my 5 cents on this topic. I was having similar problems in 
 app which recreates viewer in runtime (there are preview window and viewer 
 created when widget shows up), using osg version 3.0(?). In my case problem 
 was not only with textures - i was getting corrupted vertex arrays after 
 viewer re-creation. I tried some voodoo magic with osgDB::Registry and 
 caching settings, tried to clear gl objects with osg::deleteAllGLObjects() 
 osg::flushAllDeletedGLObjects() etc, but without any luck. I've had 
 different graphics context ids after viewer recreation. In my case problem 
 was solved when using vertex buffer objects instead of display lists, i 
 didnt dig any further after that. IIRC problem was showing itself only on 
 windows, but i cant say for sure now.

  Cheers

 --
 Read this topic online here:
 http://forum.openscenegraph.org/viewtopic.php?p=44857#44857

 ___
 osg-users mailing list
 osg-users@lists.openscenegraph.org
 http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
___
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org


Re: [osg-users] Problem with corrupted textures when sharing instances of models loaded from IVE format.

2012-01-16 Thread Robert Osfield
Hi Chris,

On 16 January 2012 10:39, Chris Denham c.m.den...@gmail.com wrote:
 Yep, I can confirm the return value of  gc-getState()-getContextID() is 
 increasing as you describe for each brower plugin instance created.
 Does that mean I should be ok sharing scengraph between viewers?

It should be OK.  osgViewer hasn't been designed for using of multiple
viewers running in a parallel, but is designed for scene graphs to be
shared between multiple contexts, so as long as the ContextID's a
mapped correctly, as it sounds like they are.

 It certainly seems ok now I've disabled the unref images after apply flag on 
 the textures.

If this is the case then the max number of contexts that the unref
scheme is using is obviously not high enough.  osgViewer will look at
the number of contexts that are active and then using this as a limit.
 Is it that you are creating one viewer and context then drawing
frames, then later creating a new context and draw more frames. In the
later case I can certainly see that if the first frames draw will
release the osg::Image resources assigned to osg::Texture if they are
set up to unref the images, so disabling the unref of images makes
sense.

Robert.
___
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org


Re: [osg-users] Problem with corrupted textures when sharing instances of models loaded from IVE format.

2012-01-16 Thread Robert Osfield
Hi Sergey,

2012/1/16 Sergey Polischuk pol...@yandex.ru:
 I've destroyed complete scene with viewer and graphics context, and recreated 
 it all with reading new models from files with disabled cache etc. On first 
 run all was ok, and on next runs mesh would look all distorted (some vertices 
 of mesh randomly displaced etc). Dont know if it problem with display lists 
 or geometry data arrays in osg, but display lists should be brand new each 
 time, because i've deleted all opengl objects before shutting down graphics 
 context, and new context have different id, also object cache disabled, 
 cleared and model reloaded each time from file, so there shouldn't be problem 
 with osg data arrays. I have no idea what goes wrong.

If you are bypassing much of osgViewer's context management then it's
possible to get the GL obejct caches that the OSG uses out of sync
with what you are doing.  osgViewer does a range of operations to
clean up contexts and make sure the the GL object caches that the OSG
uses are flushed.  If you are manually managing your own contexts then
you'll need to call releaseGLObjects() on your scene graph and call
osg::flushAllDeletedGLObjects(contextID) prior to closing the context,
if it this is outwith your control then calling
discardAllGLObjects(contextID) enables the discarding of all the GL
object caches.

In the OSG the GL object caches are used to avoid problems with
deleting OpenGL objects in other threads than the graphics contexts
ones - as scene graphs can be deleted in any thread you need to cache,
the cache is also used to enable reuse of OpenGL objects like texture
objects and vbo's where possible, this is something that is very
useful for paging performance.

Robert.
___
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org


Re: [osg-users] Problem with corrupted textures when sharing instances of models loaded from IVE format.

2012-01-16 Thread Sergey Polischuk
Hi, Robert

If it'll help to understand where problem might be - there are some details:
I dont use any opengl functions directly, so i think osg management of opengl 
objects should be ok.
Here some code i used to setup viewer on creation:
On viewer init :
graphicsWindow = new 
osgViewer::GraphicsWindowEmbedded(0,0,width(),height());
viewer-getCamera()-setViewport(new 
osg::Viewport(0,0,width(),height()));
viewer-getCamera()-setGraphicsContext(graphicsWindow);
viewer-setThreadingModel(osgViewer::Viewer::SingleThreaded);

prior to destructing viewer i used next piece of code (which wasn't there 
initially, i added this when was trying to fight issue with model corruption, 
and it actually didnt make any difference):

unsigned id = 
m_Ui.viewer-getCamera()-getGraphicsContext()-getState()-getContextID();

m_Ui.viewer-m_GraphicsWindow-makeCurrent();

osg::deleteAllGLObjects(id);

osg::flushAllDeletedGLObjects(id);

osg::discardAllGLObjects(id);

osgDB::Registry::instance()-clearObjectCache();

osgDB::Registry::instance()-clearArchiveCache();

Scene recreated (without reusing old objects) each time new viewer created.

16.01.2012, 15:35, Robert Osfield robert.osfi...@gmail.com:
 Hi Sergey,

 2012/1/16 Sergey Polischuk pol...@yandex.ru:

  I've destroyed complete scene with viewer and graphics context, and 
 recreated it all with reading new models from files with disabled cache etc. 
 On first run all was ok, and on next runs mesh would look all distorted 
 (some vertices of mesh randomly displaced etc). Dont know if it problem with 
 display lists or geometry data arrays in osg, but display lists should be 
 brand new each time, because i've deleted all opengl objects before shutting 
 down graphics context, and new context have different id, also object cache 
 disabled, cleared and model reloaded each time from file, so there shouldn't 
 be problem with osg data arrays. I have no idea what goes wrong.

 If you are bypassing much of osgViewer's context management then it's
 possible to get the GL obejct caches that the OSG uses out of sync
 with what you are doing.  osgViewer does a range of operations to
 clean up contexts and make sure the the GL object caches that the OSG
 uses are flushed.  If you are manually managing your own contexts then
 you'll need to call releaseGLObjects() on your scene graph and call
 osg::flushAllDeletedGLObjects(contextID) prior to closing the context,
 if it this is outwith your control then calling
 discardAllGLObjects(contextID) enables the discarding of all the GL
 object caches.

 In the OSG the GL object caches are used to avoid problems with
 deleting OpenGL objects in other threads than the graphics contexts
 ones - as scene graphs can be deleted in any thread you need to cache,
 the cache is also used to enable reuse of OpenGL objects like texture
 objects and vbo's where possible, this is something that is very
 useful for paging performance.

 Robert.
 ___
 osg-users mailing list
 osg-users@lists.openscenegraph.org
 http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
___
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org


Re: [osg-users] Problem with corrupted textures when sharing instances of models loaded from IVE format.

2012-01-16 Thread Chris Denham
Hi Robert,


robertosfield wrote:
 Is it that you are creating one viewer and context then drawing
 frames, then later creating a new context and draw more frames. In the
 later case I can certainly see that if the first frames draw will
 release the osg::Image resources assigned to osg::Texture if they are
 set up to unref the images, so disabling the unref of images makes
 sense.
 


Yes, that's correct, other instances of the viewer may be created after an 
instance of the viewer has rendered a model, and those later instances may in 
turn need to render the same cached models. So, mystery solved I think. :-)

Thanks.
Chris Denham.

--
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=44866#44866





___
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org


Re: [osg-users] Problem with corrupted textures when sharing instances of models loaded from IVE format.

2012-01-14 Thread J.P. Delport

Hi,

On 13/01/2012 18:37, Chris Denham wrote:

Ah ha,
Another interesting experiment doing the round trip from osg to ive and back.
e.g.
osgconv -O noTexturesInIVEFile cow.osg cow.ive
osgconv cow.ive cow2.osg

cow2.osg has the same problem and cow.ive, and on comparison on cow.osg and 
cow2.osg I noticed the image definition has grown an
unRefImageDataAfterApply TRUE

I get the same texture problem when I load cow2.osg, and it behaves normally 
again when I set the 'unRefImageDataAfterApply' flag to false.

So my guess is that the image data may getting released before the other viewer 
instance has finished with it?


Yes, I think so.

See here for changing the unref setting after load:
http://article.gmane.org/gmane.comp.graphics.openscenegraph.user/52034
http://thread.gmane.org/gmane.comp.graphics.openscenegraph.user/71893

rgds
jp




Chris Denham

--
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=44816#44816





___
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org


--
This message is subject to the CSIR's copyright terms and conditions, e-mail legal notice, and implemented Open Document Format (ODF) standard. 
The full disclaimer details can be found at http://www.csir.co.za/disclaimer.html.


This message has been scanned for viruses and dangerous content by MailScanner, 
and is believed to be clean.


___
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org


Re: [osg-users] Problem with corrupted textures when sharing instances of models loaded from IVE format.

2012-01-14 Thread Chris Denham
Hi Jp,
Thanks for this info. I wrote a node visitor to change the texture setting 
after load by calling texture-setUnRefImageDataAfterApply(false); and that 
does indeed seem to fix the problem, so I'm pleased others have come up with 
the same fix. 

Though I'm now wondering if I still need to consider the potential  problems 
sharing of opengl objectids between contexts that Robert suggested might have 
been the problem. i.e. is sharing scene graph data between viewers running on 
different threads intrinsically safe? It seems stable for me, but I'm wondering 
if it would be better to implement my own per viewer object cache instead of 
using the shared one that results from using the cache provided by osg registry 
singleton.

Regards.
Chris. 

 

J.P. Delport wrote:
 Hi,
 
 On 13/01/2012 18:37, Chris Denham wrote:
 
  Ah ha,
  Another interesting experiment doing the round trip from osg to ive and 
  back.
  e.g.
  osgconv -O noTexturesInIVEFile cow.osg cow.ive
  osgconv cow.ive cow2.osg
  
  cow2.osg has the same problem and cow.ive, and on comparison on cow.osg and 
  cow2.osg I noticed the image definition has grown an
  unRefImageDataAfterApply TRUE
  
  I get the same texture problem when I load cow2.osg, and it behaves 
  normally again when I set the 'unRefImageDataAfterApply' flag to false.
  
  So my guess is that the image data may getting released before the other 
  viewer instance has finished with it?
  
 
 Yes, I think so.
 
 See here for changing the unref setting after load:
 http://article.gmane.org/gmane.comp.graphics.openscenegraph.user/52034
 http://thread.gmane.org/gmane.comp.graphics.openscenegraph.user/71893
 
 rgds
 jp
 
 
 
  
  Chris Denham
  
  --
  Read this topic online here:
  http://forum.openscenegraph.org/viewtopic.php?p=44816#44816
  
  
  
  
  
  ___
  osg-users mailing list
  
  http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
  
 
 -- 
 This message is subject to the CSIR's copyright terms and conditions, e-mail 
 legal notice, and implemented Open Document Format (ODF) standard. 
 The full disclaimer details can be found at 
 http://www.csir.co.za/disclaimer.html.
 
 This message has been scanned for viruses and dangerous content by 
 MailScanner, 
 and is believed to be clean.
 
 ___
 osg-users mailing list
 
 http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
 
  --
 Post generated by Mail2Forum


--
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=44828#44828





___
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org


Re: [osg-users] Problem with corrupted textures when sharing instances of models loaded from IVE format.

2012-01-14 Thread Chris Denham
Hi Robert,
To answer your question about how I manage the graphics contexts.
I just create a new one for the window handle provided by each instance of my 
browser plugin e.g

Code:
traits-inheritedWindowData = new WindowData(hWnd);
gc = osg::GraphicsContext::createGraphicsContext(traits);

 
Regards,
Chris Denham.


robertosfield wrote:
 Hi Chris,
 
 Um... in this type of usage it may well be the easier to have multiple
 viewers.
 
 When you are doing your browser plugin how to you manage the graphics 
 contexts?
 
 I suspect the problem may well be down to the OpenGL object ID's for
 the texture objects being shared inappropriately in your application.
 The is designed to use a different osg::State::ContextID value for
 each context, if different contexts use the same value for ContextID
 then they will share the same OpenGL object ID's which will introduce
 errors like you've seen.  It's not the only way to create the errors,
 so it's only a hunch on my part.
 
 Anyway I don't think there is anything particularly wrong with .ive
 plugin or the models, all they will be doing is providing us with
 hints as to what is wrong at a higher level.
 
 Robert.
 ___
 osg-users mailing list
 
 http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
 
  --
 Post generated by Mail2Forum


--
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=44829#44829





___
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org


Re: [osg-users] Problem with corrupted textures when sharing instances of models loaded from IVE format.

2012-01-14 Thread Robert Osfield
Hi Chris,

On 14 January 2012 09:30, Chris Denham c.m.den...@gmail.com wrote:
 Hi Robert,
 To answer your question about how I manage the graphics contexts.
 I just create a new one for the window handle provided by each instance of my 
 browser plugin e.g

 Code:
 traits-inheritedWindowData = new WindowData(hWnd);
 gc = osg::GraphicsContext::createGraphicsContext(traits);

After gc is assigned check the value of gc-getState()-getContextID()
for each of the contexts created.  In theory for multiple contexts
they should read 0,1,2,etc.

Robert.
___
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org


[osg-users] Problem with corrupted textures when sharing instances of models loaded from IVE format.

2012-01-13 Thread Chris Denham
I'm having some problems connected with the use of textures embedded within IVE 
files. The problem arises when I use the same IVE model instance from within 
two instances of osgViewer::Viewer which results in unpredictable rendering of 
textures in one of the viewer instances, usually the texture goes white when I 
delete one viewer instance. If the embedded textures were also compressed, then 
I also get some GL errors, typically:

Warning: detected OpenGL error 'invalid enumerant' at after 
RenderBin::draw(..)

To be honest, I'm not surprised that this sharing of scene graph data between 
osg Viewer instances causes a problem. In fact, I’m surprised that more things 
don’t break. However, the reason this scenario crops up is that  my osg viewer 
is running inside a web based plugin, and hence I get an osg viewer instance 
within each instance of the plugin that the web browser creates.   You might 
now be wondering why the browser plugin instances share any scene graph data, 
and in fact I was a bit surprised that they were. I didn’t want them to share 
data! It turns out that the reason the browser plugin instances share data is 
because of the cache provided by the osg Registry singleton. It would have been 
nice if each browser plugin instance ended up with their own osg Registry 
singleton, but they don’t!
(I don’t really want to get on my hobby horse about all the pains that the 
singleton pattern can cause, but this is certainly one to add to my list)

So, my questions boil down to :
If viewer instance 1 caches “cow.ive” in Registry singleton, how do I prevent 
viewer instance 2 from using it? 
If it does use the cached version, why does cause a problem (seemingly only 
with textures that were embedded in IVE)?
Is there a way to “tweak” the IVE embedded textures so they can be shared 
successfully in this scenario?

I have reduced the problem down to a simple example (20 lines or so) that 
exhibits the same symptoms:


Code:
static osg::ref_ptrosg::Node model = NULL;

class ViewerThread : public OpenThreads::Thread
{
public:
ViewerThread(int x, int y) : x(x), y(y) { }
void run()
{
osgViewer::Viewer viewer;
viewer.setUpViewInWindow(x, y, 400, 300);
viewer.setSceneData(model);
viewer.run();
}
int x, y;
};

int main(int argc, char* argv[])
{
model = osgDB::readNodeFile(cow.ive);

ViewerThread* thread1 = new ViewerThread(100, 100);
thread1-start();

ViewerThread* thread2 = new ViewerThread(500, 100);
thread2-start();

while(true); 

return 0;
}



Chris Denham

--
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=44810#44810





___
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org


Re: [osg-users] Problem with corrupted textures when sharing instances of models loaded from IVE format.

2012-01-13 Thread Robert Osfield
Hi Chris,

Using two independent viewers in an application is not normal or
recommended.  I would recommend that you use a single CompositeViewer
with two Views.  See the osgcompositeviewer example.

Robert.

On 13 January 2012 14:18, Chris Denham c.m.den...@gmail.com wrote:
 I'm having some problems connected with the use of textures embedded within 
 IVE files. The problem arises when I use the same IVE model instance from 
 within two instances of osgViewer::Viewer which results in unpredictable 
 rendering of textures in one of the viewer instances, usually the texture 
 goes white when I delete one viewer instance. If the embedded textures were 
 also compressed, then I also get some GL errors, typically:

 Warning: detected OpenGL error 'invalid enumerant' at after 
 RenderBin::draw(..)

 To be honest, I'm not surprised that this sharing of scene graph data between 
 osg Viewer instances causes a problem. In fact, I’m surprised that more 
 things don’t break. However, the reason this scenario crops up is that  my 
 osg viewer is running inside a web based plugin, and hence I get an osg 
 viewer instance within each instance of the plugin that the web browser 
 creates.   You might now be wondering why the browser plugin instances share 
 any scene graph data, and in fact I was a bit surprised that they were. I 
 didn’t want them to share data! It turns out that the reason the browser 
 plugin instances share data is because of the cache provided by the osg 
 Registry singleton. It would have been nice if each browser plugin instance 
 ended up with their own osg Registry singleton, but they don’t!
 (I don’t really want to get on my hobby horse about all the pains that the 
 singleton pattern can cause, but this is certainly one to add to my list)

 So, my questions boil down to :
 If viewer instance 1 caches “cow.ive” in Registry singleton, how do I prevent 
 viewer instance 2 from using it?
 If it does use the cached version, why does cause a problem (seemingly only 
 with textures that were embedded in IVE)?
 Is there a way to “tweak” the IVE embedded textures so they can be shared 
 successfully in this scenario?

 I have reduced the problem down to a simple example (20 lines or so) that 
 exhibits the same symptoms:


 Code:
 static osg::ref_ptrosg::Node model = NULL;

 class ViewerThread : public OpenThreads::Thread
 {
 public:
    ViewerThread(int x, int y) : x(x), y(y) { }
    void run()
    {
        osgViewer::Viewer viewer;
        viewer.setUpViewInWindow(x, y, 400, 300);
        viewer.setSceneData(model);
        viewer.run();
    }
    int x, y;
 };

 int main(int argc, char* argv[])
 {
    model = osgDB::readNodeFile(cow.ive);

    ViewerThread* thread1 = new ViewerThread(100, 100);
    thread1-start();

    ViewerThread* thread2 = new ViewerThread(500, 100);
    thread2-start();

    while(true);

        return 0;
 }



 Chris Denham

 --
 Read this topic online here:
 http://forum.openscenegraph.org/viewtopic.php?p=44810#44810





 ___
 osg-users mailing list
 osg-users@lists.openscenegraph.org
 http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
___
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org


Re: [osg-users] Problem with corrupted textures when sharing instances of models loaded from IVE format.

2012-01-13 Thread Chris Denham
Hi Robert,
My example code was only meant to show the symtoms of the problem I get it in 
my real world code. How can I use a composite viewer to implement views 
within multiple browser plugin instances, potentially on different web pages? 
Would I have to make the composite viewer a singleton that holds references to 
the embedded windows created for each plugin instance? It's never gonna fly! 

Interesting update to the problem though; it seems not related to the embedding 
of the textures within the IVE, but more to do with the way IVE reader creates 
images. The reason being that if I convert cow.osg using osgconv -O 
noTexturesInIVEFile cow.osg cow.ive I still get the problem, but if I load 
cow.osg into my example, it seems fine.

Chris Denham.



robertosfield wrote:
 Hi Chris,
 
 Using two independent viewers in an application is not normal or
 recommended.  I would recommend that you use a single CompositeViewer
 with two Views.  See the osgcompositeviewer example.
 
 Robert.
 
 On 13 January 2012 14:18, Chris Denham  wrote:
 
  I'm having some problems connected with the use of textures embedded within 
  IVE files. The problem arises when I use the same IVE model instance from 
  within two instances of osgViewer::Viewer which results in unpredictable 
  rendering of textures in one of the viewer instances, usually the texture 
  goes white when I delete one viewer instance. If the embedded textures were 
  also compressed, then I also get some GL errors, typically:
  
  Warning: detected OpenGL error 'invalid enumerant' at after 
  RenderBin::draw(..)
  
  To be honest, I'm not surprised that this sharing of scene graph data 
  between osg Viewer instances causes a problem. In fact, I’m surprised that 
  more things don’t break. However, the reason this scenario crops up is that 
   my osg viewer is running inside a web based plugin, and hence I get an osg 
  viewer instance within each instance of the plugin that the web browser 
  creates.   You might now be wondering why the browser plugin instances 
  share any scene graph data, and in fact I was a bit surprised that they 
  were. I didn’t want them to share data! It turns out that the reason the 
  browser plugin instances share data is because of the cache provided by the 
  osg Registry singleton. It would have been nice if each browser plugin 
  instance ended up with their own osg Registry singleton, but they don’t!
  (I don’t really want to get on my hobby horse about all the pains that the 
  singleton pattern can cause, but this is certainly one to add to my list)
  
  So, my questions boil down to :
  If viewer instance 1 caches “cow.ive” in Registry singleton, how do I 
  prevent viewer instance 2 from using it?
  If it does use the cached version, why does cause a problem (seemingly only 
  with textures that were embedded in IVE)?
  Is there a way to “tweak” the IVE embedded textures so they can be shared 
  successfully in this scenario?
  
  I have reduced the problem down to a simple example (20 lines or so) that 
  exhibits the same symptoms:
  
  
  Code:
  static osg::ref_ptrosg::Node model = NULL;
  
  class ViewerThread : public OpenThreads::Thread
  {
  public:
     ViewerThread(int x, int y) : x(x), y(y) { }
     void run()
     {
         osgViewer::Viewer viewer;
         viewer.setUpViewInWindow(x, y, 400, 300);
         viewer.setSceneData(model);
         viewer.run();
     }
     int x, y;
  };
  
  int main(int argc, char* argv[])
  {
     model = osgDB::readNodeFile(cow.ive);
  
     ViewerThread* thread1 = new ViewerThread(100, 100);
     thread1-start();
  
     ViewerThread* thread2 = new ViewerThread(500, 100);
     thread2-start();
  
     while(true);
  
         return 0;
  }
  
  
  
  Chris Denham
  
  --
  Read this topic online here:
  http://forum.openscenegraph.org/viewtopic.php?p=44810#44810
  
  
  
  
  
  ___
  osg-users mailing list
  
  http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
  
 ___
 osg-users mailing list
 
 http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
 
  --
 Post generated by Mail2Forum


--
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=44813#44813





___
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org


Re: [osg-users] Problem with corrupted textures when sharing instances of models loaded from IVE format.

2012-01-13 Thread Robert Osfield
Hi Chris,

On 13 January 2012 15:45, Chris Denham c.m.den...@gmail.com wrote:
 Hi Robert,
 My example code was only meant to show the symtoms of the problem I get it in 
 my real world code. How can I use a composite viewer to implement views 
 within multiple browser plugin instances, potentially on different web pages? 
 Would I have to make the composite viewer a singleton that holds references 
 to the embedded windows created for each plugin instance? It's never gonna 
 fly!

Um... in this type of usage it may well be the easier to have multiple
viewers.

When you are doing your browser plugin how to you manage the graphics contexts?

 Interesting update to the problem though; it seems not related to the 
 embedding of the textures within the IVE, but more to do with the way IVE 
 reader creates images. The reason being that if I convert cow.osg using 
 osgconv -O noTexturesInIVEFile cow.osg cow.ive I still get the problem, but 
 if I load cow.osg into my example, it seems fine.

I suspect the problem may well be down to the OpenGL object ID's for
the texture objects being shared inappropriately in your application.
The is designed to use a different osg::State::ContextID value for
each context, if different contexts use the same value for ContextID
then they will share the same OpenGL object ID's which will introduce
errors like you've seen.  It's not the only way to create the errors,
so it's only a hunch on my part.

Anyway I don't think there is anything particularly wrong with .ive
plugin or the models, all they will be doing is providing us with
hints as to what is wrong at a higher level.

Robert.
___
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org


Re: [osg-users] Problem with corrupted textures when sharing instances of models loaded from IVE format.

2012-01-13 Thread Chris Denham
Ah ha, 
Another interesting experiment doing the round trip from osg to ive and back.
e.g.
osgconv -O noTexturesInIVEFile cow.osg cow.ive
osgconv cow.ive cow2.osg

cow2.osg has the same problem and cow.ive, and on comparison on cow.osg and 
cow2.osg I noticed the image definition has grown an 
unRefImageDataAfterApply TRUE

I get the same texture problem when I load cow2.osg, and it behaves normally 
again when I set the 'unRefImageDataAfterApply' flag to false.

So my guess is that the image data may getting released before the other viewer 
instance has finished with it? 

Chris Denham

--
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=44816#44816





___
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org