Не удается очистить цель рендеринга растрового изображения с помощью ID2D1BitmapRenderTarget :: Clear () (Direct2D) - PullRequest
0 голосов
/ 01 мая 2020

Я хочу получить полностью прозрачное и прозрачное растровое изображение в ID2D1BitmapRenderTarget, но вместо очистки метод Clear() альфа-смешивает очищающий цвет с существующим растровым содержимым. Т.е. если очищаемый цвет равен (0,0,0,0), то ничего не меняется, если цвет частично непрозрачный, то существующий контент частично затемняется, но никогда не удаляется полностью.

Я создаю ID2D1BitmapRenderTarget с использованием ID2D1RenderTarget::CreateCompatibleRenderTarget() из текстуры Direct3D, и я убедился, что формат пикселя растрового изображения DXGI_FORMAT_R8G8B8A8_UNORM, а альфа-режим D2D1_ALPHA_MODE_PREMULTIPLIED, поэтому очистка с прозрачным цветом должна действительно работает, но это не так.

Вот мой код:

D2D1_SIZE_U bitmapPixSize = {...};
D2D1_PIXEL_FORMAT bitmapPixFormat = {};
// Use the same pixel format and alpha mode as the source texture render target
bitmapPixFormat.alphaMode = D2D1_ALPHA_MODE_UNKNOWN;
bitmapPixFormat.format = DXGI_FORMAT_UNKNOWN;
textureRenderTarget->CreateCompatibleRenderTarget(
    nullptr, 
    &bitmapPixSize, 
    &bitmapPixFormat, 
    D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS_NONE, 
    &bitmapRenderTarget);

// Doesn't work
bitmapRenderTarget->Clear(nullptr);
D2D1_COLOR_F color = { .r = 0, .g = 0, .b = 0, .a = 0 };
// Doesn't work either
bitmapRenderTarget->Clear(&color);`

Пожалуйста, помогите !!!

...