public void SetBlendState(int index, BlendDescriptor blend) { if (!blend.Enable) { GL.Disable(IndexedEnableCap.Blend, index); return; } GL.BlendEquationSeparate( index, blend.ColorOp.Convert(), blend.AlphaOp.Convert()); GL.BlendFuncSeparate( index, (BlendingFactorSrc)blend.ColorSrcFactor.Convert(), (BlendingFactorDest)blend.ColorDstFactor.Convert(), (BlendingFactorSrc)blend.AlphaSrcFactor.Convert(), (BlendingFactorDest)blend.AlphaDstFactor.Convert()); if (_blendConstant != blend.BlendConstant) { _blendConstant = blend.BlendConstant; GL.BlendColor( blend.BlendConstant.Red, blend.BlendConstant.Green, blend.BlendConstant.Blue, blend.BlendConstant.Alpha); } GL.Enable(IndexedEnableCap.Blend, index); }
public void SetBlendState(int index, BlendDescriptor blend) { if (!blend.Enable) { GL.Disable(IndexedEnableCap.Blend, index); return; } GL.BlendEquationSeparate( index, blend.ColorOp.Convert(), blend.AlphaOp.Convert()); GL.BlendFuncSeparate( index, (BlendingFactorSrc)blend.ColorSrcFactor.Convert(), (BlendingFactorDest)blend.ColorDstFactor.Convert(), (BlendingFactorSrc)blend.AlphaSrcFactor.Convert(), (BlendingFactorDest)blend.AlphaDstFactor.Convert());
/// <summary> /// Updates host render target color buffer blending state, based on guest state. /// </summary> /// <param name="state">Current GPU state</param> private void UpdateBlendState(GpuState state) { bool blendIndependent = state.Get <Boolean32>(MethodOffset.BlendIndependent); ColorF blendConstant = state.Get <ColorF>(MethodOffset.BlendConstant); for (int index = 0; index < Constants.TotalRenderTargets; index++) { BlendDescriptor descriptor; if (blendIndependent) { bool enable = state.Get <Boolean32> (MethodOffset.BlendEnable, index); var blend = state.Get <BlendState>(MethodOffset.BlendState, index); descriptor = new BlendDescriptor( enable, blendConstant, blend.ColorOp, blend.ColorSrcFactor, blend.ColorDstFactor, blend.AlphaOp, blend.AlphaSrcFactor, blend.AlphaDstFactor); } else { bool enable = state.Get <Boolean32> (MethodOffset.BlendEnable, 0); var blend = state.Get <BlendStateCommon>(MethodOffset.BlendStateCommon); descriptor = new BlendDescriptor( enable, blendConstant, blend.ColorOp, blend.ColorSrcFactor, blend.ColorDstFactor, blend.AlphaOp, blend.AlphaSrcFactor, blend.AlphaDstFactor); } _context.Renderer.Pipeline.SetBlendState(index, descriptor); } }
/// <summary> /// Updates host render target color buffer blending state, based on guest state. /// </summary> private void UpdateBlendState() { bool blendIndependent = _state.State.BlendIndependent; ColorF blendConstant = _state.State.BlendConstant; for (int index = 0; index < Constants.TotalRenderTargets; index++) { BlendDescriptor descriptor; if (blendIndependent) { bool enable = _state.State.BlendEnable[index]; var blend = _state.State.BlendState[index]; descriptor = new BlendDescriptor( enable, blendConstant, blend.ColorOp, blend.ColorSrcFactor, blend.ColorDstFactor, blend.AlphaOp, blend.AlphaSrcFactor, blend.AlphaDstFactor); } else { bool enable = _state.State.BlendEnable[0]; var blend = _state.State.BlendStateCommon; descriptor = new BlendDescriptor( enable, blendConstant, blend.ColorOp, blend.ColorSrcFactor, blend.ColorDstFactor, blend.AlphaOp, blend.AlphaSrcFactor, blend.AlphaDstFactor); } _context.Renderer.Pipeline.SetBlendState(index, descriptor); } }
public void SetBlendState(int index, BlendDescriptor blend) { ref var vkBlend = ref _newState.Internal.ColorBlendAttachmentState[index];
public void SetBlendState(int index, BlendDescriptor blend) { _renderer.New <SetBlendStateCommand>().Set(index, blend); _renderer.QueueCommand(); }
public void Set(int index, BlendDescriptor blend) { _index = index; _blend = blend; }