Hi Fabrizo,

As Stephan spotted you aren't actually using the same Image object, the one
you think you are dirty() has nothing to do with the one assigned to the
Texture.

I think your misakes stems from assuming that a ref_ptr<osg::Image> is an
Image, it's not it's a smart pointer to an image, so when you do a imageptr
= readImageFile("myfile.rgb"); you assigning a new osg::Image to the
imageptr, your aren't replacing the original image data.

Robert.


On 29 August 2014 15:17, Fabrizio Bazzurri <[email protected]> wrote:

> Hi Robert,
>
> no unfortunately I'm not using the osgUtil::Optimizer. Following there is
> the complete code.
>
>
> Code:
>
> #include < osgViewer/Viewer >
> #include < osgGA/TrackballManipulator >
> #include < osgDB/ReadFile >
> #include < osg/Texture2D >
> #include < osg/Program >
>
> #include < iostream >
> #include < string.h >
>
> const std::string vert = "varying vec4 texCoords;\nvoid
> main()\n{\ngl_Position = ftransform();\ntexCoords = gl_MultiTexCoord0;\n}";
> const std::string frag = "varying vec4 texCoords;\nuniform sampler2D
> cDiffTex;\nvoid main(void)\n{\ngl_FragColor = texture2D(cDiffTex,
> texCoords.st);\n}";
>
> int main(int argc, char **argv)
> {
> osgViewer::Viewer view;
> osg::ref_ptr<osg::Group> root(new osg::Group);
> osg::ref_ptr<osg::Node> geom1 = new osg::Node;
>
> geom1 = osgDB::readNodeFile("clock.osgt");
> ///////////////////////////////
> osg::StateSet* stateset = geom1->getOrCreateStateSet();
>
> osg::ref_ptr<osg::Program> program = new osg::Program;
> osg::ref_ptr<osg::Shader> vertexSource = new
> osg::Shader(osg::Shader::VERTEX);
> osg::ref_ptr<osg::Shader> fragmentSource = new
> osg::Shader(osg::Shader::FRAGMENT);
>
> vertexSource->setShaderSource(vert);
> fragmentSource->setShaderSource(frag);
>
> program->addShader(vertexSource);
> program->addShader(fragmentSource);
>
> stateset->setAttributeAndModes(program.get());
> stateset->setDataVariance(osg::Object::DYNAMIC);
>
> ////
> osg::ref_ptr<osg::Image> diffuseImage =
> osgDB::readImageFile(".\\img0.png");
> std::cout << " File " << diffuseImage->getFileName() << " " << std::endl;
> // it prints img0
> diffuseImage->setDataVariance(osg::Object::DYNAMIC);
>
> osg::ref_ptr<osg::Texture2D> diffuseTex = new osg::Texture2D;
> diffuseTex->setDataVariance(osg::Object::DYNAMIC);
> diffuseTex->setImage(diffuseImage.get());
> diffuseTex->setUnRefImageDataAfterApply(false);
>
> stateset->setTextureAttributeAndModes(0, diffuseTex.get(),
> osg::StateAttribute::ON | osg::StateAttribute::OVERRIDE);
>
> osg::ref_ptr<osg::Uniform> cDiffTex = new
> osg::Uniform(osg::Uniform::SAMPLER_2D, "cDiffTex");
> cDiffTex->set(0);
> stateset->addUniform(cDiffTex.get());
>
> diffuseImage = osgDB::readImageFile(".\\img1.jpg");
> diffuseImage->dirty();
> std::cout << " File " << diffuseImage->getFileName() << " " << std::endl;
> // it prints img1
> std::cout << " Tex " << diffuseTex->getImage()->getFileName() << " " <<
> std::endl; // it prints img0
> // NEED TO TELL TEXTURE TO SET THE IMAGE
> //diffuseTex->setImage(diffuseImage);
> //std::cout << " Tex " << diffuseTex->getImage()->getFileName() << " " <<
> std::endl;
> //////////////////////////////
>
> root->addChild(geom1.get());
>
> view.setSceneData(root.get());
>
> view.setCameraManipulator(new osgGA::TrackballManipulator);
>
> view.realize();
> while (!view.done())
> {
> std::cout << " File " << diffuseImage->getFileName() << " " << std::endl;
> // it prints img1
> std::cout << " Tex " << diffuseTex->getImage()->getFileName() << " " <<
> std::endl;// it prints img0
> //diffuseTex->setUnRefImageDataAfterApply(false);
>
> view.frame();
> }
>
> return 0;
>
> }
>
>
>
>
> I tried to add diffuseTex->setUnRefImageDataAfterApply(false) but with no
> success.
>
> Cheers,
> Fabrizio
>
> ------------------
> Read this topic online here:
> http://forum.openscenegraph.org/viewtopic.php?p=60851#60851
>
>
>
>
>
> _______________________________________________
> 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