1

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);ます。空のピックスマップを使用してテストして動作しましたが、XCompositeNameWindowPixmapこれを使用するとエラーが発生し、コードで何が問題になる可能性がありますか?

編集:

XCompositeNameWindowPixmap を使用すると常に黒い画像が返される別のコードを使用していることがわかりました。これは、VMware プレーヤーで ubuntu を使用しているために発生する可能性がありますか? 私はこのエントリのコードを使用します:

Qt と XComposite の問題

4

1 に答える 1