android – OpenGL ES – glReadPixels

前端之家收集整理的这篇文章主要介绍了android – OpenGL ES – glReadPixels前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用glReadPixels进行截图,以在两个图像之间执行“跨越”效果.

在Marmalade SDK模拟器上,截图被拍摄得很好,“交叉”效果起到了作用:

但是,这是iOS和Android设备的外观 – 损坏:
http://www.eikona.info/images/81269689420703803966.png

我总是将屏幕看作RGBA 1字节/通道,因为documentation says总是被接受.

以下是用于截取屏幕截图的代码

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,deviceWidth,deviceHeight,GL_RGBA,GL_UNSIGNED_BYTE,buffer);

    return buffer;
}

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

    int deviceWidth,dataLength;

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

解决方法

那是一个驱动程序的bug.就那么简单.

驱动程序在视频内存中出现了曲面的错误.你可以清楚地看到这一点在上面.此外,您在图像下部看到的垃圾也就是驱动程序认为存储图像的内存,但是存在不同的数据.纹理/顶点数据可能.

对不起,我知道没有办法解决这个问题.您可能会更好的运用不同的表格格式或启用/禁用多重采样.

猜你在找的Android相关文章