From 57c87d644a44579aff188739f103905464438d2a Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Sat, 23 Apr 2005 10:31:52 +0000 Subject: [PATCH] Added support for using TextureRectangle in --move support in readNodeFile --- src/osgDB/ReadFile.cpp | 50 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 48 insertions(+), 2 deletions(-) diff --git a/src/osgDB/ReadFile.cpp b/src/osgDB/ReadFile.cpp index c9fe117f1..3305fcac9 100644 --- a/src/osgDB/ReadFile.cpp +++ b/src/osgDB/ReadFile.cpp @@ -18,6 +18,9 @@ #include #include #include +#include +#include +#include #include #include @@ -109,6 +112,11 @@ Node* osgDB::readNodeFiles(std::vector& commandLine,const ReaderWri } +static osg::Geometry* createMovieTexturedQuadGeometry(const osg::Vec3& pos,float width,float height, osg::Image* image) +{ +} + + Node* osgDB::readNodeFiles(osg::ArgumentParser& arguments,const ReaderWriter::Options* options) { @@ -126,10 +134,48 @@ Node* osgDB::readNodeFiles(osg::ArgumentParser& arguments,const ReaderWriter::Op { osg::ref_ptr image = readImageFile(filename.c_str(), options); osg::ref_ptr imageStream = dynamic_cast(image.get()); - if (image.valid()) + if (imageStream.valid()) { + // start the stream playing. imageStream->play(); - nodeList.push_back(osg::createGeodeForImage(imageStream.get())); + + osg::ref_ptr pictureQuad = 0; + + bool useTextureRectangle = true; + if (useTextureRectangle) + { + pictureQuad = osg::createTexturedQuadGeometry(osg::Vec3(0.0f,0.0f,0.0f), + osg::Vec3(image->s(),0.0f,0.0f), + osg::Vec3(0.0f,0.0f,image->t()), + 0.0f,image->t(), image->s(),0.0f); + + pictureQuad->getOrCreateStateSet()->setTextureAttributeAndModes(0, + new osg::TextureRectangle(image.get()), + osg::StateAttribute::ON); + } + else + { + pictureQuad = osg::createTexturedQuadGeometry(osg::Vec3(0.0f,0.0f,0.0f), + osg::Vec3(image->s(),0.0f,0.0f), + osg::Vec3(0.0f,0.0f,image->t()), + 0.0f,0.0f, 1.0f,1.0f); + + pictureQuad->getOrCreateStateSet()->setTextureAttributeAndModes(0, + new osg::Texture2D(image.get()), + osg::StateAttribute::ON); + } + + if (pictureQuad.valid()) + { + osg::ref_ptr geode = new osg::Geode; + geode->addDrawable(pictureQuad.get()); + nodeList.push_back(geode.get()); + + } + } + else if (image.valid()) + { + nodeList.push_back(osg::createGeodeForImage(image.get())); } }