opengl:跨平台混合结果不一致

opengl: blending has inconsistent results across platforms

我在 opengl 中将圆形纹理渲染到三角形上。这很好用。

我启用 GL_BLEND,设置我想要的颜色,然后我使用带有 GL_ONE 和 GL_ONE_MINUS_SRC_ALPHA 的 glBlendFunc。

glEnable(GL_BLEND);
glBlendFunc(GL_ONE,GL_ONE_MINUS_SRC_ALPHA);
glColor4(0x0,0xCC,0x0,0xFF);

在我的主平台上 (Linux) 我得到了我想要的结果,其中渲染一个圆圈没有正方形背景,并且彼此相邻的渲染圆圈看起来符合预期。

但是,如果我更改平台,在本例中为 windows 10,我怀疑这可能不仅仅是 windows-linux 问题,而且还依赖于硬件?我得到这些结果

相反,圆形纹理呈现为似乎是半透明的白色背景。因此,在彼此之上渲染圆圈会产生奇怪的结果。

如果我使用 GL_SRC_ALPHA 作为我的第一个 blendfunc 参数,我就解决了这个问题,但是在平台之间再次不一致的问题中,纹理的边缘是灰色的。

不一致最终似乎是每个平台的图像加载器的实现有所不同,但有趣的是,我没有通过更改图像加载器来解决它。

实际上我只是改变了图像的保存方式。在 gimp 中,过程是:Export image (as png) -> Disable "Save background color" -> Disable "Save color values from transparent pixels",现在问题不再出现。