diff --git a/Engine/source/gfx/D3D11/gfxD3D11EnumTranslate.cpp b/Engine/source/gfx/D3D11/gfxD3D11EnumTranslate.cpp index 3114cb689..6e1b7688c 100644 --- a/Engine/source/gfx/D3D11/gfxD3D11EnumTranslate.cpp +++ b/Engine/source/gfx/D3D11/gfxD3D11EnumTranslate.cpp @@ -37,7 +37,7 @@ D3D11_FILL_MODE GFXD3D11FillMode[GFXFill_COUNT]; D3D11_PRIMITIVE_TOPOLOGY GFXD3D11PrimType[GFXPT_COUNT]; D3D11_TEXTURE_ADDRESS_MODE GFXD3D11TextureAddress[GFXAddress_COUNT]; DXGI_FORMAT GFXD3D11DeclType[GFXDeclType_COUNT]; - +D3D11_BLEND GFXD3D11BlendAlpha[GFXBlend_COUNT]; //------------------------------------------------------------------------------ void GFXD3D11EnumTranslate::init() @@ -102,6 +102,17 @@ void GFXD3D11EnumTranslate::init() GFXD3D11Blend[GFXBlendDestColor] = D3D11_BLEND_DEST_COLOR; GFXD3D11Blend[GFXBlendInvDestColor] = D3D11_BLEND_INV_DEST_COLOR; GFXD3D11Blend[GFXBlendSrcAlphaSat] = D3D11_BLEND_SRC_ALPHA_SAT; + GFXD3D11BlendAlpha[GFXBlendZero] = D3D11_BLEND_ZERO; + GFXD3D11BlendAlpha[GFXBlendOne] = D3D11_BLEND_ONE; + GFXD3D11BlendAlpha[GFXBlendSrcColor] = D3D11_BLEND_SRC_ALPHA; + GFXD3D11BlendAlpha[GFXBlendInvSrcColor] = D3D11_BLEND_INV_SRC_ALPHA; + GFXD3D11BlendAlpha[GFXBlendSrcAlpha] = D3D11_BLEND_SRC_ALPHA; + GFXD3D11BlendAlpha[GFXBlendInvSrcAlpha] = D3D11_BLEND_INV_SRC_ALPHA; + GFXD3D11BlendAlpha[GFXBlendDestAlpha] = D3D11_BLEND_DEST_ALPHA; + GFXD3D11BlendAlpha[GFXBlendInvDestAlpha] = D3D11_BLEND_INV_DEST_ALPHA; + GFXD3D11BlendAlpha[GFXBlendDestColor] = D3D11_BLEND_DEST_ALPHA; + GFXD3D11BlendAlpha[GFXBlendInvDestColor] = D3D11_BLEND_INV_DEST_ALPHA; + GFXD3D11BlendAlpha[GFXBlendSrcAlphaSat] = D3D11_BLEND_SRC_ALPHA_SAT; //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ GFXD3D11BlendOp[GFXBlendOpAdd] = D3D11_BLEND_OP_ADD; diff --git a/Engine/source/gfx/D3D11/gfxD3D11EnumTranslate.h b/Engine/source/gfx/D3D11/gfxD3D11EnumTranslate.h index daede2a1c..7b553e6f7 100644 --- a/Engine/source/gfx/D3D11/gfxD3D11EnumTranslate.h +++ b/Engine/source/gfx/D3D11/gfxD3D11EnumTranslate.h @@ -47,5 +47,5 @@ extern D3D11_FILL_MODE GFXD3D11FillMode[GFXFill_COUNT]; extern D3D11_PRIMITIVE_TOPOLOGY GFXD3D11PrimType[GFXPT_COUNT]; extern D3D11_TEXTURE_ADDRESS_MODE GFXD3D11TextureAddress[GFXAddress_COUNT]; extern DXGI_FORMAT GFXD3D11DeclType[GFXDeclType_COUNT]; - -#endif \ No newline at end of file +extern D3D11_BLEND GFXD3D11BlendAlpha[GFXBlend_COUNT]; //maps color->alpha +#endif diff --git a/Engine/source/gfx/D3D11/gfxD3D11StateBlock.cpp b/Engine/source/gfx/D3D11/gfxD3D11StateBlock.cpp index b5cc29725..23844665b 100644 --- a/Engine/source/gfx/D3D11/gfxD3D11StateBlock.cpp +++ b/Engine/source/gfx/D3D11/gfxD3D11StateBlock.cpp @@ -67,9 +67,18 @@ GFXD3D11StateBlock::GFXD3D11StateBlock(const GFXStateBlockDesc& desc) mBlendDesc.RenderTarget[0].DestBlend = GFXD3D11Blend[mDesc.blendDest]; mBlendDesc.RenderTarget[0].SrcBlend = GFXD3D11Blend[mDesc.blendSrc]; //alpha - mBlendDesc.RenderTarget[0].BlendOpAlpha = GFXD3D11BlendOp[mDesc.separateAlphaBlendEnable ? mDesc.separateAlphaBlendOp : mDesc.blendOp]; - mBlendDesc.RenderTarget[0].SrcBlendAlpha = GFXD3D11Blend[mDesc.separateAlphaBlendEnable ? mDesc.separateAlphaBlendSrc : mDesc.blendSrc]; - mBlendDesc.RenderTarget[0].DestBlendAlpha = GFXD3D11Blend[mDesc.separateAlphaBlendEnable ? mDesc.separateAlphaBlendDest : mDesc.blendDest]; + if (mDesc.separateAlphaBlendEnable) + { + mBlendDesc.RenderTarget[0].BlendOpAlpha = GFXD3D11BlendOp[mDesc.separateAlphaBlendOp]; + mBlendDesc.RenderTarget[0].SrcBlendAlpha = GFXD3D11Blend[mDesc.separateAlphaBlendSrc]; + mBlendDesc.RenderTarget[0].DestBlendAlpha = GFXD3D11Blend[mDesc.separateAlphaBlendDest]; + } + else + { + mBlendDesc.RenderTarget[0].BlendOpAlpha = mBlendDesc.RenderTarget[0].BlendOp; + mBlendDesc.RenderTarget[0].SrcBlendAlpha = GFXD3D11BlendAlpha[mDesc.blendSrc]; + mBlendDesc.RenderTarget[0].DestBlendAlpha = GFXD3D11BlendAlpha[mDesc.blendDest]; + } //target write mask mBlendDesc.RenderTarget[0].RenderTargetWriteMask = mColorMask;