d2d1/tests: Test d2d_device_context_SetTarget() with bitmaps of D2D1_ALPHA_MODE_IGNORE.
Signed-off-by: Zhiyi Zhang <zzhang@codeweavers.com> Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
d0902b7c8e
commit
fe4c187a7c
|
@ -4341,18 +4341,22 @@ static void test_bitmap_formats(BOOL d3d11)
|
||||||
static void test_alpha_mode(BOOL d3d11)
|
static void test_alpha_mode(BOOL d3d11)
|
||||||
{
|
{
|
||||||
D2D1_RENDER_TARGET_PROPERTIES rt_desc;
|
D2D1_RENDER_TARGET_PROPERTIES rt_desc;
|
||||||
|
D2D1_BITMAP_PROPERTIES1 bitmap_desc1;
|
||||||
D2D1_BITMAP_PROPERTIES bitmap_desc;
|
D2D1_BITMAP_PROPERTIES bitmap_desc;
|
||||||
ID2D1SolidColorBrush *color_brush;
|
ID2D1SolidColorBrush *color_brush;
|
||||||
ID2D1BitmapBrush *bitmap_brush;
|
ID2D1BitmapBrush *bitmap_brush;
|
||||||
struct d2d1_test_context ctx;
|
struct d2d1_test_context ctx;
|
||||||
|
ID2D1DeviceContext *context;
|
||||||
|
ID2D1Bitmap1 *bitmap1;
|
||||||
ID2D1RenderTarget *rt;
|
ID2D1RenderTarget *rt;
|
||||||
|
IDXGISurface *surface;
|
||||||
ID2D1Bitmap *bitmap;
|
ID2D1Bitmap *bitmap;
|
||||||
D2D1_COLOR_F color;
|
D2D1_COLOR_F color;
|
||||||
|
BOOL match, match2;
|
||||||
D2D1_RECT_F rect;
|
D2D1_RECT_F rect;
|
||||||
D2D1_SIZE_U size;
|
D2D1_SIZE_U size;
|
||||||
ULONG refcount;
|
ULONG refcount;
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
BOOL match;
|
|
||||||
|
|
||||||
static const DWORD bitmap_data[] =
|
static const DWORD bitmap_data[] =
|
||||||
{
|
{
|
||||||
|
@ -4546,8 +4550,50 @@ static void test_alpha_mode(BOOL d3d11)
|
||||||
|
|
||||||
refcount = ID2D1Bitmap_Release(bitmap);
|
refcount = ID2D1Bitmap_Release(bitmap);
|
||||||
ok(refcount == 1, "Bitmap has %lu references left.\n", refcount);
|
ok(refcount == 1, "Bitmap has %lu references left.\n", refcount);
|
||||||
ID2D1SolidColorBrush_Release(color_brush);
|
|
||||||
ID2D1BitmapBrush_Release(bitmap_brush);
|
ID2D1BitmapBrush_Release(bitmap_brush);
|
||||||
|
|
||||||
|
hr = ID2D1RenderTarget_QueryInterface(rt, &IID_ID2D1DeviceContext, (void **)&context);
|
||||||
|
ok(hr == S_OK, "Got unexpected hr %#lx.\n", hr);
|
||||||
|
|
||||||
|
set_size_u(&size, 4, 4);
|
||||||
|
memset(&bitmap_desc1, 0, sizeof(bitmap_desc1));
|
||||||
|
bitmap_desc1.dpiX = 96.0f;
|
||||||
|
bitmap_desc1.dpiY = 96.0f;
|
||||||
|
bitmap_desc1.pixelFormat.format = DXGI_FORMAT_B8G8R8A8_UNORM;
|
||||||
|
bitmap_desc1.pixelFormat.alphaMode = D2D1_ALPHA_MODE_IGNORE;
|
||||||
|
bitmap_desc1.bitmapOptions = D2D1_BITMAP_OPTIONS_TARGET | D2D1_BITMAP_OPTIONS_CANNOT_DRAW;
|
||||||
|
hr = ID2D1DeviceContext_CreateBitmap(context, size, bitmap_data, 4 * sizeof(*bitmap_data),
|
||||||
|
&bitmap_desc1, &bitmap1);
|
||||||
|
ok(hr == S_OK, "Got unexpected hr %#lx.\n", hr);
|
||||||
|
|
||||||
|
ID2D1DeviceContext_BeginDraw(context);
|
||||||
|
ID2D1DeviceContext_SetTarget(context, (ID2D1Image *)bitmap1);
|
||||||
|
set_rect(&rect, 0.0f, 2.0f, 1.0f, 2.0f);
|
||||||
|
ID2D1SolidColorBrush_SetOpacity(color_brush, 1.0f);
|
||||||
|
ID2D1DeviceContext_FillRectangle(context, &rect, (ID2D1Brush *)color_brush);
|
||||||
|
set_rect(&rect, 1.0f, 2.0f, 3.0f, 3.0f);
|
||||||
|
ID2D1SolidColorBrush_SetOpacity(color_brush, 0.75f);
|
||||||
|
ID2D1DeviceContext_FillRectangle(context, &rect, (ID2D1Brush *)color_brush);
|
||||||
|
set_rect(&rect, 3.0f, 2.0f, 3.0f, 3.0f);
|
||||||
|
ID2D1SolidColorBrush_SetOpacity(color_brush, 0.25f);
|
||||||
|
ID2D1DeviceContext_FillRectangle(context, &rect, (ID2D1Brush *)color_brush);
|
||||||
|
hr = ID2D1DeviceContext_EndDraw(context, NULL, NULL);
|
||||||
|
ok(hr == S_OK, "Got unexpected hr %#lx.\n", hr);
|
||||||
|
|
||||||
|
surface = ctx.surface;
|
||||||
|
hr = ID2D1Bitmap1_GetSurface(bitmap1, &ctx.surface);
|
||||||
|
ok(hr == S_OK, "Got unexpected hr %#lx.\n", hr);
|
||||||
|
match = compare_surface(&ctx, "e7ee77e89745fa5d195fd78bd398738330cfcde8");
|
||||||
|
match2 = compare_surface(&ctx, "4855c7c082c8ede364cf6e2dcde83f95b88aecbe");
|
||||||
|
todo_wine
|
||||||
|
ok(match || broken(match2) /* Win7 TestBots */, "Surface does not match.\n");
|
||||||
|
IDXGISurface_Release(ctx.surface);
|
||||||
|
ctx.surface = surface;
|
||||||
|
ID2D1DeviceContext_SetTarget(context, NULL);
|
||||||
|
|
||||||
|
ID2D1Bitmap1_Release(bitmap1);
|
||||||
|
ID2D1DeviceContext_Release(context);
|
||||||
|
ID2D1SolidColorBrush_Release(color_brush);
|
||||||
ID2D1RenderTarget_Release(rt);
|
ID2D1RenderTarget_Release(rt);
|
||||||
release_test_context(&ctx);
|
release_test_context(&ctx);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue