> "Thanks Robert. A couple more questions. How do I guarantee that only the
> changed pixels are uploaded? The source image I'm using is 640x480. To
> maximize compatibility, I need to make texture sizes a power of 2 and square
> right?  That sets the next available size at 1024x1024. That's alot of extra
> data to copy.
>
> If I accessing the Image via the data()  method then there's no way to
> specify the dimensions of the dirty rectangle. I see that copySubImage takes
> a rectangle but the source for copy is an Image object so I'd have to copy
> the image data twice (camera -> tempImage ->texture). Is there something I'm
> missing? Perhapse I should call glTexSubImage2D directly? [/quote]"


Hi Luis (I know I'm not robert)

I've done this before, what you need to do is use a SubloadCallback and
attach it to your texture. In the contructor for this you need to find the
power of two up and set the actual texture size to that. Then is the
subsequent subload call you just copy the actual res image that is attached
to the  Texture something like below.

class CVideoTex2DCallBack :    public osg::Texture2D::SubloadCallback
{
public:
    CVideoTex2DCallBack(osg::Texture2D* texture)
    {
    const osg::Image* _image = texture->getImage();
        //set the texture to beleive it is of power of two size
        texture->setTextureSize(powerOf2Width, powerOf2Width,);

        //set to linear to disable mipmap generation
        texture->setFilter(osg::Texture2D::MIN_FILTER,
osg::Texture2D::LINEAR);
        texture->setFilter(osg::Texture2D::MAG_FILTER,
osg::Texture2D::LINEAR);

    void load(const osg::Texture2D& texture, osg::State&) const;
    void subload(const osg::Texture2D& texture, osg::State&) const;

};
_______________________________________________
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to