对于SFML

时间:2017-10-20 10:38:49

标签: c++ glsl shader sfml opengl-3

我试图将一个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参数的行。

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

我能够转换除最后一行之外的所有其他内容。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

好的,我让它像这样工作:

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

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);