Java 调用glUseProgram时出现错误1281
经过数小时的故障排除,我想我已经将问题缩小到片段和顶点着色器。我在GluseProgramm调用中遇到了一个错误1281。在打电话之前,我检查了一下,确保没有其他错误。我正在尝试制作一个球体,所以知道一些顶点坐标中有一个“E”可能会很有用,这意味着有时候它们确实很小。这是我的片段和顶点着色器Java 调用glUseProgram时出现错误1281,java,android,opengl-es,Java,Android,Opengl Es,经过数小时的故障排除,我想我已经将问题缩小到片段和顶点着色器。我在GluseProgramm调用中遇到了一个错误1281。在打电话之前,我检查了一下,确保没有其他错误。我正在尝试制作一个球体,所以知道一些顶点坐标中有一个“E”可能会很有用,这意味着有时候它们确实很小。这是我的片段和顶点着色器 final String vertexShaderCode = "uniform mat4 u_MVPMatrix;" + // A constant represent
final String vertexShaderCode =
"uniform mat4 u_MVPMatrix;" + // A constant representing the combined model/view/projection matrix.
"uniform mat4 u_MVMatrix;" + // A constant representing the combined model/view matrix.
"attribute vec4 a_Position;" + // Per-vertex position information we will pass in.
"attribute vec3 a_Normal;" + // Per-vertex normal information we will pass in.
"varying vec3 v_Position;" + // This will be passed into the fragment shader.
"varying vec3 v_Normal;" + // This will be passed into the fragment shader.
"void main() {" +
"v_Position = vec3( u_MVMatrix * a_Position);" + // Transform the vertex into eye space.
"v_Normal = vec3( u_MVMatrix * vec4(a_Normal, 0.0));" + // Transform the normal's orientation into eye space.
// gl_Position is a special variable used to store the final position.
// Multiply the vertex by the matrix to get the final point in normalized screen coordinates.
"gl_Position = u_MVPMatrix * a_Position;" +
"}";
final String fragmentShaderCode =
"precision mediump float;" +// Set the default precision to medium. We don't need as high of a precision in the fragment shader.
"uniform vec3 u_LightPos;" + // The position of the light in eye space.
"uniform sampler2D u_Texture;" + // The input texture.
"uniform vec4 v_Color;" +
"varying vec3 v_Position;" + // Interpolated position for this fragment.
"varying vec3 v_Normal;" + // Interpolated normal for this fragment.
"void main(){" +
"float distance = length(u_LightPos - v_Position);" + // Will be used for attenuation.
"vec3 lightVector = normalize(u_LightPos - v_Position);" + // Get a lighting direction vector from the light to the vertex.
// Calculate the dot product of the light vector and vertex normal. If the normal and light vector are
// pointing in the same direction then it will get max illumination.
"float diffuse = max(dot(v_Normal, lightVector), 0.0);" +
"diffuse = diffuse * (1.0 / (1.0 + (0.25 * distance)));" +// Add attenuation.
"diffuse = diffuse + 0.7;" +// Add ambient lighting
"gl_FragColor = v_Color + diffuse;" +
"}";
这是我的画法
public void draw(float[] mvpMatrix, float[] mvMatrix, float[] mMatrix) {
// Translate the cube into the screen.
Matrix.setIdentityM(mvpMatrix, 0);
Matrix.translateM(mvpMatrix, 0, posX, posY, posZ);
Matrix.scaleM(mvpMatrix, 0, scale, scale, scale);
Matrix.rotateM(mvpMatrix, 0, rotX, 1, 0, 0);
Matrix.rotateM(mvpMatrix, 0, rotY, 0, 1, 0);
Matrix.rotateM(mvpMatrix, 0, rotZ, 0, 0, 1);
// Logging errors before the call to glUseProgram
int error;
while ((error = GLES20.glGetError()) != GLES20.GL_NO_ERROR) {
Log.i("error", String.valueOf(error));
}
Log.i("mprogram", String.valueOf(GLES20.glIsProgram(mProgramHandle))); // true
GLES20.glUseProgram(mProgramHandle);
int error1;
while ((error1 = GLES20.glGetError()) != GLES20.GL_NO_ERROR) {
throw new RuntimeException("glUseProgram" + ": glError " + error1);
}
GLES20.glFrontFace(GLES20.GL_CCW); // Counter-clockwise winding.
GLES20.glEnable(GLES20.GL_CULL_FACE);// Enable face culling.
GLES20.glCullFace(GLES20.GL_BACK);// What faces to remove with the face culling.
mPositionHandle = GLES20.glGetAttribLocation(mProgramHandle, "a_Position");
GLES20.glEnableVertexAttribArray(mPositionHandle);
// Specifies the location and data format of an array of vertex coordinates to use when rendering.
GLES20.glVertexAttribPointer(mPositionHandle, COORDS_PER_VERTEX, GLES20.GL_FLOAT, false, vertexStride, vertexBuffer);
mNormalHandle = GLES20.glGetAttribLocation(mProgramHandle, "a_Normal");
GLES20.glEnableVertexAttribArray(mNormalHandle);
mColorHandle = GLES20.glGetUniformLocation(mProgramHandle, "v_Color");
// Set color for drawing the triangle
GLES20.glUniform4fv(mColorHandle, 1, color, 0);
mMVMatrixHandle = GLES20.glGetUniformLocation(mProgramHandle, "u_MVMatrix");
// Pass in the model view matrix.
GLES20.glUniformMatrix4fv(mMVMatrixHandle, 1, false, mvMatrix, 0);
mMVPMatrixHandle = GLES20.glGetUniformLocation(mProgramHandle, "u_MVPMatrix");
// Pass in the modal view projection matrix.
GLES20.glUniformMatrix4fv(mMVPMatrixHandle, 1, false, mvpMatrix, 0);
GLES20.glDrawElements(GLES20.GL_TRIANGLE_STRIP, indices.length, GLES20.GL_UNSIGNED_SHORT, indexBuffer);
//Disable vertex array
GLES20.glDisableVertexAttribArray(mPositionHandle);
}
编辑
编辑2
public static int loadShader(int type, String shaderCode) {
int shader = GLES20.glCreateShader(type);
GLES20.glShaderSource(shader, shaderCode);
GLES20.glCompileShader(shader);
return shader;
}
编辑3 Logcat
06-09 12:25:39.436 14020-15026/com.example.james.rollingsphere E/TAG﹕ Could not link program:
06-09 12:25:39.436 14020-15026/com.example.james.rollingsphere E/TAG﹕ [ 06-09 12:25:39.436 848: 859 V/WindowManager ]
Window{430341b0 u0 Keyguard}mOrientationRequetedFromKeyguard=false
06-09 12:25:39.446 14020-15026/com.example.james.rollingsphere E/TAG﹕ Could not link program:
06-09 12:25:39.446 14020-15026/com.example.james.rollingsphere E/TAG﹕ [ 06-09 12:25:39.456 1164: 1164 D/STATUSBAR-PhoneStatusBar ]
animateCollapsePanels
06-09 12:25:39.476 14020-15026/com.example.james.rollingsphere E/TAG﹕ Could not link program:
06-09 12:25:39.476 14020-15026/com.example.james.rollingsphere E/TAG﹕ [ 06-09 12:25:39.486 14020:15026 E/TAG ]
Could not link program:
06-09 12:25:39.486 14020-15026/com.example.james.rollingsphere E/TAG﹕ [ 06-09 12:25:39.496 14020:15026 E/TAG ]
Could not link program:
06-09 12:25:39.496 14020-15026/com.example.james.rollingsphere E/TAG﹕ [ 06-09 12:25:39.496 848: 848 V/WindowManager ]
Window{430341b0 u0 Keyguard}mOrientationRequetedFromKeyguard=false
06-09 12:25:39.526 14020-15026/com.example.james.rollingsphere E/TAG﹕ Could not link program:
06-09 12:25:39.526 14020-15026/com.example.james.rollingsphere E/TAG﹕ [ 06-09 12:25:39.556 285: 285 I/SurfaceFlinger ]
id=3619 Removed NainActivit (2/7)
06-09 12:25:39.566 14020-15026/com.example.james.rollingsphere E/TAG﹕ Could not link program:
06-09 12:25:39.566 14020-15026/com.example.james.rollingsphere E/TAG﹕ [ 06-09 12:25:39.566 14020:15026 E/TAG ]
Could not link program:
06-09 12:25:39.566 14020-15026/com.example.james.rollingsphere E/TAG﹕ [ 06-09 12:25:39.576 15014:15014 I/dalvikvm ]
Could not find method android.webkit.WebView.setWebContentsDebuggingEnabled, referenced from method com.google.apps.dots.android.newsstand.NSDepend.setupInternal
06-09 12:25:39.606 14020-15026/com.example.james.rollingsphere E/TAG﹕ Could not link program:
06-09 12:25:39.606 14020-15026/com.example.james.rollingsphere E/TAG﹕ [ 06-09 12:25:39.616 14020:15026 E/TAG ]
Could not link program:
06-09 12:25:39.616 14020-15026/com.example.james.rollingsphere E/TAG﹕ [ 06-09 12:25:39.636 14020:15026 E/TAG ]
Could not link program:
06-09 12:25:39.636 14020-15026/com.example.james.rollingsphere E/TAG﹕ [ 06-09 12:25:39.636 15014:15014 I/dalvikvm ]
Could not find method android.os.PowerManager.isInteractive, referenced from method com.google.apps.dots.android.newsstand.util.AndroidUtil.isDeviceInteractive
程序编译和链接成功吗?@Alex T。它编译得很好,调试时日志cat.1281==GL\u无效值中没有错误。唯一的原因是,如果程序无效,请在初始化program@samgak请参阅更新
06-09 12:25:39.436 14020-15026/com.example.james.rollingsphere E/TAG﹕ Could not link program:
06-09 12:25:39.436 14020-15026/com.example.james.rollingsphere E/TAG﹕ [ 06-09 12:25:39.436 848: 859 V/WindowManager ]
Window{430341b0 u0 Keyguard}mOrientationRequetedFromKeyguard=false
06-09 12:25:39.446 14020-15026/com.example.james.rollingsphere E/TAG﹕ Could not link program:
06-09 12:25:39.446 14020-15026/com.example.james.rollingsphere E/TAG﹕ [ 06-09 12:25:39.456 1164: 1164 D/STATUSBAR-PhoneStatusBar ]
animateCollapsePanels
06-09 12:25:39.476 14020-15026/com.example.james.rollingsphere E/TAG﹕ Could not link program:
06-09 12:25:39.476 14020-15026/com.example.james.rollingsphere E/TAG﹕ [ 06-09 12:25:39.486 14020:15026 E/TAG ]
Could not link program:
06-09 12:25:39.486 14020-15026/com.example.james.rollingsphere E/TAG﹕ [ 06-09 12:25:39.496 14020:15026 E/TAG ]
Could not link program:
06-09 12:25:39.496 14020-15026/com.example.james.rollingsphere E/TAG﹕ [ 06-09 12:25:39.496 848: 848 V/WindowManager ]
Window{430341b0 u0 Keyguard}mOrientationRequetedFromKeyguard=false
06-09 12:25:39.526 14020-15026/com.example.james.rollingsphere E/TAG﹕ Could not link program:
06-09 12:25:39.526 14020-15026/com.example.james.rollingsphere E/TAG﹕ [ 06-09 12:25:39.556 285: 285 I/SurfaceFlinger ]
id=3619 Removed NainActivit (2/7)
06-09 12:25:39.566 14020-15026/com.example.james.rollingsphere E/TAG﹕ Could not link program:
06-09 12:25:39.566 14020-15026/com.example.james.rollingsphere E/TAG﹕ [ 06-09 12:25:39.566 14020:15026 E/TAG ]
Could not link program:
06-09 12:25:39.566 14020-15026/com.example.james.rollingsphere E/TAG﹕ [ 06-09 12:25:39.576 15014:15014 I/dalvikvm ]
Could not find method android.webkit.WebView.setWebContentsDebuggingEnabled, referenced from method com.google.apps.dots.android.newsstand.NSDepend.setupInternal
06-09 12:25:39.606 14020-15026/com.example.james.rollingsphere E/TAG﹕ Could not link program:
06-09 12:25:39.606 14020-15026/com.example.james.rollingsphere E/TAG﹕ [ 06-09 12:25:39.616 14020:15026 E/TAG ]
Could not link program:
06-09 12:25:39.616 14020-15026/com.example.james.rollingsphere E/TAG﹕ [ 06-09 12:25:39.636 14020:15026 E/TAG ]
Could not link program:
06-09 12:25:39.636 14020-15026/com.example.james.rollingsphere E/TAG﹕ [ 06-09 12:25:39.636 15014:15014 I/dalvikvm ]
Could not find method android.os.PowerManager.isInteractive, referenced from method com.google.apps.dots.android.newsstand.util.AndroidUtil.isDeviceInteractive