Bläddra i källkod

from @rextimmy: corrections for stateblock blending support

AzaezelX 5 år sedan
förälder
incheckning
c2e018c6a7

+ 12 - 1
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;

+ 2 - 2
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
+extern D3D11_BLEND GFXD3D11BlendAlpha[GFXBlend_COUNT]; //maps color->alpha
+#endif

+ 12 - 3
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;