OpenGL ES 2.0 getAttributeLocation 返回 -1

OpenGL ES 2.0 getAttributeLocation returning -1

我正在尝试为 android 在 openGL ES 2.0 中为一个对象着色,但是当我调用以下内容时 returns -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));

知道是什么原因造成的吗?

您已将 iColor 声明为统一变量,因此如果您实际将其用作统一变量(即例如,一个 iColor 值用于许多不同的图元)。

如果您有一个 iColor 值缓冲区,每个顶点一个,那么您需要在着色器中将 iColor 声明为 "attrib vec4 iColor;"。在你这样做之后,你对 GLES20.glGetAttributeLocation(mProgram,"iColor") 的调用应该 return 一个有效的位置。