Hi Max,

Quoting Max <[email protected]>:
I have a strange problem with osg::Image::setImage.
I use both osg and opencv and I want to convert an opencv image into an osg.

Could you please tell us what the actual problem is?

void updateTexture( IplImage *img, ref_ptr<Node> geode)
{
        ref_ptr<StateSet> state = geode->getOrCreateStateSet();
ref_ptr<Texture2D> Tex = (Texture2D*) state->getTextureAttribute(0,StateAttribute::TEXTURE);
        ref_ptr<Image> teximg = Tex->getImage();
        //teximg = osgDB::readImageFile("test.jpg");
        teximg->setImage(img->width, img->height,1,
                                        GL_TEXTURE_2D,GL_RGB,
                                        GL_UNSIGNED_BYTE, (unsigned char*) 
img->imageData,
                                        Image::NO_DELETE, 1);
        teximg->dirty();
        Tex->setImage(teximg.get());
        state->setTextureAttribute(0,Tex.get());
        geode->setStateSet(state.get());
        return;
}

I wonder if I shouldn't put a

Code:
        teximg->allocateImage(img->width, img->height, 1,
                                                GL_RGB, GL_UNSIGNED_BYTE);


because I already have an image I just update it. But with or without it , I have the same problem.

(What problem?)

No you don't have to put in 'allocateImage()', the 'setImage()' call will take ownership of the pointer you pass it.

Which also means that 'IplImage* img->imageData' has to be exist.

When I un-comment the commented line, it works fine (but it's not my aim), thus the problem is in set Image, which I'm sure I didn't

Does it crash? Is teximg valid i.e. is there and image attached to the texture?

Cheers,
/ulrich

_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to