OpenGL ES - glReadPixels

Я делаю снимок экрана с помощью glReadPixels, чтобы выполнить эффект «перехода» между двумя изображениями.

В симуляторе Marmalade SDK снимок экрана сделан отлично, и эффект «кроссовера» работает отлично: enter image description here

Однако вот как это выглядит на устройствах iOS и Android - повреждено: enter image description here
(источник: eikona.info )

Я всегда читаю экран как 1 байт / канал RGBA, как сказано в документации , это ВСЕГДА принимается.

Вот код, использованный для создания снимка экрана:

uint8* Gfx::ScreenshotBuffer(int& deviceWidth, int& deviceHeight, int& dataLength) {

    /// width/height
    deviceWidth = IwGxGetDeviceWidth();
    deviceHeight = IwGxGetDeviceHeight();
    int rowLength = deviceWidth * 4; /// data always returned by GL as RGBA, 1 byte/each

    dataLength = rowLength * deviceHeight;

    // set the target framebuffer to read
    glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
    glPixelStorei(GL_PACK_ALIGNMENT, 1);
    uint8* buffer = new uint8[dataLength];
    glReadPixels(0, 0, deviceWidth, deviceHeight, GL_RGBA, GL_UNSIGNED_BYTE, buffer);

    return buffer;
}

void Gfx::ScreenshotImage(CIwImage* img, uint8*& pbuffer) {

    int deviceWidth, deviceHeight, dataLength;

    pbuffer = ScreenshotBuffer(deviceWidth, deviceHeight, dataLength);
    img->SetFormat(CIwImage::ABGR_8888);
    img->SetWidth(deviceWidth);
    img->SetHeight(deviceHeight);
    img->SetBuffers(pbuffer, dataLength, 0, 0);
}

9
задан Glorfindel 14 August 2019 в 15:43
поделиться