FgImgRgbaUb fgOglGetRender() { glReadBuffer(GL_FRONT); FgImgRgbaUb ret; GLint x[4]; glGetIntegerv(GL_VIEWPORT,x); FgVect2UI dims(x[2],x[3]); if (dims.volume() > 0) { ret.resize(dims); FgRgbaUB * ptr = ret.dataPtr(); for (uint yy=0; yy<dims[1]; ++yy) { // Invert line ordering from OGL: glReadPixels(0,dims[1]-1-yy,dims[0],1,GL_RGBA,GL_UNSIGNED_BYTE,ptr); ptr += dims[0]; } } glReadBuffer(GL_BACK); // Restore to default return ret; }
void fgSaveImgAnyFormat( const FgString & fname, const FgImgRgbaUb & img) { FGASSERT(fname.length() > 0); fgEnsureMagick(); FgScopePtr<ImageInfo> image_info(CloneImageInfo(0),DestroyImageInfo); FgScopePtr<ExceptionInfo> exception(AcquireExceptionInfo(),DestroyExceptionInfo); FgScopePtr<Image> image(ConstituteImage(img.width(),img.height(),"RGBA", CharPixel, img.dataPtr(), exception.get()), DestroyImage); (void) strcpy(image_info->filename,fname.as_utf8_string().c_str()); FGASSERT( MagickTrue == WriteImages(image_info.get(),image.get(),fname.as_utf8_string().c_str(),exception.get())); }