当使用子像素渲染(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)
答案 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);
但实际上,在你的情况下,这是毫无意义的。只需使用片段着色器将它们相乘即可。