2017-10-20 131 views
1

我试图将一个shadertoy着色器移植到SFML应用程序。shadertoy到SFML

我的问题是这一行:

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

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

我需要用其他东西替代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参数上面的行的其余部分。

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

我能够转换一切,除了最后一行。

感谢您的帮助。

+0

如果它的后期效应我怀疑你想使用你的源采样器作为iChannel0 –

回答

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; 

and in my SFML代码:

shader->setParameter("sourceTexture", sf::Shader::CurrentTexture);