Color blend options may not be used for SrcBlendAlpha and DestBlendAlpha in D3D11.

TRAC #22365 Author: Shannon Woods Signed-off-by: Geoff Lang Signed-off-by: Daniel Koch git-svn-id: https://angleproject.googlecode.com/svn/branches/dx11proto@1685 736b8ea6-26fd-11df-bfd4-992fa37f6226
parent 168763a7
...@@ -130,12 +130,12 @@ ID3D11BlendState *RenderStateCache::getBlendState(const gl::BlendState &blendSta ...@@ -130,12 +130,12 @@ ID3D11BlendState *RenderStateCache::getBlendState(const gl::BlendState &blendSta
rtBlend.BlendEnable = blendState.blend; rtBlend.BlendEnable = blendState.blend;
if (blendState.blend) if (blendState.blend)
{ {
rtBlend.SrcBlend = gl_d3d11::ConvertBlendFunc(blendState.sourceBlendRGB); rtBlend.SrcBlend = gl_d3d11::ConvertBlendFunc(blendState.sourceBlendRGB, false);
rtBlend.DestBlend = gl_d3d11::ConvertBlendFunc(blendState.destBlendRGB); rtBlend.DestBlend = gl_d3d11::ConvertBlendFunc(blendState.destBlendRGB, false);
rtBlend.BlendOp = gl_d3d11::ConvertBlendOp(blendState.blendEquationRGB); rtBlend.BlendOp = gl_d3d11::ConvertBlendOp(blendState.blendEquationRGB);
rtBlend.SrcBlendAlpha = gl_d3d11::ConvertBlendFunc(blendState.sourceBlendAlpha); rtBlend.SrcBlendAlpha = gl_d3d11::ConvertBlendFunc(blendState.sourceBlendAlpha, true);
rtBlend.DestBlendAlpha = gl_d3d11::ConvertBlendFunc(blendState.destBlendAlpha); rtBlend.DestBlendAlpha = gl_d3d11::ConvertBlendFunc(blendState.destBlendAlpha, true);
rtBlend.BlendOpAlpha = gl_d3d11::ConvertBlendOp(blendState.blendEquationAlpha); rtBlend.BlendOpAlpha = gl_d3d11::ConvertBlendOp(blendState.blendEquationAlpha);
} }
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
namespace gl_d3d11 namespace gl_d3d11
{ {
D3D11_BLEND ConvertBlendFunc(GLenum glBlend) D3D11_BLEND ConvertBlendFunc(GLenum glBlend, bool isAlpha)
{ {
D3D11_BLEND d3dBlend = D3D11_BLEND_ZERO; D3D11_BLEND d3dBlend = D3D11_BLEND_ZERO;
...@@ -24,10 +24,10 @@ D3D11_BLEND ConvertBlendFunc(GLenum glBlend) ...@@ -24,10 +24,10 @@ D3D11_BLEND ConvertBlendFunc(GLenum glBlend)
{ {
case GL_ZERO: d3dBlend = D3D11_BLEND_ZERO; break; case GL_ZERO: d3dBlend = D3D11_BLEND_ZERO; break;
case GL_ONE: d3dBlend = D3D11_BLEND_ONE; break; case GL_ONE: d3dBlend = D3D11_BLEND_ONE; break;
case GL_SRC_COLOR: d3dBlend = D3D11_BLEND_SRC_COLOR; break; case GL_SRC_COLOR: d3dBlend = (isAlpha ? D3D11_BLEND_SRC_ALPHA : D3D11_BLEND_SRC_COLOR); break;
case GL_ONE_MINUS_SRC_COLOR: d3dBlend = D3D11_BLEND_INV_SRC_COLOR; break; case GL_ONE_MINUS_SRC_COLOR: d3dBlend = (isAlpha ? D3D11_BLEND_INV_SRC_ALPHA : D3D11_BLEND_INV_SRC_COLOR); break;
case GL_DST_COLOR: d3dBlend = D3D11_BLEND_DEST_COLOR; break; case GL_DST_COLOR: d3dBlend = (isAlpha ? D3D11_BLEND_DEST_ALPHA : D3D11_BLEND_DEST_COLOR); break;
case GL_ONE_MINUS_DST_COLOR: d3dBlend = D3D11_BLEND_INV_DEST_COLOR; break; case GL_ONE_MINUS_DST_COLOR: d3dBlend = (isAlpha ? D3D11_BLEND_INV_DEST_ALPHA : D3D11_BLEND_INV_DEST_COLOR); break;
case GL_SRC_ALPHA: d3dBlend = D3D11_BLEND_SRC_ALPHA; break; case GL_SRC_ALPHA: d3dBlend = D3D11_BLEND_SRC_ALPHA; break;
case GL_ONE_MINUS_SRC_ALPHA: d3dBlend = D3D11_BLEND_INV_SRC_ALPHA; break; case GL_ONE_MINUS_SRC_ALPHA: d3dBlend = D3D11_BLEND_INV_SRC_ALPHA; break;
case GL_DST_ALPHA: d3dBlend = D3D11_BLEND_DEST_ALPHA; break; case GL_DST_ALPHA: d3dBlend = D3D11_BLEND_DEST_ALPHA; break;
......
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
namespace gl_d3d11 namespace gl_d3d11
{ {
D3D11_BLEND ConvertBlendFunc(GLenum glBlend); D3D11_BLEND ConvertBlendFunc(GLenum glBlend, bool isAlpha);
D3D11_BLEND_OP ConvertBlendOp(GLenum glBlendOp); D3D11_BLEND_OP ConvertBlendOp(GLenum glBlendOp);
UINT8 ConvertColorMask(bool maskRed, bool maskGreen, bool maskBlue, bool maskAlpha); UINT8 ConvertColorMask(bool maskRed, bool maskGreen, bool maskBlue, bool maskAlpha);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment