OpenGL ES 2.0 getAttributeLocation返回-1

时间:2015-07-16 15:43:52

标签: android opengl-es-2.0

我尝试在openGL ES 2.0 for android中为对象着色但是当我调用以下内容时它会返回-1。

int mColorHandle = GLES20.getAttributeLocation(mProgram,"iColor");

着色器:

private static final String sFragmentShaderCode = "precision mediump float;"
        + "uniform vec4 iColor;"
        + "void main() {"
        + " gl_FragColor = iColor;" + "}";

上下文中的方法调用:

mProgram = GLES20.glCreateProgram();

GLES20.glAttachShader(mProgram, vertexShader);
GLES20.glAttachShader(mProgram, fragShader);
GLES20.glLinkProgram(mProgram);

int mColorHandle = GLES20.getAttributeLocation(mProgram,"iColor");
Log.i(TAG,"mColorHandle: "+Integer.toString(mColorHandle));

知道可能导致这种情况的原因吗?

1 个答案:

答案 0 :(得分:0)

您已将iColor声明为制服,因此如果您实际将其用作统一变量(也就是说,一个iColor值,则需要调用GLES20.glGetUniformLocation(mProgram,“iColor”))许多不同的原语)。

如果你有一个iColor值的缓冲区,每个顶点一个缓冲区,那么你需要将iColor声明为“attrib vec4 iColor”;在你的着色器中。执行此操作后,您对GLES20.glGetAttributeLocation(mProgram,“iColor”)的调用应返回有效位置。