我正在尝试将shadertoy着色器移植到SFML应用程序。

我的问题是与此行:

float g = texture(iChannel0, uv+vec2(nh-0.07, 0.0)*nh).g;

我认为iChannel0是2D采样器,并且是在浏览器中运行的视频。

我需要用其他东西代替iChannel0,但是由于我是GLSL的新手,所以不确定如何使用。

我有一个如下所示的顶点着色器:
void main()
{
    // Transforming The Vertex
    gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;

    // transform the texture coordinates
    gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0;

    // forward the vertex color
    gl_FrontColor = gl_Color;
}

在片段着色器中,我拥有其余修改后的代码,包括上面包含iChannel0参数的行。

着色器将作为后期效果应用到整个屏幕。

除了最后一行,我能够转换其他所有内容。

谢谢你的帮助。

最佳答案

好的,我可以这样工作:

在片段着色器文件的顶部,我添加了:

uniform sampler2D sourceTexture;

我变了:
float g = texture(iChannel0, uv+vec2(nh-0.07, 0.0)*nh).g;

至:
 float g = texture2D(sourceTexture, uv+vec2(nh-0.07, 0.0)*nh).g;

在我的SFML代码中:
shader->setParameter("sourceTexture", sf::Shader::CurrentTexture);

10-08 11:55