Unfortunately, my graphic crad does not support NPOT texture which is why I
can't use osg::TextureRectangle.
I also tried ensuring that my Texture2D is always a POT when I change the
windows size (see code below).
Code:
int32 nWitdh = viewport->width();
int32 nHeight = viewport->height();
int32 nPOTWidth = ComputeUpperPowerOfTwo( nWidth );
int32 nPOTHeight = ComputeUpperPowerOfTwo( nHeight );
if( nPOTWidth != pTex2D->getTextureWidth( ) || nPOTHeight !=
pTex2D->getTextureHeight( ) )
{
pTex2D->dirtyTextureObject( );
pTex2D->setTextureSize( nPOTWidth, nPOTHeight );
}
else
{
bDirtyTexture = false;
}
u = double( nWidth ) / nPOTWidth;
v = double( nHeight ) / nPOTHeight;
However that does not work. The Texture2D::copyTexImage2D() eventually gets
called, but fails to call copyTexSubImage2D() since the width/height passes as
paramater do not equal the texture width/height.
Code:
if (width==(int)_textureWidth && height==(int)_textureHeight)
{
// we have a valid texture object which is the right size
// so lets play clever and use copyTexSubImage2D instead.
// this allows use to reuse the texture object and avoid
// expensive memory allocations.
copyTexSubImage2D(state,0 ,0, x, y, width, height);
return;
}
Near the end of the Texture2D::copyTexImage2D() function, it simply copies the
viewport size (width/height) into the texture _textureWidth/_textureHeight and
thus it becomes a NPOT texture - hense the problem I am experiencing.
Guy
------------------
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=20896#20896
_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org