1

WindowX11 Windowの識別子があります。私はこのウィンドウをセットアップしませんでした。その ID (そしておそらくvisualID) を取得することができます。このウィンドウの OpenGL コンテキストをセットアップするにはどうすればよいですか?

特に を使いたいglXMakeCurrentのですが、この関数はDisplayGLXContextオブジェクトを受け取ります。を使用してコンテキストを作成できますが、ここでもオブジェクトglXCreateContext(display, vi, 0, GL_TRUE);が必要です。DisplayXVisualInfo

4

2 に答える 2

3

このコードはウィンドウを完全に作成し、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 コンテキストの作成に進むことができます。

于 2012-10-12T11:27:01.877 に答える
2

X11 ウィンドウでの OpenGL コンテキストのセットアップは、私のコード例 (FTB/fungus による例に基づく) の 1 つでカバーされています。

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

ウィンドウだけが与えられ、ディスプレイが与えられていないことは問題です。ウィンドウがデフォルトのディスプレイ上にあると仮定して回ることはできないため、そのウィンドウをどこから取得しても、対応するディスプレイ接続も提供する必要があります。X11に関して言えば、ウィンドウIDを渡すだけではAPI設計の失敗です。

于 2012-10-12T13:25:07.943 に答える