Ответ 1
Извините за поздний ответ...
Чтобы выполнить правильный снимок экрана, вы должны поместить в свой обработчик onDrawFrame (GL10 gl) следующий код:
if(screenshot){
int screenshotSize = width * height;
ByteBuffer bb = ByteBuffer.allocateDirect(screenshotSize * 4);
bb.order(ByteOrder.nativeOrder());
gl.glReadPixels(0, 0, width, height, GL10.GL_RGBA, GL10.GL_UNSIGNED_BYTE, bb);
int pixelsBuffer[] = new int[screenshotSize];
bb.asIntBuffer().get(pixelsBuffer);
bb = null;
Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);
bitmap.setPixels(pixelsBuffer, screenshotSize-width, -width, 0, 0, width, height);
pixelsBuffer = null;
short sBuffer[] = new short[screenshotSize];
ShortBuffer sb = ShortBuffer.wrap(sBuffer);
bitmap.copyPixelsToBuffer(sb);
//Making created bitmap (from OpenGL points) compatible with Android bitmap
for (int i = 0; i < screenshotSize; ++i) {
short v = sBuffer[i];
sBuffer[i] = (short) (((v&0x1f) << 11) | (v&0x7e0) | ((v&0xf800) >> 11));
}
sb.rewind();
bitmap.copyPixelsFromBuffer(sb);
lastScreenshot = bitmap;
screenshot = false;
}
Поле класса "скриншот" имеет значение true, когда пользователь нажимает кнопку, чтобы создать скриншот или при любых других обстоятельствах, которые вы хотите. Внутри тела "если" Вы можете поместить любой скриншот, создающий образец кода. Вы находите в Интернете - самое главное - иметь текущий экземпляр GL10. Например, когда вы просто сохраняете экземпляр GL10 для переменной класса, а затем используете его за пределами события, чтобы создать скриншот. В итоге вы получите совершенно пустое изображение. Вот почему вы должны сделать снимок экрана внутри обработчика события OnDrawFrame, где экземпляр GL10 является текущим. Надеюсь, что это поможет.
С уважением, Гордон.