Извините за поздний ответ ...
Чтобы сделать правильный скриншот, вы должны поместить в обработчик 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;
}
Поле класса «снимок экрана» устанавливается в значение «истина», когда пользователь нажимает кнопку, чтобы создать снимок экрана
или при любых других обстоятельствах, которые вы хотите. Внутри тела «if» Вы можете поместить любой скриншот, создавая образец кода, который вы найдете в интернете - самое важное - наличие текущего экземпляра GL10. Например, когда вы просто сохраняете экземпляр GL10 в переменную класса, а затем используете его вне события для создания снимка экрана, вы получите полностью пустое изображение. Вот почему вы должны сделать снимок экрана внутри обработчика события OnDrawFrame, где текущий экземпляр GL10.
Надеюсь, что это поможет.
С наилучшими пожеланиями, Гордон.