GLSL:考虑未使用的变量
GLSL : Considering not used variables
我想知道是否应该考虑 glsl 中未使用的变量。
在下一种情况下(这只是描述的示例代码)。
如果 "trigger" 为真,则片段着色器中不使用 "position" 和 "normal"。
那么,"position"和"normal"是被抛弃了吗?还是通过光栅器计算?
顶点着色器:
layout(location = 0) in vec3 vertice;
layout(location = 1) in vec2 uv;
layout(location = 2) in vec3 normal;
out VertexData{
out vec3 position;
out vec2 uv;
out vec3 normal;
flat out bool trigger;
} VertexOut;
void main(){
gl_Position = vertice;
VertexOut.uv = uv;
if(uv.x > 0){
VertexOut.trigger = true;
else{
VertexOut.trigger = false;
VertexOut.position = vertice;
VertexOut.normal = normal;
}
}
片段 shdaer :
in VertexData{
in vec3 position;
in vec2 uv;
in vec3 normal;
flat in bool trigger;
}VertexIn;
out vec4 color;
uniform sampler2D tex;
void main(){
if(VertexIn.trigger){
color = texture2D(tex, VertexIn.uv);
}
else{
vec4 result = texture2D(tex, VertexIn.uv);
/*
Lighting with position and normal...
*/
color = result;
}
}
取决于硬件。在较新的硬件上,智能编译器可以避免 interpolating/fetching 这个值。较旧的硬件没有片段着色器可控制的此操作,因此无论如何都会完成(从未定义的值插值 - 仍然未定义)。
虽然条件操作不是免费的,尤其是当您的片段分支高度不同时。
我想知道是否应该考虑 glsl 中未使用的变量。
在下一种情况下(这只是描述的示例代码)。 如果 "trigger" 为真,则片段着色器中不使用 "position" 和 "normal"。 那么,"position"和"normal"是被抛弃了吗?还是通过光栅器计算?
顶点着色器:
layout(location = 0) in vec3 vertice;
layout(location = 1) in vec2 uv;
layout(location = 2) in vec3 normal;
out VertexData{
out vec3 position;
out vec2 uv;
out vec3 normal;
flat out bool trigger;
} VertexOut;
void main(){
gl_Position = vertice;
VertexOut.uv = uv;
if(uv.x > 0){
VertexOut.trigger = true;
else{
VertexOut.trigger = false;
VertexOut.position = vertice;
VertexOut.normal = normal;
}
}
片段 shdaer :
in VertexData{
in vec3 position;
in vec2 uv;
in vec3 normal;
flat in bool trigger;
}VertexIn;
out vec4 color;
uniform sampler2D tex;
void main(){
if(VertexIn.trigger){
color = texture2D(tex, VertexIn.uv);
}
else{
vec4 result = texture2D(tex, VertexIn.uv);
/*
Lighting with position and normal...
*/
color = result;
}
}
取决于硬件。在较新的硬件上,智能编译器可以避免 interpolating/fetching 这个值。较旧的硬件没有片段着色器可控制的此操作,因此无论如何都会完成(从未定义的值插值 - 仍然未定义)。
虽然条件操作不是免费的,尤其是当您的片段分支高度不同时。