[PATCH 12/12] d2d1: Render cubic beziers.

Connor McAdams conmanx360 at gmail.com
Mon Feb 24 20:32:23 CST 2020


Store coordinates for rendering cubic bezier and modify pixel shader for
rendering cubic beziers.

Signed-off-by: Connor McAdams <conmanx360 at 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++)
-- 
2.20.1




More information about the wine-devel mailing list