did palette animation the sane way (switching palettes) rather than cycling 0x60-0x66 in the shader

This commit is contained in:
Chris Forbes
2009-10-13 23:02:46 +13:00
parent d8d1def249
commit bebe9bee85
4 changed files with 17 additions and 24 deletions

View File

@@ -13,7 +13,7 @@ namespace OpenRa.Game.Graphics
const int maxEntries = 8;
int allocated = 0;
public HardwarePalette(Renderer renderer, Map map)
public HardwarePalette(Renderer renderer, Map map, int rotate)
: base(renderer,new Size(256, maxEntries))
{
Palette pal = new Palette(FileSystem.Open(map.Theater + ".pal"));
@@ -21,6 +21,11 @@ namespace OpenRa.Game.Graphics
foreach (string remap in new string[] { "blue", "red", "orange", "teal", "salmon", "green", "gray" })
AddPalette(new Palette(pal, new PaletteRemap(FileSystem.Open(remap + ".rem"))));
using (var bitmapCopy = new Bitmap(bitmap))
for (int j = 0; j < maxEntries; j++)
for (int i = 0; i < 7; i++)
this[new Point(0x60 + i, j)] = bitmapCopy.GetPixel(0x60 + (rotate + i) % 7, j);
}
int AddPalette(Palette p)

View File

@@ -9,9 +9,15 @@ namespace OpenRa.Game.Graphics
class Renderer
{
readonly GraphicsDevice device;
Texture[] palettes;
public Shader SpriteShader { get; private set; } /* note: shared shader params */
public Shader LineShader { get; private set; }
public void BuildPalette(Map map)
{
palettes = Util.MakeArray(7, i => new HardwarePalette(this, map, i).Texture);
}
public void SetPalette(HardwarePalette hp)
{
SpriteShader.SetValue("Palette", hp.Texture);
@@ -37,7 +43,7 @@ namespace OpenRa.Game.Graphics
{
device.Begin();
SpriteShader.SetValue("palDist", waterFrame);
SpriteShader.SetValue("Palette", palettes[ (int)(waterFrame * palettes.Length) % palettes.Length ]);
SpriteShader.SetValue("Scroll", scroll);
SpriteShader.SetValue("r1", r1);
SpriteShader.SetValue("r2", r2);