0

我需要垂直或水平翻转纹理。我为此使用以下代码:

        //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。因为翻转是动态进行的,所以降低了程序的性能。有没有其他方法可以翻转纹理?或者如何保持性能?(我不使用着色器)

4

0 回答 0