[osg-users] Need help using glTexSubImage2D

Thomas Hogarth thomas.hogarth at googlemail.com
Tue Mar 24 11:34:13 PDT 2009

> "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
    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

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

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openscenegraph.org/pipermail/osg-users-openscenegraph.org/attachments/20090324/226d5f7d/attachment-0003.htm>

More information about the osg-users mailing list