cmap = XCreateColormap(dpy, root, vi->visual, AllocNone);
これは一体何をしているのか?
概要:カラーマップと色構造体の生成
引数:Display * ・・・ Xサーバの接続を指定
Window ・・・ カラーマップを作るスクリーンに属するウィンドウ
Visual * ・・・ スクリーンがサポートするVisual
int ・・・ 割当られるカラーマップのエントリー
XSetWindowAttributes swa;
swa.colormap = cmap;
swa.event_mask = ExposureMask | KeyPressMask;
win = XCreateWindow(dpy, root, 0, 0, 600, 600, 0, vi->depth, InputOutput, vi->visual, CWColormap | CWEventMask, &swa);
XCreateWindow
概要:ウィンドウの生成
XMapWindow(dpy, win);
XStoreName(dpy, win, "VERY SIMPLE APPLICATION”);
XMapWindow
Xサーバーとウィンドウとのマッピング
XStoreName
Window名の設定
ここからOpenGLの初期化
glc = glXCreateContext(dpy, vi, NULL, GL_TRUE);
glXMakeCurrent(dpy, win, glc);
glEnable(GL_DEPTH_TEST);
glXCreateContext
概要:GLXレンダリングコンテキストの作成
引数:Display* Xサーバー
XVisualInfo* コンテキストが利用可能なフレームバッファリソースの定義
GLXContext 共有するコンテキスト
Bool レンダリングをグラフィックシステムと直接接続で行う(GL_TRUE)か
サーバー経由で行うか(GL_FALSE)
glXMakeCurrent
概要:GLXコンテキストをウィンドウ又はGLXピックスマップ(Bitmap)に割り当てる
引数:Display* Xサーバー
GLXDrawable XウィンドウIDかGLXピックスマップID
GLXContext コンテキスト
glEnable
概要:有効な描画方法を設定
参考:http://www.westernvillage.co.jp/openglprogram.htm
while(1) {
XNextEvent(dpy, &xev);
if(xev.type == Expose) {
XGetWindowAttributes(dpy, win, &gwa);
glViewport(0, 0, gwa.width, gwa.height);
DrawAQuad();
glXSwapBuffers(dpy, win);
}
else if(xev.type == KeyPress) {
glXMakeCurrent(dpy, None, NULL);
glXDestroyContext(dpy, glc);
XDestroyWindow(dpy, win);
XCloseDisplay(dpy);
exit(0);
}
} /* this closes while(1) { */
} /* this is the } which closes int main(int argc, char *argv[]) { */
概要:イベントを型によって選択
参考:http://xjman.dsl.gr.jp/man/man3/XNextEvent.3x.html
XGetWindowAttributes
概要:ウィンドウの現在の属性を取得
参考:http://xjman.dsl.gr.jp/man/man3/XGetWindowAttributes.3x.html
glViewport
概要:ビューポートの設定
参考:http://wisdom.sakura.ne.jp/system/opengl/gl13.html
glXSwapBuffers
概要:ブッファの入れ替え
参考:http://manpages.ubuntu.com/manpages/gutsy/ja/man3/glXSwapBuffers.3x.html
0 件のコメント:
コメントを投稿