1

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

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

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

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

相关项目可在此处获得

我想在某些时候我找到了“正确”的着色器,但实际上它是错误的(参见问题 48

4

1 回答 1

0

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

但是,如果你真的想这样做,你可以从片段着色器中编写第二种颜色,如果你有 GL 3.3:

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

然后,您可以在混合方程式中使用它

glBlendFunc(GL_SRC1_COLOR, GL_ONE_MINUS_SRC_COLOR);

但实际上,这对你来说毫无意义。只需使用片段着色器将它们相乘。

于 2013-04-04T00:22:21.550 回答