<div dir="ltr"><div><div>What I am doing is checking under Linux system tool for the allocated memory, and I see that when I unload my textures, the system still identifies that my app is occupying some memory. <br><br></div><div>Please notice I have no memory leak! If I setup another image to display instead of the current one, the memory will be deallocated and reallocated to the new image size (for instance, if I first have 600mb image in display and then I delete it and create a 10mb image, I only get 10mb ram occupied)<br></div><div><br></div>What I have in my own storage is a raw image data pointer, and I manage that memory. I am almost sure my code is not leak. But check my code:<br><br><br>            osg::ref_ptr<osg::Image> image = new osg::Image();<br>            //image->setPixelBufferObject(new osg::PixelBufferObject(image.get()));<br><br><br><br>            image->setImage(src->tileSize(), src->tileSize(),1,<br>                            GL_RGBA8,<br>                            GL_RGBA,<br>                            GL_UNSIGNED_INT_8_8_8_8_REV,<br></div><div>                            MY_DATA_POINTER,<br></div><div>                            osg::Image::NO_DELETE);<br><br><br>            // Setup texture<br>            osg::ref_ptr<osg::Texture2D> texture = new osg::Texture2D;<br>            texture->setImage(image);<br><br></div><b>If I comment out the image->setImage() and texture->setImage() lines, the problem disappears! That's why I suspect that OSG is keeping some internal buffers.</b><br></div><div class="gmail_extra"><br><div class="gmail_quote">2016-04-13 9:44 GMT+01:00 Robert Osfield <span dir="ltr"><<a href="mailto:robert.osfield@gmail.com" target="_blank">robert.osfield@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div><div><div>Hi Bruno,<br><br></div>The OSG is capable of robustly handling the memory of all objects that it handles.  In your case you've disabled this with the NO_DELETE option will leaves the responsibility to your application to manage the lifetime of the data.  It may be that you are doing this correctly, but perhaps there the bug is there.<br><br></div>In the OSG for most objects you don't explicitly delete objects you unreferenced them and they automatically get deleted if their reference count goes to zero.  Use of ref_ptr<> is the best way to manage the reference counting for you.  So you very rarely explicitly delete anything, and you certainly wouldn't explicitly delete a node in the scene graph - the destructor is hidden in protected to avoid you doing this as all scene graph objects are meant to be ref counted.<br><br></div>As for you own application, there isn't much we as third parties without the code in front of us can say about the exactly problem in your application.  You should be wary of how you determining a leak, for instance under Windows the VisualStudio memory leak tool can produce false positive in certain circumstances. <br><span class="HOEnZb"><font color="#888888"><br></font></span></div><span class="HOEnZb"><font color="#888888">Robert.<br></font></span></div><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br><div class="gmail_quote">On 13 April 2016 at 09:30, Bruno Oliveira <span dir="ltr"><<a href="mailto:bruno.manata.oliveira@gmail.com" target="_blank">bruno.manata.oliveira@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>OK, I understand that. I do that because I own the data pointer I'm sending, and I am totally sure I am freeing it. However, some other copy remains anywhere, and I don't have access to it.<br><br></div>If I delete the osg::Group where I am attaching images and re-add the same imgaes, no more memory is allocated, so it is using the same buffers somehow, but I can't force it to free the memory when I want to<br></div><div><div><div class="gmail_extra"><br><div class="gmail_quote">2016-04-13 7:21 GMT+01:00 Sebastian Messerschmidt <span dir="ltr"><<a href="mailto:sebastian.messerschmidt@gmx.de" target="_blank">sebastian.messerschmidt@gmx.de</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
  
    
  
  <div bgcolor="#FFFFFF" text="#000000">
    <div>Hi Bruno,<br>
    </div><span>
    <blockquote type="cite">
      <div dir="ltr">
        <div>
          <div>Hello, <br>
            <br>
          </div>
          I am creating an image from custom data pointer as follows,
          however, this does not result in freeing my memory after I
          delete the node and texture. How could this be?<br>
          <br>
          image->setImage(src->tileSize(), src->tileSize(),1,<br>
                                      GL_RGBA8,<br>
                                      GL_RGBA,<br>
                                      GL_UNSIGNED_INT_8_8_8_8_REV,<br>
                                      src->tileGridCoords(col,
          row).m_data.data(),<br>
                                      osg::Image::NO_DELETE);<br>
        </div>
      </div>
    </blockquote></span>
    You are telling OSG that you handle the memory yourself by stating
    NO_DELETE.<br>
    So basically you're responsible to delete it. <br>
    <br>
    Cheers<br>
    Sebastian <br>
    <blockquote type="cite"><span>
      <div dir="ltr">
        <div><br>
                      // Setup texture<br>
                      osg::ref_ptr<osg::Texture2D> texture = new
          osg::Texture2D;<br>
                      texture->setImage(image.get());<br>
          <br>
                      // Avoid background border between tiles<br>
                      // <a href="http://stackoverflow.com/questions/19611745/opengl-black-lines-in-between-tiles" target="_blank">http://stackoverflow.com/questions/19611745/opengl-black-lines-in-between-tiles</a><br>
                      texture->setWrap(osg::Texture::WRAP_S,
          osg::Texture::CLAMP_TO_EDGE);<br>
                      texture->setWrap(osg::Texture::WRAP_T,
          osg::Texture::CLAMP_TO_EDGE);<br>
          <br>
                     
texture->setInternalFormatMode(osg::Texture2D::USE_S3TC_DXT1_COMPRESSION);<br>
                      texture->setUnRefImageDataAfterApply( </div>
        <br>
      </div>
      <br>
      <fieldset></fieldset>
      <br>
      </span><pre>_______________________________________________
osg-users mailing list
<a href="mailto:osg-users@lists.openscenegraph.org" target="_blank">osg-users@lists.openscenegraph.org</a>
<a href="http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org" target="_blank">http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org</a>
</pre>
    </blockquote>
    <br>
  </div>

<br>_______________________________________________<br>
osg-users mailing list<br>
<a href="mailto:osg-users@lists.openscenegraph.org" target="_blank">osg-users@lists.openscenegraph.org</a><br>
<a href="http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org" rel="noreferrer" target="_blank">http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org</a><br>
<br></blockquote></div><br></div>
</div></div><br>_______________________________________________<br>
osg-users mailing list<br>
<a href="mailto:osg-users@lists.openscenegraph.org" target="_blank">osg-users@lists.openscenegraph.org</a><br>
<a href="http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org" rel="noreferrer" target="_blank">http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org</a><br>
<br></blockquote></div><br></div>
</div></div><br>_______________________________________________<br>
osg-users mailing list<br>
<a href="mailto:osg-users@lists.openscenegraph.org">osg-users@lists.openscenegraph.org</a><br>
<a href="http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org" rel="noreferrer" target="_blank">http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org</a><br>
<br></blockquote></div><br></div>