我需要垂直或水平翻转纹理。我为此使用以下代码:
//We are use textures Format.X8R8G8B8, so
int bytesPerPixel = 4;
int pitch;
GraphicsStream srcGs = srcTexture.LockRectangle ( 0, LockFlags.ReadOnly, out pitch );
GraphicsStream dstGs = dstTexture.LockRectangle ( 0, LockFlags.None );
for ( int y = 0; y < h; y++ )
for ( int x = 0; x < w; x++ )
{
byte [ ] buffer = new byte[ bytesPerPixel ];
srcGs.Seek ( y * pitch + x * bytesPerPixel, SeekOrigin.Begin );
srcGs.Read ( buffer, 0, bytesPerPixel );
if ( flag == FlipTextureFlags.Horizontal )
dstGs.Seek ( ( h - y ) * pitch + x * bytesPerPixel, SeekOrigin.Begin );
else
dstGs.Seek ( y * pitch + ( w - x ) * bytesPerPixel, SeekOrigin.Begin );
dstGs.Write ( buffer, 0, bytesPerPixel );
}
srcTexture.UnlockRectangle ( 0 );
dstTexture.UnlockRectangle ( 0 );
代码效果很好,但是有很多纹理,它们的大小可以达到 1200x2600。因为翻转是动态进行的,所以降低了程序的性能。有没有其他方法可以翻转纹理?或者如何保持性能?(我不使用着色器)