Question

I'm trying to achieve a simple effect: drawing an image on the screen with a transparent background. I'm using SpriteBatches to do this.

Here is my code for creating the blend state:

D3D11_BLEND_DESC descBlend;
ZeroMemory(&descBlend, sizeof(descBlend));
descBlend.RenderTarget[0].BlendEnable = true;
descBlend.RenderTarget[0].BlendOp = D3D11_BLEND_OP_ADD;
descBlend.RenderTarget[0].BlendOpAlpha = D3D11_BLEND_OP_ADD;
descBlend.RenderTarget[0].DestBlend = D3D11_BLEND_INV_SRC_ALPHA;
descBlend.RenderTarget[0].DestBlendAlpha = D3D11_BLEND_INV_SRC_ALPHA;
descBlend.RenderTarget[0].SrcBlend = D3D11_BLEND_SRC_ALPHA;
descBlend.RenderTarget[0].SrcBlendAlpha = D3D11_BLEND_ONE;

m_d3dDevice->CreateBlendState(&descBlend, &m_Blend);

I begin drawing my sprites with:

m_SpriteBatch->Begin(SpriteSortMode_BackToFront, m_Blend);

Nothing shows up on the screen! Am I missing something?

I'm sure my image is correct because when I draw with no blending enabled, everything shows up except the transparent parts become pure white.

Any help would be appreciated.

Was it helpful?

Solution

I was once trying to achieve something similar and wrote down what I did over at gamedev

OTHER TIPS

You have to identify which components of each pixel of a render target are writable during blending.

descBlend.RenderTarget[0].RenderTargetWriteMask = D3D11_COLOR_WRITE_ENABLE_ALL;

With ZeroMemory(&descBlend, sizeof(descBlend)); your clear all fields of the D3D11_BLEND_DESC inclusive the RenderTargetWriteMask. This mask determines whether the channels are written or not, if it's zero nothing is written. Try to set it to D3D11_COLOR_WRITE_ENABLE_ALL.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top