Convert SpriteRenderer to TriangleList.

This commit is contained in:
Paul Chote
2015-12-19 22:19:04 +00:00
parent af344452ea
commit a754a96b77
3 changed files with 12 additions and 10 deletions

View File

@@ -29,7 +29,7 @@ namespace OpenRA.Graphics
this.renderer = renderer; this.renderer = renderer;
this.shader = shader; this.shader = shader;
vertices = new Vertex[renderer.TempBufferSize]; vertices = new Vertex[renderer.TempBufferSize];
renderAction = () => renderer.DrawBatch(vertices, nv, PrimitiveType.QuadList); renderAction = () => renderer.DrawBatch(vertices, nv, PrimitiveType.TriangleList);
} }
public void Flush() public void Flush()
@@ -51,7 +51,7 @@ namespace OpenRA.Graphics
{ {
renderer.CurrentBatchRenderer = this; renderer.CurrentBatchRenderer = this;
if (s.BlendMode != currentBlend || s.Sheet != currentSheet || nv + 4 > renderer.TempBufferSize) if (s.BlendMode != currentBlend || s.Sheet != currentSheet || nv + 6 > renderer.TempBufferSize)
Flush(); Flush();
currentBlend = s.BlendMode; currentBlend = s.BlendMode;
@@ -72,7 +72,7 @@ namespace OpenRA.Graphics
{ {
SetRenderStateForSprite(s); SetRenderStateForSprite(s);
Util.FastCreateQuad(vertices, location + s.FractionalOffset * size, s, paletteTextureIndex, nv, size); Util.FastCreateQuad(vertices, location + s.FractionalOffset * size, s, paletteTextureIndex, nv, size);
nv += 4; nv += 6;
} }
// For RGBASpriteRenderer, which doesn't use palettes // For RGBASpriteRenderer, which doesn't use palettes
@@ -90,14 +90,14 @@ namespace OpenRA.Graphics
{ {
SetRenderStateForSprite(s); SetRenderStateForSprite(s);
Util.FastCreateQuad(vertices, a, b, c, d, s, 0, nv); Util.FastCreateQuad(vertices, a, b, c, d, s, 0, nv);
nv += 4; nv += 6;
} }
public void DrawSprite(Sprite s, Vertex[] sourceVertices, int offset) public void DrawSprite(Sprite s, Vertex[] sourceVertices, int offset)
{ {
SetRenderStateForSprite(s); SetRenderStateForSprite(s);
Array.Copy(sourceVertices, offset, vertices, nv, 4); Array.Copy(sourceVertices, offset, vertices, nv, 6);
nv += 4; nv += 6;
} }
public void DrawVertexBuffer(IVertexBuffer<Vertex> buffer, int start, int length, PrimitiveType type, Sheet sheet, BlendMode blendMode) public void DrawVertexBuffer(IVertexBuffer<Vertex> buffer, int start, int length, PrimitiveType type, Sheet sheet, BlendMode blendMode)

View File

@@ -44,7 +44,7 @@ namespace OpenRA.Graphics
this.palette = palette; this.palette = palette;
map = world.Map; map = world.Map;
rowStride = 4 * map.MapSize.X; rowStride = 6 * map.MapSize.X;
vertices = new Vertex[rowStride * map.MapSize.Y]; vertices = new Vertex[rowStride * map.MapSize.Y];
vertexBuffer = Game.Renderer.Device.CreateVertexBuffer(vertices.Length); vertexBuffer = Game.Renderer.Device.CreateVertexBuffer(vertices.Length);
@@ -87,7 +87,7 @@ namespace OpenRA.Graphics
else else
sprite = emptySprite; sprite = emptySprite;
var offset = rowStride * uv.V + 4 * uv.U; var offset = rowStride * uv.V + 6 * uv.U;
Util.FastCreateQuad(vertices, pos, sprite, palette.TextureIndex, offset, sprite.Size); Util.FastCreateQuad(vertices, pos, sprite, palette.TextureIndex, offset, sprite.Size);
dirtyRows.Add(uv.V); dirtyRows.Add(uv.V);
@@ -123,7 +123,7 @@ namespace OpenRA.Graphics
Game.Renderer.WorldSpriteRenderer.DrawVertexBuffer( Game.Renderer.WorldSpriteRenderer.DrawVertexBuffer(
vertexBuffer, rowStride * firstRow, rowStride * (lastRow - firstRow), vertexBuffer, rowStride * firstRow, rowStride * (lastRow - firstRow),
PrimitiveType.QuadList, Sheet, BlendMode); PrimitiveType.TriangleList, Sheet, BlendMode);
Game.Renderer.Flush(); Game.Renderer.Flush();
} }

View File

@@ -38,7 +38,9 @@ namespace OpenRA.Graphics
vertices[nv] = new Vertex(a, r.Left, r.Top, paletteTextureIndex, attribC); vertices[nv] = new Vertex(a, r.Left, r.Top, paletteTextureIndex, attribC);
vertices[nv + 1] = new Vertex(b, r.Right, r.Top, paletteTextureIndex, attribC); vertices[nv + 1] = new Vertex(b, r.Right, r.Top, paletteTextureIndex, attribC);
vertices[nv + 2] = new Vertex(c, r.Right, r.Bottom, paletteTextureIndex, attribC); vertices[nv + 2] = new Vertex(c, r.Right, r.Bottom, paletteTextureIndex, attribC);
vertices[nv + 3] = new Vertex(d, r.Left, r.Bottom, paletteTextureIndex, attribC); vertices[nv + 3] = new Vertex(c, r.Right, r.Bottom, paletteTextureIndex, attribC);
vertices[nv + 4] = new Vertex(d, r.Left, r.Bottom, paletteTextureIndex, attribC);
vertices[nv + 5] = new Vertex(a, r.Left, r.Top, paletteTextureIndex, attribC);
} }
public static void FastCopyIntoChannel(Sprite dest, byte[] src) { FastCopyIntoChannel(dest, 0, src); } public static void FastCopyIntoChannel(Sprite dest, byte[] src) { FastCopyIntoChannel(dest, 0, src); }