62 lines
1.9 KiB
C#
62 lines
1.9 KiB
C#
#region Copyright & License Information
|
|
/*
|
|
* Copyright 2007-2011 The OpenRA Developers (see AUTHORS)
|
|
* This file is part of OpenRA, which is free software. It is made
|
|
* available to you under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation. For more information,
|
|
* see COPYING.
|
|
*/
|
|
#endregion
|
|
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Drawing;
|
|
using System.Drawing.Imaging;
|
|
using System.IO;
|
|
using OpenRA.FileFormats.Graphics;
|
|
|
|
namespace OpenRA.Graphics
|
|
{
|
|
public static class Util
|
|
{
|
|
static float[] channelSelect = { 0.75f, 0.25f, -0.25f, -0.75f };
|
|
|
|
public static void FastCreateQuad(Vertex[] vertices, float2 o, Sprite r, int palette, int nv, float2 size)
|
|
{
|
|
var attrib = new float2(palette / (float)HardwarePalette.MaxPalettes, channelSelect[(int)r.channel]);
|
|
|
|
vertices[nv] = new Vertex(o,
|
|
r.FastMapTextureCoords(0), attrib);
|
|
vertices[nv + 1] = new Vertex(new float2(o.X + size.X, o.Y),
|
|
r.FastMapTextureCoords(1), attrib);
|
|
vertices[nv + 2] = new Vertex(new float2(o.X + size.X, o.Y + size.Y),
|
|
r.FastMapTextureCoords(3), attrib);
|
|
vertices[nv + 3] = new Vertex(new float2(o.X, o.Y + size.Y),
|
|
r.FastMapTextureCoords(2), attrib);
|
|
}
|
|
|
|
static readonly int[] channelMasks = { 2, 1, 0, 3 }; // yes, our channel order is nuts.
|
|
|
|
public static void FastCopyIntoChannel(Sprite dest, byte[] src)
|
|
{
|
|
var data = dest.sheet.Data;
|
|
var srcStride = dest.bounds.Width;
|
|
var destStride = dest.sheet.Size.Width * 4;
|
|
var destOffset = destStride * dest.bounds.Top + dest.bounds.Left * 4 + channelMasks[(int)dest.channel];
|
|
var destSkip = destStride - 4 * srcStride;
|
|
var height = dest.bounds.Height;
|
|
|
|
var srcOffset = 0;
|
|
for (var j = 0; j < height; j++)
|
|
{
|
|
for (int i = 0; i < srcStride; i++, srcOffset++)
|
|
{
|
|
data[destOffset] = src[srcOffset];
|
|
destOffset += 4;
|
|
}
|
|
destOffset += destSkip;
|
|
}
|
|
}
|
|
}
|
|
}
|