我正在尝试检测光标下的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" /
任何帮助将不胜感激。
答案 0 :(得分:2)
在Android上创建openGL ES应用时,我也面临类似的问题。
到目前为止我的解决方法是将应用程序从RGB565更改为RGBA8888。在设置渲染器之前插入这些行:
getHolder().setFormat(PixelFormat.RGBA_8888);
setEGLConfigChooser(8, 8, 8, 8, 0, 0);
您必须知道此解决方案仅适用于支持RGBA8888的设备。
答案 1 :(得分:2)
这些权限仅适用于签名应用。在编译Android ROM时签名的应用程序。所以他们对常规应用程序什么都不做。
android:name="android.permission.ACCESS_SURFACE_FLINGER"
android:name="android.permission.READ_FRAME_BUFFER"