У меня странная проблема при использовании объекта GL10 вне переопределенных функций Renderer.
Например, с целью выбора геометрии с помощью цветовых кодов я пытался считывать буфер цвета с помощью glReadPixels.
@Override
public void onDrawFrame(GL10 gl) {
...
ByteBuffer pixel = ByteBuffer.allocateDirect(4);
pixel.order(ByteOrder.nativeOrder());
gl.glReadPixels(0, 0, 1, 1, GL10.GL_RGBA, GL10.GL_UNSIGNED_BYTE, pixel);
while (pixel.hasRemaining()){
Log.v(TAG,""+(int)(pixel.get() & 0xFF));
}
}
Это работает и дает мне значения цвета в диапазоне 0..255 для пикселя в левом нижнем углу.
Теперь, когда я беру свой объект GL10 и делаю его доступным для всего класса в качестве поля, он больше не работает:
@Override
public void update(Observable observable, Object data) {
Log.v(TAG, "update Observer glsurfaceviewrenderer");
if (data instanceof MotionEvent){
MotionEvent event = (MotionEvent) data;
ByteBuffer pixel = ByteBuffer.allocateDirect(4);
pixel.order(ByteOrder.nativeOrder());
gl.glReadPixels(0, 0, 1, 1, GL10.GL_RGBA, GL10.GL_UNSIGNED_BYTE, pixel);
while (pixel.hasRemaining()){
Log.v(TAG,""+(int)(pixel.get() & 0xFF));
}
}
}
Это не работает, все цвета имеют значение 0. Разница лишь в том, что я использовал объект gl через поле, а не через аргумент функции. Я проверил указатель памяти на gl-объект, напечатав его в Log, и оба имеют одинаковый адрес.
Я сейчас в тупике ... у кого-нибудь есть идеи?