Hi Guy,

I'm afraid I can't quite follow what you are doing.

Is that you are updating the image data asynchronously to the draw
thread?  Is so, double buffer the image data and then swap pointers to
avoid the tear.

Is that that you simply don't have vysnc enabled on your machine?  If
so just enable it, this fixes tearing of the frame buffer.

Robert.

On Fri, Feb 20, 2009 at 8:58 AM, Guy Wallis <[email protected]> wrote:
> Hello
>
> I am using OSG 2.6 on windows XP.
>
>
>
> I am having problems animating textures in OSG. I would just like to
> smoothly translate a 1D texture across a square polygon using the WRAP_S and
> REPEAT texture wrapping settings.
>
> The texture is a simple square wave (vertical black and white bars). When I
> move the textures the bars become jagged and disrupted – which looks like
> tearing. Is the problem that the texture coordinates are updating
> asynchronously (i.e. not on a vsync boundary)? Is this possible/likely?
>
>
>
> I tried waiting for a FRAME event to update the texture coordinates, but it
> didn't seem to make any difference.
>
>
>
> Any advice much appreciated.
>
>
>
> Guy
>
>
>
> ------------
>
>
>
> Here are the relevant code segments (dat[12][1024*3] is a predefined array
> of GLubyte data):
>
>
>
> build_textures()
>
> {
>
>       osg::Vec3 origin, width, height;
>
>       osg::Image* imageOSG[12];
>
> int a;
>
>
>
>       origin.set(0.0f,0.0f,0.0f);
>
> width.set(1280.0f,0.0f,0.0f);
>
> height.set(0.0f,1024.0f,0.0f);
>
>       for(a=0; a<12; a++){
>
>             ncycles = (a*2+2);
>
>             imageOSG[a] = new osg::Image;
>
>             imageOSG[a]->setImage(1024, 1, 1, GL_RGB5, GL_RGB,
> GL_UNSIGNED_BYTE, &dat[a][0], osg::Image::NO_DELETE);
>
>             geometry[a] = osg::createTexturedQuadGeometry(origin, width,
> height);
>
>             geometry[a]->setDataVariance(osg::Object::DYNAMIC);
>
>             osg::StateSet* stateset = geometry[a]->getOrCreateStateSet();
>
>             tex[a] = new osg::Texture1D();
>
>             tex[a]->setImage(imageOSG[a]);
>
>             tex[a]->setWrap(osg::Texture::WRAP_S, osg::Texture::REPEAT);
>
>             stateset->setTextureAttributeAndModes(0, tex[a],
> osg::StateAttribute::ON);
>
>             geode[a] = new osg::Geode;
>
>             geode[a]->addDrawable(geometry[a]);
>
>             wallSwitch->addChild(geode[a]);
>
>       }
>
> }
>
>
>
> void shift_textures(float xoff){
>
>       int a;
>
>       osg::Vec2Array* arrayData;
>
>
>
>       for(a=0;a<NPENTAGONS;a++){
>
>             arrayData = (osg::Vec2Array*)(geometry[a]->getTexCoordArray(0));
>
>             (*arrayData)[0].set(xoff,1.0f);
>
>             (*arrayData)[1].set(xoff,0.0f);
>
>             (*arrayData)[2].set(xoff+1.0f,0.0f);
>
>             (*arrayData)[3].set(xoff+1.0f,1.0f);
>
>             geometry[a]->dirtyDisplayList();
>
>       }
>
> }
>
>
>
> _______________________________________________
> osg-users mailing list
> [email protected]
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>
>
_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to