Image support for vertex generator.
This commit is contained in:
parent
5aa9a2f4e6
commit
fe3c2d0550
@ -1,3 +1,4 @@
|
|||||||
|
using Quik.Media;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
@ -13,7 +14,7 @@ namespace Quik.VertexGenerator
|
|||||||
private int _start;
|
private int _start;
|
||||||
private int _baseOffset;
|
private int _baseOffset;
|
||||||
private QRectangle _bounds;
|
private QRectangle _bounds;
|
||||||
private QuikTexture _texture;
|
private QImage _texture;
|
||||||
|
|
||||||
public int ZDepth { get; private set; }
|
public int ZDepth { get; private set; }
|
||||||
public QuikVertex[] VertexArray => _vertices.InternalArray;
|
public QuikVertex[] VertexArray => _vertices.InternalArray;
|
||||||
@ -32,7 +33,7 @@ namespace Quik.VertexGenerator
|
|||||||
}
|
}
|
||||||
|
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
public void StartDrawCall(in QRectangle bounds, QuikTexture texture, int baseOffset)
|
public void StartDrawCall(in QRectangle bounds, QImage texture, int baseOffset)
|
||||||
{
|
{
|
||||||
_start = ElementCount;
|
_start = ElementCount;
|
||||||
_texture = texture;
|
_texture = texture;
|
||||||
@ -47,7 +48,7 @@ namespace Quik.VertexGenerator
|
|||||||
public void StartDrawCall(in QRectangle bounds, int baseOffset) => StartDrawCall(bounds, null, baseOffset);
|
public void StartDrawCall(in QRectangle bounds, int baseOffset) => StartDrawCall(bounds, null, baseOffset);
|
||||||
|
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
public void StartDrawCall(in QRectangle bounds, QuikTexture texture) => StartDrawCall(bounds, texture, _vertices.Count);
|
public void StartDrawCall(in QRectangle bounds, QImage texture) => StartDrawCall(bounds, texture, _vertices.Count);
|
||||||
|
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
public void AddVertex(in QuikVertex vertex)
|
public void AddVertex(in QuikVertex vertex)
|
||||||
@ -99,9 +100,9 @@ namespace Quik.VertexGenerator
|
|||||||
public int Start { get; }
|
public int Start { get; }
|
||||||
public int Count { get; }
|
public int Count { get; }
|
||||||
public QRectangle Bounds { get; }
|
public QRectangle Bounds { get; }
|
||||||
public QuikTexture Texture { get; }
|
public QImage Texture { get; }
|
||||||
|
|
||||||
public DrawCall(int start, int count, in QRectangle bounds, QuikTexture texture)
|
public DrawCall(int start, int count, in QRectangle bounds, QImage texture)
|
||||||
{
|
{
|
||||||
Start = start;
|
Start = start;
|
||||||
Count = count;
|
Count = count;
|
||||||
|
@ -28,10 +28,16 @@ namespace Quik.VertexGenerator
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public int ZIndex;
|
public int ZIndex;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The texture layer to draw for 3d images.
|
||||||
|
/// </summary>
|
||||||
|
public float TextureLayer;
|
||||||
|
|
||||||
public static int PositionOffset => 0;
|
public static int PositionOffset => 0;
|
||||||
public static unsafe int TextureCoordinatesOffset => sizeof(QVec2);
|
public static unsafe int TextureCoordinatesOffset => sizeof(QVec2);
|
||||||
public static unsafe int ColorOffset => 2 * sizeof(QVec2);
|
public static unsafe int ColorOffset => 2 * sizeof(QVec2);
|
||||||
public static unsafe int ZIndexOffset => ColorOffset + sizeof(QColor);
|
public static unsafe int ZIndexOffset => ColorOffset + sizeof(QColor);
|
||||||
|
public static unsafe int TextureLayerOffset => ZIndexOffset + sizeof(int);
|
||||||
public static unsafe int Stride => sizeof(QuikVertex);
|
public static unsafe int Stride => sizeof(QuikVertex);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,6 +1,8 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using Quik.CommandMachine;
|
using Quik.CommandMachine;
|
||||||
|
using Quik.Media;
|
||||||
|
using Quik.Typography;
|
||||||
|
|
||||||
namespace Quik.VertexGenerator
|
namespace Quik.VertexGenerator
|
||||||
{
|
{
|
||||||
@ -13,6 +15,9 @@ namespace Quik.VertexGenerator
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
protected float CurveGranularity =>
|
protected float CurveGranularity =>
|
||||||
(Style["-vertex-curve-granularity"] is float value) ? value : 1.0f;
|
(Style["-vertex-curve-granularity"] is float value) ? value : 1.0f;
|
||||||
|
protected bool BlendTextures =>
|
||||||
|
(Style["-vertex-blend-textures"] is bool value) ? value : false;
|
||||||
|
|
||||||
protected QuikVertex StrokeVertex => new QuikVertex()
|
protected QuikVertex StrokeVertex => new QuikVertex()
|
||||||
{
|
{
|
||||||
ZIndex = Style.ZIndex ?? this.ZIndex,
|
ZIndex = Style.ZIndex ?? this.ZIndex,
|
||||||
@ -24,13 +29,19 @@ namespace Quik.VertexGenerator
|
|||||||
Color = Style.Color ?? QColor.White,
|
Color = Style.Color ?? QColor.White,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
protected QuikVertex ImageVertex => new QuikVertex()
|
||||||
|
{
|
||||||
|
ZIndex = Style.ZIndex ?? this.ZIndex,
|
||||||
|
Color = BlendTextures ? (Style.Color ?? QColor.White) : QColor.White,
|
||||||
|
};
|
||||||
|
|
||||||
public override void Reset()
|
public override void Reset()
|
||||||
{
|
{
|
||||||
base.Reset();
|
base.Reset();
|
||||||
DrawQueue.Clear();
|
DrawQueue.Clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void ChildProcessCommand(Command name, CommandEnumerator queue)
|
protected override void ChildProcessCommand(Command name, CommandQueue queue)
|
||||||
{
|
{
|
||||||
base.ChildProcessCommand(name, queue);
|
base.ChildProcessCommand(name, queue);
|
||||||
|
|
||||||
@ -39,6 +50,7 @@ namespace Quik.VertexGenerator
|
|||||||
case Command.Line: LineProc(queue); break;
|
case Command.Line: LineProc(queue); break;
|
||||||
case Command.Bezier: BezierProc(queue); break;
|
case Command.Bezier: BezierProc(queue); break;
|
||||||
case Command.Rectangle: RectangleProc(queue); break;
|
case Command.Rectangle: RectangleProc(queue); break;
|
||||||
|
case Command.Image: ImageProc(queue); break;
|
||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -55,7 +67,7 @@ namespace Quik.VertexGenerator
|
|||||||
}
|
}
|
||||||
|
|
||||||
private readonly List<QLine> LineList = new List<QLine>();
|
private readonly List<QLine> LineList = new List<QLine>();
|
||||||
private void LineProc(CommandEnumerator queue)
|
private void LineProc(CommandQueue queue)
|
||||||
{
|
{
|
||||||
Frame frame = queue.Dequeue();
|
Frame frame = queue.Dequeue();
|
||||||
|
|
||||||
@ -280,7 +292,7 @@ namespace Quik.VertexGenerator
|
|||||||
}
|
}
|
||||||
|
|
||||||
private readonly List<QBezier> BezierList = new List<QBezier>();
|
private readonly List<QBezier> BezierList = new List<QBezier>();
|
||||||
private void BezierProc(CommandEnumerator queue)
|
private void BezierProc(CommandQueue queue)
|
||||||
{
|
{
|
||||||
Frame a = queue.Dequeue();
|
Frame a = queue.Dequeue();
|
||||||
Frame b;
|
Frame b;
|
||||||
@ -397,7 +409,7 @@ namespace Quik.VertexGenerator
|
|||||||
}
|
}
|
||||||
|
|
||||||
private readonly List<QRectangle> RectangleList = new List<QRectangle>();
|
private readonly List<QRectangle> RectangleList = new List<QRectangle>();
|
||||||
private void RectangleProc(CommandEnumerator queue)
|
private void RectangleProc(CommandQueue queue)
|
||||||
{
|
{
|
||||||
Frame frame = queue.Dequeue();
|
Frame frame = queue.Dequeue();
|
||||||
RectangleList.Clear();
|
RectangleList.Clear();
|
||||||
@ -422,8 +434,8 @@ namespace Quik.VertexGenerator
|
|||||||
{
|
{
|
||||||
QRectangle outer = RectangleList[i];
|
QRectangle outer = RectangleList[i];
|
||||||
QRectangle inner = new QRectangle(
|
QRectangle inner = new QRectangle(
|
||||||
outer.Right - stroke, outer.Bottom + stroke,
|
outer.Right - stroke, outer.Bottom - stroke,
|
||||||
outer.Left + stroke, outer.Top - stroke);
|
outer.Left + stroke, outer.Top + stroke);
|
||||||
|
|
||||||
GenerateRectangleBase(inner, Math.Max(radius - stroke, 0.0f));
|
GenerateRectangleBase(inner, Math.Max(radius - stroke, 0.0f));
|
||||||
|
|
||||||
@ -469,13 +481,13 @@ namespace Quik.VertexGenerator
|
|||||||
QVec2 aPos, bPos, cPos, dPos;
|
QVec2 aPos, bPos, cPos, dPos;
|
||||||
|
|
||||||
QuikVertex v = FillVertex;
|
QuikVertex v = FillVertex;
|
||||||
aPos = v.Position = new QVec2(rectangle.Left + radius, rectangle.Bottom + radius);
|
aPos = v.Position = new QVec2(rectangle.Left + radius, rectangle.Bottom - radius);
|
||||||
DrawQueue.AddVertex(v);
|
DrawQueue.AddVertex(v);
|
||||||
bPos = v.Position = new QVec2(rectangle.Right - radius, rectangle.Bottom + radius);
|
bPos = v.Position = new QVec2(rectangle.Right - radius, rectangle.Bottom - radius);
|
||||||
DrawQueue.AddVertex(v);
|
DrawQueue.AddVertex(v);
|
||||||
cPos = v.Position = new QVec2(rectangle.Right - radius, rectangle.Top - radius);
|
cPos = v.Position = new QVec2(rectangle.Right - radius, rectangle.Top + radius);
|
||||||
DrawQueue.AddVertex(v);
|
DrawQueue.AddVertex(v);
|
||||||
dPos = v.Position = new QVec2(rectangle.Left + radius, rectangle.Top - radius);
|
dPos = v.Position = new QVec2(rectangle.Left + radius, rectangle.Top + radius);
|
||||||
DrawQueue.AddVertex(v);
|
DrawQueue.AddVertex(v);
|
||||||
|
|
||||||
DrawQueue.AddElement(0); DrawQueue.AddElement(1); DrawQueue.AddElement(2);
|
DrawQueue.AddElement(0); DrawQueue.AddElement(1); DrawQueue.AddElement(2);
|
||||||
@ -496,9 +508,9 @@ namespace Quik.VertexGenerator
|
|||||||
|
|
||||||
// Draw east rectangle.
|
// Draw east rectangle.
|
||||||
|
|
||||||
v.Position = new QVec2(rectangle.Right, rectangle.Bottom + radius);
|
v.Position = new QVec2(rectangle.Right, rectangle.Bottom - radius);
|
||||||
DrawQueue.AddVertex(v);
|
DrawQueue.AddVertex(v);
|
||||||
v.Position = new QVec2(rectangle.Right, rectangle.Top - radius);
|
v.Position = new QVec2(rectangle.Right, rectangle.Top + radius);
|
||||||
DrawQueue.AddVertex(v);
|
DrawQueue.AddVertex(v);
|
||||||
|
|
||||||
DrawQueue.AddElement(1); DrawQueue.AddElement(6); DrawQueue.AddElement(7);
|
DrawQueue.AddElement(1); DrawQueue.AddElement(6); DrawQueue.AddElement(7);
|
||||||
@ -516,9 +528,9 @@ namespace Quik.VertexGenerator
|
|||||||
|
|
||||||
// Draw west rectangle.
|
// Draw west rectangle.
|
||||||
|
|
||||||
v.Position = new QVec2(rectangle.Left, rectangle.Top - radius);
|
v.Position = new QVec2(rectangle.Left, rectangle.Top + radius);
|
||||||
DrawQueue.AddVertex(v);
|
DrawQueue.AddVertex(v);
|
||||||
v.Position = new QVec2(rectangle.Left, rectangle.Bottom + radius);
|
v.Position = new QVec2(rectangle.Left, rectangle.Bottom - radius);
|
||||||
DrawQueue.AddVertex(v);
|
DrawQueue.AddVertex(v);
|
||||||
|
|
||||||
DrawQueue.AddElement(11); DrawQueue.AddElement(0); DrawQueue.AddElement(3);
|
DrawQueue.AddElement(11); DrawQueue.AddElement(0); DrawQueue.AddElement(3);
|
||||||
@ -609,13 +621,13 @@ namespace Quik.VertexGenerator
|
|||||||
|
|
||||||
DrawQueue.RestoreOffset();
|
DrawQueue.RestoreOffset();
|
||||||
|
|
||||||
v.Position = new QVec2(rectangle.Left + stroke, rectangle.Bottom + stroke);
|
v.Position = new QVec2(rectangle.Left + stroke, rectangle.Bottom - stroke);
|
||||||
DrawQueue.AddVertex(v);
|
DrawQueue.AddVertex(v);
|
||||||
v.Position = new QVec2(rectangle.Right - stroke, rectangle.Bottom + stroke);
|
v.Position = new QVec2(rectangle.Right - stroke, rectangle.Bottom - stroke);
|
||||||
DrawQueue.AddVertex(v);
|
DrawQueue.AddVertex(v);
|
||||||
v.Position = new QVec2(rectangle.Right - stroke, rectangle.Top - stroke);
|
v.Position = new QVec2(rectangle.Right - stroke, rectangle.Top + stroke);
|
||||||
DrawQueue.AddVertex(v);
|
DrawQueue.AddVertex(v);
|
||||||
v.Position = new QVec2(rectangle.Left + stroke, rectangle.Top - stroke);
|
v.Position = new QVec2(rectangle.Left + stroke, rectangle.Top + stroke);
|
||||||
DrawQueue.AddVertex(v);
|
DrawQueue.AddVertex(v);
|
||||||
|
|
||||||
v.Position = new QVec2(rectangle.Left, rectangle.Bottom);
|
v.Position = new QVec2(rectangle.Left, rectangle.Bottom);
|
||||||
@ -669,13 +681,13 @@ namespace Quik.VertexGenerator
|
|||||||
|
|
||||||
// a-b-c-d
|
// a-b-c-d
|
||||||
|
|
||||||
v.Position = new QVec2(rectangle.Left + stroke, rectangle.Bottom + stroke);
|
v.Position = new QVec2(rectangle.Left + stroke, rectangle.Bottom - stroke);
|
||||||
DrawQueue.AddVertex(v);
|
DrawQueue.AddVertex(v);
|
||||||
v.Position = new QVec2(rectangle.Right - stroke, rectangle.Bottom + stroke);
|
v.Position = new QVec2(rectangle.Right - stroke, rectangle.Bottom - stroke);
|
||||||
DrawQueue.AddVertex(v);
|
DrawQueue.AddVertex(v);
|
||||||
v.Position = new QVec2(rectangle.Right - stroke, rectangle.Top - stroke);
|
v.Position = new QVec2(rectangle.Right - stroke, rectangle.Top + stroke);
|
||||||
DrawQueue.AddVertex(v);
|
DrawQueue.AddVertex(v);
|
||||||
v.Position = new QVec2(rectangle.Left + stroke, rectangle.Top - stroke);
|
v.Position = new QVec2(rectangle.Left + stroke, rectangle.Top + stroke);
|
||||||
DrawQueue.AddVertex(v);
|
DrawQueue.AddVertex(v);
|
||||||
|
|
||||||
// ef-gh-ij-kl
|
// ef-gh-ij-kl
|
||||||
@ -684,24 +696,24 @@ namespace Quik.VertexGenerator
|
|||||||
DrawQueue.AddVertex(v);
|
DrawQueue.AddVertex(v);
|
||||||
v.Position = new QVec2(rectangle.Left + stroke, rectangle.Bottom);
|
v.Position = new QVec2(rectangle.Left + stroke, rectangle.Bottom);
|
||||||
DrawQueue.AddVertex(v);
|
DrawQueue.AddVertex(v);
|
||||||
v.Position = new QVec2(rectangle.Right, rectangle.Bottom + stroke);
|
v.Position = new QVec2(rectangle.Right, rectangle.Bottom - stroke);
|
||||||
DrawQueue.AddVertex(v);
|
DrawQueue.AddVertex(v);
|
||||||
v.Position = new QVec2(rectangle.Right, rectangle.Top - stroke);
|
v.Position = new QVec2(rectangle.Right, rectangle.Top + stroke);
|
||||||
DrawQueue.AddVertex(v);
|
DrawQueue.AddVertex(v);
|
||||||
v.Position = new QVec2(rectangle.Right - stroke, rectangle.Top);
|
v.Position = new QVec2(rectangle.Right - stroke, rectangle.Top);
|
||||||
DrawQueue.AddVertex(v);
|
DrawQueue.AddVertex(v);
|
||||||
v.Position = new QVec2(rectangle.Right - stroke, rectangle.Top);
|
v.Position = new QVec2(rectangle.Right - stroke, rectangle.Top);
|
||||||
DrawQueue.AddVertex(v);
|
DrawQueue.AddVertex(v);
|
||||||
v.Position = new QVec2(rectangle.Left, rectangle.Top - stroke);
|
v.Position = new QVec2(rectangle.Left, rectangle.Top + stroke);
|
||||||
DrawQueue.AddVertex(v);
|
DrawQueue.AddVertex(v);
|
||||||
v.Position = new QVec2(rectangle.Left, rectangle.Bottom + stroke);
|
v.Position = new QVec2(rectangle.Left, rectangle.Bottom - stroke);
|
||||||
DrawQueue.AddVertex(v);
|
DrawQueue.AddVertex(v);
|
||||||
|
|
||||||
// mno
|
// mno
|
||||||
|
|
||||||
v.Position = new QVec2(rectangle.Left, rectangle.Bottom + radius);
|
v.Position = new QVec2(rectangle.Left, rectangle.Bottom - radius);
|
||||||
DrawQueue.AddVertex(v);
|
DrawQueue.AddVertex(v);
|
||||||
nPos = v.Position = new QVec2(rectangle.Left + radius, rectangle.Bottom + radius);
|
nPos = v.Position = new QVec2(rectangle.Left + radius, rectangle.Bottom - radius);
|
||||||
DrawQueue.AddVertex(v);
|
DrawQueue.AddVertex(v);
|
||||||
v.Position = new QVec2(rectangle.Left + radius, rectangle.Bottom);
|
v.Position = new QVec2(rectangle.Left + radius, rectangle.Bottom);
|
||||||
DrawQueue.AddVertex(v);
|
DrawQueue.AddVertex(v);
|
||||||
@ -709,15 +721,15 @@ namespace Quik.VertexGenerator
|
|||||||
// pqr
|
// pqr
|
||||||
v.Position = new QVec2(rectangle.Right - radius, rectangle.Bottom);
|
v.Position = new QVec2(rectangle.Right - radius, rectangle.Bottom);
|
||||||
DrawQueue.AddVertex(v);
|
DrawQueue.AddVertex(v);
|
||||||
qPos = v.Position = new QVec2(rectangle.Right - radius, rectangle.Bottom + radius);
|
qPos = v.Position = new QVec2(rectangle.Right - radius, rectangle.Bottom - radius);
|
||||||
DrawQueue.AddVertex(v);
|
DrawQueue.AddVertex(v);
|
||||||
v.Position = new QVec2(rectangle.Right, rectangle.Bottom + radius);
|
v.Position = new QVec2(rectangle.Right, rectangle.Bottom - radius);
|
||||||
DrawQueue.AddVertex(v);
|
DrawQueue.AddVertex(v);
|
||||||
|
|
||||||
// stu
|
// stu
|
||||||
v.Position = new QVec2(rectangle.Right, rectangle.Top - radius);
|
v.Position = new QVec2(rectangle.Right, rectangle.Top + radius);
|
||||||
DrawQueue.AddVertex(v);
|
DrawQueue.AddVertex(v);
|
||||||
tPos = v.Position = new QVec2(rectangle.Right - radius, rectangle.Top - radius);
|
tPos = v.Position = new QVec2(rectangle.Right - radius, rectangle.Top + radius);
|
||||||
DrawQueue.AddVertex(v);
|
DrawQueue.AddVertex(v);
|
||||||
v.Position = new QVec2(rectangle.Right - radius, rectangle.Top);
|
v.Position = new QVec2(rectangle.Right - radius, rectangle.Top);
|
||||||
DrawQueue.AddVertex(v);
|
DrawQueue.AddVertex(v);
|
||||||
@ -726,9 +738,9 @@ namespace Quik.VertexGenerator
|
|||||||
|
|
||||||
v.Position = new QVec2(rectangle.Left + radius, rectangle.Top);
|
v.Position = new QVec2(rectangle.Left + radius, rectangle.Top);
|
||||||
DrawQueue.AddVertex(v);
|
DrawQueue.AddVertex(v);
|
||||||
wPos = v.Position = new QVec2(rectangle.Left + radius, rectangle.Top - radius);
|
wPos = v.Position = new QVec2(rectangle.Left + radius, rectangle.Top + radius);
|
||||||
DrawQueue.AddVertex(v);
|
DrawQueue.AddVertex(v);
|
||||||
v.Position = new QVec2(rectangle.Left, rectangle.Top - radius);
|
v.Position = new QVec2(rectangle.Left, rectangle.Top + radius);
|
||||||
DrawQueue.AddVertex(v);
|
DrawQueue.AddVertex(v);
|
||||||
|
|
||||||
// E
|
// E
|
||||||
@ -859,23 +871,23 @@ namespace Quik.VertexGenerator
|
|||||||
DrawQueue.AddVertex(v);
|
DrawQueue.AddVertex(v);
|
||||||
v.Position = new QVec2(rectangle.Right - radius, rectangle.Bottom);
|
v.Position = new QVec2(rectangle.Right - radius, rectangle.Bottom);
|
||||||
DrawQueue.AddVertex(v);
|
DrawQueue.AddVertex(v);
|
||||||
v.Position = new QVec2(rectangle.Right - radius, rectangle.Bottom + stroke);
|
v.Position = new QVec2(rectangle.Right - radius, rectangle.Bottom - stroke);
|
||||||
DrawQueue.AddVertex(v);
|
DrawQueue.AddVertex(v);
|
||||||
v.Position = new QVec2(rectangle.Left + radius, rectangle.Bottom + stroke);
|
v.Position = new QVec2(rectangle.Left + radius, rectangle.Bottom - stroke);
|
||||||
DrawQueue.AddVertex(v);
|
DrawQueue.AddVertex(v);
|
||||||
|
|
||||||
v.Position = new QVec2(rectangle.Right - stroke, rectangle.Bottom + radius);
|
v.Position = new QVec2(rectangle.Right - stroke, rectangle.Bottom - radius);
|
||||||
DrawQueue.AddVertex(v);
|
DrawQueue.AddVertex(v);
|
||||||
v.Position = new QVec2(rectangle.Right, rectangle.Top - radius);
|
v.Position = new QVec2(rectangle.Right, rectangle.Top + radius);
|
||||||
DrawQueue.AddVertex(v);
|
DrawQueue.AddVertex(v);
|
||||||
v.Position = new QVec2(rectangle.Right, rectangle.Top - radius);
|
v.Position = new QVec2(rectangle.Right, rectangle.Top + radius);
|
||||||
DrawQueue.AddVertex(v);
|
DrawQueue.AddVertex(v);
|
||||||
v.Position = new QVec2(rectangle.Right - stroke, rectangle.Bottom + radius);
|
v.Position = new QVec2(rectangle.Right - stroke, rectangle.Bottom - radius);
|
||||||
DrawQueue.AddVertex(v);
|
DrawQueue.AddVertex(v);
|
||||||
|
|
||||||
v.Position = new QVec2(rectangle.Left + radius, rectangle.Top - stroke);
|
v.Position = new QVec2(rectangle.Left + radius, rectangle.Top + stroke);
|
||||||
DrawQueue.AddVertex(v);
|
DrawQueue.AddVertex(v);
|
||||||
v.Position = new QVec2(rectangle.Right - radius, rectangle.Top - stroke);
|
v.Position = new QVec2(rectangle.Right - radius, rectangle.Top + stroke);
|
||||||
DrawQueue.AddVertex(v);
|
DrawQueue.AddVertex(v);
|
||||||
v.Position = new QVec2(rectangle.Right - radius, rectangle.Top);
|
v.Position = new QVec2(rectangle.Right - radius, rectangle.Top);
|
||||||
DrawQueue.AddVertex(v);
|
DrawQueue.AddVertex(v);
|
||||||
@ -884,9 +896,9 @@ namespace Quik.VertexGenerator
|
|||||||
|
|
||||||
v.Position = new QVec2(rectangle.Left, rectangle.Bottom + radius);
|
v.Position = new QVec2(rectangle.Left, rectangle.Bottom + radius);
|
||||||
DrawQueue.AddVertex(v);
|
DrawQueue.AddVertex(v);
|
||||||
v.Position = new QVec2(rectangle.Left + stroke, rectangle.Top - radius);
|
v.Position = new QVec2(rectangle.Left + stroke, rectangle.Top + radius);
|
||||||
DrawQueue.AddVertex(v);
|
DrawQueue.AddVertex(v);
|
||||||
v.Position = new QVec2(rectangle.Left + stroke, rectangle.Top - radius);
|
v.Position = new QVec2(rectangle.Left + stroke, rectangle.Top + radius);
|
||||||
DrawQueue.AddVertex(v);
|
DrawQueue.AddVertex(v);
|
||||||
v.Position = new QVec2(rectangle.Left, rectangle.Bottom + radius);
|
v.Position = new QVec2(rectangle.Left, rectangle.Bottom + radius);
|
||||||
DrawQueue.AddVertex(v);
|
DrawQueue.AddVertex(v);
|
||||||
@ -1000,6 +1012,104 @@ namespace Quik.VertexGenerator
|
|||||||
DrawQueue.AddElement(s1); DrawQueue.AddElement(s2); DrawQueue.AddElement(4);
|
DrawQueue.AddElement(s1); DrawQueue.AddElement(s2); DrawQueue.AddElement(4);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void ImageProc(CommandQueue queue)
|
||||||
|
{
|
||||||
|
Frame frame = queue.Dequeue();
|
||||||
|
ImageCommandFlags flags = (ImageCommandFlags)frame.I1;
|
||||||
|
QImage image = queue.Dequeue().As<QImage>();
|
||||||
|
|
||||||
|
int count = flags.HasFlag(ImageCommandFlags.Single) ? 1 : frame.I2;
|
||||||
|
if (flags.HasFlag(ImageCommandFlags.Image3d))
|
||||||
|
{
|
||||||
|
Image3d(queue, image, count);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Image2d(queue, image, count, flags.HasFlag(ImageCommandFlags.UVs));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Image2d(CommandQueue queue, QImage image, int count, bool uv)
|
||||||
|
{
|
||||||
|
DrawQueue.StartDrawCall(Viewport, image);
|
||||||
|
|
||||||
|
for (int i = 0; i < count; i++)
|
||||||
|
{
|
||||||
|
QRectangle rect = (QRectangle)queue.Dequeue();
|
||||||
|
QRectangle uvs;
|
||||||
|
|
||||||
|
if (uv)
|
||||||
|
{
|
||||||
|
uvs = (QRectangle)queue.Dequeue();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
uvs = new QRectangle(1, 1, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
DrawQueue.RestoreOffset();
|
||||||
|
QuikVertex vertex = ImageVertex;
|
||||||
|
|
||||||
|
vertex.Position = new QVec2(rect.Top, rect.Left);
|
||||||
|
vertex.TextureCoordinates = new QVec2(uvs.Top, uvs.Left);
|
||||||
|
DrawQueue.AddVertex(vertex);
|
||||||
|
|
||||||
|
vertex.Position = new QVec2(rect.Bottom, rect.Left);
|
||||||
|
vertex.TextureCoordinates = new QVec2(uvs.Bottom, uvs.Left);
|
||||||
|
DrawQueue.AddVertex(vertex);
|
||||||
|
|
||||||
|
vertex.Position = new QVec2(rect.Bottom, rect.Right);
|
||||||
|
vertex.TextureCoordinates = new QVec2(uvs.Bottom, uvs.Right);
|
||||||
|
DrawQueue.AddVertex(vertex);
|
||||||
|
|
||||||
|
vertex.Position = new QVec2(rect.Top, rect.Right);
|
||||||
|
vertex.TextureCoordinates = new QVec2(uvs.Top, uvs.Right);
|
||||||
|
DrawQueue.AddVertex(vertex);
|
||||||
|
|
||||||
|
DrawQueue.AddElement(0); DrawQueue.AddElement(2); DrawQueue.AddElement(3);
|
||||||
|
DrawQueue.AddElement(0); DrawQueue.AddElement(1); DrawQueue.AddElement(2);
|
||||||
|
}
|
||||||
|
|
||||||
|
DrawQueue.EndDrawCall();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Image3d(CommandQueue queue, QImage image, int count)
|
||||||
|
{
|
||||||
|
DrawQueue.StartDrawCall(Viewport, image);
|
||||||
|
|
||||||
|
for (int i = 0; i < count; i++)
|
||||||
|
{
|
||||||
|
QRectangle rect = (QRectangle)queue.Dequeue();
|
||||||
|
QRectangle uvs = (QRectangle)queue.Dequeue();
|
||||||
|
int layer = (int)queue.Dequeue();
|
||||||
|
|
||||||
|
DrawQueue.RestoreOffset();
|
||||||
|
QuikVertex vertex = ImageVertex;
|
||||||
|
vertex.TextureLayer = layer;
|
||||||
|
|
||||||
|
vertex.Position = new QVec2(rect.Top, rect.Left);
|
||||||
|
vertex.TextureCoordinates = new QVec2(uvs.Top, uvs.Left);
|
||||||
|
DrawQueue.AddVertex(vertex);
|
||||||
|
|
||||||
|
vertex.Position = new QVec2(rect.Bottom, rect.Left);
|
||||||
|
vertex.TextureCoordinates = new QVec2(uvs.Bottom, uvs.Left);
|
||||||
|
DrawQueue.AddVertex(vertex);
|
||||||
|
|
||||||
|
vertex.Position = new QVec2(rect.Bottom, rect.Right);
|
||||||
|
vertex.TextureCoordinates = new QVec2(uvs.Bottom, uvs.Right);
|
||||||
|
DrawQueue.AddVertex(vertex);
|
||||||
|
|
||||||
|
vertex.Position = new QVec2(rect.Top, rect.Right);
|
||||||
|
vertex.TextureCoordinates = new QVec2(uvs.Top, uvs.Right);
|
||||||
|
DrawQueue.AddVertex(vertex);
|
||||||
|
|
||||||
|
DrawQueue.AddElement(0); DrawQueue.AddElement(2); DrawQueue.AddElement(3);
|
||||||
|
DrawQueue.AddElement(0); DrawQueue.AddElement(1); DrawQueue.AddElement(2);
|
||||||
|
}
|
||||||
|
|
||||||
|
DrawQueue.EndDrawCall();
|
||||||
|
}
|
||||||
|
|
||||||
private struct LineInfo
|
private struct LineInfo
|
||||||
{
|
{
|
||||||
public int BaseOffset { get; }
|
public int BaseOffset { get; }
|
||||||
|
Loading…
Reference in New Issue
Block a user