在许多愚蠢的问题后更新
目标:应用纹理调色板意味着GL着色器(模拟Indexed8纹理格式)。 互联网上充满了关于某个主题的文章,并且都包含相同的解决方案。不幸的是,我有它,它不适合我。
所以
片段着色器:
uniform sampler2D texture;
uniform sampler2D palette;
uniform int paletteIndex;
layout (origin_upper_left) in vec4 gl_FragCoord;
void main()
{
int colorIndex = int(texture2D(texture, gl_TexCoord[0].xy, 0).r * 255);
gl_FragColor = texelFetch(palette, ivec2(colorIndex, paletteIndex), 0);
}
顶点着色器:
void main () {
gl_Position = ftransform ();
gl_TexCoord [0] = gl_MultiTexCoord0;
}
该死的,我只是设置了不正确的顶点坐标! >。<
感谢那位试图帮助的好男人。现在我知道不同于texture2d和fetchTexel并找到问题的原因! d:
答案 0 :(得分:0)
嗯...
我犯了一些错误:
GL.Viewport (0, 0, w * 2, h * 2);
因此,图像是原始图像的两倍。所有这些问题都已解决,现在正确地将调色板应用于原始图像。 上面显示的正确着色器。 谢谢你的关注。