其他分享
首页 > 其他分享> > 如何使用glreadpixels与android – 通常得到零

如何使用glreadpixels与android – 通常得到零

作者:互联网

我正试图检测光标下的opengl对象……我已经读过了
它被称为采摘.这是我的代码:

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

看到上面的大部分代码都是logcat语句.我的代码打印
对于r,g和b,屏幕为零.对于alpha,它打印’-1′,即
可翻译为255(无符号)为’完整alpha’.我正试图检测一个
在给定的x / y位置的屏幕上的颜色.我很高兴
红色值介于1到15之间,因为那是颜色
应低于触摸.我希望如果我这样做的话
完全错了我会得到所有的零,但我必须至少做到这一点
部分正确,因为我得到阿尔法.我也包括了行
我的清单告诉手机我使用的权限
‘surface flinger’和’read frame buffer’.我不知道这些是不是
线正在运作.

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

任何帮助,将不胜感激.

解决方法:

在android上创建openGL ES应用程序时,我也遇到了类似的问题.

到目前为止,我的解决方法是将应用程序从RGB565更改为RGBA8888.在设置渲染器之前插入这些行:

getHolder().setFormat(PixelFormat.RGBA_8888);
setEGLConfigChooser(8, 8, 8, 8, 0, 0);

您必须意识到此解决方案仅适用于支持RGBA8888的设备.

标签:android,opengl-es,glreadpixels
来源: https://codeday.me/bug/20191008/1874289.html