示例#1
0
        private void SetAlphaBlending()
        {
            //TODO: Support independent blend properly.
            bool Enable = (ReadRegister(NvGpuEngine3dReg.IBlendNEnable) & 1) != 0;

            Gpu.Renderer.SetBlendEnable(Enable);

            bool BlendSeparateAlpha = (ReadRegister(NvGpuEngine3dReg.IBlendNSeparateAlpha) & 1) != 0;

            GalBlendEquation EquationRgb = (GalBlendEquation)ReadRegister(NvGpuEngine3dReg.IBlendNEquationRgb);

            GalBlendFactor FuncSrcRgb = (GalBlendFactor)ReadRegister(NvGpuEngine3dReg.IBlendNFuncSrcRgb);
            GalBlendFactor FuncDstRgb = (GalBlendFactor)ReadRegister(NvGpuEngine3dReg.IBlendNFuncDstRgb);

            if (BlendSeparateAlpha)
            {
                GalBlendEquation EquationAlpha = (GalBlendEquation)ReadRegister(NvGpuEngine3dReg.IBlendNEquationAlpha);

                GalBlendFactor FuncSrcAlpha = (GalBlendFactor)ReadRegister(NvGpuEngine3dReg.IBlendNFuncSrcAlpha);
                GalBlendFactor FuncDstAlpha = (GalBlendFactor)ReadRegister(NvGpuEngine3dReg.IBlendNFuncDstAlpha);

                Gpu.Renderer.SetBlendSeparate(
                    EquationRgb,
                    EquationAlpha,
                    FuncSrcRgb,
                    FuncDstRgb,
                    FuncSrcAlpha,
                    FuncDstAlpha);
            }
            else
            {
                Gpu.Renderer.SetBlend(EquationRgb, FuncSrcRgb, FuncDstRgb);
            }
        }
示例#2
0
 public void SetBlend(
     GalBlendEquation Equation,
     GalBlendFactor FuncSrc,
     GalBlendFactor FuncDst)
 {
     ActionsQueue.Enqueue(() => Blend.Set(Equation, FuncSrc, FuncDst));
 }
示例#3
0
        private void SetAlphaBlending()
        {
            bool BlendEnableMaster = (ReadRegister(NvGpuEngine3dReg.BlendEnableMaster) & 1) != 0;

            Gpu.Renderer.SetBlendEnable(BlendEnableMaster);

            bool BlendSeparateAlpha = (ReadRegister(NvGpuEngine3dReg.BlendSeparateAlpha) & 1) != 0;

            GalBlendEquation EquationRgb = (GalBlendEquation)ReadRegister(NvGpuEngine3dReg.BlendEquationRgb);

            GalBlendFactor FuncSrcRgb = (GalBlendFactor)ReadRegister(NvGpuEngine3dReg.BlendFuncSrcRgb);
            GalBlendFactor FuncDstRgb = (GalBlendFactor)ReadRegister(NvGpuEngine3dReg.BlendFuncDstRgb);

            if (BlendSeparateAlpha)
            {
                GalBlendEquation EquationAlpha = (GalBlendEquation)ReadRegister(NvGpuEngine3dReg.BlendEquationAlpha);

                GalBlendFactor FuncSrcAlpha = (GalBlendFactor)ReadRegister(NvGpuEngine3dReg.BlendFuncSrcAlpha);
                GalBlendFactor FuncDstAlpha = (GalBlendFactor)ReadRegister(NvGpuEngine3dReg.BlendFuncDstAlpha);

                Gpu.Renderer.SetBlendSeparate(
                    EquationRgb,
                    EquationAlpha,
                    FuncSrcRgb,
                    FuncDstRgb,
                    FuncSrcAlpha,
                    FuncDstAlpha);
            }
            else
            {
                Gpu.Renderer.SetBlend(EquationRgb, FuncSrcRgb, FuncDstRgb);
            }
        }
示例#4
0
        public void Set(
            GalBlendEquation Equation,
            GalBlendFactor FuncSrc,
            GalBlendFactor FuncDst)
        {
            GL.BlendEquation(
                OGLEnumConverter.GetBlendEquation(Equation));

            GL.BlendFunc(
                OGLEnumConverter.GetBlendFactorSrc(FuncSrc),
                OGLEnumConverter.GetBlendFactorDst(FuncDst));
        }
示例#5
0
        private void SetAlphaBlending()
        {
            //TODO: Support independent blend properly.
            bool Enable = (ReadRegister(NvGpuEngine3dReg.IBlendNEnable) & 1) != 0;

            if (Enable)
            {
                Gpu.Renderer.Blend.Enable();
            }
            else
            {
                Gpu.Renderer.Blend.Disable();
            }

            if (!Enable)
            {
                //If blend is not enabled, then the other values have no effect.
                //Note that if it is disabled, the register may contain invalid values.
                return;
            }

            bool BlendSeparateAlpha = (ReadRegister(NvGpuEngine3dReg.IBlendNSeparateAlpha) & 1) != 0;

            GalBlendEquation EquationRgb = (GalBlendEquation)ReadRegister(NvGpuEngine3dReg.IBlendNEquationRgb);

            GalBlendFactor FuncSrcRgb = (GalBlendFactor)ReadRegister(NvGpuEngine3dReg.IBlendNFuncSrcRgb);
            GalBlendFactor FuncDstRgb = (GalBlendFactor)ReadRegister(NvGpuEngine3dReg.IBlendNFuncDstRgb);

            if (BlendSeparateAlpha)
            {
                GalBlendEquation EquationAlpha = (GalBlendEquation)ReadRegister(NvGpuEngine3dReg.IBlendNEquationAlpha);

                GalBlendFactor FuncSrcAlpha = (GalBlendFactor)ReadRegister(NvGpuEngine3dReg.IBlendNFuncSrcAlpha);
                GalBlendFactor FuncDstAlpha = (GalBlendFactor)ReadRegister(NvGpuEngine3dReg.IBlendNFuncDstAlpha);

                Gpu.Renderer.Blend.SetSeparate(
                    EquationRgb,
                    EquationAlpha,
                    FuncSrcRgb,
                    FuncDstRgb,
                    FuncSrcAlpha,
                    FuncDstAlpha);
            }
            else
            {
                Gpu.Renderer.Blend.Set(EquationRgb, FuncSrcRgb, FuncDstRgb);
            }
        }
示例#6
0
        public static BlendingFactor GetBlendFactor(GalBlendFactor BlendFactor)
        {
            switch (BlendFactor)
            {
            case GalBlendFactor.Zero:                  return(BlendingFactor.Zero);

            case GalBlendFactor.One:                   return(BlendingFactor.One);

            case GalBlendFactor.SrcColor:              return(BlendingFactor.SrcColor);

            case GalBlendFactor.OneMinusSrcColor:      return(BlendingFactor.OneMinusSrcColor);

            case GalBlendFactor.DstColor:              return(BlendingFactor.DstColor);

            case GalBlendFactor.OneMinusDstColor:      return(BlendingFactor.OneMinusDstColor);

            case GalBlendFactor.SrcAlpha:              return(BlendingFactor.SrcAlpha);

            case GalBlendFactor.OneMinusSrcAlpha:      return(BlendingFactor.OneMinusSrcAlpha);

            case GalBlendFactor.DstAlpha:              return(BlendingFactor.DstAlpha);

            case GalBlendFactor.OneMinusDstAlpha:      return(BlendingFactor.OneMinusDstAlpha);

            case GalBlendFactor.OneMinusConstantColor: return(BlendingFactor.OneMinusConstantColor);

            case GalBlendFactor.ConstantAlpha:         return(BlendingFactor.ConstantAlpha);

            case GalBlendFactor.OneMinusConstantAlpha: return(BlendingFactor.OneMinusConstantAlpha);

            case GalBlendFactor.SrcAlphaSaturate:      return(BlendingFactor.SrcAlphaSaturate);

            case GalBlendFactor.Src1Color:             return(BlendingFactor.Src1Color);

            case GalBlendFactor.OneMinusSrc1Color:     return((BlendingFactor)BlendingFactorSrc.OneMinusSrc1Color);

            case GalBlendFactor.Src1Alpha:             return(BlendingFactor.Src1Alpha);

            case GalBlendFactor.OneMinusSrc1Alpha:     return((BlendingFactor)BlendingFactorSrc.OneMinusSrc1Alpha);

            case GalBlendFactor.ConstantColor:
            case GalBlendFactor.ConstantColorG80:
                return(BlendingFactor.ConstantColor);
            }

            throw new ArgumentException(nameof(BlendFactor));
        }
示例#7
0
        public void SetSeparate(
            GalBlendEquation EquationRgb,
            GalBlendEquation EquationAlpha,
            GalBlendFactor FuncSrcRgb,
            GalBlendFactor FuncDstRgb,
            GalBlendFactor FuncSrcAlpha,
            GalBlendFactor FuncDstAlpha)
        {
            GL.BlendEquationSeparate(
                OGLEnumConverter.GetBlendEquation(EquationRgb),
                OGLEnumConverter.GetBlendEquation(EquationAlpha));

            GL.BlendFuncSeparate(
                OGLEnumConverter.GetBlendFactorSrc(FuncSrcRgb),
                OGLEnumConverter.GetBlendFactorDst(FuncDstRgb),
                OGLEnumConverter.GetBlendFactorSrc(FuncSrcAlpha),
                OGLEnumConverter.GetBlendFactorDst(FuncDstAlpha));
        }
示例#8
0
 public void SetBlendSeparate(
     GalBlendEquation EquationRgb,
     GalBlendEquation EquationAlpha,
     GalBlendFactor FuncSrcRgb,
     GalBlendFactor FuncDstRgb,
     GalBlendFactor FuncSrcAlpha,
     GalBlendFactor FuncDstAlpha)
 {
     ActionsQueue.Enqueue(() =>
     {
         Blend.SetSeparate(
             EquationRgb,
             EquationAlpha,
             FuncSrcRgb,
             FuncDstRgb,
             FuncSrcAlpha,
             FuncDstAlpha);
     });
 }
示例#9
0
        public static BlendingFactor GetBlendFactor(GalBlendFactor blendFactor)
        {
            switch (blendFactor)
            {
            case GalBlendFactor.Zero:
            case GalBlendFactor.ZeroGl:
                return(BlendingFactor.Zero);

            case GalBlendFactor.One:
            case GalBlendFactor.OneGl:
                return(BlendingFactor.One);

            case GalBlendFactor.SrcColor:
            case GalBlendFactor.SrcColorGl:
                return(BlendingFactor.SrcColor);

            case GalBlendFactor.OneMinusSrcColor:
            case GalBlendFactor.OneMinusSrcColorGl:
                return(BlendingFactor.OneMinusSrcColor);

            case GalBlendFactor.DstColor:
            case GalBlendFactor.DstColorGl:
                return(BlendingFactor.DstColor);

            case GalBlendFactor.OneMinusDstColor:
            case GalBlendFactor.OneMinusDstColorGl:
                return(BlendingFactor.OneMinusDstColor);

            case GalBlendFactor.SrcAlpha:
            case GalBlendFactor.SrcAlphaGl:
                return(BlendingFactor.SrcAlpha);

            case GalBlendFactor.OneMinusSrcAlpha:
            case GalBlendFactor.OneMinusSrcAlphaGl:
                return(BlendingFactor.OneMinusSrcAlpha);

            case GalBlendFactor.DstAlpha:
            case GalBlendFactor.DstAlphaGl:
                return(BlendingFactor.DstAlpha);

            case GalBlendFactor.OneMinusDstAlpha:
            case GalBlendFactor.OneMinusDstAlphaGl:
                return(BlendingFactor.OneMinusDstAlpha);

            case GalBlendFactor.OneMinusConstantColor:
            case GalBlendFactor.OneMinusConstantColorGl:
                return(BlendingFactor.OneMinusConstantColor);

            case GalBlendFactor.ConstantAlpha:
            case GalBlendFactor.ConstantAlphaGl:
                return(BlendingFactor.ConstantAlpha);

            case GalBlendFactor.OneMinusConstantAlpha:
            case GalBlendFactor.OneMinusConstantAlphaGl:
                return(BlendingFactor.OneMinusConstantAlpha);

            case GalBlendFactor.SrcAlphaSaturate:
            case GalBlendFactor.SrcAlphaSaturateGl:
                return(BlendingFactor.SrcAlphaSaturate);

            case GalBlendFactor.Src1Color:
            case GalBlendFactor.Src1ColorGl:
                return(BlendingFactor.Src1Color);

            case GalBlendFactor.OneMinusSrc1Color:
            case GalBlendFactor.OneMinusSrc1ColorGl:
                return((BlendingFactor)BlendingFactorSrc.OneMinusSrc1Color);

            case GalBlendFactor.Src1Alpha:
            case GalBlendFactor.Src1AlphaGl:
                return(BlendingFactor.Src1Alpha);

            case GalBlendFactor.OneMinusSrc1Alpha:
            case GalBlendFactor.OneMinusSrc1AlphaGl:
                return((BlendingFactor)BlendingFactorSrc.OneMinusSrc1Alpha);

            case GalBlendFactor.ConstantColor:
            case GalBlendFactor.ConstantColorGl:
                return(BlendingFactor.ConstantColor);
            }

            throw new ArgumentException(nameof(blendFactor) + " \"" + blendFactor + "\" is not valid!");
        }
示例#10
0
 public static BlendingFactorDest GetBlendFactorDst(GalBlendFactor BlendFactor)
 {
     return((BlendingFactorDest)(BlendFactor - 0x4000));
 }
示例#11
0
 public static BlendingFactorSrc GetBlendFactorSrc(GalBlendFactor BlendFactor)
 {
     return((BlendingFactorSrc)(BlendFactor - 0x4000));
 }