я хочу знать, как связать окна растрового изображение в OpenGL текстуру с расширением GLX_EXT_texture_from_pixmap, я не заставить его работать, это мой код:связать окно пиксельного с текстурой, используя GLX_EXT_texture_from_pixmap в OpenGL
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);
. Я тестировал его с использованием пустой pixmap и работал, но когда я использую XCompositeNameWindowPixmap
, это попадает в эту ошибку, что может быть неправильным в моем коде?
Edit:
Я нашел, используя другой код, используя XCompositeNameWindowPixmap всегда возвращает черное изображение, может быть, это может быть случиться, потому что я использую Ubuntu на VMWare Player? я использовать код этой записи:
Действительно ли «рабочий стол» отображается при вызове 'XCompositeNameWindowPixmap'? – didierc
в этом случае рабочий стол - это XDefaultRootWindow, я полагаю, что окно корня всегда видно, так ли? –
Является ли ваше приложение в полноэкранном режиме? Было бы целесообразно проверить, имеет ли это значение imho. – didierc