c++ - GLSL 1.0.0 - 在顶点和片段着色器中使用 "Varying"时出现问题

标签 c++ opengl-es glsl shader

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

目前我正在将一个正方形渲染到屏幕上,现在正在尝试 应用纹理。

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

- 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”是英伟达保留的!只需重命名 tex_varying 即可解决问题。

干杯。

最佳答案

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

所以你的第二个/第三个着色器看起来你已经正确地将第一个着色器中的 GLSL v3 代码转换为 GLSL v1,并且看起来它们应该与 ES2/GLSL v1 一起工作

关于c++ - GLSL 1.0.0 - 在顶点和片段着色器中使用 "Varying"时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9415928/

相关文章:

c++ - 对结构 vector 进行两次排序

iPhone 4 支持 MRT 或多渲染目标 (opengl es)?

c# - 在 MonoTouch 中显示 3D 模型

javascript - 确定无限直线和线段是否相交的公式?

c++ - 在无序字符串集中查找字符串的时间复杂度

c++ - 如何在Visual Studio 2019中更改%(DisableSpecificWarnings)

c++ - 未定义的 OpenCV 引用

Android OpenGL ES 2.0 实时变色

opengl - GLSL 4.x 子例程变量会导致任何性能开销吗?

opengl-es - GPU 上提前退出循环值得吗?