CSPspEmu.Core.Gpu.Impl.Opengl.OpenglGpuImpl.PrepareState_Blend C# (CSharp) Method

PrepareState_Blend() private method

private PrepareState_Blend ( GpuStateStruct GpuState ) : void
GpuState GpuStateStruct
return void
		private void PrepareState_Blend(GpuStateStruct* GpuState)
		{
			var BlendingState = &GpuState->BlendingState;
			if (!GL.EnableDisable(GL.GL_BLEND, BlendingState->Enabled))
			{
				return;
			}

			//Console.WriteLine("Blend!");

			var OpenglFunctionSource = OpenglGpuImplConversionTables.BlendFuncSrcTranslate[(int)BlendingState->FunctionSource];
			//var OpenglFunctionDestination = BlendFuncDstTranslate[(int)BlendingState->FunctionDestination];
			var OpenglFunctionDestination = OpenglGpuImplConversionTables.BlendFuncSrcTranslate[(int)BlendingState->FunctionDestination];

			Func<ColorfStruct, int> getBlendFix = (Color) =>
			{
				if (Color.IsColorf(0, 0, 0)) return GL.GL_ZERO;
				if (Color.IsColorf(1, 1, 1)) return GL.GL_ONE;
				return GL.GL_CONSTANT_COLOR;
			};

			if (BlendingState->FunctionSource == GuBlendingFactorSource.GU_FIX)
			{
				OpenglFunctionSource = getBlendFix(BlendingState->FixColorSource);
			}

			if (BlendingState->FunctionDestination == GuBlendingFactorDestination.GU_FIX)
			{
				if (((int)OpenglFunctionSource == GL.GL_CONSTANT_COLOR) && (BlendingState->FixColorSource + BlendingState->FixColorDestination).IsColorf(1, 1, 1))
				{
					OpenglFunctionDestination = GL.GL_ONE_MINUS_CONSTANT_COLOR;
				}
				else
				{
					OpenglFunctionDestination = getBlendFix(BlendingState->FixColorDestination);
				}
			}
			//Console.WriteLine("{0}, {1}", OpenglFunctionSource, OpenglFunctionDestination);

			var OpenglBlendEquation = OpenglGpuImplConversionTables.BlendEquationTranslate[(int)BlendingState->Equation];

			/*
			Console.WriteLine(
				"{0} : {1} -> {2}",
				OpenglBlendEquation, OpenglFunctionSource, OpenglFunctionDestination
			);
			*/

			GL.glBlendEquation(OpenglBlendEquation);
			GL.glBlendFunc(OpenglFunctionSource, OpenglFunctionDestination);

			GL.glBlendColor(
				BlendingState->FixColorDestination.Red,
				BlendingState->FixColorDestination.Green,
				BlendingState->FixColorDestination.Blue,
				BlendingState->FixColorDestination.Alpha
			);
		}