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 一个有效的位置。
我正在尝试为 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 一个有效的位置。