我尝试在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));
知道可能导致这种情况的原因吗?
答案 0 :(得分:0)
您已将iColor声明为制服,因此如果您实际将其用作统一变量(也就是说,一个iColor值,则需要调用GLES20.glGetUniformLocation(mProgram,“iColor”))许多不同的原语)。
如果你有一个iColor值的缓冲区,每个顶点一个缓冲区,那么你需要将iColor声明为“attrib vec4 iColor”;在你的着色器中。执行此操作后,您对GLES20.glGetAttributeLocation(mProgram,“iColor”)的调用应返回有效位置。