Store coordinates for rendering cubic bezier and modify pixel shader for rendering cubic beziers.
Signed-off-by: Connor McAdams conmanx360@gmail.com --- dlls/d2d1/d2d1_private.h | 2 +- dlls/d2d1/device.c | 350 +++++++++++++++++++-------------------- dlls/d2d1/geometry.c | 72 +++++--- 3 files changed, 224 insertions(+), 200 deletions(-)
diff --git a/dlls/d2d1/d2d1_private.h b/dlls/d2d1/d2d1_private.h index 62c9d222fa..cc8a2b67d3 100644 --- a/dlls/d2d1/d2d1_private.h +++ b/dlls/d2d1/d2d1_private.h @@ -393,7 +393,7 @@ struct d2d_bezier_vertex D2D1_POINT_2F position; struct { - float u, v, sign; + float k, l, m; } texcoord; };
diff --git a/dlls/d2d1/device.c b/dlls/d2d1/device.c index 0ab6e53f5f..93e9c61cfe 100644 --- a/dlls/d2d1/device.c +++ b/dlls/d2d1/device.c @@ -3300,20 +3300,21 @@ static HRESULT d2d_device_context_init(struct d2d_device_context *render_target, /* Evaluate the implicit form of the curve in texture space. * "i.b.z" determines which side of the curve is shaded. */ clip((i.b.x * i.b.x - i.b.y) * i.b.z); + clip(i.b.x * i.b.x * i.b.x - i.b.y * i.b.z); }
return colour; } #endif - 0x43425844, 0xf3cbb8bd, 0x5f286454, 0x139976a7, 0x6817e876, 0x00000001, 0x00001d18, 0x00000003, + 0x43425844, 0xad9a265b, 0xacf926bb, 0xeaa1c90b, 0xf1512f75, 0x00000001, 0x00001cf0, 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, 0x00001c18, - 0x00000040, 0x00000706, 0x04000059, 0x00208e46, 0x00000000, 0x00000009, 0x0300005a, 0x00106000, + 0x00000003, 0x00000000, 0x0000000f, 0x545f5653, 0x65677261, 0xabab0074, 0x52444853, 0x00001bf0, + 0x00000040, 0x000006fc, 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, @@ -3346,95 +3347,143 @@ static HRESULT d2d_device_context_init(struct d2d_device_context *render_target, 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, + 0x80100e46, 0x00000041, 0x00000005, 0x00100e46, 0x00000008, 0x09000032, 0x001000f2, 0x00000004, 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, + 0x01000002, 0x01000015, 0x0700001e, 0x00100082, 0x00000001, 0x0010003a, 0x00000001, 0x00004001, + 0x00000001, 0x05000036, 0x001000f2, 0x00000005, 0x00100e46, 0x00000008, 0x05000036, 0x00100042, + 0x00000001, 0x0010000a, 0x00000007, 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, 0x00100012, 0x00000002, 0x0010002a, 0x00000001, 0x8010001a, 0x00000041, + 0x00000001, 0x0700000e, 0x00100022, 0x00000001, 0x0010003a, 0x00000001, 0x0010000a, 0x00000002, + 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, 0x00000004, 0x00100ff6, 0x00000002, 0x00100e46, 0x00000009, 0x00100e46, + 0x00000005, 0x05000036, 0x001000f2, 0x00000006, 0x00100e46, 0x00000008, 0x05000036, 0x00100022, + 0x00000002, 0x00004001, 0xffffffff, 0x01000002, 0x01000015, 0x0700001e, 0x00100082, 0x00000001, + 0x0010003a, 0x00000001, 0x00004001, 0x00000001, 0x05000036, 0x001000f2, 0x00000005, 0x00100e46, + 0x00000008, 0x05000036, 0x00100042, 0x00000001, 0x0010000a, 0x00000007, 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, 0x00100082, 0x00000001, 0x0010001a, 0x00000004, 0x0010002a, 0x00000004, + 0x0010001a, 0x00000002, 0x05000036, 0x00100042, 0x00000002, 0x0010003a, 0x00000005, 0x05000036, + 0x00100022, 0x00000003, 0x00004001, 0xffffffff, 0x01000002, 0x01000015, 0x0700001e, 0x00100012, + 0x00000003, 0x0010000a, 0x00000003, 0x00004001, 0x00000001, 0x05000036, 0x00100022, 0x00000002, + 0x0010003a, 0x00000005, 0x05000036, 0x00100082, 0x00000002, 0x0010000a, 0x00000004, 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, 0x00000007, + 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, @@ -3446,98 +3495,49 @@ static HRESULT d2d_device_context_init(struct d2d_device_context *render_target, 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, + 0x00000002, 0x0010003a, 0x00000005, 0x09000032, 0x00100082, 0x00000001, 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, 0x08000027, 0x00100012, - 0x00000000, 0x0020800a, 0x00000000, 0x00000000, 0x00004001, 0x00000000, 0x0500003b, 0x00100022, - 0x00000000, 0x0010000a, 0x00000000, 0x0500000b, 0x00100032, 0x00000001, 0x00101046, 0x00000001, - 0x0500000c, 0x001000c2, 0x00000001, 0x00101406, 0x00000001, 0x07000000, 0x00100042, 0x00000000, - 0x0010100a, 0x00000001, 0x0010100a, 0x00000001, 0x0a000032, 0x001000c2, 0x00000000, 0x00100aa6, - 0x00000000, 0x00100806, 0x00000001, 0x80100d56, 0x00000041, 0x00000001, 0x0700000f, 0x00100012, - 0x00000001, 0x00100ae6, 0x00000000, 0x00101ae6, 0x00000001, 0x07000031, 0x00100012, 0x00000001, - 0x0010000a, 0x00000001, 0x00004001, 0x00000000, 0x07000001, 0x00100012, 0x00000001, 0x0010000a, - 0x00000000, 0x0010000a, 0x00000001, 0x0304000d, 0x0010000a, 0x00000001, 0x07000038, 0x00100032, - 0x00000001, 0x00100ff6, 0x00000000, 0x00101046, 0x00000003, 0x09000032, 0x001000c2, 0x00000000, - 0x00101406, 0x00000002, 0x00100aa6, 0x00000000, 0x00100406, 0x00000001, 0x0700000f, 0x00100042, - 0x00000000, 0x00100ae6, 0x00000000, 0x00100ae6, 0x00000000, 0x0500004b, 0x00100042, 0x00000000, - 0x0010002a, 0x00000000, 0x0a000032, 0x00100082, 0x00000000, 0x0010100a, 0x00000001, 0x0010100a, - 0x00000001, 0x8010101a, 0x00000041, 0x00000001, 0x08000000, 0x00100042, 0x00000000, 0x8010003a, - 0x000000c1, 0x00000000, 0x0010002a, 0x00000000, 0x07000031, 0x00100042, 0x00000000, 0x0010002a, - 0x00000000, 0x00004001, 0x00000000, 0x07000001, 0x00100012, 0x00000000, 0x0010000a, 0x00000000, - 0x0010002a, 0x00000000, 0x0304000d, 0x0010000a, 0x00000000, 0x07000038, 0x00100012, 0x00000000, - 0x0010003a, 0x00000000, 0x0010102a, 0x00000001, 0x07000031, 0x00100012, 0x00000000, 0x0010000a, - 0x00000000, 0x00004001, 0x00000000, 0x07000001, 0x00100012, 0x00000000, 0x0010001a, 0x00000000, - 0x0010000a, 0x00000000, 0x0304000d, 0x0010000a, 0x00000000, 0x0100003e, + 0x00000005, 0x05000036, 0x00100022, 0x00000003, 0x00004001, 0xffffffff, 0x01000002, 0x01000015, + 0x0700001e, 0x00100012, 0x00000003, 0x0010000a, 0x00000003, 0x00004001, 0x00000001, 0x05000036, + 0x00100022, 0x00000002, 0x0010003a, 0x00000005, 0x05000036, 0x00100082, 0x00000002, 0x0010000a, + 0x00000004, 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, 0x08000027, 0x00100012, 0x00000000, 0x0020800a, 0x00000000, 0x00000000, + 0x00004001, 0x00000000, 0x0500003b, 0x00100022, 0x00000000, 0x0010000a, 0x00000000, 0x0500000b, + 0x00100032, 0x00000001, 0x00101046, 0x00000001, 0x0500000c, 0x001000c2, 0x00000001, 0x00101406, + 0x00000001, 0x07000000, 0x00100042, 0x00000000, 0x0010100a, 0x00000001, 0x0010100a, 0x00000001, + 0x0a000032, 0x001000c2, 0x00000000, 0x00100aa6, 0x00000000, 0x00100806, 0x00000001, 0x80100d56, + 0x00000041, 0x00000001, 0x0700000f, 0x00100012, 0x00000001, 0x00100ae6, 0x00000000, 0x00101ae6, + 0x00000001, 0x07000031, 0x00100012, 0x00000001, 0x0010000a, 0x00000001, 0x00004001, 0x00000000, + 0x07000001, 0x00100012, 0x00000001, 0x0010000a, 0x00000000, 0x0010000a, 0x00000001, 0x0304000d, + 0x0010000a, 0x00000001, 0x07000038, 0x00100032, 0x00000001, 0x00100ff6, 0x00000000, 0x00101046, + 0x00000003, 0x09000032, 0x001000c2, 0x00000000, 0x00101406, 0x00000002, 0x00100aa6, 0x00000000, + 0x00100406, 0x00000001, 0x0700000f, 0x00100042, 0x00000000, 0x00100ae6, 0x00000000, 0x00100ae6, + 0x00000000, 0x0500004b, 0x00100042, 0x00000000, 0x0010002a, 0x00000000, 0x07000038, 0x00100032, + 0x00000001, 0x00101086, 0x00000001, 0x00101046, 0x00000001, 0x0a000032, 0x00100082, 0x00000000, + 0x0010100a, 0x00000001, 0x0010100a, 0x00000001, 0x8010101a, 0x00000041, 0x00000001, 0x08000000, + 0x00100042, 0x00000000, 0x8010003a, 0x000000c1, 0x00000000, 0x0010002a, 0x00000000, 0x07000031, + 0x00100042, 0x00000000, 0x0010002a, 0x00000000, 0x00004001, 0x00000000, 0x07000001, 0x00100012, + 0x00000000, 0x0010000a, 0x00000000, 0x0010002a, 0x00000000, 0x0304000d, 0x0010000a, 0x00000000, + 0x0a000032, 0x00100012, 0x00000000, 0x0010000a, 0x00000001, 0x0010100a, 0x00000001, 0x8010001a, + 0x00000041, 0x00000001, 0x07000031, 0x00100012, 0x00000000, 0x0010000a, 0x00000000, 0x00004001, + 0x00000000, 0x07000001, 0x00100012, 0x00000000, 0x0010001a, 0x00000000, 0x0010000a, 0x00000000, + 0x0304000d, 0x0010000a, 0x00000000, 0x0100003e, }; static const struct shape_info { diff --git a/dlls/d2d1/geometry.c b/dlls/d2d1/geometry.c index 28c62c58f0..e1f1837a6e 100644 --- a/dlls/d2d1/geometry.c +++ b/dlls/d2d1/geometry.c @@ -136,12 +136,12 @@ struct d2d_fp_fin };
static void d2d_bezier_vertex_set(struct d2d_bezier_vertex *b, - const D2D1_POINT_2F *p, float u, float v, float sign) + const D2D1_POINT_2F *p, float k, float l, float m) { b->position = *p; - b->texcoord.u = u; - b->texcoord.v = v; - b->texcoord.sign = sign; + b->texcoord.k = k; + b->texcoord.l = l; + b->texcoord.m = m; }
static void d2d_face_set(struct d2d_face *f, UINT16 v0, UINT16 v1, UINT16 v2) @@ -2956,6 +2956,20 @@ struct d2d_cubic_triangulation unsigned int orientation; };
+static int d2d_bezier_get_triangle_count(struct d2d_cubic_triangulation *triangles) +{ + int i, count; + + for (i = 0, count = 0; i < triangles->cubic_tri_count; i++) + { + if (triangles->cubic_tri[i].type == BEZIER_TYPE_LINE) + continue; + count += triangles->cubic_tri[i].tri_count; + } + + return count * 3; +} + static BOOL d2d_point_approximately_equal(const D2D1_POINT_2F *a, const D2D1_POINT_2F *b) { D2D1_POINT_2F length; @@ -3815,9 +3829,10 @@ static HRESULT d2d_geometry_resolve_beziers(struct d2d_geometry *geometry) struct d2d_cubic_triangulation *triangles; struct d2d_segment_idx idx_p, idx_q; struct d2d_bezier_vertex *b; - const D2D1_POINT_2F *p[3]; + struct d2d_cubic_triangles *tri; struct d2d_figure *figure; - size_t bezier_idx, i; + unsigned int tri_idx[3]; + size_t bezier_idx, i, j; HRESULT hr;
if (!d2d_geometry_get_first_bezier_segment_idx(geometry, &idx_p)) @@ -3874,7 +3889,7 @@ static HRESULT d2d_geometry_resolve_beziers(struct d2d_geometry *geometry) { if (geometry->u.path.figures[i].flags & D2D_FIGURE_FLAG_HOLLOW) continue; - geometry->fill.bezier_vertex_count += 3 * geometry->u.path.figures[i].bezier_control_count; + geometry->fill.bezier_vertex_count += d2d_bezier_get_triangle_count(&triangles[i]); }
if (!(geometry->fill.bezier_vertices = heap_calloc(geometry->fill.bezier_vertex_count, @@ -3889,34 +3904,43 @@ static HRESULT d2d_geometry_resolve_beziers(struct d2d_geometry *geometry) d2d_geometry_get_first_bezier_segment_idx(geometry, &idx_p); for (;;) { - float sign = -1.0f; - figure = &geometry->u.path.figures[idx_p.figure_idx]; - p[0] = &figure->vertices[idx_p.vertex_idx]; - p[1] = &figure->bezier_controls[idx_p.control_idx].cq0; + tri = &triangles[idx_p.figure_idx].cubic_tri[idx_p.control_idx]; + if (tri->type == BEZIER_TYPE_LINE) + { + if (!d2d_geometry_get_next_bezier_segment_idx(geometry, &idx_p)) + break; + else + continue; + }
i = idx_p.vertex_idx + 1; - if (d2d_path_geometry_point_inside(geometry, p[1], FALSE)) + if (d2d_path_geometry_point_inside(geometry, &tri->p[1], FALSE)) { - sign = 1.0f; - d2d_figure_insert_vertex(figure, i, *p[1]); - /* Inserting a vertex potentially invalidates p[0]. */ - p[0] = &figure->vertices[idx_p.vertex_idx]; + d2d_figure_insert_vertex(figure, i, tri->p[1]); ++i; }
- if (i == figure->vertex_count) - i = 0; - p[2] = &figure->vertices[i]; + if (d2d_path_geometry_point_inside(geometry, &tri->p[2], FALSE)) + d2d_figure_insert_vertex(figure, i, tri->p[2]);
- b = &geometry->fill.bezier_vertices[bezier_idx * 3]; - d2d_bezier_vertex_set(&b[0], p[0], 0.0f, 0.0f, sign); - d2d_bezier_vertex_set(&b[1], p[1], 0.5f, 0.0f, sign); - d2d_bezier_vertex_set(&b[2], p[2], 1.0f, 1.0f, sign); + for (i = 0; i < tri->tri_count; i++) + { + b = &geometry->fill.bezier_vertices[bezier_idx]; + tri_idx[0] = tri->triangles[i][0]; + tri_idx[1] = tri->triangles[i][1]; + tri_idx[2] = tri->triangles[i][2]; + + for (j = 0; j < 3; j++) + d2d_bezier_vertex_set(&b[j], &tri->p[tri_idx[j]], tri->klm[tri_idx[j]].x, + tri->klm[tri_idx[j]].y, tri->klm[tri_idx[j]].z); + + + bezier_idx += 3; + }
if (!d2d_geometry_get_next_bezier_segment_idx(geometry, &idx_p)) break; - ++bezier_idx; }
for (i = 0; i < geometry->u.path.figure_count; i++)