Цитата(set1700 @ 12.8.2009, 13:12 ) | Привет всем. Мне необходимо снимать скриншоты opengl анимации без вывода на экран. Подскажите, пожалуйста, какое-нибудь кросс-платформенное решение.
|
В винде при вызове ChoosePixelFormat можно установить параметр dwFlags в PFD_DRAW_TO_BITMAP и подставить ему контекст связанный в DIB, тогда ренедер будет на битмапку. В линуксе тож можно см.
| Код | Display *dis = (Display*)wxGetDisplay(); int scrnum = DefaultScreen( dpy ); GLXContext FBRC = glXGetCurrentContext(); GLXDrawable FBDC = glXGetCurrentDrawable();
if (dpy == NULL) { throw "unable to get device context"; } if (!FBDC) { throw "unable to get render context"; } int attrib[] = { GLX_DOUBLEBUFFER, False, GLX_RED_SIZE, 8, GLX_GREEN_SIZE, 8, GLX_BLUE_SIZE, 8, GLX_ALPHA_SIZE, 8, GLX_STENCIL_SIZE, 8, GLX_DEPTH_SIZE, 24, GLX_RENDER_TYPE, GLX_RGBA_BIT, GLX_DRAWABLE_TYPE, GLX_PBUFFER_BIT | GLX_WINDOW_BIT, None };
int PBattrib[] = { GLX_PBUFFER_WIDTH, width, GLX_PBUFFER_HEIGHT, height, GLX_LARGEST_PBUFFER, False, None };
// choose a pixel format that meets our minimum requirements int count = 0; GLXFBConfig *config = glXChooseFBConfig(dpy, scrnum, attrib, &count);
if(config == NULL || count == 0) { throw "no fitting pbuffer pixel format found"; }
PBDC = glXCreatePbuffer(dpy, config[0], PBattrib); PBRC = glXCreateNewContext(dpy, config[0], GLX_RGBA_TYPE, FBRC, true); XFree(config);
|
стыбжено отседова. http://www.groupsrv.com/computers/about268710.html |