привязать растровое изображение окна к текстуре, используя GLX_EXT_texture_from_pixmap в opengl

я хочу знать, как связать растровое изображение окна с текстурой OpenGL, используя расширение GLX_EXT_texture_from_pixmap, я не заставляю его работать, это мой код:

     const int pixmap_config[] = {
GLX_BIND_TO_TEXTURE_RGBA_EXT, True,
GLX_DRAWABLE_TYPE, GLX_PIXMAP_BIT,
GLX_BIND_TO_TEXTURE_TARGETS_EXT, GLX_TEXTURE_2D_BIT_EXT,
GLX_DOUBLEBUFFER, False,
GLX_Y_INVERTED_EXT, GLX_DONT_CARE,
None
};

const int pixmap_attribs[] = {
GLX_TEXTURE_TARGET_EXT, GLX_TEXTURE_2D_EXT,
GLX_TEXTURE_FORMAT_EXT, GLX_TEXTURE_FORMAT_RGB_EXT,
None
};

GLXFBConfig * configs = 0;
GLXPixmap glxpixmap = 0;
Pixmap pixmap;
GLuint texture_id;

int c=0;
configs = glXChooseFBConfig(display, 0, pixmap_config, &c);

pixmap = XCompositeNameWindowPixmap (display, desktop);

cout<<"Pixmap id"<<pixmap<<endl;

glxpixmap = glXCreatePixmap(display, configs[0], pixmap, pixmap_attribs);

cout <<"glxpixmap id"<<glxpixmap<<endl;
if(glxpixmap){
glEnable(GL_TEXTURE_2D);
glGenTextures(1, &texture_id);
glBindTexture(GL_TEXTURE_2D, texture_id);
glXBindTexImageEXT(display, glxpixmap, GLX_FRONT_EXT, NULL);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
}

это выбросит мне ошибку X:

X Error of failed request:  BadMatch (invalid parameter attributes)
Major opcode of failed request:  152 (Composite)
Minor opcode of failed request:  6 ()
Serial number of failed request:  27
Current serial number in output stream:  30

это происходит по линии glXBindTexImageEXT(display, glxpixmap, GLX_FRONT_EXT, NULL);, Я проверил это, используя пустое изображение и работает, но когда я использую XCompositeNameWindowPixmap это приводит к этой ошибке, что может быть не так в моем коде?

Редактировать:

Я обнаружил, используя другой код, который с помощью XCompositeNameWindowPixmap всегда возвращает черное изображение, может быть, это может произойти, потому что я использую Ubuntu на плеере VMware? я использую код этой записи:

Qt с проблемой XComposite

0

Решение

Быстрый и неполный контрольный список:

  • Это окно, чье растровое изображение вы пытаетесь увидеть?
    • Другими словами, это сопоставлено?
  • Окно, растровое изображение которого вы пытаетесь получить, имеет тип InputOutput?
  • Вы перенаправили корневое окно, используя xcb_composite_redirect_subwindows(..., XCB_COMPOSITE_REDIRECT_MANUAL); (или эквивалент Xlib?)
    • Простого создания наложения недостаточно.
    • Обратите внимание, я не пробовал перенаправлять отдельные окна и не пытался использовать _AUTOMATIC,
    • Необходимость сделать xcb_composite_redirect_... спрятан в GLX_EXT_texture_from_pixmap спекуляция

Имейте в виду: вы не хотите, чтобы другой композитор работал, и наверное даже не другой оконный менеджер. KWin, даже если композитинг отключен, ломает текущую итерацию моего игрушечного композитора.


Не связанный с вашим конкретным сообщением об ошибке, но возможный камень преткновения: в зависимости от возможностей вашего графического процессора, вам, возможно, придется использовать GL_NEAREST текстурный фильтр для фильтров min и mag.

Дополнительное предупреждение для вашей настройки: окно наложения не позволит вам взаимодействовать с рабочим столом, так как это фактическое наложение. Обычный способ обойти эту проблему — использовать XFixes, чтобы пробить дыру в вашем окне и в оверлейном окне (насколько это касается системы ввода / событий).

0

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

Других решений пока нет …

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