从顶点/片段着色器中修改glBlendColor

时间:2013-04-03 18:45:56

标签: opengl fragment-shader blending freetype color-blending

当使用子像素渲染(LCD,字形位图格式为RGB(非alpha))时,我正在使用混合函数来着色从freetype库获得的字形:

我将RGB格式的纹理上传到GPU并使用以下混合:

glBlendFunc( GL_CONSTANT_COLOR_EXT,  GL_ONE_MINUS_SRC_COLOR );
glBlendColor( r, g, b, 1 );

r,g,b是所需的字形颜色。只要字形都是相同的颜色(我使用单个顶点缓冲区),这就很有效。我现在想为每个字形设置不同的颜色然后,我需要在着色器中指定不同的混合颜色,但我认为这是不可能的。有谁知道如何做到这一点(如果可行的话)?

相关项目为available here

我认为在某些时候我找到了“正确”的着色器,但事实上它是错误的(见issue 48

1 个答案:

答案 0 :(得分:0)

你做不到。而且真的没有理由。只需使用每顶点颜色,然后乘以每顶点颜色从纹理中获得的值。

但是,如果真的想要这样做,你可以write a second color from the fragment shader,如果你有GL 3.3:

layout(location = 0, index = 0) out vec4 textureColor;
layout(location = 0, index = 1) out vec4 glyphColor;

然后您可以use that in your blending equation

glBlendFunc(GL_SRC1_COLOR, GL_ONE_MINUS_SRC_COLOR);

但实际上,在你的情况下,这是毫无意义的。只需使用片段着色器将它们相乘即可。