It stays compressed in memory (CPU and GPU), so you get 4:1 compression in
the app, not just on disk.

No experience with PVR; is it Apple only?


Glenn Waldron / @glennwaldron


On Tue, Nov 19, 2013 at 10:25 AM, John Moore <kahar...@gmail.com> wrote:

> I am not very concerned about disk usage. I am more concerned about RAM.
> Will be there any advantages using this kind of compression? If yes how can
> I compress and then load the data in a osg::Image?
>
> I am asking because I tried to do the compression with PVR (using
> PVRTexToolGUI) but I was not able to load it in a osg::Image.
>
> Thank you.
>
> John
>
>
> gwaldron wrote:
> > Your only further recourse would be to take Luc's advice and
> DXT-compress the data on disk (using NVTT e.g.); that will give you 4:1
> savings.
> >
> > Ref:
> >
> http://en.wikipedia.org/wiki/S3_Texture_Compression#S3TC_Format_Comparison(
> http://en.wikipedia.org/wiki/S3_Texture_Compression#S3TC_Format_Comparison
> )
> >
> >
> >
> > Glenn Waldron / @glennwaldron
> >
> >
> > On Tue, Nov 19, 2013 at 9:51 AM, John Moore < ()> wrote:
> >
> > >  Memory usage is for the entire app.
> > > However memory usage of the same scene if I don’t load the texture is
> 20 MB. So I can safely assume the rest is consumed by the fact the textures
> are applied to the sphere.
> > >
> > >
> > > gwaldron wrote:
> > >
> > > > 110MB -- CPU or GPU memory? For the entire app or just your textures?
> > > >
> > > > Quick math:
> > > > 2 * 4096 * 2048 * 4 * 1.3 = 87MB.
> > > > (4 = RGBA, 1.3 = mipmaps)
> > > >
> > > >
> > > >
> > > >
> > > >
> > > > Glenn Waldron / @glennwaldron
> > > >
> > > >
> > > >
> > >
> > >
> > > > On Tue, Nov 19, 2013 at 9:18 AM, John Moore < ()> wrote:
> > > >
> > > >
> > > > >  Thank you Gwaldron,
> > > > > that line of code saved me 40MB. Better than nothing. Now the
> memory usage is around 110 MB.
> > > > >
> > > > > The format of the image is JPG.
> > > > > I tried to use PVR but I can't load the image.
> > > > >
> > > > > This is the complete function (updated with your suggestion) that
> I use to create a sphere with 2 textures.
> > > > > Then I use a shader to cross fade between the two textures....
> that's why I need to have both of them in memory.
> > > > >
> > > > >
> > > > > Code:
> > > > >
> > > > > - (osg::ref_ptr<osg::Geode>)createSphereWithTodayImage:(NSString
> *)todayTextName pastImage:(NSString *)pastTextName andRay:(CGFloat)ray
> > > > > {
> > > > >     osg::ref_ptr<osg::Geode> sphere = new osg::Geode();
> > > > >     sphere->addDrawable(new osg::ShapeDrawable(new
> osg::Sphere(osg::Vec3(), ray)));
> > > > >     sphere->setName("BubbleNode");
> > > > >
> > > > >     // load image for texture
> > > > >     osg::ref_ptr<osg::Image> todayImage =
> osgDB::readImageFile(todayTextName.UTF8String);
> > > > >     osg::ref_ptr<osg::Image> pastImage =
> osgDB::readImageFile(pastTextName.UTF8String);
> > > > >
> > > > >     if (!todayImage || !pastImage)
> > > > >     {
> > > > >         std::cout << "Couldn't load texture." << std::endl;
> > > > >     }
> > > > >     else
> > > > >     {
> > > > >
> > > >
> > >
> > >
> > > >
> > > > >         osg::ref_ptr<osg::Texture2D> texture = new osg::Texture2D;
> > > > >         texture->setDataVariance(osg::Object::STATIC);
> > > > >
> > > > >
> > > >
> > >
> > >
> > > >
> > > > >         texture->setFilter(osg::Texture::MIN_FILTER,
> osg::Texture::LINEAR);
> > > > >         texture->setFilter(osg::Texture::MAG_FILTER,
> osg::Texture::LINEAR);
> > > > >         texture->setWrap(osg::Texture::WRAP_S,
> osg::Texture::CLAMP);
> > > > >         texture->setWrap(osg::Texture::WRAP_T,
> osg::Texture::CLAMP);
> > > > >
> > > > >
> > > >
> > >
> > >
> > > >
> > > > >         texture->setImage(todayImage.release());
> > > > >         texture->setUnRefImageDataAfterApply(true);
> > > > >
> sphere->getOrCreateStateSet()->setTextureAttributeAndModes(0,texture.get());
> > > > >
> > > > >         osg::ref_ptr<osg::Texture2D> texture2 = new osg::Texture2D;
> > > > >         texture2->setDataVariance(osg::Object::STATIC);
> > > > >
> > > > >
> > > >
> > >
> > >
> > > >
> > > > >         texture2->setFilter(osg::Texture::MIN_FILTER,
> osg::Texture::LINEAR);
> > > > >         texture2->setFilter(osg::Texture::MAG_FILTER,
> osg::Texture::LINEAR);
> > > > >         texture2->setWrap(osg::Texture::WRAP_S,
> osg::Texture::CLAMP);
> > > > >         texture2->setWrap(osg::Texture::WRAP_T,
> osg::Texture::CLAMP);
> > > > >
> > > > >
> > > >
> > >
> > >
> > > >
> > > > >         texture2->setImage(pastImage.release());
> > > > >         texture->setUnRefImageDataAfterApply(true);
> > > > >
> sphere->getOrCreateStateSet()->setTextureAttributeAndModes(1,texture2.get());
> > > > >
> > > > >     }
> > > > >     return sphere;
> > > > > }
> > > > >
> > > > >
> > > > >
> > > > > and then I call this to add the sphere
> > > > >
> > > > > Code:
> > > > >
> > > > > osg::ref_ptr<osg::Geode> sphere = [self
> createSphereWithTodayImage:"pathofimage1.jpg" pastImage:"pathofimage2.jpg"
> andRay:1.0f];
> > > > > _root->addChild(sphere.get());
> > > > > _root->setDataVariance( osg::Object::DYNAMIC);
> > > > >
> > > > >
> > > > >
> > > > >
> > > > >
> > > > >
> > > > > gwaldron wrote:
> > > > >
> > > > >
> > > > > > What's the data type of your image? Show the code where you
> allocate the image data.
> > > > > >
> > > > > > You can also call this, which will free the CPU memory once the
> texture gets to the GPU:
> > > > > >
> > > > > >    texture->setUnRefImageDataAfterApply(true);
> > > > > >
> > > > > >
> > > > > > Glenn Waldron / @glennwaldron
> > > > > >
> > > > > >
> > > > > >
> > > > > >
> > > > >
> > > > >
> > > > >
> > > > > > On Tue, Nov 19, 2013 at 8:11 AM, John Moore < ()> wrote:
> > > > > >
> > > > > >
> > > > > >
> > > > >
> > > >
> > >
> > >
> > > >
> > > > >
> > > > > >
> > > > > > >  Hi,
> > > > > > >
> > > > > > > In my app I am using 2 textures of size 4096x2048.
> > > > > > > I have a serious problem of memory usage.
> > > > > > >
> > > > > > >
> > > > > > > Code:
> > > > > > >
> > > > > > > osg::ref_ptr<osg::Texture2D> texture = new osg::Texture2D;
> > > > > > >         texture->setDataVariance(osg::Object::STATIC);
> > > > > > >         texture->setFilter(osg::Texture::MIN_FILTER,
> osg::Texture::LINEAR_MIPMAP_LINEAR);
> > > > > > >         texture->setFilter(osg::Texture::MAG_FILTER,
> osg::Texture::LINEAR);
> > > > > > >         texture->setWrap(osg::Texture::WRAP_S,
> osg::Texture::CLAMP);
> > > > > > >         texture->setWrap(osg::Texture::WRAP_T,
> osg::Texture::CLAMP);
> > > > > > >         texture->setImage(image.release());
> > > > > > >
> sphere->getOrCreateStateSet()->setTextureAttributeAndModes(0,texture.get());
> > > > > > >
> > > > > > >         osg::ref_ptr<osg::Texture2D> texture2 = new
> osg::Texture2D;
> > > > > > >         texture2->setDataVariance(osg::Object::STATIC);
> > > > > > >         texture2->setFilter(osg::Texture::MIN_FILTER,
> osg::Texture::LINEAR_MIPMAP_LINEAR);
> > > > > > >         texture2->setFilter(osg::Texture::MAG_FILTER,
> osg::Texture:: LINEAR);
> > > > > > >         texture2->setWrap(osg::Texture::WRAP_S,
> osg::Texture::CLAMP);
> > > > > > >         texture2->setWrap(osg::Texture::WRAP_T,
> osg::Texture::CLAMP);
> > > > > > >         texture2->setImage(image2.release());
> > > > > > >
> sphere->getOrCreateStateSet()->setTextureAttributeAndModes(1,texture2.get());
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > > using this code my app jumps from 20 MB of memory to 250 MB of
> memory usage
> > > > > > >
> > > > > > > Since I am developing on mobile platform this is a huge waste
> of memory.
> > > > > > >
> > > > > > > I partially solved the problem by changing the MIN_FILTER from
> LINEAR_MIPMAP_LINEAR to LINEAR
> > > > > > > Now the memory usage is 150MB
> > > > > > >
> > > > > > > It's still a lot!
> > > > > > >
> > > > > > > Do you know a way to optimize the memory usage of these 2
> textures?
> > > > > > >
> > > > > > > Thank you,
> > > > > > > Have a nice day (or night :) ),
> > > > > > >
> > > > > > > John
> > > > > > >
> > > > > > > ------------------
> > > > > > > Read this topic online here:
> > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > > > >
> > > > >
> > > > >
> > > > >
> > > >
> > >
> > >
> > >
> > > >
> > > > >
> > > > > >
> > > > > > > http://forum.openscenegraph.org/viewtopic.php?p=57295#57295 (
> http://forum.openscenegraph.org/viewtopic.php?p=57295#57295) (
> http://forum.openscenegraph.org/viewtopic.php?p=57295#57295 (
> http://forum.openscenegraph.org/viewtopic.php?p=57295#57295)) (
> http://forum.openscenegraph.org/viewtopic.php?p=57295#57295 (
> http://forum.openscenegraph.org/viewtopic.php?p=57295#57295) (
> http://forum.openscenegraph.org/viewtopic.php?p=57295#57295 (
> http://forum.openscenegraph.org/viewtopic.php?p=57295#57295)))
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > > _______________________________________________
> > > > > > > osg-users mailing list
> > > > > > >  ()
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> > >
> > > >
> > > > >
> > > > > >
> > > > > > >
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org(
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org)
> (http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org(
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org))
> (http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org(
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org)
> (http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org(
> 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=57300#57300 (
> http://forum.openscenegraph.org/viewtopic.php?p=57300#57300) (
> http://forum.openscenegraph.org/viewtopic.php?p=57300#57300 (
> http://forum.openscenegraph.org/viewtopic.php?p=57300#57300))
> > > > >
> > > > >
> > > > >
> > > > >
> > > > >
> > > > > _______________________________________________
> > > > > osg-users mailing list
> > > > >  ()
> > > > >
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org(
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org)
> (http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org(
> 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=57306#57306 (
> http://forum.openscenegraph.org/viewtopic.php?p=57306#57306)
> > >
> > >
> > >
> > >
> > >
> > > _______________________________________________
> > > osg-users mailing list
> > >  ()
> > >
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org(
> 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=57311#57311
>
>
>
>
>
> _______________________________________________
> 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