Double Buffer

XdbeQueryExtension拡張機能のバージョンを取得
XdbeGetVisualInfoダブルバッファリングをサポートしているビジュアルの情報を取得
XdbeFreeVisualInfoXdbeScreenVisualInfo を解放
XdbeAllocateBackBufferNameウィンドウのバックバッファを参照するためのIDを取得
XdbeDeallocateBackBufferNameバックバッファを解放
XdbeSwapBuffersフロントバッファとバックバッファを交換
XdbeBeginIdiomイディオムシーケンスの開始をマーク
XdbeEndIdiomイディオムシーケンスの終了をマーク
XdbeGetBackBufferAttributesバックバッファの属性を取得
#include <X11/extensions/Xdbe.h>
-lXext
Status XdbeQueryExtension(Display *dpy, int *major_version_return, int *minor_version_return);
サーバーがサポートする DBE バージョンを取得する。
この関数の前に、Xdbe 関数を呼び出すことはできません。
クライアントがこのルールに違反した場合、クライアントが行うすべての Xdbe 呼び出しの影響は、未定義です。
major_version_return,minor_version_return
実際に使用できるバージョンが返る。現在は ver 1.0 のみ。
戻り値
サーバーから返されたバージョンと互換性がある場合は、0 以外が返る。
拡張機能をサポートしていない場合や、サーバーとの通信中にエラーが発生した場合、サーバーとライブラリのプロトコルのバージョンに互換性がない場合は、0 を返します。
XdbeScreenVisualInfo *XdbeGetVisualInfo(Display *dpy, Drawable *screen_specifiers, int *num_screens);

typedef struct {
  int count; //visinfo の個数
  XdbeVisualInfo *visinfo;
} XdbeScreenVisualInfo;

typedef struct {
  VisualID  visual;
  int       depth;
  int       perflevel; //パフォーマンスレベル
} XdbeVisualInfo;
ダブルバッファリングをサポートしているビジュアルの情報を取得
screen_specifiers
ビジュアルを要求するスクリーンのルートウィンドウの配列
num_screens
screen_specifiers の数を指定する。
*num_screens が 0 の場合、すべてのスクリーンの情報を要求する。その場合、見つかったスクリーンの数が返る。
戻り値
エラー時は NULL。
num_screens 個の XdbeScreenVisualInfo 構造体の配列のポインタが返る。
screen_specifiers の n 番目の Drawable に対応している。
void XdbeFreeVisualInfo(XdbeScreenVisualInfo *visual_info);
XdbeScreenVisualInfo を解放
XdbeBackBuffer XdbeAllocateBackBufferName(Display *dpy, Window window, XdbeSwapAction swap_action);

typedef Drawable XdbeBackBuffer;
typedef unsigned char XdbeSwapAction;
指定されたウィンドウのバックバッファを参照するために使用される、ドローアブル ID を返します。
この ID を描画対象にすると、バックバッファに描画できます。
swap_action
XdbeSwapBuffers の呼び出し時に使用される可能性がある swap_action を示すヒント。
実際の swap_action は、この関数で渡された swap_action と同じである必要はありませんが、クライアントは、可能な限り正確な情報を提供することが推奨されます。

XdbeUndefinedバックバッファの内容は未定義
XdbeBackgroundバックバッファは、ウィンドウの背景色で塗りつぶされる
XdbeUntouchedバックバッファの内容は、スワップによって変更されない
XdbeCopiedバックバッファは、フォアグラウンドのコピーとなる
Status XdbeDeallocateBackBufferName(Display *dpy, XdbeBackBuffer buffer);
XdbeAllocateBackBufferName によって取得されたバッファを解放します。
バッファは、ウィンドウのバックバッファとして有効なものである必要があります。そうでない場合は、XdbeBadBuffer エラーが発生します。

ウィンドウが破棄された場合、関連付けられているバックバッファも破棄されます。
Status XdbeSwapBuffers(Display *dpy, XdbeSwapInfo *swap_info, int num_windows);

typedef struct
{
  Window         swap_window; //ウィンドウ
  XdbeSwapAction swap_action; //アクション
} XdbeSwapInfo;
ウィンドウのフロントバッファとバックバッファを交換します。
swap_info
スワップする対象の XdbeSwapInfo の配列
num_windows
swap_info の数
Status XdbeBeginIdiom(Display *dpy);
イディオムシーケンスの開始をマーク
Status XdbeEndIdiom(Display *dpy);
イディオムシーケンスの終了をマーク
XdbeBackBufferAttributes *XdbeGetBackBufferAttributes(Display *dpy, XdbeBackBuffer buffer);

typedef struct
{
  Window window;
} XdbeBackBufferAttributes;
指定されたバッファに関連付けられている属性を返します。
バッファが有効な XdbeBackBuffer ではない場合、window は None に設定されます。

返された XdbeBackBufferAttributes 構造体は、XFree() を使用して解放できます。