Sign in to follow this  

Windows Phone 8: Additive blending

Recommended Posts

First of all, some key info:

  • Platform: Windows Phone 8
  • API: DirectX 11
  • Language: C++/CX

I've created a 2D project for Windows Phone 8, which uses DDS textures with 8-bit alpha. I'm having issues getting additive blending working correctly. 


The textures have had PreMultipliedAlpha applied.


I've tried various combinations of settings for the BlendState, this is what I'm using currently:


blendDescription.AlphaToCoverageEnable = false;
blendDescription.RenderTarget[0].BlendEnable = true;
blendDescription.RenderTarget[0].SrcBlend = D3D11_BLEND_ONE;
blendDescription.RenderTarget[0].DestBlend = D3D11_BLEND_ONE;
blendDescription.RenderTarget[0].BlendOp = D3D11_BLEND_OP_ADD;
blendDescription.RenderTarget[0].SrcBlendAlpha = D3D11_BLEND_ONE;
blendDescription.RenderTarget[0].DestBlendAlpha = D3D11_BLEND_ONE;
blendDescription.RenderTarget[0].BlendOpAlpha = D3D11_BLEND_OP_ADD;


The results i'm seeing are as follows:

  • The textures are being alpha blended correctly, but i'm not seeing an additive colour effect.
  • If I try DDS 1 textures (1 bit alpha) these work perfectly fine, but obviously 1 bit alpha is very limited.

Can anyone suggest what I might be doing wrong here?





Share this post

Link to post
Share on other sites

Hm... This is what I do for my additive blending with my particles, but it's based on alpha, I'm not sure if it will help you.


	blendStateDescription.RenderTarget[0].BlendEnable = TRUE;
	blendStateDescription.RenderTarget[0].SrcBlend = D3D11_BLEND_SRC_ALPHA;
	blendStateDescription.RenderTarget[0].DestBlend = D3D11_BLEND_ONE;
	blendStateDescription.RenderTarget[0].BlendOp = D3D11_BLEND_OP_ADD;
	blendStateDescription.RenderTarget[0].SrcBlendAlpha = D3D11_BLEND_ONE;
	blendStateDescription.RenderTarget[0].DestBlendAlpha = D3D11_BLEND_ZERO;
	blendStateDescription.RenderTarget[0].BlendOpAlpha = D3D11_BLEND_OP_ADD;
	blendStateDescription.RenderTarget[0].RenderTargetWriteMask = D3D11_COLOR_WRITE_ENABLE_ALL;
	D3DDEVICE->CreateBlendState(&blendStateDescription, &mBlendingState);



And I'm not using premultiplied alpha, but I suppose you have nothing to lose to try it haha.

Share this post

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this