mirror of
git://source.winehq.org/git/wine.git
synced 2024-11-05 18:01:34 +00:00
d2d1: Compile the pixel shader with D3DCompile().
This commit is contained in:
parent
25ffa32beb
commit
a78cea20d1
1 changed files with 216 additions and 466 deletions
|
@ -3204,6 +3204,7 @@ static HRESULT d2d_device_context_init(struct d2d_device_context *render_target,
|
|||
D3D11_RASTERIZER_DESC rs_desc;
|
||||
D3D11_BUFFER_DESC buffer_desc;
|
||||
struct d2d_factory *factory;
|
||||
ID3D10Blob *compiled;
|
||||
unsigned int i;
|
||||
HRESULT hr;
|
||||
|
||||
|
@ -3472,468 +3473,208 @@ static HRESULT d2d_device_context_init(struct d2d_device_context *render_target,
|
|||
" * float2(transform_rtx.w, transform_rty.w);\n"
|
||||
" o.position = float4(position + float2(-1.0f, 1.0f), 0.0f, 1.0f);\n"
|
||||
"}\n";
|
||||
static const DWORD ps_code[] =
|
||||
{
|
||||
#if 0
|
||||
#define BRUSH_TYPE_SOLID 0
|
||||
#define BRUSH_TYPE_LINEAR 1
|
||||
#define BRUSH_TYPE_RADIAL 2
|
||||
#define BRUSH_TYPE_BITMAP 3
|
||||
#define BRUSH_TYPE_COUNT 4
|
||||
|
||||
bool outline;
|
||||
bool is_arc;
|
||||
struct brush
|
||||
{
|
||||
uint type;
|
||||
float opacity;
|
||||
float4 data[3];
|
||||
} colour_brush, opacity_brush;
|
||||
|
||||
SamplerState s0, s1;
|
||||
Texture2D t0, t1;
|
||||
Buffer<float4> b0, b1;
|
||||
|
||||
struct input
|
||||
{
|
||||
float2 p : WORLD_POSITION;
|
||||
float4 b : BEZIER;
|
||||
nointerpolation float2x2 stroke_transform : STROKE_TRANSFORM;
|
||||
};
|
||||
|
||||
float4 sample_gradient(Buffer<float4> gradient, uint stop_count, float position)
|
||||
{
|
||||
float4 c_low, c_high;
|
||||
float p_low, p_high;
|
||||
uint i;
|
||||
|
||||
p_low = gradient.Load(0).x;
|
||||
c_low = gradient.Load(1);
|
||||
c_high = c_low;
|
||||
|
||||
if (position < p_low)
|
||||
return c_low;
|
||||
|
||||
for (i = 1; i < stop_count; ++i)
|
||||
{
|
||||
p_high = gradient.Load(i * 2).x;
|
||||
c_high = gradient.Load(i * 2 + 1);
|
||||
|
||||
if (position >= p_low && position <= p_high)
|
||||
return lerp(c_low, c_high, (position - p_low) / (p_high - p_low));
|
||||
|
||||
p_low = p_high;
|
||||
c_low = c_high;
|
||||
}
|
||||
|
||||
return c_high;
|
||||
}
|
||||
|
||||
float4 brush_linear(struct brush brush, Buffer<float4> gradient, float2 position)
|
||||
{
|
||||
float2 start, end, v_p, v_q;
|
||||
uint stop_count;
|
||||
float p;
|
||||
|
||||
start = brush.data[0].xy;
|
||||
end = brush.data[0].zw;
|
||||
stop_count = asuint(brush.data[1].x);
|
||||
|
||||
v_p = position - start;
|
||||
v_q = end - start;
|
||||
p = dot(v_q, v_p) / dot(v_q, v_q);
|
||||
|
||||
return sample_gradient(gradient, stop_count, p);
|
||||
}
|
||||
|
||||
float4 brush_radial(struct brush brush, Buffer<float4> gradient, float2 position)
|
||||
{
|
||||
float2 centre, offset, ra, rb, v_p, v_q, r;
|
||||
float b, c, l, t;
|
||||
uint stop_count;
|
||||
|
||||
centre = brush.data[0].xy;
|
||||
offset = brush.data[0].zw;
|
||||
ra = brush.data[1].xy;
|
||||
rb = brush.data[1].zw;
|
||||
stop_count = asuint(brush.data[2].x);
|
||||
|
||||
/* Project onto ra, rb. */
|
||||
r = float2(dot(ra, ra), dot(rb, rb));
|
||||
v_p = position - (centre + offset);
|
||||
v_p = float2(dot(v_p, ra), dot(v_p, rb)) / r;
|
||||
v_q = float2(dot(offset, ra), dot(offset, rb)) / r;
|
||||
|
||||
/* ‖t·p̂ + q⃑‖ = 1
|
||||
* (t·p̂ + q⃑) · (t·p̂ + q⃑) = 1
|
||||
* t² + 2·(p̂·q⃑)·t + (q⃑·q⃑) = 1
|
||||
*
|
||||
* b = p̂·q⃑
|
||||
* c = q⃑·q⃑ - 1
|
||||
* t = -b + √(b² - c) */
|
||||
l = length(v_p);
|
||||
b = dot(v_p, v_q) / l;
|
||||
c = dot(v_q, v_q) - 1.0;
|
||||
t = -b + sqrt(b * b - c);
|
||||
|
||||
return sample_gradient(gradient, stop_count, l / t);
|
||||
}
|
||||
|
||||
float4 brush_bitmap(struct brush brush, Texture2D t, SamplerState s, float2 position)
|
||||
{
|
||||
float3 transform[2];
|
||||
bool ignore_alpha;
|
||||
float2 texcoord;
|
||||
float4 colour;
|
||||
|
||||
transform[0] = brush.data[0].xyz;
|
||||
transform[1] = brush.data[1].xyz;
|
||||
ignore_alpha = asuint(brush.data[1].w);
|
||||
|
||||
texcoord.x = dot(position.xy, transform[0].xy) + transform[0].z;
|
||||
texcoord.y = dot(position.xy, transform[1].xy) + transform[1].z;
|
||||
colour = t.Sample(s, texcoord);
|
||||
if (ignore_alpha)
|
||||
colour.a = 1.0;
|
||||
return colour;
|
||||
}
|
||||
|
||||
float4 sample_brush(struct brush brush, Texture2D t, SamplerState s, Buffer<float4> b, float2 position)
|
||||
{
|
||||
if (brush.type == BRUSH_TYPE_SOLID)
|
||||
return brush.data[0] * brush.opacity;
|
||||
if (brush.type == BRUSH_TYPE_LINEAR)
|
||||
return brush_linear(brush, b, position) * brush.opacity;
|
||||
if (brush.type == BRUSH_TYPE_RADIAL)
|
||||
return brush_radial(brush, b, position) * brush.opacity;
|
||||
if (brush.type == BRUSH_TYPE_BITMAP)
|
||||
return brush_bitmap(brush, t, s, position) * brush.opacity;
|
||||
return float4(0.0, 0.0, 0.0, brush.opacity);
|
||||
}
|
||||
|
||||
float4 main(struct input i) : SV_Target
|
||||
{
|
||||
float4 colour;
|
||||
|
||||
colour = sample_brush(colour_brush, t0, s0, b0, i.p);
|
||||
if (opacity_brush.type < BRUSH_TYPE_COUNT)
|
||||
colour *= sample_brush(opacity_brush, t1, s1, b1, i.p).a;
|
||||
|
||||
if (outline)
|
||||
{
|
||||
float2 du, dv, df;
|
||||
float4 uv;
|
||||
|
||||
/* Evaluate the implicit form of the curve (u² - v = 0
|
||||
* for Béziers, u² + v² - 1 = 0 for arcs) in texture
|
||||
* space, using the screen-space partial derivatives
|
||||
* to convert the calculated distance to object space.
|
||||
*
|
||||
* d(x, y) = |f(x, y)| / ‖∇f(x, y)‖
|
||||
* = |f(x, y)| / √((∂f/∂x)² + (∂f/∂y)²)
|
||||
*
|
||||
* For Béziers:
|
||||
* f(x, y) = u(x, y)² - v(x, y)
|
||||
* ∂f/∂x = 2u · ∂u/∂x - ∂v/∂x
|
||||
* ∂f/∂y = 2u · ∂u/∂y - ∂v/∂y
|
||||
*
|
||||
* For arcs:
|
||||
* f(x, y) = u(x, y)² + v(x, y)² - 1
|
||||
* ∂f/∂x = 2u · ∂u/∂x + 2v · ∂v/∂x
|
||||
* ∂f/∂y = 2u · ∂u/∂y + 2v · ∂v/∂y */
|
||||
uv = i.b;
|
||||
du = float2(ddx(uv.x), ddy(uv.x));
|
||||
dv = float2(ddx(uv.y), ddy(uv.y));
|
||||
|
||||
if (!is_arc)
|
||||
{
|
||||
df = 2.0f * uv.x * du - dv;
|
||||
|
||||
clip(dot(df, uv.zw));
|
||||
clip(length(mul(i.stroke_transform, df)) - abs(uv.x * uv.x - uv.y));
|
||||
}
|
||||
else
|
||||
{
|
||||
df = 2.0f * uv.x * du + 2.0f * uv.y * dv;
|
||||
|
||||
clip(dot(df, uv.zw));
|
||||
clip(length(mul(i.stroke_transform, df)) - abs(uv.x * uv.x + uv.y * uv.y - 1.0f));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Evaluate the implicit form of the curve in texture space.
|
||||
* "i.b.z" determines which side of the curve is shaded. */
|
||||
if (!is_arc)
|
||||
{
|
||||
clip((i.b.x * i.b.x - i.b.y) * i.b.z);
|
||||
}
|
||||
else
|
||||
{
|
||||
clip((i.b.x * i.b.x + i.b.y * i.b.y - 1.0) * i.b.z);
|
||||
}
|
||||
}
|
||||
|
||||
return colour;
|
||||
}
|
||||
#endif
|
||||
0x43425844, 0xa8fee730, 0x92fa2196, 0xaf9f3eff, 0x888d4048, 0x00000001, 0x00002000, 0x00000003,
|
||||
0x0000002c, 0x000000c4, 0x000000f8, 0x4e475349, 0x00000090, 0x00000004, 0x00000008, 0x00000068,
|
||||
0x00000000, 0x00000000, 0x00000003, 0x00000000, 0x00000303, 0x00000077, 0x00000000, 0x00000000,
|
||||
0x00000003, 0x00000001, 0x00000f0f, 0x0000007e, 0x00000000, 0x00000000, 0x00000003, 0x00000002,
|
||||
0x00000303, 0x0000007e, 0x00000001, 0x00000000, 0x00000003, 0x00000003, 0x00000303, 0x4c524f57,
|
||||
0x4f505f44, 0x49544953, 0x42004e4f, 0x45495a45, 0x54530052, 0x454b4f52, 0x4152545f, 0x4f46534e,
|
||||
0xab004d52, 0x4e47534f, 0x0000002c, 0x00000001, 0x00000008, 0x00000020, 0x00000000, 0x00000000,
|
||||
0x00000003, 0x00000000, 0x0000000f, 0x545f5653, 0x65677261, 0xabab0074, 0x52444853, 0x00001f00,
|
||||
0x00000040, 0x000007c0, 0x04000059, 0x00208e46, 0x00000000, 0x00000009, 0x0300005a, 0x00106000,
|
||||
0x00000000, 0x0300005a, 0x00106000, 0x00000001, 0x04001858, 0x00107000, 0x00000000, 0x00005555,
|
||||
0x04001858, 0x00107000, 0x00000001, 0x00005555, 0x04000858, 0x00107000, 0x00000002, 0x00005555,
|
||||
0x04000858, 0x00107000, 0x00000003, 0x00005555, 0x03001062, 0x00101032, 0x00000000, 0x03001062,
|
||||
0x001010f2, 0x00000001, 0x03000862, 0x00101032, 0x00000002, 0x03000862, 0x00101032, 0x00000003,
|
||||
0x03000065, 0x001020f2, 0x00000000, 0x02000068, 0x0000000a, 0x09000038, 0x001000f2, 0x00000000,
|
||||
0x00208556, 0x00000000, 0x00000001, 0x00208e46, 0x00000000, 0x00000002, 0x0404001f, 0x0020800a,
|
||||
0x00000000, 0x00000001, 0x08000020, 0x00100012, 0x00000001, 0x0020800a, 0x00000000, 0x00000001,
|
||||
0x00004001, 0x00000001, 0x0304001f, 0x0010000a, 0x00000001, 0x09000000, 0x00100062, 0x00000001,
|
||||
0x00101106, 0x00000000, 0x80208106, 0x00000041, 0x00000000, 0x00000002, 0x0a000000, 0x00100032,
|
||||
0x00000002, 0x80208046, 0x00000041, 0x00000000, 0x00000002, 0x00208ae6, 0x00000000, 0x00000002,
|
||||
0x0700000f, 0x00100022, 0x00000001, 0x00100046, 0x00000002, 0x00100596, 0x00000001, 0x0700000f,
|
||||
0x00100042, 0x00000001, 0x00100046, 0x00000002, 0x00100046, 0x00000002, 0x0700000e, 0x00100022,
|
||||
0x00000001, 0x0010001a, 0x00000001, 0x0010002a, 0x00000001, 0x0a00002d, 0x001000f2, 0x00000002,
|
||||
0x00004002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00107e46, 0x00000002, 0x0a00002d,
|
||||
0x001000f2, 0x00000003, 0x00004002, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00107e46,
|
||||
0x00000002, 0x0700001d, 0x00100042, 0x00000001, 0x0010001a, 0x00000001, 0x0010000a, 0x00000002,
|
||||
0x0304001f, 0x0010002a, 0x00000001, 0x05000036, 0x001000f2, 0x00000004, 0x00100e46, 0x00000003,
|
||||
0x05000036, 0x001000f2, 0x00000005, 0x00100e46, 0x00000003, 0x05000036, 0x001000f2, 0x00000006,
|
||||
0x00100e46, 0x00000003, 0x05000036, 0x00100042, 0x00000001, 0x0010000a, 0x00000002, 0x05000036,
|
||||
0x00100082, 0x00000001, 0x00004001, 0x00000001, 0x05000036, 0x00100022, 0x00000002, 0x00004001,
|
||||
0x00000000, 0x01000030, 0x08000050, 0x00100042, 0x00000002, 0x0010003a, 0x00000001, 0x0020800a,
|
||||
0x00000000, 0x00000003, 0x05000036, 0x00100022, 0x00000002, 0x00004001, 0x00000000, 0x03040003,
|
||||
0x0010002a, 0x00000002, 0x07000029, 0x00100042, 0x00000002, 0x0010003a, 0x00000001, 0x00004001,
|
||||
0x00000001, 0x0700002d, 0x001000f2, 0x00000007, 0x00100aa6, 0x00000002, 0x00107e46, 0x00000002,
|
||||
0x0700001e, 0x00100042, 0x00000002, 0x0010002a, 0x00000002, 0x00004001, 0x00000001, 0x0700002d,
|
||||
0x001000f2, 0x00000008, 0x00100aa6, 0x00000002, 0x00107e46, 0x00000002, 0x0700001d, 0x00100042,
|
||||
0x00000002, 0x0010001a, 0x00000001, 0x0010002a, 0x00000001, 0x0700001d, 0x00100082, 0x00000002,
|
||||
0x0010000a, 0x00000007, 0x0010001a, 0x00000001, 0x07000001, 0x00100042, 0x00000002, 0x0010003a,
|
||||
0x00000002, 0x0010002a, 0x00000002, 0x0304001f, 0x0010002a, 0x00000002, 0x08000000, 0x00100082,
|
||||
0x00000002, 0x8010002a, 0x00000041, 0x00000001, 0x0010001a, 0x00000001, 0x08000000, 0x00100022,
|
||||
0x00000007, 0x8010002a, 0x00000041, 0x00000001, 0x0010000a, 0x00000007, 0x0700000e, 0x00100082,
|
||||
0x00000002, 0x0010003a, 0x00000002, 0x0010001a, 0x00000007, 0x08000000, 0x001000f2, 0x00000009,
|
||||
0x80100e46, 0x00000041, 0x00000005, 0x00100e46, 0x00000008, 0x09000032, 0x001000f2, 0x00000009,
|
||||
0x00100ff6, 0x00000002, 0x00100e46, 0x00000009, 0x00100e46, 0x00000005, 0x05000036, 0x001000f2,
|
||||
0x00000006, 0x00100e46, 0x00000008, 0x05000036, 0x00100022, 0x00000002, 0x00004001, 0xffffffff,
|
||||
0x05000036, 0x001000f2, 0x00000004, 0x00100e46, 0x00000009, 0x01000002, 0x01000015, 0x05000036,
|
||||
0x001000f2, 0x00000005, 0x00100e46, 0x00000008, 0x05000036, 0x00100042, 0x00000001, 0x0010000a,
|
||||
0x00000007, 0x0700001e, 0x00100082, 0x00000001, 0x0010003a, 0x00000001, 0x00004001, 0x00000001,
|
||||
0x05000036, 0x001000f2, 0x00000006, 0x00100e46, 0x00000008, 0x05000036, 0x00100022, 0x00000002,
|
||||
0x0010002a, 0x00000002, 0x01000016, 0x09000037, 0x001000f2, 0x00000003, 0x00100556, 0x00000002,
|
||||
0x00100e46, 0x00000004, 0x00100e46, 0x00000006, 0x01000015, 0x08000038, 0x001000f2, 0x00000000,
|
||||
0x00100e46, 0x00000003, 0x00208556, 0x00000000, 0x00000001, 0x01000015, 0x0300001f, 0x0010000a,
|
||||
0x00000001, 0x08000020, 0x00100012, 0x00000001, 0x0020800a, 0x00000000, 0x00000001, 0x00004001,
|
||||
0x00000002, 0x0304001f, 0x0010000a, 0x00000001, 0x0900000f, 0x00100012, 0x00000002, 0x00208046,
|
||||
0x00000000, 0x00000003, 0x00208046, 0x00000000, 0x00000003, 0x0900000f, 0x00100022, 0x00000002,
|
||||
0x00208ae6, 0x00000000, 0x00000003, 0x00208ae6, 0x00000000, 0x00000003, 0x09000000, 0x00100062,
|
||||
0x00000001, 0x00208ba6, 0x00000000, 0x00000002, 0x00208106, 0x00000000, 0x00000002, 0x08000000,
|
||||
0x00100062, 0x00000001, 0x80100656, 0x00000041, 0x00000001, 0x00101106, 0x00000000, 0x0800000f,
|
||||
0x00100012, 0x00000003, 0x00100596, 0x00000001, 0x00208046, 0x00000000, 0x00000003, 0x0800000f,
|
||||
0x00100022, 0x00000003, 0x00100596, 0x00000001, 0x00208ae6, 0x00000000, 0x00000003, 0x0700000e,
|
||||
0x00100062, 0x00000001, 0x00100106, 0x00000003, 0x00100106, 0x00000002, 0x0900000f, 0x00100012,
|
||||
0x00000003, 0x00208ae6, 0x00000000, 0x00000002, 0x00208046, 0x00000000, 0x00000003, 0x0900000f,
|
||||
0x00100022, 0x00000003, 0x00208ae6, 0x00000000, 0x00000002, 0x00208ae6, 0x00000000, 0x00000003,
|
||||
0x0700000e, 0x00100032, 0x00000002, 0x00100046, 0x00000003, 0x00100046, 0x00000002, 0x0700000f,
|
||||
0x00100082, 0x00000001, 0x00100596, 0x00000001, 0x00100596, 0x00000001, 0x0500004b, 0x00100082,
|
||||
0x00000001, 0x0010003a, 0x00000001, 0x0700000f, 0x00100022, 0x00000001, 0x00100596, 0x00000001,
|
||||
0x00100046, 0x00000002, 0x0700000e, 0x00100022, 0x00000001, 0x0010001a, 0x00000001, 0x0010003a,
|
||||
0x00000001, 0x0700000f, 0x00100042, 0x00000001, 0x00100046, 0x00000002, 0x00100046, 0x00000002,
|
||||
0x07000000, 0x00100042, 0x00000001, 0x0010002a, 0x00000001, 0x00004001, 0xbf800000, 0x0a000032,
|
||||
0x00100042, 0x00000001, 0x0010001a, 0x00000001, 0x0010001a, 0x00000001, 0x8010002a, 0x00000041,
|
||||
0x00000001, 0x0500004b, 0x00100042, 0x00000001, 0x0010002a, 0x00000001, 0x08000000, 0x00100022,
|
||||
0x00000001, 0x0010002a, 0x00000001, 0x8010001a, 0x00000041, 0x00000001, 0x0700000e, 0x00100022,
|
||||
0x00000001, 0x0010003a, 0x00000001, 0x0010001a, 0x00000001, 0x0a00002d, 0x001000f2, 0x00000002,
|
||||
0x00004002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00107e46, 0x00000002, 0x0a00002d,
|
||||
0x001000f2, 0x00000003, 0x00004002, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00107e46,
|
||||
0x00000002, 0x0700001d, 0x00100042, 0x00000001, 0x0010001a, 0x00000001, 0x0010000a, 0x00000002,
|
||||
0x0304001f, 0x0010002a, 0x00000001, 0x05000036, 0x001000f2, 0x00000004, 0x00100e46, 0x00000003,
|
||||
0x05000036, 0x001000f2, 0x00000005, 0x00100e46, 0x00000003, 0x05000036, 0x001000f2, 0x00000006,
|
||||
0x00100e46, 0x00000003, 0x05000036, 0x00100042, 0x00000001, 0x0010000a, 0x00000002, 0x05000036,
|
||||
0x00100082, 0x00000001, 0x00004001, 0x00000001, 0x05000036, 0x00100022, 0x00000002, 0x00004001,
|
||||
0x00000000, 0x01000030, 0x08000050, 0x00100042, 0x00000002, 0x0010003a, 0x00000001, 0x0020800a,
|
||||
0x00000000, 0x00000004, 0x05000036, 0x00100022, 0x00000002, 0x00004001, 0x00000000, 0x03040003,
|
||||
0x0010002a, 0x00000002, 0x07000029, 0x00100042, 0x00000002, 0x0010003a, 0x00000001, 0x00004001,
|
||||
0x00000001, 0x0700002d, 0x001000f2, 0x00000007, 0x00100aa6, 0x00000002, 0x00107e46, 0x00000002,
|
||||
0x0700001e, 0x00100042, 0x00000002, 0x0010002a, 0x00000002, 0x00004001, 0x00000001, 0x0700002d,
|
||||
0x001000f2, 0x00000008, 0x00100aa6, 0x00000002, 0x00107e46, 0x00000002, 0x0700001d, 0x00100042,
|
||||
0x00000002, 0x0010001a, 0x00000001, 0x0010002a, 0x00000001, 0x0700001d, 0x00100082, 0x00000002,
|
||||
0x0010000a, 0x00000007, 0x0010001a, 0x00000001, 0x07000001, 0x00100042, 0x00000002, 0x0010003a,
|
||||
0x00000002, 0x0010002a, 0x00000002, 0x0304001f, 0x0010002a, 0x00000002, 0x08000000, 0x00100082,
|
||||
0x00000002, 0x8010002a, 0x00000041, 0x00000001, 0x0010001a, 0x00000001, 0x08000000, 0x00100022,
|
||||
0x00000007, 0x8010002a, 0x00000041, 0x00000001, 0x0010000a, 0x00000007, 0x0700000e, 0x00100082,
|
||||
0x00000002, 0x0010003a, 0x00000002, 0x0010001a, 0x00000007, 0x08000000, 0x001000f2, 0x00000009,
|
||||
0x80100e46, 0x00000041, 0x00000005, 0x00100e46, 0x00000008, 0x09000032, 0x001000f2, 0x00000009,
|
||||
0x00100ff6, 0x00000002, 0x00100e46, 0x00000009, 0x00100e46, 0x00000005, 0x05000036, 0x001000f2,
|
||||
0x00000006, 0x00100e46, 0x00000008, 0x05000036, 0x00100022, 0x00000002, 0x00004001, 0xffffffff,
|
||||
0x05000036, 0x001000f2, 0x00000004, 0x00100e46, 0x00000009, 0x01000002, 0x01000015, 0x05000036,
|
||||
0x001000f2, 0x00000005, 0x00100e46, 0x00000008, 0x05000036, 0x00100042, 0x00000001, 0x0010000a,
|
||||
0x00000007, 0x0700001e, 0x00100082, 0x00000001, 0x0010003a, 0x00000001, 0x00004001, 0x00000001,
|
||||
0x05000036, 0x001000f2, 0x00000006, 0x00100e46, 0x00000008, 0x05000036, 0x00100022, 0x00000002,
|
||||
0x0010002a, 0x00000002, 0x01000016, 0x09000037, 0x001000f2, 0x00000003, 0x00100556, 0x00000002,
|
||||
0x00100e46, 0x00000004, 0x00100e46, 0x00000006, 0x01000015, 0x08000038, 0x001000f2, 0x00000000,
|
||||
0x00100e46, 0x00000003, 0x00208556, 0x00000000, 0x00000001, 0x01000015, 0x0300001f, 0x0010000a,
|
||||
0x00000001, 0x08000020, 0x00100012, 0x00000001, 0x0020800a, 0x00000000, 0x00000001, 0x00004001,
|
||||
0x00000003, 0x0304001f, 0x0010000a, 0x00000001, 0x0800000f, 0x00100022, 0x00000001, 0x00101046,
|
||||
0x00000000, 0x00208046, 0x00000000, 0x00000002, 0x08000000, 0x00100012, 0x00000002, 0x0010001a,
|
||||
0x00000001, 0x0020802a, 0x00000000, 0x00000002, 0x0800000f, 0x00100022, 0x00000001, 0x00101046,
|
||||
0x00000000, 0x00208046, 0x00000000, 0x00000003, 0x08000000, 0x00100022, 0x00000002, 0x0010001a,
|
||||
0x00000001, 0x0020802a, 0x00000000, 0x00000003, 0x09000045, 0x001000f2, 0x00000002, 0x00100046,
|
||||
0x00000002, 0x00107e46, 0x00000000, 0x00106000, 0x00000000, 0x0a000037, 0x00100082, 0x00000002,
|
||||
0x0020803a, 0x00000000, 0x00000003, 0x00004001, 0x3f800000, 0x0010003a, 0x00000002, 0x08000038,
|
||||
0x001000f2, 0x00000000, 0x00100e46, 0x00000002, 0x00208556, 0x00000000, 0x00000001, 0x01000015,
|
||||
0x05000036, 0x00100012, 0x00000002, 0x00004001, 0x00000000, 0x06000036, 0x00100082, 0x00000002,
|
||||
0x0020801a, 0x00000000, 0x00000001, 0x09000037, 0x001000f2, 0x00000000, 0x00100006, 0x00000001,
|
||||
0x00100e46, 0x00000000, 0x00100c06, 0x00000002, 0x01000015, 0x01000015, 0x01000015, 0x0800004f,
|
||||
0x00100012, 0x00000001, 0x0020800a, 0x00000000, 0x00000005, 0x00004001, 0x00000004, 0x0304001f,
|
||||
0x0010000a, 0x00000001, 0x09000038, 0x00100012, 0x00000001, 0x0020801a, 0x00000000, 0x00000005,
|
||||
0x0020803a, 0x00000000, 0x00000006, 0x0404001f, 0x0020800a, 0x00000000, 0x00000005, 0x08000020,
|
||||
0x00100022, 0x00000001, 0x0020800a, 0x00000000, 0x00000005, 0x00004001, 0x00000001, 0x0304001f,
|
||||
0x0010001a, 0x00000001, 0x09000000, 0x001000c2, 0x00000001, 0x00101406, 0x00000000, 0x80208406,
|
||||
0x00000041, 0x00000000, 0x00000006, 0x0a000000, 0x00100032, 0x00000002, 0x80208046, 0x00000041,
|
||||
0x00000000, 0x00000006, 0x00208ae6, 0x00000000, 0x00000006, 0x0700000f, 0x00100042, 0x00000001,
|
||||
0x00100046, 0x00000002, 0x00100ae6, 0x00000001, 0x0700000f, 0x00100082, 0x00000001, 0x00100046,
|
||||
0x00000002, 0x00100046, 0x00000002, 0x0700000e, 0x00100042, 0x00000001, 0x0010002a, 0x00000001,
|
||||
0x0010003a, 0x00000001, 0x0a00002d, 0x001000f2, 0x00000002, 0x00004002, 0x00000000, 0x00000000,
|
||||
0x00000000, 0x00000000, 0x00107e46, 0x00000003, 0x0a00002d, 0x001000f2, 0x00000003, 0x00004002,
|
||||
0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00107e46, 0x00000003, 0x0700001d, 0x00100082,
|
||||
0x00000001, 0x0010002a, 0x00000001, 0x0010000a, 0x00000002, 0x0304001f, 0x0010003a, 0x00000001,
|
||||
0x05000036, 0x00100082, 0x00000001, 0x0010003a, 0x00000003, 0x05000036, 0x00100062, 0x00000002,
|
||||
0x00100ff6, 0x00000003, 0x05000036, 0x00100082, 0x00000002, 0x0010000a, 0x00000002, 0x08000036,
|
||||
0x00100032, 0x00000003, 0x00004002, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x01000030,
|
||||
0x08000050, 0x00100042, 0x00000003, 0x0010000a, 0x00000003, 0x0020800a, 0x00000000, 0x00000007,
|
||||
0x05000036, 0x00100022, 0x00000003, 0x00004001, 0x00000000, 0x03040003, 0x0010002a, 0x00000003,
|
||||
0x07000029, 0x00100042, 0x00000003, 0x0010000a, 0x00000003, 0x00004001, 0x00000001, 0x0700002d,
|
||||
0x001000f2, 0x00000004, 0x00100aa6, 0x00000003, 0x00107e46, 0x00000003, 0x0700001e, 0x00100042,
|
||||
0x00000003, 0x0010002a, 0x00000003, 0x00004001, 0x00000001, 0x0700002d, 0x001000f2, 0x00000005,
|
||||
0x00100aa6, 0x00000003, 0x00107e46, 0x00000003, 0x0700001d, 0x00100042, 0x00000003, 0x0010002a,
|
||||
0x00000001, 0x0010003a, 0x00000002, 0x0700001d, 0x00100022, 0x00000004, 0x0010000a, 0x00000004,
|
||||
0x0010002a, 0x00000001, 0x07000001, 0x00100042, 0x00000003, 0x0010002a, 0x00000003, 0x0010001a,
|
||||
0x00000004, 0x0304001f, 0x0010002a, 0x00000003, 0x08000000, 0x00100022, 0x00000004, 0x0010002a,
|
||||
0x00000001, 0x8010003a, 0x00000041, 0x00000002, 0x08000000, 0x00100042, 0x00000004, 0x8010003a,
|
||||
0x00000041, 0x00000002, 0x0010000a, 0x00000004, 0x0700000e, 0x00100022, 0x00000004, 0x0010001a,
|
||||
0x00000004, 0x0010002a, 0x00000004, 0x08000000, 0x00100042, 0x00000004, 0x8010001a, 0x00000041,
|
||||
0x00000002, 0x0010003a, 0x00000005, 0x09000032, 0x00100022, 0x00000004, 0x0010001a, 0x00000004,
|
||||
0x0010002a, 0x00000004, 0x0010001a, 0x00000002, 0x05000036, 0x00100042, 0x00000002, 0x0010003a,
|
||||
0x00000005, 0x05000036, 0x00100022, 0x00000003, 0x00004001, 0xffffffff, 0x05000036, 0x00100082,
|
||||
0x00000001, 0x0010001a, 0x00000004, 0x01000002, 0x01000015, 0x05000036, 0x00100022, 0x00000002,
|
||||
0x0010003a, 0x00000005, 0x05000036, 0x00100082, 0x00000002, 0x0010000a, 0x00000004, 0x0700001e,
|
||||
0x00100012, 0x00000003, 0x0010000a, 0x00000003, 0x00004001, 0x00000001, 0x05000036, 0x00100042,
|
||||
0x00000002, 0x0010003a, 0x00000005, 0x05000036, 0x00100032, 0x00000003, 0x00100086, 0x00000003,
|
||||
0x01000016, 0x09000037, 0x00100042, 0x00000001, 0x0010001a, 0x00000003, 0x0010003a, 0x00000001,
|
||||
0x0010002a, 0x00000002, 0x01000012, 0x05000036, 0x00100042, 0x00000001, 0x0010003a, 0x00000003,
|
||||
0x01000015, 0x08000038, 0x00100012, 0x00000001, 0x0010002a, 0x00000001, 0x0020801a, 0x00000000,
|
||||
0x00000005, 0x01000015, 0x0300001f, 0x0010001a, 0x00000001, 0x08000020, 0x00100022, 0x00000001,
|
||||
0x0020800a, 0x00000000, 0x00000005, 0x00004001, 0x00000002, 0x0304001f, 0x0010001a, 0x00000001,
|
||||
0x0900000f, 0x00100012, 0x00000002, 0x00208046, 0x00000000, 0x00000007, 0x00208046, 0x00000000,
|
||||
0x00000007, 0x0900000f, 0x00100022, 0x00000002, 0x00208ae6, 0x00000000, 0x00000007, 0x00208ae6,
|
||||
0x00000000, 0x00000007, 0x09000000, 0x001000c2, 0x00000001, 0x00208ea6, 0x00000000, 0x00000006,
|
||||
0x00208406, 0x00000000, 0x00000006, 0x08000000, 0x001000c2, 0x00000001, 0x80100ea6, 0x00000041,
|
||||
0x00000001, 0x00101406, 0x00000000, 0x0800000f, 0x00100012, 0x00000003, 0x00100ae6, 0x00000001,
|
||||
0x00208046, 0x00000000, 0x00000007, 0x0800000f, 0x00100022, 0x00000003, 0x00100ae6, 0x00000001,
|
||||
0x00208ae6, 0x00000000, 0x00000007, 0x0700000e, 0x001000c2, 0x00000001, 0x00100406, 0x00000003,
|
||||
0x00100406, 0x00000002, 0x0900000f, 0x00100012, 0x00000003, 0x00208ae6, 0x00000000, 0x00000006,
|
||||
0x00208046, 0x00000000, 0x00000007, 0x0900000f, 0x00100022, 0x00000003, 0x00208ae6, 0x00000000,
|
||||
0x00000006, 0x00208ae6, 0x00000000, 0x00000007, 0x0700000e, 0x00100032, 0x00000002, 0x00100046,
|
||||
0x00000003, 0x00100046, 0x00000002, 0x0700000f, 0x00100042, 0x00000002, 0x00100ae6, 0x00000001,
|
||||
0x00100ae6, 0x00000001, 0x0500004b, 0x00100042, 0x00000002, 0x0010002a, 0x00000002, 0x0700000f,
|
||||
0x00100042, 0x00000001, 0x00100ae6, 0x00000001, 0x00100046, 0x00000002, 0x0700000e, 0x00100042,
|
||||
0x00000001, 0x0010002a, 0x00000001, 0x0010002a, 0x00000002, 0x0700000f, 0x00100082, 0x00000001,
|
||||
0x00100046, 0x00000002, 0x00100046, 0x00000002, 0x07000000, 0x00100082, 0x00000001, 0x0010003a,
|
||||
0x00000001, 0x00004001, 0xbf800000, 0x0a000032, 0x00100082, 0x00000001, 0x0010002a, 0x00000001,
|
||||
0x0010002a, 0x00000001, 0x8010003a, 0x00000041, 0x00000001, 0x0500004b, 0x00100082, 0x00000001,
|
||||
0x0010003a, 0x00000001, 0x08000000, 0x00100042, 0x00000001, 0x0010003a, 0x00000001, 0x8010002a,
|
||||
0x00000041, 0x00000001, 0x0700000e, 0x00100042, 0x00000001, 0x0010002a, 0x00000002, 0x0010002a,
|
||||
0x00000001, 0x0a00002d, 0x001000f2, 0x00000002, 0x00004002, 0x00000000, 0x00000000, 0x00000000,
|
||||
0x00000000, 0x00107e46, 0x00000003, 0x0a00002d, 0x001000f2, 0x00000003, 0x00004002, 0x00000001,
|
||||
0x00000001, 0x00000001, 0x00000001, 0x00107e46, 0x00000003, 0x0700001d, 0x00100082, 0x00000001,
|
||||
0x0010002a, 0x00000001, 0x0010000a, 0x00000002, 0x0304001f, 0x0010003a, 0x00000001, 0x05000036,
|
||||
0x00100082, 0x00000001, 0x0010003a, 0x00000003, 0x05000036, 0x00100062, 0x00000002, 0x00100ff6,
|
||||
0x00000003, 0x05000036, 0x00100082, 0x00000002, 0x0010000a, 0x00000002, 0x08000036, 0x00100032,
|
||||
0x00000003, 0x00004002, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x01000030, 0x08000050,
|
||||
0x00100042, 0x00000003, 0x0010000a, 0x00000003, 0x0020800a, 0x00000000, 0x00000008, 0x05000036,
|
||||
0x00100022, 0x00000003, 0x00004001, 0x00000000, 0x03040003, 0x0010002a, 0x00000003, 0x07000029,
|
||||
0x00100042, 0x00000003, 0x0010000a, 0x00000003, 0x00004001, 0x00000001, 0x0700002d, 0x001000f2,
|
||||
0x00000004, 0x00100aa6, 0x00000003, 0x00107e46, 0x00000003, 0x0700001e, 0x00100042, 0x00000003,
|
||||
0x0010002a, 0x00000003, 0x00004001, 0x00000001, 0x0700002d, 0x001000f2, 0x00000005, 0x00100aa6,
|
||||
0x00000003, 0x00107e46, 0x00000003, 0x0700001d, 0x00100042, 0x00000003, 0x0010002a, 0x00000001,
|
||||
0x0010003a, 0x00000002, 0x0700001d, 0x00100022, 0x00000004, 0x0010000a, 0x00000004, 0x0010002a,
|
||||
0x00000001, 0x07000001, 0x00100042, 0x00000003, 0x0010002a, 0x00000003, 0x0010001a, 0x00000004,
|
||||
0x0304001f, 0x0010002a, 0x00000003, 0x08000000, 0x00100022, 0x00000004, 0x0010002a, 0x00000001,
|
||||
0x8010003a, 0x00000041, 0x00000002, 0x08000000, 0x00100042, 0x00000004, 0x8010003a, 0x00000041,
|
||||
0x00000002, 0x0010000a, 0x00000004, 0x0700000e, 0x00100022, 0x00000004, 0x0010001a, 0x00000004,
|
||||
0x0010002a, 0x00000004, 0x08000000, 0x00100042, 0x00000004, 0x8010001a, 0x00000041, 0x00000002,
|
||||
0x0010003a, 0x00000005, 0x09000032, 0x00100022, 0x00000004, 0x0010001a, 0x00000004, 0x0010002a,
|
||||
0x00000004, 0x0010001a, 0x00000002, 0x05000036, 0x00100042, 0x00000002, 0x0010003a, 0x00000005,
|
||||
0x05000036, 0x00100022, 0x00000003, 0x00004001, 0xffffffff, 0x05000036, 0x00100082, 0x00000001,
|
||||
0x0010001a, 0x00000004, 0x01000002, 0x01000015, 0x05000036, 0x00100022, 0x00000002, 0x0010003a,
|
||||
0x00000005, 0x05000036, 0x00100082, 0x00000002, 0x0010000a, 0x00000004, 0x0700001e, 0x00100012,
|
||||
0x00000003, 0x0010000a, 0x00000003, 0x00004001, 0x00000001, 0x05000036, 0x00100042, 0x00000002,
|
||||
0x0010003a, 0x00000005, 0x05000036, 0x00100032, 0x00000003, 0x00100086, 0x00000003, 0x01000016,
|
||||
0x09000037, 0x00100042, 0x00000001, 0x0010001a, 0x00000003, 0x0010003a, 0x00000001, 0x0010002a,
|
||||
0x00000002, 0x01000012, 0x05000036, 0x00100042, 0x00000001, 0x0010003a, 0x00000003, 0x01000015,
|
||||
0x08000038, 0x00100012, 0x00000001, 0x0010002a, 0x00000001, 0x0020801a, 0x00000000, 0x00000005,
|
||||
0x01000015, 0x0300001f, 0x0010001a, 0x00000001, 0x08000020, 0x00100022, 0x00000001, 0x0020800a,
|
||||
0x00000000, 0x00000005, 0x00004001, 0x00000003, 0x0304001f, 0x0010001a, 0x00000001, 0x0800000f,
|
||||
0x00100042, 0x00000001, 0x00101046, 0x00000000, 0x00208046, 0x00000000, 0x00000006, 0x08000000,
|
||||
0x00100012, 0x00000002, 0x0010002a, 0x00000001, 0x0020802a, 0x00000000, 0x00000006, 0x0800000f,
|
||||
0x00100042, 0x00000001, 0x00101046, 0x00000000, 0x00208046, 0x00000000, 0x00000007, 0x08000000,
|
||||
0x00100022, 0x00000002, 0x0010002a, 0x00000001, 0x0020802a, 0x00000000, 0x00000007, 0x09000045,
|
||||
0x001000f2, 0x00000002, 0x00100046, 0x00000002, 0x00107e46, 0x00000001, 0x00106000, 0x00000001,
|
||||
0x0a000037, 0x00100042, 0x00000001, 0x0020803a, 0x00000000, 0x00000007, 0x00004001, 0x3f800000,
|
||||
0x0010003a, 0x00000002, 0x08000038, 0x00100012, 0x00000001, 0x0010002a, 0x00000001, 0x0020801a,
|
||||
0x00000000, 0x00000005, 0x01000015, 0x0a000037, 0x00100012, 0x00000001, 0x0010001a, 0x00000001,
|
||||
0x0010000a, 0x00000001, 0x0020801a, 0x00000000, 0x00000005, 0x01000015, 0x01000015, 0x01000015,
|
||||
0x07000038, 0x001020f2, 0x00000000, 0x00100e46, 0x00000000, 0x00100006, 0x00000001, 0x01000012,
|
||||
0x05000036, 0x001020f2, 0x00000000, 0x00100e46, 0x00000000, 0x01000015, 0x0404001f, 0x0020800a,
|
||||
0x00000000, 0x00000000, 0x0500000b, 0x00100032, 0x00000000, 0x00101046, 0x00000001, 0x0500000c,
|
||||
0x001000c2, 0x00000000, 0x00101406, 0x00000001, 0x08000027, 0x00100012, 0x00000001, 0x0020801a,
|
||||
0x00000000, 0x00000000, 0x00004001, 0x00000000, 0x0500003b, 0x00100022, 0x00000001, 0x0010000a,
|
||||
0x00000001, 0x07000000, 0x001000c2, 0x00000001, 0x00101406, 0x00000001, 0x00101406, 0x00000001,
|
||||
0x07000038, 0x001000f2, 0x00000002, 0x00100d86, 0x00000000, 0x00100fa6, 0x00000001, 0x0a000032,
|
||||
0x00100032, 0x00000000, 0x00100aa6, 0x00000001, 0x00100086, 0x00000000, 0x801005d6, 0x00000041,
|
||||
0x00000000, 0x0700000f, 0x00100042, 0x00000000, 0x00100046, 0x00000000, 0x00101ae6, 0x00000001,
|
||||
0x07000031, 0x00100042, 0x00000000, 0x0010002a, 0x00000000, 0x00004001, 0x00000000, 0x07000001,
|
||||
0x00100042, 0x00000000, 0x0010001a, 0x00000001, 0x0010002a, 0x00000000, 0x0304000d, 0x0010002a,
|
||||
0x00000000, 0x07000038, 0x00100062, 0x00000000, 0x00100556, 0x00000000, 0x00101106, 0x00000003,
|
||||
0x09000032, 0x00100032, 0x00000000, 0x00101046, 0x00000002, 0x00100006, 0x00000000, 0x00100596,
|
||||
0x00000000, 0x0700000f, 0x00100012, 0x00000000, 0x00100046, 0x00000000, 0x00100046, 0x00000000,
|
||||
0x0500004b, 0x00100012, 0x00000000, 0x0010000a, 0x00000000, 0x07000038, 0x00100062, 0x00000000,
|
||||
0x00101106, 0x00000001, 0x00101106, 0x00000001, 0x0a000032, 0x00100082, 0x00000000, 0x0010100a,
|
||||
0x00000001, 0x0010100a, 0x00000001, 0x8010101a, 0x00000041, 0x00000001, 0x08000000, 0x00100012,
|
||||
0x00000000, 0x8010003a, 0x000000c1, 0x00000000, 0x0010000a, 0x00000000, 0x07000031, 0x00100012,
|
||||
0x00000000, 0x0010000a, 0x00000000, 0x00004001, 0x00000000, 0x07000001, 0x00100012, 0x00000000,
|
||||
0x0010001a, 0x00000001, 0x0010000a, 0x00000000, 0x0304000d, 0x0010000a, 0x00000000, 0x07000000,
|
||||
0x00100092, 0x00000000, 0x00100ea6, 0x00000002, 0x00100406, 0x00000002, 0x0700000f, 0x00100022,
|
||||
0x00000001, 0x001000c6, 0x00000000, 0x00101ae6, 0x00000001, 0x07000031, 0x00100022, 0x00000001,
|
||||
0x0010001a, 0x00000001, 0x00004001, 0x00000000, 0x07000001, 0x00100022, 0x00000001, 0x0010000a,
|
||||
0x00000001, 0x0010001a, 0x00000001, 0x0304000d, 0x0010001a, 0x00000001, 0x07000038, 0x00100062,
|
||||
0x00000001, 0x00100ff6, 0x00000000, 0x00101106, 0x00000003, 0x09000032, 0x00100092, 0x00000000,
|
||||
0x00101406, 0x00000002, 0x00100006, 0x00000000, 0x00100956, 0x00000001, 0x0700000f, 0x00100012,
|
||||
0x00000000, 0x001000c6, 0x00000000, 0x001000c6, 0x00000000, 0x0500004b, 0x00100012, 0x00000000,
|
||||
0x0010000a, 0x00000000, 0x07000000, 0x00100022, 0x00000000, 0x0010002a, 0x00000000, 0x0010001a,
|
||||
0x00000000, 0x07000000, 0x00100022, 0x00000000, 0x0010001a, 0x00000000, 0x00004001, 0xbf800000,
|
||||
0x08000000, 0x00100012, 0x00000000, 0x8010001a, 0x000000c1, 0x00000000, 0x0010000a, 0x00000000,
|
||||
0x07000031, 0x00100012, 0x00000000, 0x0010000a, 0x00000000, 0x00004001, 0x00000000, 0x07000001,
|
||||
0x00100012, 0x00000000, 0x0010000a, 0x00000001, 0x0010000a, 0x00000000, 0x0304000d, 0x0010000a,
|
||||
0x00000000, 0x01000012, 0x08000027, 0x00100012, 0x00000000, 0x0020801a, 0x00000000, 0x00000000,
|
||||
0x00004001, 0x00000000, 0x0500003b, 0x00100022, 0x00000000, 0x0010000a, 0x00000000, 0x07000038,
|
||||
0x001000c2, 0x00000000, 0x00101406, 0x00000001, 0x00101406, 0x00000001, 0x0a000032, 0x00100012,
|
||||
0x00000001, 0x0010100a, 0x00000001, 0x0010100a, 0x00000001, 0x8010101a, 0x00000041, 0x00000001,
|
||||
0x07000038, 0x00100012, 0x00000001, 0x0010000a, 0x00000001, 0x0010102a, 0x00000001, 0x07000031,
|
||||
0x00100012, 0x00000001, 0x0010000a, 0x00000001, 0x00004001, 0x00000000, 0x07000001, 0x00100022,
|
||||
0x00000000, 0x0010001a, 0x00000000, 0x0010000a, 0x00000001, 0x0304000d, 0x0010001a, 0x00000000,
|
||||
0x07000000, 0x00100022, 0x00000000, 0x0010003a, 0x00000000, 0x0010002a, 0x00000000, 0x07000000,
|
||||
0x00100022, 0x00000000, 0x0010001a, 0x00000000, 0x00004001, 0xbf800000, 0x07000038, 0x00100022,
|
||||
0x00000000, 0x0010001a, 0x00000000, 0x0010102a, 0x00000001, 0x07000031, 0x00100022, 0x00000000,
|
||||
0x0010001a, 0x00000000, 0x00004001, 0x00000000, 0x07000001, 0x00100012, 0x00000000, 0x0010000a,
|
||||
0x00000000, 0x0010001a, 0x00000000, 0x0304000d, 0x0010000a, 0x00000000, 0x01000015, 0x0100003e,
|
||||
};
|
||||
static const char ps_code[] =
|
||||
"#define BRUSH_TYPE_SOLID 0\n"
|
||||
"#define BRUSH_TYPE_LINEAR 1\n"
|
||||
"#define BRUSH_TYPE_RADIAL 2\n"
|
||||
"#define BRUSH_TYPE_BITMAP 3\n"
|
||||
"#define BRUSH_TYPE_COUNT 4\n"
|
||||
"\n"
|
||||
"bool outline;\n"
|
||||
"bool is_arc;\n"
|
||||
"struct brush\n"
|
||||
"{\n"
|
||||
" uint type;\n"
|
||||
" float opacity;\n"
|
||||
" float4 data[3];\n"
|
||||
"} colour_brush, opacity_brush;\n"
|
||||
"\n"
|
||||
"SamplerState s0, s1;\n"
|
||||
"Texture2D t0, t1;\n"
|
||||
"Buffer<float4> b0, b1;\n"
|
||||
"\n"
|
||||
"struct input\n"
|
||||
"{\n"
|
||||
" float2 p : WORLD_POSITION;\n"
|
||||
" float4 b : BEZIER;\n"
|
||||
" nointerpolation float2x2 stroke_transform : STROKE_TRANSFORM;\n"
|
||||
"};\n"
|
||||
"\n"
|
||||
"float4 sample_gradient(Buffer<float4> gradient, uint stop_count, float position)\n"
|
||||
"{\n"
|
||||
" float4 c_low, c_high;\n"
|
||||
" float p_low, p_high;\n"
|
||||
" uint i;\n"
|
||||
"\n"
|
||||
" p_low = gradient.Load(0).x;\n"
|
||||
" c_low = gradient.Load(1);\n"
|
||||
" c_high = c_low;\n"
|
||||
"\n"
|
||||
" if (position < p_low)\n"
|
||||
" return c_low;\n"
|
||||
"\n"
|
||||
" for (i = 1; i < stop_count; ++i)\n"
|
||||
" {\n"
|
||||
" p_high = gradient.Load(i * 2).x;\n"
|
||||
" c_high = gradient.Load(i * 2 + 1);\n"
|
||||
"\n"
|
||||
" if (position >= p_low && position <= p_high)\n"
|
||||
" return lerp(c_low, c_high, (position - p_low) / (p_high - p_low));\n"
|
||||
"\n"
|
||||
" p_low = p_high;\n"
|
||||
" c_low = c_high;\n"
|
||||
" }\n"
|
||||
"\n"
|
||||
" return c_high;\n"
|
||||
"}\n"
|
||||
"\n"
|
||||
"float4 brush_linear(struct brush brush, Buffer<float4> gradient, float2 position)\n"
|
||||
"{\n"
|
||||
" float2 start, end, v_p, v_q;\n"
|
||||
" uint stop_count;\n"
|
||||
" float p;\n"
|
||||
"\n"
|
||||
" start = brush.data[0].xy;\n"
|
||||
" end = brush.data[0].zw;\n"
|
||||
" stop_count = asuint(brush.data[1].x);\n"
|
||||
"\n"
|
||||
" v_p = position - start;\n"
|
||||
" v_q = end - start;\n"
|
||||
" p = dot(v_q, v_p) / dot(v_q, v_q);\n"
|
||||
"\n"
|
||||
" return sample_gradient(gradient, stop_count, p);\n"
|
||||
"}\n"
|
||||
"\n"
|
||||
"float4 brush_radial(struct brush brush, Buffer<float4> gradient, float2 position)\n"
|
||||
"{\n"
|
||||
" float2 centre, offset, ra, rb, v_p, v_q, r;\n"
|
||||
" float b, c, l, t;\n"
|
||||
" uint stop_count;\n"
|
||||
"\n"
|
||||
" centre = brush.data[0].xy;\n"
|
||||
" offset = brush.data[0].zw;\n"
|
||||
" ra = brush.data[1].xy;\n"
|
||||
" rb = brush.data[1].zw;\n"
|
||||
" stop_count = asuint(brush.data[2].x);\n"
|
||||
"\n"
|
||||
" /* Project onto ra, rb. */\n"
|
||||
" r = float2(dot(ra, ra), dot(rb, rb));\n"
|
||||
" v_p = position - (centre + offset);\n"
|
||||
" v_p = float2(dot(v_p, ra), dot(v_p, rb)) / r;\n"
|
||||
" v_q = float2(dot(offset, ra), dot(offset, rb)) / r;\n"
|
||||
"\n"
|
||||
" /* ‖t·p̂ + q⃑‖ = 1\n"
|
||||
" * (t·p̂ + q⃑) · (t·p̂ + q⃑) = 1\n"
|
||||
" * t² + 2·(p̂·q⃑)·t + (q⃑·q⃑) = 1\n"
|
||||
" *\n"
|
||||
" * b = p̂·q⃑\n"
|
||||
" * c = q⃑·q⃑ - 1\n"
|
||||
" * t = -b + √(b² - c) */\n"
|
||||
" l = length(v_p);\n"
|
||||
" b = dot(v_p, v_q) / l;\n"
|
||||
" c = dot(v_q, v_q) - 1.0;\n"
|
||||
" t = -b + sqrt(b * b - c);\n"
|
||||
"\n"
|
||||
" return sample_gradient(gradient, stop_count, l / t);\n"
|
||||
"}\n"
|
||||
"\n"
|
||||
"float4 brush_bitmap(struct brush brush, Texture2D t, SamplerState s, float2 position)\n"
|
||||
"{\n"
|
||||
" float3 transform[2];\n"
|
||||
" bool ignore_alpha;\n"
|
||||
" float2 texcoord;\n"
|
||||
" float4 colour;\n"
|
||||
"\n"
|
||||
" transform[0] = brush.data[0].xyz;\n"
|
||||
" transform[1] = brush.data[1].xyz;\n"
|
||||
" ignore_alpha = asuint(brush.data[1].w);\n"
|
||||
"\n"
|
||||
" texcoord.x = dot(position.xy, transform[0].xy) + transform[0].z;\n"
|
||||
" texcoord.y = dot(position.xy, transform[1].xy) + transform[1].z;\n"
|
||||
" colour = t.Sample(s, texcoord);\n"
|
||||
" if (ignore_alpha)\n"
|
||||
" colour.a = 1.0;\n"
|
||||
" return colour;\n"
|
||||
"}\n"
|
||||
"\n"
|
||||
"float4 sample_brush(struct brush brush, Texture2D t, SamplerState s, Buffer<float4> b, float2 position)\n"
|
||||
"{\n"
|
||||
" if (brush.type == BRUSH_TYPE_SOLID)\n"
|
||||
" return brush.data[0] * brush.opacity;\n"
|
||||
" if (brush.type == BRUSH_TYPE_LINEAR)\n"
|
||||
" return brush_linear(brush, b, position) * brush.opacity;\n"
|
||||
" if (brush.type == BRUSH_TYPE_RADIAL)\n"
|
||||
" return brush_radial(brush, b, position) * brush.opacity;\n"
|
||||
" if (brush.type == BRUSH_TYPE_BITMAP)\n"
|
||||
" return brush_bitmap(brush, t, s, position) * brush.opacity;\n"
|
||||
" return float4(0.0, 0.0, 0.0, brush.opacity);\n"
|
||||
"}\n"
|
||||
"\n"
|
||||
"float4 main(struct input i) : SV_Target\n"
|
||||
"{\n"
|
||||
" float4 colour;\n"
|
||||
"\n"
|
||||
" colour = sample_brush(colour_brush, t0, s0, b0, i.p);\n"
|
||||
" if (opacity_brush.type < BRUSH_TYPE_COUNT)\n"
|
||||
" colour *= sample_brush(opacity_brush, t1, s1, b1, i.p).a;\n"
|
||||
"\n"
|
||||
" if (outline)\n"
|
||||
" {\n"
|
||||
" float2 du, dv, df;\n"
|
||||
" float4 uv;\n"
|
||||
"\n"
|
||||
" /* Evaluate the implicit form of the curve (u² - v = 0\n"
|
||||
" * for Béziers, u² + v² - 1 = 0 for arcs) in texture\n"
|
||||
" * space, using the screen-space partial derivatives\n"
|
||||
" * to convert the calculated distance to object space.\n"
|
||||
" *\n"
|
||||
" * d(x, y) = |f(x, y)| / ‖∇f(x, y)‖\n"
|
||||
" * = |f(x, y)| / √((∂f/∂x)² + (∂f/∂y)²)\n"
|
||||
" *\n"
|
||||
" * For Béziers:\n"
|
||||
" * f(x, y) = u(x, y)² - v(x, y)\n"
|
||||
" * ∂f/∂x = 2u · ∂u/∂x - ∂v/∂x\n"
|
||||
" * ∂f/∂y = 2u · ∂u/∂y - ∂v/∂y\n"
|
||||
" *\n"
|
||||
" * For arcs:\n"
|
||||
" * f(x, y) = u(x, y)² + v(x, y)² - 1\n"
|
||||
" * ∂f/∂x = 2u · ∂u/∂x + 2v · ∂v/∂x\n"
|
||||
" * ∂f/∂y = 2u · ∂u/∂y + 2v · ∂v/∂y */\n"
|
||||
" uv = i.b;\n"
|
||||
" du = float2(ddx(uv.x), ddy(uv.x));\n"
|
||||
" dv = float2(ddx(uv.y), ddy(uv.y));\n"
|
||||
"\n"
|
||||
" if (!is_arc)\n"
|
||||
" {\n"
|
||||
" df = 2.0f * uv.x * du - dv;\n"
|
||||
"\n"
|
||||
" clip(dot(df, uv.zw));\n"
|
||||
" clip(length(mul(i.stroke_transform, df)) - abs(uv.x * uv.x - uv.y));\n"
|
||||
" }\n"
|
||||
" else\n"
|
||||
" {\n"
|
||||
" df = 2.0f * uv.x * du + 2.0f * uv.y * dv;\n"
|
||||
"\n"
|
||||
" clip(dot(df, uv.zw));\n"
|
||||
" clip(length(mul(i.stroke_transform, df)) - abs(uv.x * uv.x + uv.y * uv.y - 1.0f));\n"
|
||||
" }\n"
|
||||
" }\n"
|
||||
" else\n"
|
||||
" {\n"
|
||||
" /* Evaluate the implicit form of the curve in texture space.\n"
|
||||
" * \"i.b.z\" determines which side of the curve is shaded. */\n"
|
||||
" if (!is_arc)\n"
|
||||
" {\n"
|
||||
" clip((i.b.x * i.b.x - i.b.y) * i.b.z);\n"
|
||||
" }\n"
|
||||
" else\n"
|
||||
" {\n"
|
||||
" clip((i.b.x * i.b.x + i.b.y * i.b.y - 1.0) * i.b.z);\n"
|
||||
" }\n"
|
||||
" }\n"
|
||||
"\n"
|
||||
" return colour;\n"
|
||||
"}\n";
|
||||
static const struct shape_info
|
||||
{
|
||||
enum d2d_shape_type shape_type;
|
||||
|
@ -4005,7 +3746,6 @@ static HRESULT d2d_device_context_init(struct d2d_device_context *render_target,
|
|||
for (i = 0; i < ARRAY_SIZE(shape_info); ++i)
|
||||
{
|
||||
const struct shape_info *si = &shape_info[i];
|
||||
ID3D10Blob *compiled;
|
||||
|
||||
if (FAILED(hr = D3DCompile(si->vs_code, si->vs_code_size, si->name, NULL, NULL,
|
||||
"main", "vs_4_0", 0, 0, &compiled, NULL)))
|
||||
|
@ -4048,13 +3788,23 @@ static HRESULT d2d_device_context_init(struct d2d_device_context *render_target,
|
|||
goto err;
|
||||
}
|
||||
|
||||
if (FAILED(hr = ID3D11Device1_CreatePixelShader(render_target->d3d_device,
|
||||
ps_code, sizeof(ps_code), NULL, &render_target->ps)))
|
||||
if (FAILED(hr = D3DCompile(ps_code, sizeof(ps_code) - 1, "ps", NULL, NULL, "main", "ps_4_0", 0, 0, &compiled, NULL)))
|
||||
{
|
||||
WARN("Failed to create pixel shader, hr %#lx.\n", hr);
|
||||
WARN("Failed to compile the pixel shader, hr %#lx.\n", hr);
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (FAILED(hr = ID3D11Device1_CreatePixelShader(render_target->d3d_device,
|
||||
ID3D10Blob_GetBufferPointer(compiled), ID3D10Blob_GetBufferSize(compiled),
|
||||
NULL, &render_target->ps)))
|
||||
{
|
||||
WARN("Failed to create pixel shader, hr %#lx.\n", hr);
|
||||
ID3D10Blob_Release(compiled);
|
||||
goto err;
|
||||
}
|
||||
|
||||
ID3D10Blob_Release(compiled);
|
||||
|
||||
buffer_desc.ByteWidth = sizeof(struct d2d_ps_cb);
|
||||
buffer_desc.Usage = D3D11_USAGE_DYNAMIC;
|
||||
buffer_desc.BindFlags = D3D11_BIND_CONSTANT_BUFFER;
|
||||
|
|
Loading…
Reference in a new issue