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.就那么简单.

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

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

相关文章

###实现效果*本实例主要实现用ViewPage和Fragment实现选项卡...
一、安装 JDK 下载JDK最新版本,下载地址如下: http://www....
这篇“android轻量级无侵入式管理数据库自动升级组件怎么实现...
今天小编给大家分享一下Android实现自定义圆形进度条的常用方...
这篇文章主要讲解了“Android如何解决字符对齐问题”,文中的...
这篇文章主要介绍“Android岛屿数量算法怎么使用”的相关知识...