首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >glError 1282在Nexus S,但在Nexus中没有

glError 1282在Nexus S,但在Nexus中没有
EN

Stack Overflow用户
提问于 2011-07-25 15:21:28
回答 2查看 2.3K关注 0票数 3

我正在使用openGL ES 2.0创建一个活壁纸。这个应用程序在我的nexus中运行得很好,但是它没有在Nexus中显示任何东西。

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

  • 我已经查过this question了。我的纹理是128x128,所以我想这不是问题。
  • 我在我的代码中使用了checkGlError方法,我发现它没有问题地传递onSurfaceCreatedonSurfaceChanged。如果在onDrawFrame()方法.

的第一行中调用该方法,则该方法将引发异常。

checkGlError代码如下:

代码语言:javascript
复制
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);
    }
}

我注意到错误发生在两个设备中,但它在nexus S中看起来很关键,而在nexus one中绘制得很好。我的猜测是,着色器没有被正确编译,并且存在一个问题。

你知道附件S和附件1之间的其他不相容之处吗?有办法调试着色器的代码吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-09-22 17:44:57

最后,我的问题与this question有关。

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

代码语言:javascript
复制
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
        ...
    }
票数 0
EN

Stack Overflow用户

发布于 2011-07-25 16:45:48

你知道附件S和附件1之间的其他不兼容吗?

这不是我所知道的,虽然OpenGL的ES驱动程序在不同的电话中也有不同的可能性。

有一种调试着色器代码的方法吗?

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

尝试在您的GLSurfaceView上设置以下内容,并检查是否能够看到LogCat中的更改:

代码语言:javascript
复制
mGLSurfaceView.setDebugFlags(GLSurfaceView.DEBUG_CHECK_GL_ERROR 
    | GLSurfaceView.DEBUG_LOG_GL_CALLS);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6818362

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档