Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > off-screen рендеринг


Автор: set1700 12.8.2009, 14:12
Привет всем. Мне необходимо снимать скриншоты opengl анимации без вывода на экран. Подскажите, пожалуйста, какое-нибудь кросс-платформенное решение.

Автор: Alexeis 12.8.2009, 14:44
Цитата(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

Автор: set1700 13.8.2009, 09:34
Спасибо, попробую.

Автор: Rickert 6.10.2009, 08:55
Рисуем всё как всегда, потом используем стаднартную функцию получения значений пикселей из буффера и просто не делаем его свап, а переходим к отрисовке след. кадра. Ничего дополнительно не нужно и кроссплатформенно как и сам ogl.
Или я может вопроса не понял?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)