Clean up style of files affected by the last commit.
This commit is contained in:
committed by
RoosterDragon
parent
f0f02dff5c
commit
9cbac2d5e1
@@ -17,8 +17,8 @@ namespace OpenRA.Graphics
|
||||
{
|
||||
struct Collection
|
||||
{
|
||||
public string src;
|
||||
public Dictionary<string, MappedImage> regions;
|
||||
public string Src;
|
||||
public Dictionary<string, MappedImage> Regions;
|
||||
}
|
||||
|
||||
static Dictionary<string, Collection> collections;
|
||||
@@ -62,10 +62,10 @@ namespace OpenRA.Graphics
|
||||
static MiniYaml SaveCollection(Collection collection)
|
||||
{
|
||||
var root = new List<MiniYamlNode>();
|
||||
foreach (var kv in collection.regions)
|
||||
root.Add(new MiniYamlNode(kv.Key, kv.Value.Save(collection.src)));
|
||||
foreach (var kv in collection.Regions)
|
||||
root.Add(new MiniYamlNode(kv.Key, kv.Value.Save(collection.Src)));
|
||||
|
||||
return new MiniYaml(collection.src, root);
|
||||
return new MiniYaml(collection.Src, root);
|
||||
}
|
||||
|
||||
static void LoadCollection(string name, MiniYaml yaml)
|
||||
@@ -73,8 +73,8 @@ namespace OpenRA.Graphics
|
||||
Game.modData.LoadScreen.Display();
|
||||
var collection = new Collection()
|
||||
{
|
||||
src = yaml.Value,
|
||||
regions = yaml.Nodes.ToDictionary(n => n.Key, n => new MappedImage(yaml.Value, n.Value))
|
||||
Src = yaml.Value,
|
||||
Regions = yaml.Nodes.ToDictionary(n => n.Key, n => new MappedImage(yaml.Value, n.Value))
|
||||
};
|
||||
|
||||
collections.Add(name, collection);
|
||||
@@ -96,7 +96,7 @@ namespace OpenRA.Graphics
|
||||
}
|
||||
|
||||
MappedImage mi;
|
||||
if (!collection.regions.TryGetValue(imageName, out mi))
|
||||
if (!collection.Regions.TryGetValue(imageName, out mi))
|
||||
return null;
|
||||
|
||||
// Cached sheet
|
||||
@@ -115,6 +115,7 @@ namespace OpenRA.Graphics
|
||||
cachedCollection = new Dictionary<string, Sprite>();
|
||||
cachedSprites.Add(collectionName, cachedCollection);
|
||||
}
|
||||
|
||||
var image = mi.GetImage(sheet);
|
||||
cachedCollection.Add(imageName, image);
|
||||
|
||||
|
||||
@@ -18,9 +18,9 @@ namespace OpenRA.Graphics
|
||||
{
|
||||
public sealed class CursorProvider : IDisposable
|
||||
{
|
||||
HardwarePalette palette;
|
||||
Dictionary<string, CursorSequence> cursors;
|
||||
Cache<string, PaletteReference> palettes;
|
||||
readonly HardwarePalette palette = new HardwarePalette();
|
||||
readonly Dictionary<string, CursorSequence> cursors = new Dictionary<string, CursorSequence>();
|
||||
readonly Cache<string, PaletteReference> palettes;
|
||||
readonly SheetBuilder sheetBuilder;
|
||||
|
||||
public static bool CursorViewportZoomed { get { return Game.Settings.Graphics.CursorDouble && Game.Settings.Graphics.PixelDouble; } }
|
||||
@@ -29,7 +29,6 @@ namespace OpenRA.Graphics
|
||||
{
|
||||
var sequenceFiles = modData.Manifest.Cursors;
|
||||
|
||||
cursors = new Dictionary<string, CursorSequence>();
|
||||
palettes = new Cache<string, PaletteReference>(CreatePaletteReference);
|
||||
var sequences = new MiniYaml(null, sequenceFiles.Select(s => MiniYaml.FromFile(s)).Aggregate(MiniYaml.MergeLiberal));
|
||||
var shadowIndex = new int[] { };
|
||||
@@ -42,7 +41,6 @@ namespace OpenRA.Graphics
|
||||
out shadowIndex[shadowIndex.Length - 1]);
|
||||
}
|
||||
|
||||
palette = new HardwarePalette();
|
||||
foreach (var p in nodesDict["Palettes"].Nodes)
|
||||
palette.AddPalette(p.Key, new ImmutablePalette(GlobalFileSystem.Open(p.Value.Value), shadowIndex), false);
|
||||
|
||||
|
||||
@@ -15,14 +15,16 @@ namespace OpenRA.Graphics
|
||||
{
|
||||
public class LineRenderer : Renderer.IBatchRenderer
|
||||
{
|
||||
static float2 offset = new float2(0.5f, 0.5f);
|
||||
float lineWidth = 1f;
|
||||
Renderer renderer;
|
||||
IShader shader;
|
||||
static readonly float2 Offset = new float2(0.5f, 0.5f);
|
||||
|
||||
readonly Renderer renderer;
|
||||
readonly IShader shader;
|
||||
|
||||
readonly Vertex[] vertices;
|
||||
int nv = 0;
|
||||
|
||||
float lineWidth = 1f;
|
||||
|
||||
public LineRenderer(Renderer renderer, IShader shader)
|
||||
{
|
||||
this.renderer = renderer;
|
||||
@@ -30,10 +32,12 @@ namespace OpenRA.Graphics
|
||||
vertices = new Vertex[renderer.TempBufferSize];
|
||||
}
|
||||
|
||||
|
||||
public float LineWidth
|
||||
{
|
||||
get { return lineWidth; }
|
||||
get
|
||||
{
|
||||
return lineWidth;
|
||||
}
|
||||
set
|
||||
{
|
||||
if (LineWidth != value)
|
||||
@@ -77,11 +81,11 @@ namespace OpenRA.Graphics
|
||||
if (nv + 2 > renderer.TempBufferSize)
|
||||
Flush();
|
||||
|
||||
vertices[nv++] = new Vertex(start + offset,
|
||||
vertices[nv++] = new Vertex(start + Offset,
|
||||
startColor.R / 255.0f, startColor.G / 255.0f,
|
||||
startColor.B / 255.0f, startColor.A / 255.0f);
|
||||
|
||||
vertices[nv++] = new Vertex(end + offset,
|
||||
vertices[nv++] = new Vertex(end + Offset,
|
||||
endColor.R / 255.0f, endColor.G / 255.0f,
|
||||
endColor.B / 255.0f, endColor.A / 255.0f);
|
||||
}
|
||||
@@ -100,7 +104,7 @@ namespace OpenRA.Graphics
|
||||
var yc = (r.Bottom + r.Top) / 2;
|
||||
for (var y = r.Top; y <= r.Bottom; y++)
|
||||
{
|
||||
var dx = a * (float)(Math.Sqrt(1 - (y - yc) * (y - yc) / b / b));
|
||||
var dx = a * (float)Math.Sqrt(1 - (y - yc) * (y - yc) / b / b);
|
||||
DrawLine(new float2(xc - dx, y), new float2(xc + dx, y), color, color);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,8 +14,8 @@ namespace OpenRA.Graphics
|
||||
{
|
||||
public class QuadRenderer : Renderer.IBatchRenderer
|
||||
{
|
||||
Renderer renderer;
|
||||
IShader shader;
|
||||
readonly Renderer renderer;
|
||||
readonly IShader shader;
|
||||
|
||||
readonly Vertex[] vertices;
|
||||
int nv = 0;
|
||||
|
||||
@@ -11,7 +11,6 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using OpenRA.Support;
|
||||
@@ -20,10 +19,6 @@ namespace OpenRA.Graphics
|
||||
{
|
||||
public sealed class Renderer : IDisposable
|
||||
{
|
||||
internal int SheetSize { get; private set; }
|
||||
internal int TempBufferSize { get; private set; }
|
||||
internal int TempBufferCount { get; private set; }
|
||||
|
||||
public SpriteRenderer WorldSpriteRenderer { get; private set; }
|
||||
public SpriteRenderer WorldRgbaSpriteRenderer { get; private set; }
|
||||
public QuadRenderer WorldQuadRenderer { get; private set; }
|
||||
@@ -32,49 +27,77 @@ namespace OpenRA.Graphics
|
||||
public LineRenderer LineRenderer { get; private set; }
|
||||
public SpriteRenderer RgbaSpriteRenderer { get; private set; }
|
||||
public SpriteRenderer SpriteRenderer { get; private set; }
|
||||
public IReadOnlyDictionary<string, SpriteFont> Fonts;
|
||||
|
||||
Queue<IVertexBuffer<Vertex>> tempBuffers = new Queue<IVertexBuffer<Vertex>>();
|
||||
internal IGraphicsDevice Device { get; private set; }
|
||||
internal int SheetSize { get; private set; }
|
||||
internal int TempBufferSize { get; private set; }
|
||||
internal int TempBufferCount { get; private set; }
|
||||
|
||||
public Dictionary<string, SpriteFont> Fonts;
|
||||
Stack<Rectangle> scissorState;
|
||||
readonly Queue<IVertexBuffer<Vertex>> tempBuffers = new Queue<IVertexBuffer<Vertex>>();
|
||||
readonly Stack<Rectangle> scissorState = new Stack<Rectangle>();
|
||||
|
||||
Size? lastResolution;
|
||||
int2? lastScroll;
|
||||
float? lastZoom;
|
||||
ITexture currentPaletteTexture;
|
||||
IBatchRenderer currentBatchRenderer;
|
||||
|
||||
public Renderer(GraphicSettings graphicSettings, ServerSettings serverSettings)
|
||||
{
|
||||
Initialize(graphicSettings, serverSettings);
|
||||
var resolution = GetResolution(graphicSettings);
|
||||
|
||||
var rendererName = serverSettings.Dedicated ? "Null" : graphicSettings.Renderer;
|
||||
var rendererPath = Platform.ResolvePath(".", "OpenRA.Renderer." + rendererName + ".dll");
|
||||
|
||||
Device = CreateDevice(Assembly.LoadFile(rendererPath), resolution.Width, resolution.Height, graphicSettings.Mode);
|
||||
|
||||
TempBufferSize = graphicSettings.BatchSize;
|
||||
TempBufferCount = graphicSettings.NumTempBuffers;
|
||||
SheetSize = graphicSettings.SheetSize;
|
||||
scissorState = new Stack<Rectangle>();
|
||||
|
||||
WorldSpriteRenderer = new SpriteRenderer(this, device.CreateShader("shp"));
|
||||
WorldRgbaSpriteRenderer = new SpriteRenderer(this, device.CreateShader("rgba"));
|
||||
WorldLineRenderer = new LineRenderer(this, device.CreateShader("line"));
|
||||
WorldVoxelRenderer = new VoxelRenderer(this, device.CreateShader("vxl"));
|
||||
LineRenderer = new LineRenderer(this, device.CreateShader("line"));
|
||||
WorldQuadRenderer = new QuadRenderer(this, device.CreateShader("line"));
|
||||
RgbaSpriteRenderer = new SpriteRenderer(this, device.CreateShader("rgba"));
|
||||
SpriteRenderer = new SpriteRenderer(this, device.CreateShader("shp"));
|
||||
WorldSpriteRenderer = new SpriteRenderer(this, Device.CreateShader("shp"));
|
||||
WorldRgbaSpriteRenderer = new SpriteRenderer(this, Device.CreateShader("rgba"));
|
||||
WorldLineRenderer = new LineRenderer(this, Device.CreateShader("line"));
|
||||
WorldVoxelRenderer = new VoxelRenderer(this, Device.CreateShader("vxl"));
|
||||
LineRenderer = new LineRenderer(this, Device.CreateShader("line"));
|
||||
WorldQuadRenderer = new QuadRenderer(this, Device.CreateShader("line"));
|
||||
RgbaSpriteRenderer = new SpriteRenderer(this, Device.CreateShader("rgba"));
|
||||
SpriteRenderer = new SpriteRenderer(this, Device.CreateShader("shp"));
|
||||
|
||||
for (var i = 0; i < TempBufferCount; i++)
|
||||
tempBuffers.Enqueue(device.CreateVertexBuffer(TempBufferSize));
|
||||
tempBuffers.Enqueue(Device.CreateVertexBuffer(TempBufferSize));
|
||||
}
|
||||
|
||||
static Size GetResolution(GraphicSettings graphicsSettings)
|
||||
{
|
||||
var size = (graphicsSettings.Mode == WindowMode.Windowed)
|
||||
? graphicsSettings.WindowedSize
|
||||
: graphicsSettings.FullscreenSize;
|
||||
return new Size(size.X, size.Y);
|
||||
}
|
||||
|
||||
static IGraphicsDevice CreateDevice(Assembly rendererDll, int width, int height, WindowMode window)
|
||||
{
|
||||
foreach (RendererAttribute r in rendererDll.GetCustomAttributes(typeof(RendererAttribute), false))
|
||||
{
|
||||
var factory = (IDeviceFactory)r.Type.GetConstructor(Type.EmptyTypes).Invoke(null);
|
||||
return factory.Create(new Size(width, height), window);
|
||||
}
|
||||
|
||||
throw new InvalidOperationException("Renderer DLL is missing RendererAttribute to tell us what type to use!");
|
||||
}
|
||||
|
||||
public void InitializeFonts(Manifest m)
|
||||
{
|
||||
using (new Support.PerfTimer("SpriteFonts"))
|
||||
Fonts = m.Fonts.ToDictionary(x => x.Key, x => new SpriteFont(Platform.ResolvePath(x.Value.First), x.Value.Second));
|
||||
Fonts = m.Fonts.ToDictionary(x => x.Key,
|
||||
x => new SpriteFont(Platform.ResolvePath(x.Value.First), x.Value.Second)).AsReadOnly();
|
||||
}
|
||||
|
||||
internal IGraphicsDevice Device { get { return device; } }
|
||||
|
||||
Size? lastResolution;
|
||||
int2? lastScroll;
|
||||
float? lastZoom;
|
||||
|
||||
public void BeginFrame(int2 scroll, float zoom)
|
||||
{
|
||||
device.Clear();
|
||||
Device.Clear();
|
||||
|
||||
var resolutionChanged = lastResolution != Resolution;
|
||||
if (resolutionChanged)
|
||||
@@ -98,7 +121,6 @@ namespace OpenRA.Graphics
|
||||
}
|
||||
}
|
||||
|
||||
ITexture currentPaletteTexture;
|
||||
public void SetPalette(HardwarePalette palette)
|
||||
{
|
||||
if (palette.Texture == currentPaletteTexture)
|
||||
@@ -117,8 +139,8 @@ namespace OpenRA.Graphics
|
||||
public void EndFrame(IInputHandler inputHandler)
|
||||
{
|
||||
Flush();
|
||||
device.PumpInput(inputHandler);
|
||||
device.Present();
|
||||
Device.PumpInput(inputHandler);
|
||||
Device.Present();
|
||||
}
|
||||
|
||||
public void DrawBatch<T>(IVertexBuffer<T> vertices,
|
||||
@@ -126,7 +148,7 @@ namespace OpenRA.Graphics
|
||||
where T : struct
|
||||
{
|
||||
vertices.Bind();
|
||||
device.DrawPrimitives(type, firstVertex, numVertices);
|
||||
Device.DrawPrimitives(type, firstVertex, numVertices);
|
||||
PerfHistory.Increment("batches", 1);
|
||||
}
|
||||
|
||||
@@ -137,58 +159,28 @@ namespace OpenRA.Graphics
|
||||
|
||||
public void SetLineWidth(float width)
|
||||
{
|
||||
device.SetLineWidth(width);
|
||||
Device.SetLineWidth(width);
|
||||
}
|
||||
|
||||
static IGraphicsDevice device;
|
||||
|
||||
public Size Resolution { get { return device.WindowSize; } }
|
||||
|
||||
void Initialize(GraphicSettings graphicSettings, ServerSettings serverSettings)
|
||||
{
|
||||
var resolution = GetResolution(graphicSettings);
|
||||
|
||||
var rendererName = serverSettings.Dedicated ? "Null" : graphicSettings.Renderer;
|
||||
var rendererPath = Platform.ResolvePath(".", "OpenRA.Renderer." + rendererName + ".dll");
|
||||
|
||||
device = CreateDevice(Assembly.LoadFile(rendererPath), resolution.Width, resolution.Height, graphicSettings.Mode);
|
||||
}
|
||||
|
||||
static Size GetResolution(GraphicSettings graphicsSettings)
|
||||
{
|
||||
var size = (graphicsSettings.Mode == WindowMode.Windowed)
|
||||
? graphicsSettings.WindowedSize
|
||||
: graphicsSettings.FullscreenSize;
|
||||
return new Size(size.X, size.Y);
|
||||
}
|
||||
|
||||
static IGraphicsDevice CreateDevice(Assembly rendererDll, int width, int height, WindowMode window)
|
||||
{
|
||||
foreach (RendererAttribute r in rendererDll.GetCustomAttributes(typeof(RendererAttribute), false))
|
||||
{
|
||||
var factory = (IDeviceFactory)r.Type.GetConstructor(Type.EmptyTypes).Invoke(null);
|
||||
return factory.Create(new Size(width, height), window);
|
||||
}
|
||||
|
||||
throw new InvalidOperationException("Renderer DLL is missing RendererAttribute to tell us what type to use!");
|
||||
}
|
||||
public Size Resolution { get { return Device.WindowSize; } }
|
||||
|
||||
internal IVertexBuffer<Vertex> GetTempVertexBuffer()
|
||||
{
|
||||
var ret = tempBuffers.Dequeue();
|
||||
tempBuffers.Enqueue(ret);
|
||||
return ret;
|
||||
return tempBuffers.Peek();
|
||||
}
|
||||
|
||||
public interface IBatchRenderer { void Flush(); }
|
||||
|
||||
IBatchRenderer currentBatchRenderer;
|
||||
public IBatchRenderer CurrentBatchRenderer
|
||||
{
|
||||
get { return currentBatchRenderer; }
|
||||
get
|
||||
{
|
||||
return currentBatchRenderer;
|
||||
}
|
||||
set
|
||||
{
|
||||
if (currentBatchRenderer == value) return;
|
||||
if (currentBatchRenderer == value)
|
||||
return;
|
||||
if (currentBatchRenderer != null)
|
||||
currentBatchRenderer.Flush();
|
||||
currentBatchRenderer = value;
|
||||
@@ -235,12 +227,12 @@ namespace OpenRA.Graphics
|
||||
|
||||
public void GrabWindowMouseFocus()
|
||||
{
|
||||
device.GrabWindowMouseFocus();
|
||||
Device.GrabWindowMouseFocus();
|
||||
}
|
||||
|
||||
public void ReleaseWindowMouseFocus()
|
||||
{
|
||||
device.ReleaseWindowMouseFocus();
|
||||
Device.ReleaseWindowMouseFocus();
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
|
||||
@@ -32,12 +32,13 @@ namespace OpenRA.Graphics
|
||||
public sealed class SheetBuilder : IDisposable
|
||||
{
|
||||
readonly List<Sheet> sheets = new List<Sheet>();
|
||||
readonly SheetType type;
|
||||
readonly Func<Sheet> allocateSheet;
|
||||
|
||||
Sheet current;
|
||||
TextureChannel channel;
|
||||
SheetType type;
|
||||
int rowHeight = 0;
|
||||
Point p;
|
||||
Func<Sheet> allocateSheet;
|
||||
|
||||
public static Sheet AllocateSheet(int sheetSize)
|
||||
{
|
||||
|
||||
@@ -22,7 +22,7 @@ namespace OpenRA.Graphics
|
||||
static Library library = new Library();
|
||||
static SheetBuilder builder;
|
||||
|
||||
int size;
|
||||
readonly int size;
|
||||
string name;
|
||||
|
||||
public SpriteFont(string name, int size)
|
||||
@@ -114,7 +114,6 @@ namespace OpenRA.Graphics
|
||||
|
||||
// A new bitmap is generated each time this property is accessed, so we do need to dispose it.
|
||||
using (var bitmap = face.Glyph.Bitmap)
|
||||
{
|
||||
unsafe
|
||||
{
|
||||
var p = (byte*)bitmap.Buffer;
|
||||
@@ -136,7 +135,7 @@ namespace OpenRA.Graphics
|
||||
p += bitmap.Pitch;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
s.sheet.CommitData();
|
||||
|
||||
|
||||
@@ -14,8 +14,8 @@ namespace OpenRA.Graphics
|
||||
{
|
||||
public class SpriteRenderer : Renderer.IBatchRenderer
|
||||
{
|
||||
Renderer renderer;
|
||||
IShader shader;
|
||||
readonly Renderer renderer;
|
||||
readonly IShader shader;
|
||||
|
||||
readonly Vertex[] vertices;
|
||||
Sheet currentSheet;
|
||||
|
||||
@@ -15,10 +15,9 @@ namespace OpenRA.Graphics
|
||||
{
|
||||
sealed class TerrainRenderer : IDisposable
|
||||
{
|
||||
IVertexBuffer<Vertex> vertexBuffer;
|
||||
|
||||
World world;
|
||||
Map map;
|
||||
readonly IVertexBuffer<Vertex> vertexBuffer;
|
||||
readonly World world;
|
||||
readonly Map map;
|
||||
|
||||
public TerrainRenderer(World world, WorldRenderer wr)
|
||||
{
|
||||
|
||||
@@ -18,9 +18,9 @@ namespace OpenRA.Graphics
|
||||
{
|
||||
public sealed class Theater : IDisposable
|
||||
{
|
||||
SheetBuilder sheetBuilder;
|
||||
Dictionary<ushort, Sprite[]> templates;
|
||||
Sprite missingTile;
|
||||
readonly Dictionary<ushort, Sprite[]> templates = new Dictionary<ushort, Sprite[]>();
|
||||
readonly SheetBuilder sheetBuilder;
|
||||
readonly Sprite missingTile;
|
||||
TileSet tileset;
|
||||
|
||||
public Theater(TileSet tileset)
|
||||
|
||||
@@ -34,14 +34,16 @@ namespace OpenRA.Graphics
|
||||
|
||||
public sealed class VoxelLoader : IDisposable
|
||||
{
|
||||
SheetBuilder sheetBuilder;
|
||||
static readonly float[] ChannelSelect = { 0.75f, 0.25f, -0.25f, -0.75f };
|
||||
|
||||
Cache<Pair<string,string>, Voxel> voxels;
|
||||
readonly List<Vertex[]> vertices = new List<Vertex[]>();
|
||||
readonly Cache<Pair<string, string>, Voxel> voxels;
|
||||
IVertexBuffer<Vertex> vertexBuffer;
|
||||
List<Vertex[]> vertices;
|
||||
int totalVertexCount;
|
||||
int cachedVertexCount;
|
||||
|
||||
SheetBuilder sheetBuilder;
|
||||
|
||||
static SheetBuilder CreateSheetBuilder()
|
||||
{
|
||||
var allocated = false;
|
||||
@@ -66,7 +68,6 @@ namespace OpenRA.Graphics
|
||||
sheetBuilder = CreateSheetBuilder();
|
||||
}
|
||||
|
||||
static float[] channelSelect = { 0.75f, 0.25f, -0.25f, -0.75f };
|
||||
Vertex[] GenerateSlicePlane(int su, int sv, Func<int, int, VxlElement> first, Func<int, int, VxlElement> second, Func<int, int, float[]> coord)
|
||||
{
|
||||
var colors = new byte[su * sv];
|
||||
@@ -87,8 +88,8 @@ namespace OpenRA.Graphics
|
||||
Util.FastCopyIntoChannel(s, 1, normals);
|
||||
s.sheet.CommitData();
|
||||
|
||||
var channelP =channelSelect[(int)s.channel];
|
||||
var channelC = channelSelect[(int)s.channel + 1];
|
||||
var channelP = ChannelSelect[(int)s.channel];
|
||||
var channelC = ChannelSelect[(int)s.channel + 1];
|
||||
return new Vertex[4]
|
||||
{
|
||||
new Vertex(coord(0, 0), s.left, s.top, channelP, channelC),
|
||||
|
||||
@@ -34,31 +34,28 @@ namespace OpenRA.Graphics
|
||||
|
||||
public sealed class VoxelRenderer : IDisposable
|
||||
{
|
||||
Renderer renderer;
|
||||
IShader shader;
|
||||
// Static constants
|
||||
static readonly float[] ShadowDiffuse = new float[] { 0, 0, 0 };
|
||||
static readonly float[] ShadowAmbient = new float[] { 1, 1, 1 };
|
||||
static readonly float2 SpritePadding = new float2(2, 2);
|
||||
static readonly float[] ZeroVector = new float[] { 0, 0, 0, 1 };
|
||||
static readonly float[] ZVector = new float[] { 0, 0, 1, 1 };
|
||||
static readonly float[] FlipMtx = Util.ScaleMatrix(1, -1, 1);
|
||||
static readonly float[] ShadowScaleFlipMtx = Util.ScaleMatrix(2, -2, 2);
|
||||
|
||||
readonly Renderer renderer;
|
||||
readonly IShader shader;
|
||||
|
||||
readonly Dictionary<Sheet, IFrameBuffer> mappedBuffers = new Dictionary<Sheet, IFrameBuffer>();
|
||||
readonly Stack<KeyValuePair<Sheet, IFrameBuffer>> unmappedBuffers = new Stack<KeyValuePair<Sheet, IFrameBuffer>>();
|
||||
readonly List<Pair<Sheet, Action>> doRender = new List<Pair<Sheet, Action>>();
|
||||
|
||||
SheetBuilder sheetBuilder;
|
||||
Dictionary<Sheet, IFrameBuffer> mappedBuffers;
|
||||
Stack<KeyValuePair<Sheet, IFrameBuffer>> unmappedBuffers;
|
||||
List<Pair<Sheet, Action>> doRender;
|
||||
|
||||
// Static constants
|
||||
static readonly float[] shadowDiffuse = new float[] {0,0,0};
|
||||
static readonly float[] shadowAmbient = new float[] {1,1,1};
|
||||
static readonly float2 spritePadding = new float2(2, 2);
|
||||
static readonly float[] zeroVector = new float[] {0,0,0,1};
|
||||
static readonly float[] zVector = new float[] {0,0,1,1};
|
||||
static readonly float[] flipMtx = Util.ScaleMatrix(1, -1, 1);
|
||||
static readonly float[] shadowScaleFlipMtx = Util.ScaleMatrix(2, -2, 2);
|
||||
|
||||
public VoxelRenderer(Renderer renderer, IShader shader)
|
||||
{
|
||||
this.renderer = renderer;
|
||||
this.shader = shader;
|
||||
|
||||
mappedBuffers = new Dictionary<Sheet, IFrameBuffer>();
|
||||
unmappedBuffers = new Stack<KeyValuePair<Sheet, IFrameBuffer>>();
|
||||
doRender = new List<Pair<Sheet, Action>>();
|
||||
}
|
||||
|
||||
public void SetPalette(ITexture palette)
|
||||
@@ -128,18 +125,18 @@ namespace OpenRA.Graphics
|
||||
}
|
||||
|
||||
// Inflate rects to ensure rendering is within bounds
|
||||
tl -= spritePadding;
|
||||
br += spritePadding;
|
||||
stl -= spritePadding;
|
||||
sbr += spritePadding;
|
||||
tl -= SpritePadding;
|
||||
br += SpritePadding;
|
||||
stl -= SpritePadding;
|
||||
sbr += SpritePadding;
|
||||
|
||||
// Corners of the shadow quad, in shadow-space
|
||||
var corners = new float[][]
|
||||
{
|
||||
new float[] {stl.X, stl.Y, 0, 1},
|
||||
new float[] {sbr.X, sbr.Y, 0, 1},
|
||||
new float[] {sbr.X, stl.Y, 0, 1},
|
||||
new float[] {stl.X, sbr.Y, 0, 1}
|
||||
new[] { stl.X, stl.Y, 0, 1 },
|
||||
new[] { sbr.X, sbr.Y, 0, 1 },
|
||||
new[] { sbr.X, stl.Y, 0, 1 },
|
||||
new[] { stl.X, sbr.Y, 0, 1 }
|
||||
};
|
||||
|
||||
var shadowScreenTransform = Util.MatrixMultiply(cameraTransform, invShadowTransform);
|
||||
@@ -171,8 +168,8 @@ namespace OpenRA.Graphics
|
||||
|
||||
var translateMtx = Util.TranslationMatrix(spriteCenter.X - spriteOffset.X, renderer.SheetSize - (spriteCenter.Y - spriteOffset.Y), 0);
|
||||
var shadowTranslateMtx = Util.TranslationMatrix(shadowCenter.X - shadowSpriteOffset.X, renderer.SheetSize - (shadowCenter.Y - shadowSpriteOffset.Y), 0);
|
||||
var correctionTransform = Util.MatrixMultiply(translateMtx, flipMtx);
|
||||
var shadowCorrectionTransform = Util.MatrixMultiply(shadowTranslateMtx, shadowScaleFlipMtx);
|
||||
var correctionTransform = Util.MatrixMultiply(translateMtx, FlipMtx);
|
||||
var shadowCorrectionTransform = Util.MatrixMultiply(shadowTranslateMtx, ShadowScaleFlipMtx);
|
||||
|
||||
doRender.Add(Pair.New<Sheet, Action>(sprite.sheet, () =>
|
||||
{
|
||||
@@ -209,12 +206,12 @@ namespace OpenRA.Graphics
|
||||
|
||||
// Disable shadow normals by forcing zero diffuse and identity ambient light
|
||||
Render(rd, Util.MatrixMultiply(shadow, t), lightDirection,
|
||||
shadowAmbient, shadowDiffuse, shadowPalette.Index, normals.Index);
|
||||
ShadowAmbient, ShadowDiffuse, shadowPalette.Index, normals.Index);
|
||||
}
|
||||
}
|
||||
}));
|
||||
|
||||
var screenLightVector = Util.MatrixVectorMultiply(invShadowTransform, zVector);
|
||||
var screenLightVector = Util.MatrixVectorMultiply(invShadowTransform, ZVector);
|
||||
screenLightVector = Util.MatrixVectorMultiply(cameraTransform, screenLightVector);
|
||||
return new VoxelRenderProxy(sprite, shadowSprite, screenCorners, -screenLightVector[2] / screenLightVector[1]);
|
||||
}
|
||||
@@ -236,8 +233,8 @@ namespace OpenRA.Graphics
|
||||
|
||||
static float[] ExtractRotationVector(float[] mtx)
|
||||
{
|
||||
var tVec = Util.MatrixVectorMultiply(mtx, zVector);
|
||||
var tOrigin = Util.MatrixVectorMultiply(mtx, zeroVector);
|
||||
var tVec = Util.MatrixVectorMultiply(mtx, ZVector);
|
||||
var tOrigin = Util.MatrixVectorMultiply(mtx, ZeroVector);
|
||||
tVec[0] -= tOrigin[0] * tVec[3] / tOrigin[3];
|
||||
tVec[1] -= tOrigin[1] * tVec[3] / tOrigin[3];
|
||||
tVec[2] -= tOrigin[2] * tVec[3] / tOrigin[3];
|
||||
|
||||
@@ -35,18 +35,16 @@ namespace OpenRA.Graphics
|
||||
public readonly Theater Theater;
|
||||
public Viewport Viewport { get; private set; }
|
||||
|
||||
readonly HardwarePalette palette = new HardwarePalette();
|
||||
readonly Dictionary<string, PaletteReference> palettes = new Dictionary<string, PaletteReference>();
|
||||
readonly TerrainRenderer terrainRenderer;
|
||||
readonly HardwarePalette palette;
|
||||
readonly Dictionary<string, PaletteReference> palettes;
|
||||
readonly Lazy<DeveloperMode> devTrait;
|
||||
|
||||
internal WorldRenderer(World world)
|
||||
{
|
||||
this.world = world;
|
||||
Viewport = new Viewport(this, world.Map);
|
||||
palette = new HardwarePalette();
|
||||
|
||||
palettes = new Dictionary<string, PaletteReference>();
|
||||
foreach (var pal in world.traitDict.ActorsWithTrait<ILoadsPalettes>())
|
||||
pal.Trait.LoadPalettes(this);
|
||||
|
||||
|
||||
@@ -25,9 +25,9 @@ namespace OpenRA
|
||||
public readonly WidgetLoader WidgetLoader;
|
||||
public readonly MapCache MapCache;
|
||||
public readonly ISpriteLoader[] SpriteLoaders;
|
||||
public ILoadScreen LoadScreen = null;
|
||||
public VoxelLoader VoxelLoader;
|
||||
public readonly RulesetCache RulesetCache;
|
||||
public ILoadScreen LoadScreen { get; private set; }
|
||||
public VoxelLoader VoxelLoader { get; private set; }
|
||||
public CursorProvider CursorProvider { get; private set; }
|
||||
|
||||
Lazy<Ruleset> defaultRules;
|
||||
|
||||
@@ -11,8 +11,6 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using OpenRA.FileSystem;
|
||||
using OpenRA.Graphics;
|
||||
using OpenRA.Widgets;
|
||||
|
||||
@@ -29,7 +27,7 @@ namespace OpenRA.Mods.Cnc
|
||||
Sprite nodLogo, gdiLogo, evaLogo, brightBlock, dimBlock;
|
||||
Rectangle bounds;
|
||||
Renderer r;
|
||||
NullInputHandler nih = new NullInputHandler();
|
||||
readonly NullInputHandler nih = new NullInputHandler();
|
||||
|
||||
public void Init(Manifest m, Dictionary<string, string> info)
|
||||
{
|
||||
|
||||
@@ -11,8 +11,6 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using OpenRA.FileSystem;
|
||||
using OpenRA.Graphics;
|
||||
using OpenRA.Widgets;
|
||||
|
||||
|
||||
@@ -20,16 +20,16 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
{
|
||||
public class ModBrowserLogic
|
||||
{
|
||||
Widget modList;
|
||||
ButtonWidget modTemplate;
|
||||
ModMetadata[] allMods;
|
||||
readonly Widget modList;
|
||||
readonly ButtonWidget modTemplate;
|
||||
readonly ModMetadata[] allMods;
|
||||
readonly Dictionary<string, Sprite> previews = new Dictionary<string, Sprite>();
|
||||
readonly Dictionary<string, Sprite> logos = new Dictionary<string, Sprite>();
|
||||
readonly SheetBuilder sheetBuilder;
|
||||
ModMetadata selectedMod;
|
||||
string selectedAuthor;
|
||||
string selectedDescription;
|
||||
int modOffset = 0;
|
||||
Dictionary<string, Sprite> previews;
|
||||
Dictionary<string, Sprite> logos;
|
||||
|
||||
[ObjectCreator.UseCtor]
|
||||
public ModBrowserLogic(Widget widget)
|
||||
@@ -65,8 +65,6 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
};
|
||||
|
||||
sheetBuilder = new SheetBuilder(SheetType.BGRA);
|
||||
previews = new Dictionary<string, Sprite>();
|
||||
logos = new Dictionary<string, Sprite>();
|
||||
allMods = ModMetadata.AllMods.Values.Where(m => m.Id != "modchooser")
|
||||
.OrderBy(m => m.Title)
|
||||
.ToArray();
|
||||
|
||||
@@ -130,6 +130,7 @@ namespace OpenRA.Renderer.Sdl2
|
||||
bitmap = new Bitmap(bitmap, bitmap.Size.NextPowerOf2());
|
||||
allocatedBitmap = true;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
size = new Size(bitmap.Width, bitmap.Height);
|
||||
|
||||
Reference in New Issue
Block a user