Opengl GLSL着色器变量类型之间的差异?
当看到一些OpenGL示例时,有些示例在着色器顶部声明变量时使用以下类型的变量:Opengl GLSL着色器变量类型之间的差异?,opengl,Opengl,当看到一些OpenGL示例时,有些示例在着色器顶部声明变量时使用以下类型的变量: in out 还有一些用途: 属性 变化 uniform 有什么区别?它们相互排斥吗?在现代OpenGL中,有一系列着色器连接到管道。简单管道将具有顶点着色器和片段着色器 对于管道中的每个着色器,in是该阶段的输入,out是该阶段的输出。一个阶段的out将与下一阶段的in匹配 uniform可以在任何着色器中使用,并在整个绘制调用中保持不变 如果你想打个比方,可以把它想象成一个工厂。in和out是进出机器的传送带。
in
out
还有一些用途:
属性
变化
uniform
有什么区别?它们相互排斥吗?在现代OpenGL中,有一系列着色器连接到管道。简单管道将具有顶点着色器和片段着色器 对于管道中的每个着色器,
in
是该阶段的输入,out
是该阶段的输出。一个阶段的out
将与下一阶段的in
匹配
uniform
可以在任何着色器中使用,并在整个绘制调用中保持不变
如果你想打个比方,可以把它想象成一个工厂。in
和out
是进出机器的传送带。uniform
是打开机器以改变其工作方式的旋钮
例子
顶点着色器:
// Input from the vertex array
in vec3 VertPos;
in vec2 VertUV;
// Output to fragment shader
out vec2 TexCoord;
// Transformation matrix
uniform mat4 ModelViewProjectionMatrix;
片段着色器:
// Input from vertex shader
in vec2 TexCoord;
// Output pixel data
out vec4 Color;
// Texture to use
uniform sampler2D Texture;
旧的OpenGL
在较旧版本的OpenGL(2.1/GLSL 1.20)中,使用了其他关键字代替In
和out
:
用于顶点着色器的输入属性
用于顶点着色器输出和片段着色器输入variable
- 片段着色器输出是隐式声明的,您可以使用
而不是指定自己的gl\u FragColor
属性
和变化
已从核心OpenGL中的GLSL 1.40及以上版本(桌面GL版本3.1)中删除。OpenGL ES 2仍然使用它们,但已从ES 3.0代码中删除
您仍然可以在兼容性配置文件中使用旧的构造,但是属性仅映射到中的顶点着色器<代码>可变
映射到VSout
put和FSin
put
统一
没有改变;它仍然意味着它一直拥有的东西:外部世界设置的值,在渲染操作期间是固定的。已经回答了。那么“pass”变量呢?Tulon链接的旧stackoverflow页面中也缺少这些内容。只有顶点着色器可以将它们传递给像素着色器,反之亦然?你说的“传递”是什么意思?顶点着色器中的out
变量与片段着色器中的in
变量相匹配,这就是您所说的吗?啊,对不起,现在我仔细检查了源代码,这些是正常的in/out参数,只是名称有一个“pass\ux”前缀。