Настройка OpenGL на X11

у меня есть Window идентификатор для окна X11. Я не настраивал это окно, я просто могу получить его идентификатор (и я полагаю, visual Я бы). Как я могу настроить контекст OpenGL для этого окна?

В частности, я хочу использовать glXMakeCurrent, но эта функция получает Display а также GLXContext объекты. Я могу создать контекст, используя glXCreateContext(display, vi, 0, GL_TRUE); но опять мне нужно в Display а также XVisualInfo объекты.

1

Решение

Настройка контекста OpenGL в окне X11 покрыта одним из моих примеров кода (основанных на примере FTB / fungus), с заметным отличием, которое использует FBConfig над обычным Visual.

https://github.com/datenwolf/codesamples/blob/master/samples/OpenGL/x11argb_opengl/x11argb_opengl.c

То, что вам дают только окно, а не дисплей, является проблемой. Вы не можете просто обойтись, если окно находится на дисплее по умолчанию, поэтому, где бы вы ни получили это окно, оно также должен дать вам соответствующее подключение дисплея. Простая передача идентификаторов окон — это ошибка в дизайне API, когда дело доходит до X11.

2

Другие решения

Этот код полностью создает окно и инициализирует контекст opengl.

Display *dpy( XOpenDisplay( NULL );
int screen = XDefaultScreen( dpy );
const int fbCfgAttribslist[] =
{
GLX_RENDER_TYPE, GLX_RGBA_BIT,
GLX_DRAWABLE_TYPE, GLX_PBUFFER_BIT,
None
};
int nElements = 0;
GLXFBConfig * glxfbCfg = glXChooseFBConfig( dpy,
screen,
fbCfgAttribslist,
& nElements );

const int pfbCfg[] =
{
GLX_PBUFFER_WIDTH, WINDOW_WIDTH,
GLX_PBUFFER_HEIGHT, WINDOW_HEIGHT,
GLX_PRESERVED_CONTENTS, True,
GLX_LARGEST_PBUFFER, False,
None
};
GLXPbuffer pBufferId = glXCreatePbuffer( dpy, glxfbCfg[ 0 ], pfbCfg );XVisualInfo * visInfo = glXGetVisualFromFBConfig( dpy, glxfbCfg[ 0 ] );

GLXContext  glCtx = glXCreateContext( dpy, visInfo, NULL, True );glXMakeContextCurrent( dpy,
pBufferId,
pBufferId,
glCtx );

На самом деле это настройка pbuffer, а не окна, но в вашем случае, поскольку вы создали окно и настроили визуальные элементы, вы можете просто пропустить первую часть и продолжить создание контекста opengl.

3

По вопросам рекламы [email protected]