Sign in to follow this  

Windows Phone 8: Additive blending

Recommended Posts

CasperWarden    104

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
Seabolt    781

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
CasperWarden    104

More info that may be relevant: I'm using DirectXTK's SpriteBatch framework, and i'm also rendering to deferred contexts (but all the particles i'm trying to blend are using the same context).

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