[PATCH v2] d2d1/tests: Add tests for 2D affine effect.
Henri Verbeet
hverbeet at gmail.com
Thu Sep 16 05:30:21 CDT 2021
On Tue, 14 Sept 2021 at 04:15, Ziqing Hui <zhui at codeweavers.com> wrote:
> + const struct effect_2d_affine_test
> + {
> + const DWORD *img_data;
> + unsigned int img_width;
> + unsigned int img_height;
> +
> + D2D1_MATRIX_3X2_F *matrix;
> +
> + D2D_RECT_F bounds;
> + const char *figure;
> + }
> + effect_2d_affine_tests[] =
> + {
> + {image_4x4, 4, 4, &rotate, {-6.0f, -3.0f, 2.0f, 4.0f}, "AQ8B7wEA"},
> + {image_4x4, 4, 4, &scale, {-2.0f, -3.0f, 1.0f, 9.0f}, "AQ8BDwEPAQ8BDwEPAQ8BDwF/"},
> + {image_4x4, 4, 4, &skew, {-7.0f, -3.0f, 3.0f, 7.0f}, "AQ8BAQ4BAQ4BzwEA"},
> + {image_16x16, 16, 16, &rotate, {-14.0f, -3.0f, 10.0f, 21.0f},
> + "AQ8BAQ4CAQ0DAQwEAQsFAQoGAQkHAQgIAQcIAQEGBwEBBwYBAQgFAQEJBAEBCgMBAQsCAQEM"},
> + {image_16x16, 16, 16, &scale, {-2.0f, -3.0f, 10.0f, 39.0f},
> + "AQkGCgYKBgoGCgYKBgoGCgYKBgoGCgYKBgoGCgYKBgoG"},
> + {image_16x16, 16, 16, &skew, {-19.0f, -3.0f, 15.0f, 31.0f},
> + "AQ8BAQ4CAQ0DAQwEAQsFAQoGAQkHAQgIAQcJAQYKAQULAQQMAQMNAQINAQIMAQMA"},
> + };
...
> + ID2D1DeviceContext_BeginDraw(context);
> + ID2D1DeviceContext_Clear(context, 0);
> + ID2D1DeviceContext_DrawImage(context, output, NULL, NULL, 0, 0);
> + hr = ID2D1DeviceContext_EndDraw(context, NULL, NULL);
> + ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
> + match = compare_figure(&ctx, 0, 0, 16, 16, 0xff652e89, 0, test->figure);
In a certain sense that works, but we're only testing the part of the
image intersecting with the top-left corner. It doesn't seem much more
complicated to draw the image in the centre of the render target, and
then use the bounds in compare_figure. E.g.:
ID2D1DeviceContext_DrawImage(..., 320, 240);
...
x = 320.0f + output_bounds.left - 2.0f;
y = 240.0f + output_bounds.top - 2.0f;
w = (output_bounds.right - output_bounds.left) + 4.0f;
h = (output_bounds.bottom - output_bounds.top) + 4.0f;
match = compare_figure(&ctx, x, y, w, h, ...);
More information about the wine-devel
mailing list