anal alfa do OpenGL ES 2.0 PNG

Estou apenas aprendendo a trabalhar com o OpenGL ES 2.0 para Android. Estou tentando simplesmente exibir uma textura no meio da tela, o que foi bastante fácil, mas não consigo fazer com que o PNG alfa funcione corretamente. A imagem será exibida com um plano de fundo preto ou a imagem inteira será mesclada levemente na cor de fundo, dependendo das configurações que eu usar.

Os tutoriais reais que eu segui para chegar a esse ponto nunca funcionaram com transparência, então tentei trabalhar no código que encontrei pesquisando e provavelmente acabei de perder uma etapa importante. Pesquisei bastante para descobrir esse problema e não vi respostas que tivessem algo que minha instalação não possui. Eu tentei todas as combinações de glBlendFunc e que não, sem sort

Eu imaginei que se eu tentasse colar todo o código que possa estar relacionado a isso, a pergunta pareceria muito inchada, então terei o maior prazer em postar qualquer pedaço de código que vocês solicitarem. Aprecio muito todas as idéias para o que devo tentar a seguir.

EDIT :: Aqui está o meu shader de fragmento, que é o que eu acredito ser a causa. Esta é a única parte em que nunca encontrei um exemplo decente para trabalhar com transparência, e tudo o mais corresponde ao que vi em outros lugare

        final String fragmentShader =           
        "precision mediump float;       \n"  
        + "varying vec2 v_Color;          \n"     
        + "uniform sampler2D s_baseMap;   \n"
        + "void main()                    \n"     
        + "{                              \n"
        + "  vec4 baseColor;              \n"
        + "  baseColor = texture2D( s_baseMap, v_Color );   \n"
        + "   gl_FragColor = baseColor;     \n"    
        + "}                              \n"; 

Nunca faz nada explicitamente com o alfa, é de um exemplo que não o usa, afinal, mas ainda não sei muito sobre shaders de fragmentos e porque parecia "meio que" funcionar quando mistura a imagem em segundo plano, achei que estava trabalhando com o alfa de alguma forma e acabei de ter algo errad

EDIT :: Aqui está o método "loadTexture". É mais ou menos o mesmo exemplo do livro do openGL ES 2.0 que estou tentando aprender, com algumas alterações que parecem fazer com que a imagem se aproxime mais do funcionamento corret

    private int loadTexture ( InputStream is )
{
    int[] textureId = new int[1];
    Bitmap bitmap;
    bitmap = BitmapFactory.decodeStream(is);
    byte[] buffer = new byte[bitmap.getWidth() * bitmap.getHeight() * 4];

    for ( int y = 0; y < bitmap.getHeight(); y++ )
        for ( int x = 0; x < bitmap.getWidth(); x++ )
        {
            int pixel = bitmap.getPixel(x, y);
            buffer[(y * bitmap.getWidth() + x) * 4 + 0] = (byte)((pixel >> 16) & 0xFF);
            buffer[(y * bitmap.getWidth() + x) * 4 + 1] = (byte)((pixel >> 8) & 0xFF);
            buffer[(y * bitmap.getWidth() + x) * 4 + 2] = (byte)((pixel >> 0) & 0xFF);
        }

    ByteBuffer byteBuffer = ByteBuffer.allocateDirect(bitmap.getWidth() * bitmap.getHeight() * 4);
    byteBuffer.put(buffer).position(0);

    GLES20.glGenTextures ( 1, textureId, 0 );
    GLES20.glBindTexture ( GLES20.GL_TEXTURE_2D, textureId[0] );

    GLES20.glTexImage2D ( GLES20.GL_TEXTURE_2D, 0, GLES20.GL_RGBA, bitmap.getWidth(), bitmap.getHeight(), 0, 
                          GLES20.GL_RGBA, GLES20.GL_UNSIGNED_BYTE, byteBuffer );

    GLES20.glTexParameteri ( GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR );
    GLES20.glTexParameteri ( GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR );
    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 );

    return textureId[0];
}

Eu entendo o que o código está fazendo, mas é certo que ainda me confunde um pouco, por isso posso estar perdendo algo óbvio devido à minha falta de conheciment

Eu não vejo nenhuma outra parte do meu código que pareça que possa causar o tipo de problema que estou tendo, mas a programação está sempre cheia de inesperados (principalmente no mundo do OpenGL, ao que parece), então se você pensa em outra coisa é a causa, também não deixarei de postar isso para você. Desculpe o transtorno

questionAnswers(3)

yourAnswerToTheQuestion