我有三個GLSL在我的頂點着色器OpenGL着色着的綁定屬性
attribute highp vec4 Position;
attribute mediump vec4 UV;
attribute mediump vec3 Normal;
,即時通訊使用
glBindAttribLocation(program, 0, "Position");
glBindAttribLocation(program, 1, "Normal");
glBindAttribLocation(program, 2, "UV");
但是綁定屬性,我得到一個錯誤
找不到頂點着色器屬性'Normal'以匹配BindAttributeLocation請求。
爲什麼它可以找到Position和UV屬性,但不是Normal屬性。
任何幫助將不勝感激,因爲我很困惑。
乾杯
編輯: 我已經在Android OpenGLES20同樣的問題。 我會添加代碼示例:該類的其餘部分是官方GLSurfaceView教程
public void onSurfaceCreated(GL10 glUnused, EGLConfig config) {
String mVertexShader = "uniform mat4 uMVPMatrix;\n " +
"attribute vec4 aPosition;\n " +
"attribute vec4 aNormal; \n " + //this is the line I added
"attribute vec2 aTextureCoord;\n " +
"varying vec2 vTextureCoord;\n " +
"void main() {\n " +
"gl_Position = uMVPMatrix * aPosition;\n" +
" vTextureCoord = aTextureCoord;\n" +
"}\n";
mProgram = createProgram(mVertexShader, mFragmentShader); // cf tutorial
if (mProgram == 0) {
return;
}
initShaderHandles(); //initializes the rest of the handles (cf tutorial)
// my little additional code
int maNormalHandle = GLES20.glGetAttribLocation(mProgram, "aNormal");
Log.d("ATTRIB LOCATION Normal: ", maNormalHandle + "");
checkGlError("glGetAttribLocation normal");
if (maNormalHandle == -1) {
throw new RuntimeException(
"Could not get attrib location for normal");
}
// ...and we crash.
}
我應該補充說明我測試了着色器以確保修改正常,但仍然無法綁定Normal屬性 – user346443
從哪裏得到此錯誤? – kvark
我應該指出,我在Android OpenGLES20上「有時」出現了完全相同的問題。參加教程,向示例着色器代碼添加「正常」,「正常」,「標準」,「任何」,嘗試在之後綁定它並崩潰。 –