Search code examples
c++directxgraphicblending

Blending with Direct3D SpriteBatch


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.


Solution

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