Hello J.P.,

I see it's a good thing this thread got my attention! I have similar missing 
texture issues in another application that creates and deletes window contexts 
applied to viewer slaves (also created and deleted dynamically). Here's the way 
we create our textures: 

        osg::ref_ptr<osg::Texture2D> lTex = new osg::Texture2D;
      lTex->setDataVariance(osg::Object::DYNAMIC);

      // load an image by reading a file: 
      CString lIconFileName = (...)TextureFilename + ".png";
      osg::Image* lIconImage = osgDB::readImageFile(lIconFileName.GetBuffer());

      // Assign the texture to the image we read from file:
      lTex->setImage(lIconImage);

        // Make sure the texture is not unreferenced in memory after it's 
applied in GL states
      lTex->setUnRefImageDataAfterApply(false);

Unfortunately, my understanding of OpenGL is relatively limited but I know this 
last line of code is crucial for dynamical views handling to maintain the 
texture in user memory for later access. However, even with this, it happens 
sometimes that the texture disappear after a few create and delete views 
operations (sometimes, the textures is on a view but not on another!). It 
happens most of the time with objects loaded from file. Since we don't have 
direct access to the textures, we can't make the call to 
setUnRefImageDataAfterApply(). Would there be another way?

Now, as for the modified CompositeViewer example, I tried it on Windows Vista 
and it simply crashes the first time I hit ESC or the X button. In fact, the 
problem occurs during the second call to viewer.run(). First, I simply tried to 
add a sleep before the viewer's deletion to wait for potential asynchronous 
cleanup stuff after the call to the viewer's run() method but it didn't work.

Then, I did a little debug job to find out that the second time the viewer is 
created, the application crashes during the rendering traversal of the first 
call to frame() in the run thread loop. More precisely the application crashes 
in osgUtil::ScreneView::init() the first time the cull_draw operation is 
launched. Here's the call stack:

        ntdll.dll!778f9a94()    
        [Frames below may be incorrect and/or missing, no symbols loaded for 
ntdll.dll] 
        ntdll.dll!778f92c4()    
        kernel32.dll!76a5e87b()         
        nvoglv32.dll!69638b8f()         
        nvoglv32.dll!695a15d0()         
>       osg55-osgd.dll!osg::getGLVersionNumber()  Line 48 + 0xd bytes   C++
        osg55-osgd.dll!osg::isGLExtensionOrVersionSupported(unsigned int 
contextID=0, const char * extension=0x5ac7a277, float 
requiredGLVersion=3.4028235e+038)  Line 82 + 0x5 bytes   C++
        osg55-osgd.dll!osg::isGLExtensionSupported(unsigned int contextID=0, 
const char * extension=0x5ac7a277)  Line 73 + 0x17 bytes   C++
        osg55-osgUtild.dll!osgUtil::SceneView::init()  Line 312 + 0x2d bytes    
C++
        osg55-osgUtild.dll!osgUtil::SceneView::draw()  Line 1026 + 0x1d bytes   
C++
        osg55-osgViewerd.dll!osgViewer::Renderer::cull_draw()  Line 588 + 0xf 
bytes     C++
        
osg55-osgViewerd.dll!osgViewer::Renderer::operator()(osg::GraphicsContext * 
context=0x023591b0)  Line 689 + 0xf bytes   C++
        osg55-osgd.dll!osg::GraphicsContext::runOperations()  Line 688 + 0x33 
bytes     C++
        osg55-osgViewerd.dll!osgViewer::ViewerBase::renderingTraversals()  Line 
772 + 0x15 bytes        C++
        osg55-osgViewerd.dll!osgViewer::ViewerBase::frame(double 
simulationTime=1.7976931348623157e+308)  Line 609 + 0xf bytes  C++
        osg55-osgViewerd.dll!osgViewer::ViewerBase::run()  Line 581 + 0x1b 
bytes        C++
        osg55-osgViewerd.dll!osgViewer::CompositeViewer::run()  Line 233        
C++
        osgcompositeviewerd.exe!main(int argc=3, char * * argv=0x02330ed8)  
Line 311 + 0xf bytes        C++
        osgcompositeviewerd.exe!__tmainCRTStartup()  Line 582 + 0x19 bytes      
C
        osgcompositeviewerd.exe!mainCRTStartup()  Line 399      C
        kernel32.dll!76a94911()         
        ntdll.dll!778de4b6()    
        ntdll.dll!778de489()    

I forced the single thread mode (the only thing on the command line was the 
filename of my 3D model).

By the way, is there a better solution to wait for the viewer completion after 
the run() method?

What OS are you using? Maybe I should try on XP to see if it does the same 
thing. 

Hope we can help each other!

Cheers,

Frederic Drolet, M. Sc.
Computing Solutions and Experimentations | Solutions informatiques et 
expérimentations
Systems of Systems | Systèmes de systèmes
DRDC Valcartier | RDDC Valcartier
2459, boul. Pie-XI North
Quebec, Quebec
G3J 1X5 CANADA
Phone | Téléphone: (418) 844-4000 ext : 4820
Fax | Télécopieur: (418) 844-4538
E-mail | Courriel: frederic.dro...@drdc-rddc.gc.ca
Web : www.valcartier.drdc-rddc.gc.ca

-----Original Message-----
From: osg-users-boun...@lists.openscenegraph.org 
[mailto:osg-users-boun...@lists.openscenegraph.org] On Behalf Of J.P. Delport
Sent: November-24-09 8:53 AM
To: OpenSceneGraph Users
Subject: Re: [osg-users] CompositeViewer context cleanup and missing textures

Hi,

Robert Osfield wrote:
> Hi J.P.
> 
> I'm still knee deep in merging submissions so can't yet go off
> reviewing user code.  In principle it is possible to mange open and
> closing viewers.  I can point you in the right direction but have to
> let you get on with it otherwise.

I understand, I'll try search for cleanup code, just not sure where to 
start.

Anyone else?

jp

> 
> Robert.
> 
> On Tue, Nov 24, 2009 at 12:32 PM, J.P. Delport <jpdelp...@csir.co.za> wrote:
>> Hi Robert,
>>
>> Robert Osfield wrote:
>>> Hi J.P,
>>>
>>> The typical problem is that the scene graph has been set up to unref
>>> texture images after apply so when it comes to reloading the texture
>>> images there aren't the to download.
>> should this still happen when I'm completely reloading a scene after the
>> viewer and scene have been deleted completely?
>>
>> It seems that OSG thinks there is still a valid texture it can use after
>> I've deleted the scene and CompositeViewer.
>>
>> Running the attached e.g.:
>> ./test cow.osg
>>
>> Constructing PixelBufferObject for image=0x9547928
>> _maxTexturePoolSize=0
>> _maxBufferObjectPoolSize=0
>> Created new TextureObject, _numOfTextureObjects 1
>> Created new TextureObject, _numOfTextureObjects 1
>>
>> now I click the X on the window and the app deletes the scene and viewer and
>> creates them anew:
>>
>> _maxTexturePoolSize=0
>> _maxBufferObjectPoolSize=0
>> Reusing orhpahned TextureObject, _numOfTextureObjects=1
>> Warning: detected OpenGL error 'invalid value' after RenderBin::draw(,)
>> Reusing orhpahned TextureObject, _numOfTextureObjects=1
>> Warning: detected OpenGL error 'invalid value' after RenderBin::draw(,)
>>
>> So it tries to reuse something that's not there? How can I convince OSG to
>> drop all caches/buffers/GL objects?
>>
>> jp
>>
>>
>>> Robert.
>>>
>>> On Tue, Nov 24, 2009 at 9:17 AM, J.P. Delport <jpdelp...@csir.co.za>
>>> wrote:
>>>> Hi all,
>>>>
>>>> I've run into the classic "missing textures" problem when stopping and
>>>> restarting a compositeviewer multiple times in the same app. From
>>>> previous
>>>> threads on this problem it seems to be context cleanup/GL object cleanup
>>>> that does not get done properly, but I'm just using the normal
>>>> CompositeViewer and not messing with contexts/windows/sceneviews myself,
>>>> so
>>>> I thought the cleanup would be handled correctly.
>>>>
>>>> Attached a very slightly modified compositeviewer example. All it does is
>>>> create/destruct the compositeviewer 5 times. When the viewer is created
>>>> for
>>>> the second time, all my textures are gone (just run without any
>>>> arguments).
>>>>
>>>> Can anyone confirm the missing textures? Any hints as to what else needs
>>>> to
>>>> be done to make sure everything is cleared/flushed correctly?
>>>>
>>>> thanks
>>>> jp
>>>>
>>>> --
>>>> 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.  MailScanner thanks Transtec
>>>> Computers for their support.
>>>>
>>>>
>>>> _______________________________________________
>>>> 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
>>>
>> --
>> 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.  MailScanner thanks Transtec
>> Computers for their support.
>>
>>
>> _______________________________________________
>> 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

-- 
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.  MailScanner thanks Transtec Computers for their 
support.

_______________________________________________
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

Reply via email to