add alpha channel to every possible blend mode

This commit is contained in:
Matthias Mailänder
2015-04-19 08:18:31 +02:00
parent 1b31001661
commit 63e4d40770
8 changed files with 25 additions and 34 deletions

View File

@@ -21,6 +21,7 @@ namespace OpenRA.Graphics
readonly Vertex[] vertices;
Sheet currentSheet;
BlendMode currentBlend = BlendMode.Alpha;
float currentAlpha = 1f;
int nv = 0;
public SpriteRenderer(Renderer renderer, IShader shader)
@@ -36,14 +37,14 @@ namespace OpenRA.Graphics
{
shader.SetTexture("DiffuseTexture", currentSheet.GetTexture());
renderer.Device.SetBlendMode(currentBlend);
renderer.Device.SetBlendMode(currentBlend, currentAlpha);
shader.Render(() =>
{
var vb = renderer.GetTempVertexBuffer();
vb.SetData(vertices, nv);
renderer.DrawBatch(vb, 0, nv, PrimitiveType.QuadList);
});
renderer.Device.SetBlendMode(BlendMode.None);
renderer.Device.SetBlendMode(BlendMode.None, currentAlpha);
nv = 0;
currentSheet = null;
@@ -54,9 +55,10 @@ namespace OpenRA.Graphics
{
renderer.CurrentBatchRenderer = this;
if (s.Sheet != currentSheet || s.BlendMode != currentBlend || nv + 4 > renderer.TempBufferSize)
if (s.Alpha != currentAlpha || s.BlendMode != currentBlend || s.Sheet != currentSheet || nv + 4 > renderer.TempBufferSize)
Flush();
currentAlpha = s.Alpha;
currentBlend = s.BlendMode;
currentSheet = s.Sheet;
}