【问题标题】:android opengl es 2 not working on all devicesandroid opengl es 2 无法在所有设备上运行
【发布时间】:2012-11-01 18:15:31
【问题描述】:

我的应用程序有点问题。我使用三星 Galaxy S3 开发了我的应用程序来测试它,结果一切正常! 但问题来了,在我完成应用程序后,我开始在其他设备上进行测试。该应用程序可以在其他 Galaxy S3 和 Galaxy S 上完美运行。但是当我尝试在 Sony Xperia 和 LG Optimus Net Dual 上运行它时,屏幕只是变黑了!

更有趣的是,这些设备上的应用,声音功能还可以,广告出现,应用完美触碰,却只画黑屏!这真的很奇怪......就像他们不支持opengles 2但他们支持并且android版本是Xperia上的4.0 ICS和LG上的2.2!

有人知道这是什么吗?还是遇到了类似的问题?如果有人想要代码,请说并在此处发布!感谢您的帮助!

编辑:

我的加载纹理:

    public static int loadTexture(final int ResourceId, final int min_filter, final int mag_filter) {
    for (int i=0;i<nTextures;i++) if (Textures[i*2]==ResourceId) return Textures[i*2+1];
    int[] textureHandle = new int[1];

    GLES20.glGenTextures(1, textureHandle, 0);
     if (textureHandle[0] != 0)
        {
            final BitmapFactory.Options options = new BitmapFactory.Options();
            options.inScaled = false;
            final Bitmap bitmap = BitmapFactory.decodeResource(GLRenderer.mContext.getResources(), ResourceId, options);
            GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textureHandle[0]);
            GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, min_filter);
            GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, mag_filter);
            GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S,GLES20.GL_CLAMP_TO_EDGE);
            GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T,GLES20.GL_CLAMP_TO_EDGE);
            GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0,GLES20.GL_RGBA, bitmap, 0);
            bitmap.recycle();
        }
        if (textureHandle[0] == 0) throw new RuntimeException("Error loading texture.");
        Textures[nTextures*2]=ResourceId;
        Textures[nTextures*2+1]=textureHandle[0];
        nTextures++;
        return textureHandle[0];
}

编辑 2:

我的 GLSurfaceView 的创建:

    GLActivityView(GLActivity context) {
        super(context);
        setEGLContextClientVersion(2);
//      getHolder().setFormat(PixelFormat.TRANSLUCENT);
//      setEGLConfigChooser(8, 8, 8, 8, 8, 8);
        renderer = new GLRenderer(context);
        setRenderer(renderer);
    }

【问题讨论】:

    标签: android drawing opengl-es-2.0


    【解决方案1】:

    也许这些手机不支持 NPOT 功能。如果不支持 NPOT,那么您可能需要确保您的纹理尺寸都是 2 的幂。

    你可以这样检查

    static public boolean isNPOTSupported(GL10 gl) {
        String extensions = gl.glGetString(GL10.GL_EXTENSIONS);
        return extensions.indexOf("GL_OES_texture_npot") != -1;
    }
    

    【讨论】:

    • 通过 NPOT 您是指非 2 的幂吗?我是个小菜鸟……是的,所有纹理确实都是 2 的幂,但它们不是正方形的。例如,有些是 512x256.. 唯一的图片 npot 是 96x96 的图标,但我没有在 opengl 上加载它..
    • 嗯,那我不知道.. 必须有其他特定于 opengl 2 的东西在某处不受支持.. 无论如何它可以在模拟器上运行吗?模拟器现在支持 opengl
    • 好吧,我现在试过了,但它返回“no configs match configspec”错误,这是您不支持 opengles2 时的错误,对吧?在设备上,这不是发生的事情。屏幕只是黑屏,不会报错...
    • 我发现了一些东西.. 当我评论 setEGLContextClientVersion(2);我能够重现相同的状态。广告有效,音乐有效,但屏幕是黑色的!现在在 logcat 上返回错误“调用未实现的方法 openGL ES API”。如何防止这种情况发生?
    • @rdnobrega hmmm 是的,听起来您选择了不正确的 GL 配置。但是,您也可能使用不受支持的纹理压缩,这就是您得到空白屏幕的原因。请在此处查看所有支持的配置:glbenchmark.com/… 我遇到了与您类似的情况,请您在这些设备上提供所需颜色和缓冲区深度的配置。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-29
    • 2011-04-22
    相关资源
    最近更新 更多