Merge pull request #10249 from pchote/remove-legacy-gl
Replace deprecated OpenGL features with more modern replacements
This commit is contained in:
@@ -64,7 +64,6 @@ namespace OpenRA
|
|||||||
bool SetClipboardText(string text);
|
bool SetClipboardText(string text);
|
||||||
void DrawPrimitives(PrimitiveType type, int firstVertex, int numVertices);
|
void DrawPrimitives(PrimitiveType type, int firstVertex, int numVertices);
|
||||||
|
|
||||||
void SetLineWidth(float width);
|
|
||||||
void EnableScissor(int left, int top, int width, int height);
|
void EnableScissor(int left, int top, int width, int height);
|
||||||
void DisableScissor();
|
void DisableScissor();
|
||||||
|
|
||||||
@@ -123,7 +122,6 @@ namespace OpenRA
|
|||||||
PointList,
|
PointList,
|
||||||
LineList,
|
LineList,
|
||||||
TriangleList,
|
TriangleList,
|
||||||
QuadList,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public struct Range<T>
|
public struct Range<T>
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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); }
|
||||||
|
|||||||
@@ -89,12 +89,14 @@ namespace OpenRA.Graphics
|
|||||||
|
|
||||||
var channelP = ChannelSelect[(int)s.Channel];
|
var channelP = ChannelSelect[(int)s.Channel];
|
||||||
var channelC = ChannelSelect[(int)s.Channel + 1];
|
var channelC = ChannelSelect[(int)s.Channel + 1];
|
||||||
return new Vertex[4]
|
return new Vertex[6]
|
||||||
{
|
{
|
||||||
new Vertex(coord(0, 0), s.Left, s.Top, channelP, channelC),
|
new Vertex(coord(0, 0), s.Left, s.Top, channelP, channelC),
|
||||||
new Vertex(coord(su, 0), s.Right, s.Top, channelP, channelC),
|
new Vertex(coord(su, 0), s.Right, s.Top, channelP, channelC),
|
||||||
new Vertex(coord(su, sv), s.Right, s.Bottom, channelP, channelC),
|
new Vertex(coord(su, sv), s.Right, s.Bottom, channelP, channelC),
|
||||||
new Vertex(coord(0, sv), s.Left, s.Bottom, channelP, channelC)
|
new Vertex(coord(su, sv), s.Right, s.Bottom, channelP, channelC),
|
||||||
|
new Vertex(coord(0, sv), s.Left, s.Bottom, channelP, channelC),
|
||||||
|
new Vertex(coord(0, 0), s.Left, s.Top, channelP, channelC)
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -263,7 +263,7 @@ namespace OpenRA.Graphics
|
|||||||
shader.SetVec("AmbientLight", ambientLight, 3);
|
shader.SetVec("AmbientLight", ambientLight, 3);
|
||||||
shader.SetVec("DiffuseLight", diffuseLight, 3);
|
shader.SetVec("DiffuseLight", diffuseLight, 3);
|
||||||
|
|
||||||
shader.Render(() => renderer.DrawBatch(Game.ModData.VoxelLoader.VertexBuffer, renderData.Start, renderData.Count, PrimitiveType.QuadList));
|
shader.Render(() => renderer.DrawBatch(Game.ModData.VoxelLoader.VertexBuffer, renderData.Start, renderData.Count, PrimitiveType.TriangleList));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void BeginFrame()
|
public void BeginFrame()
|
||||||
|
|||||||
@@ -173,11 +173,6 @@ namespace OpenRA
|
|||||||
CurrentBatchRenderer = null;
|
CurrentBatchRenderer = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SetLineWidth(float width)
|
|
||||||
{
|
|
||||||
Device.SetLineWidth(width);
|
|
||||||
}
|
|
||||||
|
|
||||||
public Size Resolution { get { return Device.WindowSize; } }
|
public Size Resolution { get { return Device.WindowSize; } }
|
||||||
|
|
||||||
public interface IBatchRenderer { void Flush(); }
|
public interface IBatchRenderer { void Flush(); }
|
||||||
|
|||||||
@@ -91,9 +91,9 @@ namespace OpenRA.Platforms.Default
|
|||||||
throw new InvalidProgramException("Missing OpenGL extension GL_EXT_framebuffer_object. See graphics.log for details.");
|
throw new InvalidProgramException("Missing OpenGL extension GL_EXT_framebuffer_object. See graphics.log for details.");
|
||||||
}
|
}
|
||||||
|
|
||||||
GL.EnableClientState(ArrayCap.VertexArray);
|
GL.EnableVertexAttribArray(Shader.VertexPosAttributeIndex);
|
||||||
ErrorHandler.CheckGlError();
|
ErrorHandler.CheckGlError();
|
||||||
GL.EnableClientState(ArrayCap.TextureCoordArray);
|
GL.EnableVertexAttribArray(Shader.TexCoordAttributeIndex);
|
||||||
ErrorHandler.CheckGlError();
|
ErrorHandler.CheckGlError();
|
||||||
|
|
||||||
SDL.SDL_SetModState(SDL.SDL_Keymod.KMOD_NONE);
|
SDL.SDL_SetModState(SDL.SDL_Keymod.KMOD_NONE);
|
||||||
@@ -210,7 +210,6 @@ namespace OpenRA.Platforms.Default
|
|||||||
case PrimitiveType.PointList: return BeginMode.Points;
|
case PrimitiveType.PointList: return BeginMode.Points;
|
||||||
case PrimitiveType.LineList: return BeginMode.Lines;
|
case PrimitiveType.LineList: return BeginMode.Lines;
|
||||||
case PrimitiveType.TriangleList: return BeginMode.Triangles;
|
case PrimitiveType.TriangleList: return BeginMode.Triangles;
|
||||||
case PrimitiveType.QuadList: return BeginMode.Quads;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
throw new NotImplementedException();
|
throw new NotImplementedException();
|
||||||
@@ -332,13 +331,6 @@ namespace OpenRA.Platforms.Default
|
|||||||
ErrorHandler.CheckGlError();
|
ErrorHandler.CheckGlError();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SetLineWidth(float width)
|
|
||||||
{
|
|
||||||
VerifyThreadAffinity();
|
|
||||||
GL.LineWidth(width);
|
|
||||||
ErrorHandler.CheckGlError();
|
|
||||||
}
|
|
||||||
|
|
||||||
public Bitmap TakeScreenshot()
|
public Bitmap TakeScreenshot()
|
||||||
{
|
{
|
||||||
var rect = new Rectangle(Point.Empty, WindowSize);
|
var rect = new Rectangle(Point.Empty, WindowSize);
|
||||||
|
|||||||
@@ -18,6 +18,9 @@ namespace OpenRA.Platforms.Default
|
|||||||
{
|
{
|
||||||
class Shader : ThreadAffine, IShader
|
class Shader : ThreadAffine, IShader
|
||||||
{
|
{
|
||||||
|
public const int VertexPosAttributeIndex = 0;
|
||||||
|
public const int TexCoordAttributeIndex = 1;
|
||||||
|
|
||||||
readonly Dictionary<string, int> samplers = new Dictionary<string, int>();
|
readonly Dictionary<string, int> samplers = new Dictionary<string, int>();
|
||||||
readonly Dictionary<int, ITexture> textures = new Dictionary<int, ITexture>();
|
readonly Dictionary<int, ITexture> textures = new Dictionary<int, ITexture>();
|
||||||
readonly int program;
|
readonly int program;
|
||||||
@@ -62,6 +65,12 @@ namespace OpenRA.Platforms.Default
|
|||||||
// Assemble program
|
// Assemble program
|
||||||
program = GL.CreateProgram();
|
program = GL.CreateProgram();
|
||||||
ErrorHandler.CheckGlError();
|
ErrorHandler.CheckGlError();
|
||||||
|
|
||||||
|
GL.BindAttribLocation(program, VertexPosAttributeIndex, "aVertexPosition");
|
||||||
|
ErrorHandler.CheckGlError();
|
||||||
|
GL.BindAttribLocation(program, TexCoordAttributeIndex, "aVertexTexCoord");
|
||||||
|
ErrorHandler.CheckGlError();
|
||||||
|
|
||||||
GL.AttachShader(program, vertexShader);
|
GL.AttachShader(program, vertexShader);
|
||||||
ErrorHandler.CheckGlError();
|
ErrorHandler.CheckGlError();
|
||||||
GL.AttachShader(program, fragmentShader);
|
GL.AttachShader(program, fragmentShader);
|
||||||
|
|||||||
@@ -63,9 +63,9 @@ namespace OpenRA.Platforms.Default
|
|||||||
VerifyThreadAffinity();
|
VerifyThreadAffinity();
|
||||||
GL.BindBuffer(BufferTarget.ArrayBuffer, buffer);
|
GL.BindBuffer(BufferTarget.ArrayBuffer, buffer);
|
||||||
ErrorHandler.CheckGlError();
|
ErrorHandler.CheckGlError();
|
||||||
GL.VertexPointer(3, VertexPointerType.Float, VertexSize, IntPtr.Zero);
|
GL.VertexAttribPointer(Shader.VertexPosAttributeIndex, 3, VertexAttribPointerType.Float, false, VertexSize, IntPtr.Zero);
|
||||||
ErrorHandler.CheckGlError();
|
ErrorHandler.CheckGlError();
|
||||||
GL.TexCoordPointer(4, TexCoordPointerType.Float, VertexSize, new IntPtr(12));
|
GL.VertexAttribPointer(Shader.TexCoordAttributeIndex, 4, VertexAttribPointerType.Float, false, VertexSize, new IntPtr(12));
|
||||||
ErrorHandler.CheckGlError();
|
ErrorHandler.CheckGlError();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -50,7 +50,6 @@ namespace OpenRA.Platforms.Null
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void DrawPrimitives(PrimitiveType pt, int firstVertex, int numVertices) { }
|
public void DrawPrimitives(PrimitiveType pt, int firstVertex, int numVertices) { }
|
||||||
public void SetLineWidth(float width) { }
|
|
||||||
|
|
||||||
public IVertexBuffer<Vertex> CreateVertexBuffer(int size) { return new NullVertexBuffer<Vertex>(); }
|
public IVertexBuffer<Vertex> CreateVertexBuffer(int size) { return new NullVertexBuffer<Vertex>(); }
|
||||||
public ITexture CreateTexture() { return new NullTexture(); }
|
public ITexture CreateTexture() { return new NullTexture(); }
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
|
varying vec4 vColor;
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
gl_FragColor = gl_Color;
|
gl_FragColor = vColor;
|
||||||
}
|
}
|
||||||
@@ -1,8 +1,13 @@
|
|||||||
uniform vec2 Scroll;
|
uniform vec2 Scroll;
|
||||||
uniform vec2 r1, r2; // matrix elements
|
uniform vec2 r1, r2;
|
||||||
|
|
||||||
|
attribute vec4 aVertexPosition;
|
||||||
|
attribute vec4 aVertexTexCoord;
|
||||||
|
varying vec4 vColor;
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
vec2 p = (gl_Vertex.xy - Scroll.xy)*r1 + r2;
|
vec2 p = (aVertexPosition.xy - Scroll.xy)*r1 + r2;
|
||||||
gl_Position = vec4(p.x,p.y,0,1);
|
gl_Position = vec4(p.x,p.y,0,1);
|
||||||
gl_FrontColor = gl_MultiTexCoord0;
|
vColor = aVertexTexCoord;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
uniform sampler2D DiffuseTexture;
|
uniform sampler2D DiffuseTexture;
|
||||||
|
varying vec4 vTexCoord;
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
gl_FragColor = texture2D(DiffuseTexture,gl_TexCoord[0].st);
|
gl_FragColor = texture2D(DiffuseTexture, vTexCoord.st);
|
||||||
}
|
}
|
||||||
@@ -1,9 +1,13 @@
|
|||||||
uniform vec2 Scroll;
|
uniform vec2 Scroll;
|
||||||
uniform vec2 r1, r2;
|
uniform vec2 r1, r2;
|
||||||
|
|
||||||
|
attribute vec4 aVertexPosition;
|
||||||
|
attribute vec4 aVertexTexCoord;
|
||||||
|
varying vec4 vTexCoord;
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
vec2 p = (gl_Vertex.xy - Scroll.xy)*r1 + r2;
|
vec2 p = (aVertexPosition.xy - Scroll.xy)*r1 + r2;
|
||||||
gl_Position = vec4(p.x,p.y,0,1);
|
gl_Position = vec4(p.x,p.y,0,1);
|
||||||
gl_TexCoord[0] = gl_MultiTexCoord0;
|
vTexCoord = aVertexTexCoord;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,23 +2,23 @@ uniform sampler2D DiffuseTexture, Palette;
|
|||||||
|
|
||||||
uniform bool EnableDepthPreview;
|
uniform bool EnableDepthPreview;
|
||||||
|
|
||||||
varying vec4 TexCoord;
|
varying vec4 vTexCoord;
|
||||||
varying vec4 ChannelMask;
|
varying vec4 vChannelMask;
|
||||||
varying vec4 DepthMask;
|
varying vec4 vDepthMask;
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
vec4 x = texture2D(DiffuseTexture, TexCoord.st);
|
vec4 x = texture2D(DiffuseTexture, vTexCoord.st);
|
||||||
vec2 p = vec2(dot(x, ChannelMask), TexCoord.p);
|
vec2 p = vec2(dot(x, vChannelMask), vTexCoord.p);
|
||||||
vec4 c = texture2D(Palette, p);
|
vec4 c = texture2D(Palette, p);
|
||||||
|
|
||||||
// Discard any transparent fragments (both color and depth)
|
// Discard any transparent fragments (both color and depth)
|
||||||
if (c.a == 0.0)
|
if (c.a == 0.0)
|
||||||
discard;
|
discard;
|
||||||
|
|
||||||
if (EnableDepthPreview && length(DepthMask) > 0.0)
|
if (EnableDepthPreview && length(vDepthMask) > 0.0)
|
||||||
{
|
{
|
||||||
float depth = dot(x, DepthMask);
|
float depth = dot(x, vDepthMask);
|
||||||
gl_FragColor = vec4(depth, depth, depth, 1);
|
gl_FragColor = vec4(depth, depth, depth, 1);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -1,9 +1,11 @@
|
|||||||
uniform vec2 Scroll;
|
uniform vec2 Scroll;
|
||||||
uniform vec2 r1,r2; // matrix elements
|
uniform vec2 r1,r2; // matrix elements
|
||||||
|
|
||||||
varying vec4 TexCoord;
|
attribute vec4 aVertexPosition;
|
||||||
varying vec4 ChannelMask;
|
attribute vec4 aVertexTexCoord;
|
||||||
varying vec4 DepthMask;
|
varying vec4 vTexCoord;
|
||||||
|
varying vec4 vChannelMask;
|
||||||
|
varying vec4 vDepthMask;
|
||||||
|
|
||||||
vec4 DecodeChannelMask(float x)
|
vec4 DecodeChannelMask(float x)
|
||||||
{
|
{
|
||||||
@@ -34,9 +36,9 @@ vec4 DecodeDepthChannelMask(float x)
|
|||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
vec2 p = (gl_Vertex.xy - Scroll.xy) * r1 + r2;
|
vec2 p = (aVertexPosition.xy - Scroll.xy) * r1 + r2;
|
||||||
gl_Position = vec4(p.x,p.y,0,1);
|
gl_Position = vec4(p.x,p.y,0,1);
|
||||||
TexCoord = gl_MultiTexCoord0;
|
vTexCoord = aVertexTexCoord;
|
||||||
ChannelMask = DecodeChannelMask(gl_MultiTexCoord0.w);
|
vChannelMask = DecodeChannelMask(aVertexTexCoord.w);
|
||||||
DepthMask = DecodeDepthChannelMask(gl_MultiTexCoord0.w);
|
vDepthMask = DecodeDepthChannelMask(aVertexTexCoord.w);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,18 +4,18 @@ uniform vec2 PaletteRows;
|
|||||||
uniform vec4 LightDirection;
|
uniform vec4 LightDirection;
|
||||||
uniform vec3 AmbientLight, DiffuseLight;
|
uniform vec3 AmbientLight, DiffuseLight;
|
||||||
|
|
||||||
varying vec4 TexCoord;
|
varying vec4 vTexCoord;
|
||||||
varying vec4 ChannelMask;
|
varying vec4 vChannelMask;
|
||||||
varying vec4 NormalsMask;
|
varying vec4 vNormalsMask;
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
vec4 x = texture2D(DiffuseTexture, TexCoord.st);
|
vec4 x = texture2D(DiffuseTexture, vTexCoord.st);
|
||||||
vec4 color = texture2D(Palette, vec2(dot(x, ChannelMask), PaletteRows.x));
|
vec4 color = texture2D(Palette, vec2(dot(x, vChannelMask), PaletteRows.x));
|
||||||
if (color.a < 0.01)
|
if (color.a < 0.01)
|
||||||
discard;
|
discard;
|
||||||
|
|
||||||
vec4 normal = (2.0 * texture2D(Palette, vec2(dot(x, NormalsMask), PaletteRows.y)) - 1.0);
|
vec4 normal = (2.0 * texture2D(Palette, vec2(dot(x, vNormalsMask), PaletteRows.y)) - 1.0);
|
||||||
vec3 intensity = AmbientLight + DiffuseLight * max(dot(normal, LightDirection), 0.0);
|
vec3 intensity = AmbientLight + DiffuseLight * max(dot(normal, LightDirection), 0.0);
|
||||||
gl_FragColor = vec4(intensity * color.rgb, color.a);
|
gl_FragColor = vec4(intensity * color.rgb, color.a);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,9 +1,11 @@
|
|||||||
uniform mat4 View;
|
uniform mat4 View;
|
||||||
uniform mat4 TransformMatrix;
|
uniform mat4 TransformMatrix;
|
||||||
|
|
||||||
varying vec4 TexCoord;
|
attribute vec4 aVertexPosition;
|
||||||
varying vec4 ChannelMask;
|
attribute vec4 aVertexTexCoord;
|
||||||
varying vec4 NormalsMask;
|
varying vec4 vTexCoord;
|
||||||
|
varying vec4 vChannelMask;
|
||||||
|
varying vec4 vNormalsMask;
|
||||||
|
|
||||||
vec4 DecodeMask(float x)
|
vec4 DecodeMask(float x)
|
||||||
{
|
{
|
||||||
@@ -15,8 +17,8 @@ vec4 DecodeMask(float x)
|
|||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
gl_Position = View*TransformMatrix*gl_Vertex;
|
gl_Position = View*TransformMatrix*aVertexPosition;
|
||||||
TexCoord = gl_MultiTexCoord0;
|
vTexCoord = aVertexTexCoord;
|
||||||
ChannelMask = DecodeMask(gl_MultiTexCoord0.z);
|
vChannelMask = DecodeMask(aVertexTexCoord.z);
|
||||||
NormalsMask = DecodeMask(gl_MultiTexCoord0.w);
|
vNormalsMask = DecodeMask(aVertexTexCoord.w);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user