Android Nexus S中有glError 1282,但Nexus One中没有

Android Nexus S中有glError 1282,但Nexus One中没有,android,opengl-es-2.0,Android,Opengl Es 2.0,我正在使用openGL ES 2.0创建一个实时壁纸。 该应用程序在我的NexusOne中运行得很好,但在NexusS中它没有显示任何内容 到目前为止我已经测试过的东西: 我已经查过了。我的纹理是128x128,所以我想这不是问题所在 我在我的代码中使用了checklerror方法,发现它通过了onSurfaceCreated和onSurfaceChanged而没有问题。如果我在onDrawFrame()方法的第一行调用该方法,则该方法会引发异常 checklerror代码如下: priva

我正在使用openGL ES 2.0创建一个实时壁纸。 该应用程序在我的NexusOne中运行得很好,但在NexusS中它没有显示任何内容

到目前为止我已经测试过的东西:

  • 我已经查过了。我的纹理是128x128,所以我想这不是问题所在

  • 我在我的代码中使用了
    checklerror
    方法,发现它通过了
    onSurfaceCreated
    onSurfaceChanged
    而没有问题。如果我在
    onDrawFrame()
    方法的第一行调用该方法,则该方法会引发异常

checklerror
代码如下:

private void checkGlError(String op) {
    int error;
    while ((error = GLES20.glGetError()) != GLES20.GL_NO_ERROR) {
        Log.e(TAG, op + ": glError " + error);
        throw new RuntimeException(op + ": glError " + error);
    }
}
我注意到错误发生在两个设备中,但在NexusS中看起来很关键,而在NexusOne中则表现良好。我的猜测是着色器未正确编译,因此存在一个问题

你知道nexus S和nexus one之间的其他不兼容吗? 有没有调试着色器代码的方法

你知道nexus S和nexus one之间的其他不兼容吗

据我所知并非如此,尽管OpenGL ES驱动程序可能因手机而异

有没有调试着色器代码的方法

我自己还没有尝试过着色器,但是,通过在我的
GLSurfaceView
上进行调试,我可以检查规则的平移、旋转等

尝试在您的
GLSurfaceView
上设置此选项,并检查您是否能够在LogCat中看到更改:

mGLSurfaceView.setDebugFlags(GLSurfaceView.DEBUG_CHECK_GL_ERROR 
    | GLSurfaceView.DEBUG_LOG_GL_CALLS);

最后,我的问题涉及到

从资源中读取时,Android调整了我的纹理大小。我通过读取原始文件夹中的纹理解决了此问题:

public void loadBitmap(int resourceId) {

        textureId = resourceId;

        /* Get the texture */
        InputStream is = mContext.getResources().openRawResource(textureId);
        Bitmap bitmap;

        try {
            bitmap = BitmapFactory.decodeStream(is);
        } finally {
            try {
                is.close();
            } catch (IOException e) {
                // Ignore.
            }
        }

        int width = bitmap.getWidth();
        int height = bitmap.getHeight();

        Buffer data = ByteBuffer.allocateDirect(width * height * 4);
        bitmap.copyPixelsToBuffer(data);
        data.position(0);

        // Bind the texture object
        GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, mTextures.get(0));
        ...
        // OpenGL stuff
        ...
    }