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