三星Galaxy SIII上的Android OpenGL透明度

时间:2012-12-14 03:58:31

标签: android opengl-es

概述

我正在构建一个使用GLSurfaceView的Android应用程序。我有两个设备,一个是摩托罗拉Xyboard 10“和一个三星Galaxy SIII。当我在我的Xyboard上运行我的应用程序时,我得到透明度但是当我在三星Galaxy SIII上运行相同的应用程序时,对象不会透明地呈现。

代码

下面是我正在使用的渲染功能。要记住的一件事是我的所有纹理都是2s的方形功率,并不位于drawable-ldpi文件夹中,而是位于res / raw文件夹中以防止Android更改大小。

@Override
public void draw(GL10 gl)
{
    super.draw(gl);

    gl.glEnable(GL10.GL_TEXTURE_2D);
    gl.glEnable(GL10.GL_ALPHA_TEST);
    gl.glAlphaFunc(GL10.GL_GREATER, 0.0f);
    gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
    gl.glTexCoordPointer(2,GL10.GL_FLOAT,0,textureBuffer);
    gl.glBindTexture(GL10.GL_TEXTURE_2D, textureID);

    gl.glBlendFunc(GL10.GL_SRC_ALPHA,GL10.GL_ONE_MINUS_SRC_ALPHA);
    gl.glEnable(GL10.GL_BLEND);

    gl.glFrontFace(GL10.GL_CCW);
    gl.glEnable(GL10.GL_CULL_FACE);
    gl.glCullFace(GL10.GL_BACK);
    gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
    gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);

    gl.glDrawElements(GL10.GL_TRIANGLES, 6, GL10.GL_UNSIGNED_SHORT, indexBuffer);
    gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
    gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
    gl.glDisable(GL10.GL_BLEND);
    gl.glDisable(GL10.GL_CULL_FACE);
    gl.glDisable(GL10.GL_ALPHA_TEST);
    gl.glDisable(GL10.GL_TEXTURE_2D);   
}

其他考虑因素

另外需要注意的是,渲染3D对象时的透明度有效,但是当我设置2D投影时透明度停止工作。这是我在2D渲染之前调用的方法。

private void prepare2Ddrawing(GL10 gl)
{   
    gl.glDisable(GL10.GL_LIGHT0);
    gl.glDisable(GL10.GL_LIGHTING);
    gl.glDisable(GL10.GL_DEPTH_TEST);
    gl.glLoadIdentity();
    gl.glMatrixMode(GL10.GL_PROJECTION);
    gl.glLoadIdentity();
    GLU.gluOrtho2D(gl,0,getWidth(), getHeight(),0);
    gl.glMatrixMode(GL10.GL_MODELVIEW);     
    gl.glLoadIdentity();
}

1 个答案:

答案 0 :(得分:1)

根据this网站,SIII有一个Mali-400MP GPU。根据{{​​3}}维基百科页面,mali-400mp支持opengl版本1.1& 2.0。我唯一能想到的是你正在使用的东西不受opengl 2.0及更低版本的支持。