Optimization 如何在GLSL代码中激活用户属性?优化(关闭)不工作
顶点着色器:Optimization 如何在GLSL代码中激活用户属性?优化(关闭)不工作,optimization,attributes,glsl,Optimization,Attributes,Glsl,顶点着色器: #version 150 in vec3 MCVertex; in float pointvar; uniform mat4 MVMatrix; uniform mat4 MPMatrix; void main() { gl_Position = MPMatrix * MVMatrix * vec4(MCVertex, 1.0); } 我需要'pointvar'属性 但当我打电话时: glGetProgramiv(program, GL_ACTIVE_ATTRIBU
#version 150
in vec3 MCVertex;
in float pointvar;
uniform mat4 MVMatrix;
uniform mat4 MPMatrix;
void main()
{
gl_Position = MPMatrix * MVMatrix * vec4(MCVertex, 1.0);
}
我需要'pointvar'属性
但当我打电话时:
glGetProgramiv(program, GL_ACTIVE_ATTRIBUTES, &numAttributes);
numAttribute = 1;
我的代码中有2个属性,numAttribute必须是2
如果我这样做,我可以激活此属性:
gl_Position = MPMatrix * MVMatrix * vec4(MCVertex + vec3(pointvar), 1.0);
然后numAttributes=2
,是否有其他方法激活此属性?
我尝试了
#pragma优化(off)
,但没有成功。我很确定GLSL将“擦除/忘记”代码中未使用的任何统一/属性
所有的信息
编辑:
与制服一样,属性可以是活动的,也可以是非活动的。属性
未使用或不活动;它们没有约束力
我真的不明白你为什么要激活一个你根本不用的属性。如果你使用它,它会被激活。那么问题出在哪里呢?我可以激活这个变量,如果它与gl_位置有某种联系,这就是我的意思。通过这个变量,从垂直到碎片,而不是这个变量。我尝试“在浮点角度”和“在mat2 uv_旋转”来分段搜索旋转纹理,但在获取属性位置时,我找不到“点角度”。似乎一些图形卡工作,但我不确定。我知道,这就是为什么我使用gl_Position=MPMatrix*MVMatrix*vec4(MCVertex+vec3(pointvar),1.0);激活我的属性,但我不喜欢这种方式,所以我要求另一种方式。@user1069041:没有其他方式。活动属性的要点是让编译器能够清除不使用的内容。你可以使用所有你想要的
#pragma
s,但是编译器仍然可以自由地删除任何它认为没有使用的属性。简而言之,您必须在代码中考虑到这种可能性。这很糟糕,我只需要在代码中使用点索引,但我发现gl_VertexID在某些图形卡中不起作用,所以我想将属性索引数组传递给我的着色器。。