GLSL 1.0.0 - 在顶点和片段着色器中使用“变化”时遇到麻烦

时间:2012-02-23 15:25:30

标签: c++ opengl-es glsl shader

我正在使用OpenGL ES 2.0.0和GLSL ES 1.0.0进行开发。

目前,我正在渲染一个正方形以屏幕显示,现在正在尝试 应用纹理。

我在顶点和片段着色器中使用“变化”时遇到问题, 收到错误消息:

- Failed to compile vertex shader - 
0(3) : error C5060: out can't be used with non-varying tex_varying

in vec4 texture_coord ;
in vec4 position ;
out vec2 tex_varying ;
uniform mat4 translate ;
void main ( ) 
{
  gl_Position = translate * position ;
  tex_varying = texture_coord . xy ;
}

我已阅读文档,无法弄清楚我做错了什么。

这是代码。

顶点:

attribute vec4 position; 
attribute vec4 texture_coord; 
varying vec2 tex_varying; 
uniform mat4 translate; 

void main()
{ 
  gl_Position = translate * position; 
  tex_varying = texture_coord.xy;
}

片段:

varying vec2 tex_varying; 
uniform sampler2D texture; 

void main()
{
  gl_FragColor = texture2D(texture, tex_varying);
}

解决: 这是一个迟到的回复,但我很久以前就解决了这个问题 - 万一其他人偶然发现了这个问题。事实证明,“tex_varying”是由Nvidia保留的!简单地重命名tex_varying解决了这个问题。

干杯。

1 个答案:

答案 0 :(得分:4)

您展示的inout关键字适用于GLSL v3及更高版本。对于v1(您尝试使用的是什么?),您需要在顶点着色器中将in替换为attribute,将out替换为varying。在片段着色器中,将in替换为varying并且您无法使用out - 您需要输出到gl_FragColor,就像您正在做的那样。

所以你的第二/第三个着色器看起来你已经正确地将第一个着色器中的GLSL v3代码翻译成GLSL v1,看起来它们应该与ES2 / GLSL v1一起使用

相关问题