I remove the useless camera node and it works without any troubles
Code:
class ImageReadBackNode:public osg::Geode{
void ImageReadBackNode::setTexture(osg::Texture*tex){
//assert(tex->getImage());
class ImageReadBackNodeCallback : public osg::Drawable::DrawCallback
{
osg::Texture *_texture; osg::Node *_n;
public:
ImageReadBackNodeCallback(osg::Texture *texture,
osg::Node*toremove) :_texture(texture), _n(toremove){ };
virtual void drawImplementation(osg::RenderInfo& renderInfo,const
osg::Drawable* drawable) const
{
// get OpenGL driver to create texture from image.
//via stateset _texture->apply(*renderInfo.getState());
///BAD
(
osg::Texture2D*(_texture))->getImage()->readImageFromCurrentTexture(renderInfo.getContextID(),true,_texture->getSourceType());
///Node self removal in drawthread (dirty but seams to works:/ ..) THREADSAFE?
std::list<osg::Group*> gr;
for (int i = 0; i < _n->getNumParents();
i++)gr.push_back((_n->getParent(i)));
for (std::list<osg::Group*>::iterator it = gr.begin();
it != gr.end(); it++)
(*it)->removeChild(_n);
}
};
getOrCreateStateSet()->setTextureAttributeAndModes(0, tex,
osg::StateAttribute::ON | osg::StateAttribute::OVERRIDE);
//cam->setFinalDrawCallback(new ImageReadBackNodeCallback(tex,this));
osg::ref_ptr<osg::Geometry> geom=new osg::Geometry();
geom->setUseVertexBufferObjects(true);
geom->setUseDisplayList(false);
geom->setDrawCallback(new ImageReadBackNodeCallback(tex,this));
this->addDrawable(geom);
}
};
------------------
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=61603#61603
_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org