android opengl es 2无法在所有设备上运行

时间:2012-11-01 18:15:31

标签: android drawing opengl-es-2.0

我的应用程序有点麻烦..我使用三星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);
    }

1 个答案:

答案 0 :(得分:0)

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

你可以这样检查

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