glXCreateContext - GLX
レンダリングコンテクストを新しく作る
GLXContext
glXCreateContext( Display
*dpy,
XVisualInfo *vis,
GLXContext shareList,
Bool direct )
引き数¶
- dpy
- X
サーバへの接続を指定する。
- vis
- レンダリングコンテクストが利用可能なフレームバッファリソースを定義する
ビジュアルを指定する。
これは XVisualInfo
構造体へのポインタであり、ビジュアルの
ID や Visual
へのポインタではない。
- shareList
- ディスプレイリストを共有するコンテクストを指定する。
NULL
は、全く共有を行わないことを示す。
- direct
- レンダリングをグラフィックスシステムとの直接接続で行う(True)か、
あるいは X
サーバ経由で行うか(
False)を指定する。
glXCreateContext は GLX
のレンダリングコンテクストを生成し、その
ハンドルを返す。
このコンテクストを用いて、ウィンドウと
GLX
ピックスマップの両方に描画
を行うことができる。
glXCreateContext
がレンダリングコンテクストの生成に失敗すると、
NULL が返される。
direct が
True
の場合、実装が直接レンダリングをサポートし
ており、X
サーバへの接続がローカルであり、直接レンダリングコンテクスト
が利用可能であれば、直接レンダリングコンテクストが生成される
(
direct が
True
の時も、実装は間接コンテクストを返すかもし
れない)。
direct が
False
ならば必ず、X
サーバ経由でレンダリングを行
うコンテクストが生成される。
実装によっては、直接レンダリングの方が高性能である。
しかし、直接レンダリングコンテクストは複数プロセスで共有できない。また、
GLX
ピックスマップをレンダリングできないことがある。
shareList が
NULL
でなければ、全てのディスプレイリストのイ
ンデックスと定義は、
shareList
のコンテクストと新しく生成されるコ
ンテクストによって共有される。
1
つのディスプレイリスト空間で、任意の数のコンテクストを共有することが
できる。 しかし、1
つのディスプレイリスト空間を共有する全てのレンダリングコンテ
クストは、同じアドレス空間内に存在しなければならない。
2
つのレンダリングコンテクストがアドレス空間を共有するのは、
両方が同じサーバを使う間接コンテクストである場合か、
両方が直接コンテクストであり、単一のプロセスに所有されている場合である。
間接コンテクストの場合には、呼び出しを行うスレッドがアドレス空間を共有
する必要はない。必要なのは、これらに対応するレンダリングコンテクストが
アドレス空間を共有することだけである。
GL のバージョンが 1.1
以降ならば、オブジェクト
0
を除く全てのテクスチャ
オブジェクトは、ディスプレイリストを共有する任意のコンテクストによって
共有される。
XVisualInfo は
Xutil.h
において定義されている。
これは
visual,
visualID,
screen,
depth 要素を
持つ構造体である。
プロセス
は単一の実行環境である。これは単一のアドレス空間内にお
いて実行され、1
つ以上のスレッドで構成される。
スレッドは、1
つのアドレス空間を共有しているサブプロセスの集合の
1
つであるが、別々のプログラムカウンタ、スタック空間、その他の
関連グローバルデータを管理する。
ある
スレッドがサブプロセスグループの唯一のメンバーならば、これは
プロセスと等価である。
直接レンダリングコンテクストを持つ
GLX
ピックスマップをレンダリングす
ることはできないかもしれない。
エラー¶
クライアント側で実行が失敗すると
NULL が返される。
生成されるコンテクストが、
shareList
によって指定されたコンテクス
トとアドレス空間やスクリーンを共有していない場合、
BadMatch が生 成される。
vis
が有効なビジュアルでない場合には、
BadValue が生成され
る(例えば、特定の GLX
の実装はこれをサポートしていない)。
shareList が GLX
コンテクストでなく、
NULL
でもない場合には、
GLXBadContext が生成される。
サーバが新しいコンテクストを割り当てるために十分なリソースを持っていな
い場合、
BadAlloc
が生成される。
関連項目¶
glXDestroyContext,
glXGetConfig,
glXIsDirect,
glXMakeCurrent