Альфа-смешивание DirectX 11 не работает

Итак, я пытался заставить альфа-смешивание работать в моем 3D-приложении, но оно просто не хочет происходить. Я рисую 2D-изображения с ортогональной проекцией в самом конце цикла рендеринга (, тестирование глубины остается включенным ), а текстуры изображения имеют прозрачные части, но они отображаются черным. Вот мой код смешивания:

D3D11_BLEND_DESC blendStateDesc; 
ZeroMemory(&blendStateDesc, sizeof(D3D11_BLEND_DESC));
blendStateDesc.AlphaToCoverageEnable = FALSE;
blendStateDesc.IndependentBlendEnable = FALSE;        
blendStateDesc.RenderTarget[0].BlendEnable = TRUE;
blendStateDesc.RenderTarget[0].SrcBlend = D3D11_BLEND_SRC_ALPHA;
blendStateDesc.RenderTarget[0].DestBlend = D3D11_BLEND_INV_SRC_ALPHA;
blendStateDesc.RenderTarget[0].BlendOp = D3D11_BLEND_OP_ADD;
blendStateDesc.RenderTarget[0].SrcBlendAlpha = D3D11_BLEND_SRC_ALPHA;
blendStateDesc.RenderTarget[0].DestBlendAlpha = D3D11_BLEND_DEST_ALPHA;
blendStateDesc.RenderTarget[0].BlendOpAlpha = D3D11_BLEND_OP_ADD;
blendStateDesc.RenderTarget[0].RenderTargetWriteMask = D3D11_COLOR_WRITE_ENABLE_ALL;

if (FAILED(device->CreateBlendState(&blendStateDesc, &blendState))) {
printf("Failed To Create Blend State\n");
}
deviceContext->OMSetBlendState(blendState, NULL, 0xFFFFFF);

И если это поможет, вот описание текстуры:

D3D11_TEXTURE2D_DESC texDesc;
texDesc.Width = TextureWidth;
texDesc.Height = textureHeight;
texDesc.MipLevels = 1;
texDesc.ArraySize = 1;
texDesc.Format = DXGI_FORMAT_B8G8R8A8_UNORM;
texDesc.SampleDesc.Count = 1;
texDesc.SampleDesc.Quality = 0;
texDesc.Usage = D3D11_USAGE_IMMUTABLE;
texDesc.BindFlags = D3D11_BIND_SHADER_RESOURCE;
texDesc.CPUAccessFlags = 0;
texDesc.MiscFlags = 0;

Я использую только одну цель рендеринга и не умножаю альфа внутри шейдеров предварительно -. Я искал везде и пробовал всевозможные комбинации для D3D11 _BLEND _STATE, но ничего не сработало. Самое близкое, что я могу получить, это когда я устанавливаю AlphaToCoverage в TRUE, но тогда это не работает, если я изменяю альфа вершин, и я знаю, что для того, что я делаю, AlphaToCoverage должен быть FALSE.

9
задан scribblesiam 4 August 2012 в 16:20
поделиться