通常,问题在标题中。
我无法理解如何使用GetActiveUniform
函数。
public void GetActiveUniform(uint program,
uint index,
int bufSize,
int[] length,
int[] size,
uint[] type,
string name);
我的尝试看起来像这样(一切都被编译和链接):
int[] numberOfUniforms = new int[1];
Gl.GetProgram(programId, ProgramParameter.ActiveUniforms, numberOfUniforms);
int[] uniformNameMaxLength = new int[1];
Gl.GetProgram(programId, ProgramParameter.ActiveUniformMaxLength, uniformNameMaxLength);
int unifromCount = numberOfUniforms[0];
for (uint i = 0; i < unifromCount; i++)
{
var uniformSize = new int[1];
var unifromLength = new int[1];
var uniformType = new uint[1];
string uniformName = "";
Gl.GetActiveUniform(programId, i, uniformNameMaxLength[0], unifromLength, uniformSize, uniformType, uniformName);
}
顶点着色器:
#version 150 core
in vec3 in_Position;
out vec3 pass_Color;
uniform vec3 color;
void main(void) {
gl_Position = vec4(in_Position, 1.0);
pass_Color = color;
}
通话后,我得到正确的 uniformSize、长度和类型,但没有名称。