Opengl System.Drawing.SolidBrush使用的混合方程是什么?

Opengl System.Drawing.SolidBrush使用的混合方程是什么?,opengl,gdi,alphablending,blending,direct3d11,Opengl,Gdi,Alphablending,Blending,Direct3d11,我有一些GDI代码,它使用System.drawing.SolidBrush绘制半透明三角形。我试图使用合适的3D渲染API(OpenGL/Direct3D11)重新实现代码,但我不确定这些三角形使用什么混合方程来获得与原始GDI代码相同的输出 我假设它是一些相对简单的东西,比如加法混合(func=GL\u func\u ADD,eq=GL\u ONE,GL\u ONE)或插值(func=GL\u func\u ADD,eq=GL\u SRC\u ALPHA,GL\u ONE\u减_SRC\u

我有一些GDI代码,它使用System.drawing.SolidBrush绘制半透明三角形。我试图使用合适的3D渲染API(OpenGL/Direct3D11)重新实现代码,但我不确定这些三角形使用什么混合方程来获得与原始GDI代码相同的输出

我假设它是一些相对简单的东西,比如加法混合(func=GL\u func\u ADD,eq=GL\u ONE,GL\u ONE)或插值(func=GL\u func\u ADD,eq=GL\u SRC\u ALPHA,GL\u ONE\u减_SRC\u ALPHA),但两者看起来都不太正确。这几乎肯定是我的新代码中的一个bug,但我想在继续之前确保我正在朝着正确的目标努力。有人知道合适的混合方程吗

编辑:以下是相关的C#代码,去掉上下文:

using System.Drawing;
SolidBrush b = new SolidBrush(Color.FromArgb(alpha,red,green,blue));
Point[] points = ...;
Graphics g;
g.FillPolygon(b,points);
我的问题是,根据画笔的RGBA和目标像素的RGBA,实际将写入什么颜色?我能找到的所有文档都只是说“使用alpha来控制画笔的透明度”或者其他同样模糊的东西;我很好奇实际的混合方程是什么。

根据,
System.Drawing.Graphics
有一个名为
SourceOver
SourceCopy
的属性

默认值是
SourceOver
,它

指定渲染颜色时,将其与背景色混合。混合由渲染颜色的alpha分量确定

正如我所测试的,这里使用的混合策略是,它通过以下等式确定区域图像A中的像素值,而不是图像B中的像素值:


这里αa和αb是图像a和图像b的归一化α值;Ca和Cb是图像A和图像B的RGBA值;Co是输出图像的RGBA值。

您试图重新实现的“GDI代码”是什么?这是一个久违的同事的一些图像处理代码,我正试图恢复并集成到一个新的非GDI项目中。这些细节是专有的,但与问题无关。不过,如果有帮助的话,我已经添加了一段相关代码。