Cómo usar glreadpixels con Android - usualmente obtienes ceros

Estoy tratando de detectar el objeto opengl debajo del cursor ... Lo he leído referido como picking. Aquí está mi código:

public int makeBuffer(GL10 gl, int x, int y) {

    ByteBuffer PixelBuffer = ByteBuffer.allocateDirect(4);
    PixelBuffer.order(ByteOrder.nativeOrder());
    PixelBuffer.position(0);
    int mTemp = 0;
    gl.glReadPixels((int)x, (int) y, 1, 1, GL10.GL_RGBA, GL10.GL_UNSIGNED_BYTE, PixelBuffer);
    Log.e("Picking", " xy: x" + x + " y"+ y);
    byte b [] = new byte[4];
    PixelBuffer.get(b);
    Log.e("Picking", " rgba: r"+ PixelBuffer.get(0) + " g" + PixelBuffer.get(1) + " b" +
            PixelBuffer.get(2) + " a" + PixelBuffer.get(3));
    Log.e("Picking", " rgba: r"+ b[0] + " g" + b[1] + " b" +
            b[2] + " a" + b[3]);

    //mTemp = PixelBuffer.get(0);
    mTemp = b[0];

    Log.e("Picking", "result:" + mTemp );

    return mTemp;
}

Vea que la mayor parte del código anterior es declaraciones logcat. Mi código imprime ceros en la pantalla para r, g y b. Para alfa imprime '-1' que es traducible a 255 (sin signo) como 'alfa completo'. Estoy tratando de detectar un color en la pantalla en la posición x / y dada. Estaría contento con un valor rojo que esté entre 1 y 15, ya que ese es el color que debería estar debajo del toque. Esperaría que si lo estuviera haciendo completamente mal obtendría todos los ceros, pero debo hacerlo al menos parcialmente bien, ya que estoy obteniendo alfa. También he incluido líneas en mi manifiesto que le dicen al teléfono que uso los permisos para el 'flinger de superficie' y el 'buffer de lectura de cuadros'. No sé si estas líneas funcionan.

<uses-permission
android:name="android.permission.ACCESS_SURFACE_FLINGER" />
<uses-permission android:name="android.permission.READ_FRAME_BUFFER" /

Cualquier ayuda sería apreciada

Respuestas a la pregunta(2)

Su respuesta a la pregunta