public static void Fill( SimpleImage image, Rectangle rect, byte r, byte g, byte b, byte a ) { for( int y = rect.Top; y < rect.Bottom; ++y ) for( int x = rect.Left; x < rect.Right; ++x ) { image.Data[image.Channels*(y*image.Width+x)+0] = r; image.Data[image.Channels*(y*image.Width+x)+1] = g; image.Data[image.Channels*(y*image.Width+x)+2] = b; image.Data[image.Channels*(y*image.Width+x)+3] = a; } }
public static void Copy(SimpleImage dest, Point dest_offset, SimpleImage src, Rectangle src_rect) { int width = System.Math.Min(dest.Width - dest_offset.X, src_rect.Width); int height = System.Math.Min(dest.Height - dest_offset.Y, src_rect.Height); int channels = System.Math.Min(dest.Channels, src.Channels); for (int j = 0; j < height; ++j) for (int i = 0; i < width; ++i) { int i1 = ((j + dest_offset.Y) * dest.Width + (i + dest_offset.X)) * dest.Channels; int i2 = ((j + src_rect.Y) * src.Width + (i + src_rect.X)) * src.Channels; for (int c = 0; c < channels; ++c) dest.Data[i1 + c] = src.Data[i2 + c]; } }
void SetupDataAndInfo() { int PageTableSizeLog2 = MathExtensions.Log2(info.PageTableSize); tabledata = new SlimDX.DataBox[PageTableSizeLog2+1]; regions = new D3D10.ResourceRegion[PageTableSizeLog2+1]; data = new SimpleImage[PageTableSizeLog2+1]; for( int i = 0; i < PageTableSizeLog2+1; ++i ) { int size = info.PageTableSize >> i; SlimDX.DataStream stream = new SlimDX.DataStream( size * size * VirtualTexture.ChannelCount, false, true ); tabledata[i] = new SlimDX.DataBox( size * VirtualTexture.ChannelCount, size * size * VirtualTexture.ChannelCount, stream ); D3D10.ResourceRegion region = new D3D10.ResourceRegion(); region.Left = 0; region.Right = size; region.Top = 0; region.Bottom = size; region.Front = 0; region.Back = 1; regions[i] = region; data[i] = new SimpleImage( size, size, VirtualTexture.ChannelCount ); } }
static void Write( Quadtree node, SimpleImage image, int miplevel ) { if( node.Level >= miplevel ) { int rx = node.Rectangle.X >> miplevel; int ry = node.Rectangle.Y >> miplevel; int rw = node.Rectangle.Width >> miplevel; int rh = node.Rectangle.Height >> miplevel; SimpleImage.Fill( image, new Rectangle( rx, ry, rw, rh ), (byte)node.Mapping.X, (byte)node.Mapping.Y, (byte)node.Level, 255 ); foreach( Quadtree child in node.Children ) if( child != null ) Quadtree.Write( child, image, miplevel ); } }
public void Write( SimpleImage image, int miplevel ) { Quadtree.Write( this, image, miplevel ); }