Matthew
Matthew

Reputation: 3946

Android OpenGL transparency on Samsung Galaxy SIII

Overview

I am building an android app that uses a GLSurfaceView. I have two devices, a Motorola Xyboard 10" and a Samsung Galaxy SIII. When I run my application on my Xyboard I get transparency but when I run the same application on my Samsung Galaxy SIII, the objects are not rendered with transparency.

Code

Below is my render function I am using. One thing to keep in mind is that all my textures are square power of 2s and are not located in the drawable-ldpi folder, but the res/raw folder to prevent Android from changing the size.

@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);   
}

Other Consideration

One other thing to note is that transparency when I am rendering 3D objects works, but when I set up the projection for 2D is when transparency stops working. This is the method I call before I render in 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();
}

Upvotes: 1

Views: 451

Answers (1)

Kevin
Kevin

Reputation: 2730

According to this website the SIII has a Mali-400MP GPU. And according to this wikipedia page, the mali-400mp supports opengl version 1.1 & 2.0. The only thing I can think of is something you are using is not supported by opengl 2.0 and lower.

Upvotes: 1

Related Questions