微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐