HI Lionel,

Might the Texture::setUnRefImageDataAfterApply() mechanism be useful here?
As the osg::Image is released then the BufferObject would be decremented
till eventual it itself is deleted.  In theory I'd expect this to happen
right now.  Is there an issue here?

Robert.

On 12 December 2012 14:32, Lionel Lagarde <[email protected]>wrote:

>  Hi,
>
> Let's imagine this scenario:
>
> The database pager loads the file "x.osgb".
> This file contains 3 geometries (A, B, C). A has a texture that uses
> A.jpg, B uses B.jpg and C uses C.jpg. These textures are not used by the
> already rendered geometry (i.e. not compiled)
> The FindCompileableGLObjectsVisitor is configured to set a pixel buffer
> object on the texture's image. An unique buffer object (shared by the 3
> images) is created.
> The buffer object is configured to release it's GL buffer once the texture
> is applied (setCopyDataAndReleaseGLBufferObject(true)).
> After the draw dispatch, the IncrementalCompileOperation compiles the new
> geometries and textures:
>
> for each textures
>
> texture->apply(. . .) =
>
> bind the buffer object
> copy A.jpg, b.jpg and C.jpg in the buffer (the 3 images are copied because
> the buffer object is shared)
>
> glTex[Sub]Image(. . ., offset of the current image in the buffer)
>
> if (getCopyDataAndReleaseGLBufferObject())
>
> release GL buffer
>
>   So, for each texture, a GL buffer is created, the 3 images are copied,
> the data is copied in the texture using the current image offset in the
> buffer and the buffer is deleted.
>
> The GL buffer should not be released before all the images are copied
> into their textures (i.e. glTex[Sub]Image for all the textures).
>
> There are few usages cases of a pixel buffer object:
>
>    - texture paging (IncrementalCompileOperation): the GL buffer release
>    can be done after the compilation loop
>    - rendering (a non compiled texture is used to render geometry): the
>    GL buffer release can be done once all the textures using the buffer
>    are compiled
>    - texture streaming (movie): the GL buffer should not be released
>
> The first 2 cases can be handled using some king of reference counter (the
> buffer contains X segments, each glTex[Sub]Image decrements this counter,
> when it reaches 0 the buffer can be released).
>
> In the third case, the buffer should never be released. The counter
> should not be decremented.
>
> What do you think about this? I'm not sure all the usage cases arecovered, 
> especially if the buffer is a vertex buffer or an indices buffer.
>
> Lionel Lagarde
>
>
> _______________________________________________
> osg-users mailing list
> [email protected]
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>
>
_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to