Convert RgbaColorRenderer to TriangleList.

This commit is contained in:
Paul Chote
2015-12-19 22:06:55 +00:00
parent 3474da0ecc
commit af344452ea

View File

@@ -30,7 +30,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()
@@ -49,7 +49,7 @@ namespace OpenRA.Graphics
{ {
renderer.CurrentBatchRenderer = this; renderer.CurrentBatchRenderer = this;
if (nv + 4 > renderer.TempBufferSize) if (nv + 6 > renderer.TempBufferSize)
Flush(); Flush();
var delta = (end - start) / (end - start).Length; var delta = (end - start) / (end - start).Length;
@@ -70,14 +70,16 @@ namespace OpenRA.Graphics
vertices[nv++] = new Vertex(start - corner + Offset, sr, sg, sb, sa); vertices[nv++] = new Vertex(start - corner + Offset, sr, sg, sb, sa);
vertices[nv++] = new Vertex(start + corner + Offset, sr, sg, sb, sa); vertices[nv++] = new Vertex(start + corner + Offset, sr, sg, sb, sa);
vertices[nv++] = new Vertex(end + corner + Offset, er, eg, eb, ea); vertices[nv++] = new Vertex(end + corner + Offset, er, eg, eb, ea);
vertices[nv++] = new Vertex(end + corner + Offset, er, eg, eb, ea);
vertices[nv++] = new Vertex(end - corner + Offset, er, eg, eb, ea); vertices[nv++] = new Vertex(end - corner + Offset, er, eg, eb, ea);
vertices[nv++] = new Vertex(start - corner + Offset, sr, sg, sb, sa);
} }
public void DrawLine(float2 start, float2 end, float width, Color color) public void DrawLine(float2 start, float2 end, float width, Color color)
{ {
renderer.CurrentBatchRenderer = this; renderer.CurrentBatchRenderer = this;
if (nv + 4 > renderer.TempBufferSize) if (nv + 6 > renderer.TempBufferSize)
Flush(); Flush();
var delta = (end - start) / (end - start).Length; var delta = (end - start) / (end - start).Length;
@@ -92,7 +94,9 @@ namespace OpenRA.Graphics
vertices[nv++] = new Vertex(start - corner + Offset, r, g, b, a); vertices[nv++] = new Vertex(start - corner + Offset, r, g, b, a);
vertices[nv++] = new Vertex(start + corner + Offset, r, g, b, a); vertices[nv++] = new Vertex(start + corner + Offset, r, g, b, a);
vertices[nv++] = new Vertex(end + corner + Offset, r, g, b, a); vertices[nv++] = new Vertex(end + corner + Offset, r, g, b, a);
vertices[nv++] = new Vertex(end + corner + Offset, r, g, b, a);
vertices[nv++] = new Vertex(end - corner + Offset, r, g, b, a); vertices[nv++] = new Vertex(end - corner + Offset, r, g, b, a);
vertices[nv++] = new Vertex(start - corner + Offset, r, g, b, a);
} }
/// <summary> /// <summary>
@@ -160,13 +164,15 @@ namespace OpenRA.Graphics
var cd = closed || i < limit ? IntersectionOf(end - corner, dir, end - nextCorner, nextDir) : end - corner; var cd = closed || i < limit ? IntersectionOf(end - corner, dir, end - nextCorner, nextDir) : end - corner;
// Fill segment // Fill segment
if (nv + 4 > renderer.TempBufferSize) if (nv + 6 > renderer.TempBufferSize)
Flush(); Flush();
vertices[nv++] = new Vertex(ca + Offset, r, g, b, a); vertices[nv++] = new Vertex(ca + Offset, r, g, b, a);
vertices[nv++] = new Vertex(cb + Offset, r, g, b, a); vertices[nv++] = new Vertex(cb + Offset, r, g, b, a);
vertices[nv++] = new Vertex(cc + Offset, r, g, b, a); vertices[nv++] = new Vertex(cc + Offset, r, g, b, a);
vertices[nv++] = new Vertex(cc + Offset, r, g, b, a);
vertices[nv++] = new Vertex(cd + Offset, r, g, b, a); vertices[nv++] = new Vertex(cd + Offset, r, g, b, a);
vertices[nv++] = new Vertex(ca + Offset, r, g, b, a);
// Advance line segment // Advance line segment
end = next; end = next;
@@ -215,7 +221,7 @@ namespace OpenRA.Graphics
{ {
renderer.CurrentBatchRenderer = this; renderer.CurrentBatchRenderer = this;
if (nv + 4 > renderer.TempBufferSize) if (nv + 6 > renderer.TempBufferSize)
Flush(); Flush();
color = Util.PremultiplyAlpha(color); color = Util.PremultiplyAlpha(color);
@@ -227,7 +233,9 @@ namespace OpenRA.Graphics
vertices[nv++] = new Vertex(a + Offset, cr, cg, cb, ca); vertices[nv++] = new Vertex(a + Offset, cr, cg, cb, ca);
vertices[nv++] = new Vertex(b + Offset, cr, cg, cb, ca); vertices[nv++] = new Vertex(b + Offset, cr, cg, cb, ca);
vertices[nv++] = new Vertex(c + Offset, cr, cg, cb, ca); vertices[nv++] = new Vertex(c + Offset, cr, cg, cb, ca);
vertices[nv++] = new Vertex(c + Offset, cr, cg, cb, ca);
vertices[nv++] = new Vertex(d + Offset, cr, cg, cb, ca); vertices[nv++] = new Vertex(d + Offset, cr, cg, cb, ca);
vertices[nv++] = new Vertex(a + Offset, cr, cg, cb, ca);
} }
public void FillEllipse(RectangleF r, Color color, int vertices = 32) public void FillEllipse(RectangleF r, Color color, int vertices = 32)