XRender 拡張機能

構造体など
XRenderDirectFormatRGBA コンポーネント
XRenderPictFormatPicture のピクセルフォーマット
XRenderPictureAttributesPicture の属性
XRenderColor描画色
XGlyphInfoグリフの情報
XGlyphElt8
XGlyphElt16
XGlyphElt32
グリフ要素
XFixed固定少数点数 (16:16)
op合成オペランド
情報
XRenderQueryExtension拡張機能の情報を取得
XRenderQueryVersion拡張機能のバージョンを取得
XRenderQueryFormats互換性のある PictFormat を調べる
XRenderQuerySubpixelOrderスクリーンのサブピクセルオーダーを取得
XRenderSetSubpixelOrderスクリーンのサブピクセルオーダーを変更
XRenderFindVisualFormatビジュアルの PictFormat を取得
XRenderFindFormatテンプレートにマッチする PictFormat を取得
XRenderFindStandardFormat事前定義された標準フォーマットを取得
XRenderQueryPictIndexValuesIndexed フォーマットからインデックスカラーを取得
XRenderParseColor文字列から色を解析
XRenderQueryFiltersdrawable に適用できるフィルタを取得
Picture
XRenderCreatePictureDrawable 用の Picture を作成
XRenderFreePicturePicture を解放
XRenderChangePicturePicture の属性を変更
XRenderSetPictureClipRectanglesクリップマスクを複数の矩形でセット
XRenderSetPictureClipRegionクリップマスクを Region でセット
XRenderSetPictureTransform変形行列をセット
XRenderSetPictureFilterPicture にフィルタをセット
XRenderCreateCursorPicture からカーソルを作成
XRenderCreateAnimCursorアニメーションカーソルを作成
XRenderAddTrapsPicture のアルファチャンネルに台形を追加
XRenderCreateSolidFill指定色で塗りつぶされた Picture を作成
XRenderCreateLinearGradient線形グラデーションで塗りつぶされた Picture を作成
XRenderCreateRadialGradient放射状グラデーションで塗りつぶされた Picture を作成
XRenderCreateConicalGradient円錐形のラデーションで塗りつぶされた Picture を作成
合成
XRenderComposite2つの Picture を合成
XRenderFillRectangle
XRenderFillRectangles
四角形塗りつぶしと合成
XRenderCompositeTrapezoids台形のマスクを使用して2つの Picture を合成
XRenderCompositeTriangles三角形のマスクを使用して Picture を合成
XRenderCompositeTriStrip三角形ストリップのマスクを使用して Picture を合成
XRenderCompositeTriFan三角形扇形のマスクを使用して Picture を合成
XRenderCompositeDoublePoly多角形のマスクを使用して Picture を合成 (double)
グリフ
XRenderCreateGlyphSetグリフセットを作成
XRenderReferenceGlyphSet既存のグリフセットの新しい参照を生成
XRenderFreeGlyphSetグリフセットを解放
XRenderAddGlyphsグリフセットにグリフを追加
XRenderFreeGlyphsグリフセットからグリフを削除
XRenderCompositeString8
XRenderCompositeString16
XRenderCompositeString32
Picture に 8bit/16bit/32bit 文字列を描画
XRenderCompositeText8
XRenderCompositeText16
XRenderCompositeText32
8bit/16bit/32bit 文字列のグリフを描画
#include <X11/extensions/Xrender.h>
-lXrender
[pkgconfig] xrender
構造体など
typedef struct {
    short red;
    short redMask;
    short green;
    short greenMask;
    short blue;
    short blueMask;
    short alpha;
    short alphaMask;
} XRenderDirectFormat;
RGBA コンポーネント。

red,green,blue,alpha は、各コンポーネントのビット位置。
(例: red=16, green=8, blue = 0)

*Mask は、マスク値 (値の最大値と等しい)。
(例: redMask=255, blueMask=255, greenMask = 255, alphaMask = 0)

alphaMask が 0 の場合は、常に A = 最大値で、不透明になる。
{red,green,blue}Mask のいずれかが 0 の場合、R,G,B の値はすべて 0 になる。
typedef struct {
    PictFormat id;
    int type;
    int depth;
    XRenderDirectFormat direct;
    Colormap colormap;
} XRenderPictFormat;
Picture のピクセルフォーマット
id
このフォーマットの XID
type
カラータイプ。
PictTypeIndexed (0) : インデックス。アルファチャンネルはない。
PictTypeDirect (1) : RGBA
depth
ピクセルの深さ
direct
カラーコンポーネントの詳細
colormap
インデックスカラーのカラーマップ。
Direct タイプの場合はカラーマップがないため、スクリーンに依存しない。
typedef struct _XRenderPictureAttributes {
    int repeat;

    Picture alpha_map;
    int alpha_x_origin;
    int alpha_y_origin;

    int clip_x_origin;
    int clip_y_origin;
    Pixmap clip_mask;

    Bool graphics_exposures;
    int subwindow_mode;
    int poly_edge;
    int poly_mode;
    Atom dither;
    Bool component_alpha;
} XRenderPictureAttributes;
Picture の属性
repeat
範囲外のピクセルの処理方法 (default = RepeatNone)

RepeatNone透明に置き換える
RepeatNormal画像がタイル状に並んでいるものとして、ピクセルを選択します。
タイリングが座標をカバーしない場合は、選択した Constant モードまたは Nearest モードを使用します。
RepeatPad(ver 0.10) 最も近い、利用可能なピクセルに置き換えます。
複数のピクセルが等距離にある場合は、最小の Y 座標、次に最小の X 座標のピクセルを選択します。
RepeatReflect(ver 0.10) 画像がタイル状に反転して並んでいるものとして、ピクセルを選択します。
alpha_map
(default = None)
すべてのレンダリング時、drawable のアルファチャンネルの代わりとして使われる Picture。
alpha_map ピクチャ自体にアルファマップがある場合、結果は未定義です。
alpha_{x,y}_origin
drawable を基準とした原点位置
clip_mask
(default = None)
drawable への書き込みと読み込み時のクリップマスク。ビットが 1 で許可。
None で常に描画される。
depth = 1 で、drawable と同じルートを持つ必要があります。
変形、フィルタ、リピートモードはクリップマスクには影響しません。
clip_{x,y}_origin
Picture を基準とした原点位置
graphics_exposures
※無効なフィールド
subwindow_mode
出力先がウィンドウの場合、サブウィンドウのクリップ方法。
ClipByChildren (default) : 下層や兄弟ウィンドウによってクリップされる。
IncludeInferiors : 兄弟によるクリップが行われるが、下層によるクリップは行われない。

ウィンドウがソースまたはマスクとして使用される場合は、無視される。
poly_edge
ポリゴンの端の部分のアルファマスクの生成モード。
PolyEdgeSharp : 非アンチエイリアス
PolyEdgeSmooth (default) : アンチエイリアス
poly_mode
アルファ値のラスタライズモード。
PolyModePrecise (default) : 規則的なグリッド
PolyModeImprecise
dither
※無効なフィールド
component_alpha
(default = False)
Picture がマスクオペランドとして使用されるときに、各画像コンポーネントが、個別のアルファ値として意図されているかどうかを示します。
typedef struct {
    unsigned short red;
    unsigned short green;
    unsigned short blue;
    unsigned short alpha;
} XRenderColor;
描画色の色。
※0〜0xffff の範囲。
typedef struct _XGlyphInfo {
    unsigned short width;
    unsigned short height;
    short x;
    short y;
    short xOff;
    short yOff;
} XGlyphInfo;
グリフの情報
width,height
グリフの幅と高さ
x,y
左上を基準としたグリフの中心オフセット位置
xOff,yOff
次のグリフ位置への余白
typedef struct _XGlyphElt8 {
    GlyphSet glyphset;
    _Xconst char *chars;
    int nchars;
    int xOff;
    int yOff;
} XGlyphElt8;

typedef struct _XGlyphElt16 {
    GlyphSet glyphset;
    _Xconst unsigned short *chars;
    int nchars;
    int xOff;
    int yOff;
} XGlyphElt16;

typedef struct _XGlyphElt32 {
    GlyphSet glyphset;
    _Xconst unsigned int *chars;
    int nchars;
    int xOff;
    int yOff;
} XGlyphElt32;
グリフ要素
typedef int XFixed;

#define XDoubleToFixed(f) ((XFixed)((f)*65536))
#define XFixedToDouble(f) (((XDouble)(f)) / 65536)
固定少数点数 (16:16)
合成オペランド
色は、以下のように計算される。

C = src * Fa + dst * Fb

OPFa(src)Fb(dst)
PictOpClear00
PictOpSrc10
PictOpDst01
PictOpOver11-sa
PictOpOverReverse1-da1
PictOpInda0
PictOpInReverse0sa
PictOpOut1-da0
PictOpOutReverse01-sa
PictOpAtopda1-sa
PictOpAtopReverse1-dasa
PictOpXor1-da1-sa
PictOpAdd11
PictOpSaturatemin(1,(1-da)/sa)1
PictOpDisjointClear00
PictOpDisjointSrc10
PictOpDisjointDst01
PictOpDisjointOver1min(1,(1-sa)/da)
PictOpDisjointOverReversemin(1,(1-da)/sa)1
PictOpDisjointInmax(1-(1-da)/sa,0)0
PictOpDisjointInReverse0max(1-(1-sa)/da,0)
PictOpDisjointOutmin(1,(1-da)/sa)0
PictOpDisjointOutReverse0min(1,(1-sa)/da)
PictOpDisjointAtopmax(1-(1-da)/sa,0)min(1,(1-sa)/da)
PictOpDisjointAtopReversemin(1,(1-da)/sa)max(1-(1-sa)/da,0)
PictOpDisjointXormin(1,(1-da)/sa)min(1,(1-sa)/da)
PictOpConjointClear00
PictOpConjointSrc10
PictOpConjointDst01
PictOpConjointOver1max(1-sa/da,0)
PictOpConjointOverReversemax(1-da/sa,0)1
PictOpConjointInmin(1,da/sa)0
PictOpConjointInReverse0min(sa/da,1)
PictOpConjointOutmax(1-da/sa,0)0
PictOpConjointOutReverse0max(1-sa/da,0)
PictOpConjointAtopmin(1,da/sa)max(1-sa/da,0)
PictOpConjointAtopReversemax(1-da/sa,0)min(1,sa/da)
PictOpConjointXormax(1-da/sa,0)max(1-sa/da,0)

■ ver 0.11 で追加された合成モード
#define PictOpMultiply            0x30
#define PictOpScreen              0x31
#define PictOpOverlay             0x32
#define PictOpDarken              0x33
#define PictOpLighten             0x34
#define PictOpColorDodge          0x35
#define PictOpColorBurn           0x36
#define PictOpHardLight           0x37
#define PictOpSoftLight           0x38
#define PictOpDifference          0x39
#define PictOpExclusion           0x3a
#define PictOpHSLHue              0x3b
#define PictOpHSLSaturation       0x3c
#define PictOpHSLColor            0x3d
#define PictOpHSLLuminosity       0x3e
情報
Bool XRenderQueryExtension(Display *dpy, int *event_basep, int *error_basep);
拡張機能の情報を取得
event_basep
拡張機能のイベントタイプのベース値
error_base
拡張機能のエラーコードのベース値
戻り値
True で拡張機能が使用できる
Status XRenderQueryVersion(Display *dpy, int *major_versionp, int *minor_versionp);
拡張機能のバージョンを取得。
ライブラリ内部では、XRenderQueryFormats() も行われている。
major_versionp,minor_versionp
実際に使用できるバージョンが返る。最大で ver 0.11。
戻り値
拡張機能がサポートされている場合、True
Status XRenderQueryFormats(Display *dpy);
互換性のある PictFormat を確認して、内部でキャッシュする。
戻り値
True で成功
int XRenderQuerySubpixelOrder(Display *dpy, int screen);
スクリーンのサブピクセルオーダーを取得。
0.6
戻り値
SubPixelUnknown (エラー), SubPixelHorizontalRGB, SubPixelHorizontalBGR, SubPixelVerticalRGB, SubPixelVerticalBGR, SubPixelNone
Bool XRenderSetSubpixelOrder(Display *dpy, int screen, int subpixel);
スクリーンのサブピクセルオーダーを変更。
0.6
subpixel
SubPixelHorizontalRGB, SubPixelHorizontalBGR, SubPixelVerticalRGB, SubPixelVerticalBGR, SubPixelNone
戻り値
True で成功
XRenderPictFormat *XRenderFindVisualFormat(Display *dpy, _Xconst Visual *visual);
ビジュアルの PictFormat を取得
戻り値
ライブラリ内部でキャッシュされているポインタが返るので、解放しなくて良い。NULL で失敗。
XRenderPictFormat *XRenderFindFormat(Display *dpy, unsigned long mask, _Xconst XRenderPictFormat *templ, int count);
テンプレートにマッチする、最初の PictFormat を取得する。
mask
templ で使用する値のマスク。
#define PictFormatID (1 << 0)
#define PictFormatType (1 << 1)
#define PictFormatDepth (1 << 2)
#define PictFormatRed (1 << 3)
#define PictFormatRedMask (1 << 4)
#define PictFormatGreen (1 << 5)
#define PictFormatGreenMask (1 << 6)
#define PictFormatBlue (1 << 7)
#define PictFormatBlueMask (1 << 8)
#define PictFormatAlpha (1 << 9)
#define PictFormatAlphaMask (1 << 10)
#define PictFormatColormap (1 << 11)
templ
テンプレート
count
一致するフォーマットを、先頭から指定個数スキップする
戻り値
NULL で見つからなかった。ポインタは解放しないこと。
XRenderPictFormat *XRenderFindStandardFormat(Display *dpy, int format);
事前定義された標準フォーマットを取得する。
これは、一般的な形式を検索するための XRenderFindFormat の短縮形です。
format
フォーマット。
#define PictStandardARGB32 0
#define PictStandardRGB24 1
#define PictStandardA8 2
#define PictStandardA4 3
#define PictStandardA1 4
戻り値
NULL で見つからなかった。ポインタは解放しないこと。
XIndexValue *XRenderQueryPictIndexValues(Display *dpy, _Xconst XRenderPictFormat *format, int *num);

typedef struct _XIndexValue {
    unsigned long pixel;
    unsigned short red, green, blue, alpha;
} XIndexValue;
Indexed フォーマットからインデックスカラーを取得
num
配列の数が返る
戻り値
XIndexValue の配列。XFree() で解放する。NULL で失敗。
Status XRenderParseColor(Display *dpy, char *spec, XRenderColor *def);
文字列から色を解析
戻り値
True で成功
XFilters *XRenderQueryFilters(Display *dpy, Drawable drawable);

typedef struct _XFilters {
    int nfilter;   //フィルタ名の数
    char **filter; //フィルタ名の配列
    int nalias;    //エイリアスの数
    short *alias;  //フィルタのインデックス or 0xffff
} XFilters;
drawable に適用できるフィルタを取得
戻り値
XFree() で解放する。NULL で失敗。
Picture
Picture XRenderCreatePicture(Display *dpy, Drawable drawable, _Xconst XRenderPictFormat *format,
    unsigned long valuemask, _Xconst XRenderPictureAttributes *attributes);
指定 drawable に、作成した Picture オブジェクトを関連付けて、Picture を返す。
Picture には、drawable, format, attributes が関連付けられる。
画像内のピクセルデータは、format に従って解釈されます。

drawable が破棄された場合は、Picture も自動的に破棄される。

drawable と異なる深さのフォーマットを指定すると、Match エラーになります。
drawable がウィンドウの場合、R,G,B のマスクはウィンドウのビジュアル内のマスクと一致する必要があり、一致しない場合は Match エラーが生成されます。
valuemask
属性のマスク。
#define CPRepeat                (1 << 0)
#define CPAlphaMap              (1 << 1)
#define CPAlphaXOrigin          (1 << 2)
#define CPAlphaYOrigin          (1 << 3)
#define CPClipXOrigin           (1 << 4)
#define CPClipYOrigin           (1 << 5)
#define CPClipMask              (1 << 6)
#define CPGraphicsExposure      (1 << 7)
#define CPSubwindowMode         (1 << 8)
#define CPPolyEdge              (1 << 9)
#define CPPolyMode              (1 << 10)
#define CPDither                (1 << 11)
#define CPComponentAlpha        (1 << 12)
void XRenderFreePicture(Display *dpy, Picture picture);
Picture を解放
void XRenderChangePicture(Display *dpy, Picture picture, unsigned long valuemask, _Xconst XRenderPictureAttributes *attributes);
Picture の属性を変更
void XRenderSetPictureClipRectangles(Display *dpy, Picture picture, int xOrigin, int yOrigin, _Xconst XRectangle *rects, int n);
クリップマスクを複数の矩形でセット
void XRenderSetPictureClipRegion(Display *dpy, Picture picture, Region r);
クリップマスクを Region でセット
void XRenderSetPictureTransform(Display *dpy, Picture picture, XTransform *transform);

typedef struct _XTransform {
    XFixed matrix[3][3];
} XTransform;
変形行列をセット
void XRenderSetPictureFilter(Display *dpy, Picture picture, const char *filter, XFixed *params, int nparams);
picture がソースまたはマスクオペランドの場合に使用される、現在のフィルターを設定します。
フィルターは、画像に関連付けられたスクリーンでサポートされているフィルターの 1 つである必要があります。そうでない場合は、Match エラーが生成されます。

フィルターが追加のパラメーターを受け入れる場合は、それらを値で指定できます。
値が正しくない場合は Value エラーが生成され、値が多すぎると Match エラーが生成されます。
値が少なすぎると、フィルターは欠落しているパラメーターのデフォルト値を想定します。

作成時に、画像は nearest フィルターに設定されます。
filter
フィルタ名
params
フィルタのパラメータ
nparams
params の数
Cursor XRenderCreateCursor(Display *dpy, Picture source, unsigned int x, unsigned int y);
Picture からカーソルを作成する。

カーソルのコンポーネントは、表示制限に合わせて任意に変換できます。
特に、ディスプレイが完全不透明な 2 色のカーソルのみをサポートしている場合、alpha 0.5 未満の領域は透明、それ以外の領域は不透明、グレイスケール 50% より暗い領域は黒、その他の領域は白になるように、カーソルが変換されます。

ソースピクチャへの明示的な参照が行われない場合、ソースピクチャは直ちに解放できます。

ソース内での後続の描画は、カーソルに未定義の影響を与えます。
サーバーは画像のコピーを作成する場合もあれば、作成しない場合もあります。
x,y
ソースを基準としたホットスポット位置。ソース内の位置であること。
戻り値
X カーソル。PictOpOver (通常のアルファ合成) を使用して画面に描画されます。
Cursor XRenderCreateAnimCursor(Display *dpy, int ncursor, XAnimCursor *cursors);

typedef struct _XAnimCursor {
    Cursor cursor;
    unsigned long delay; //遅延時間
} XAnimCursor;
アニメーションカーソルを作成する。
0.8
void XRenderAddTraps(Display *dpy, Picture picture, int xOff, int yOff, _Xconst XTrap *traps, int ntrap);

typedef struct _XSpanFix {
    XFixed left, right, y;
} XSpanFix;

typedef struct _XTrap {
    XSpanFix top, bottom;
} XTrap;
Picture のアルファチャンネルに台形を追加。
0.9
picture
アルファ値のみの画像であること。
PictOpAdd で合成される。
Picture XRenderCreateSolidFill(Display *dpy, const XRenderColor *color);
指定色で塗りつぶされた Picture を作成。
0.10
Picture XRenderCreateLinearGradient(Display *dpy, const XLinearGradient *gradient,
    const XFixed *stops, const XRenderColor *colors, int nstops);

typedef struct _XLinearGradient {
    XPointFixed p1;
    XPointFixed p2;
} XLinearGradient;
線形グラデーションで塗りつぶされた Picture を作成。
0.10
gradient
線形の始点と終点
stops
0.0〜1.0 までの停止点。小さい順であること。
colors
各停止点の色
nstops
停止点の数
Picture XRenderCreateRadialGradient(Display *dpy, const XRadialGradient *gradient,
    const XFixed *stops, const XRenderColor *colors, int nstops);

typedef struct _XCircle {
    XFixed x;
    XFixed y;
    XFixed radius;
} XCircle;

typedef struct _XRadialGradient {
    XCircle inner;
    XCircle outer;
} XRadialGradient;
放射状グラデーションで塗りつぶされた Picture を作成
Picture XRenderCreateConicalGradient(Display *dpy, const XConicalGradient *gradient,
    const XFixed *stops, const XRenderColor *colors, int nstops);

typedef struct _XConicalGradient {
    XPointFixed center;
    XFixed angle; //角度
} XConicalGradient;
円錐形のラデーションで塗りつぶされた Picture を作成
合成
void XRenderComposite(Display *dpy, int op, Picture src, Picture mask, Picture dst,
    int src_x, int src_y, int mask_x, int mask_y, int dst_x, int dst_y, unsigned int width, unsigned int height);
src を mask でマスクし、dst の指定範囲と合成する。

座標は、それぞれの (変換された) drawable の原点を基準とした相対座標です。
レンダリングは、dst の drawable のジオメトリにクリップされてから、dst クリップリストでクリップされます。

src、mask、dst が同じ PictFormat ではなく、いずれかのフォーマットが精度を損なうことなくすべてを保持できる場合、そのフォーマットに変換されます。
あるいは、サーバーは、各オペランドをフォールバック形式に変換します。
mask
アルファチャンネルとして使われる Picture。
None の場合、定数アルファ値 1.0 に置き換えられます。
void XRenderFillRectangle(Display *dpy, int op, Picture dst, _Xconst XRenderColor *color,
    int x, int y, unsigned int width, unsigned int height);

void XRenderFillRectangles(Display *dpy, int op, Picture dst,
    _Xconst XRenderColor *color, _Xconst XRectangle *rectangles, int n_rects);
指定色で塗りつぶされたソースと合成します。

各長方形は個別に結合されます。重なっている領域は、複数回レンダリングされます。
void XRenderCompositeTrapezoids(Display *dpy, int op, Picture src, Picture dst, _Xconst XRenderPictFormat *maskFormat,
    int xSrc, int ySrc, _Xconst XTrapezoid *traps, int ntrap);

typedef int XFixed;

typedef struct _XPointFixed {
    XFixed x, y;
} XPointFixed;

typedef struct _XLineFixed {
    XPointFixed p1, p2;
} XLineFixed;

typedef struct _XTrapezoid {
    XFixed top, bottom;
    XLineFixed left, right;
} XTrapezoid;
台形のマスクを使用して2つの Picture を合成
void XRenderCompositeTriangles(Display *dpy, int op, Picture src, Picture dst, _Xconst XRenderPictFormat *maskFormat,
    int xSrc, int ySrc, _Xconst XTriangle *triangles, int ntriangle);

typedef struct _XTriangle {
    XPointFixed p1, p2, p3;
} XTriangle;
三角形のマスクを使用して Picture を合成
void XRenderCompositeTriStrip(Display *dpy, int op, Picture src, Picture dst, _Xconst XRenderPictFormat *maskFormat,
    int xSrc, int ySrc, _Xconst XPointFixed *points, int npoint);
1-2-3-4 の頂点がある場合、1-2-3, 3-2-4, ... の三角形になる。
最後の2つの辺が、次の最初の辺と同じになる。
void XRenderCompositeTriFan(Display *dpy, int op, Picture src, Picture dst, _Xconst XRenderPictFormat *maskFormat,
    int xSrc, int ySrc, _Xconst XPointFixed *points, int npoint);
1-2-3-4 の頂点がある場合、1-2-3, 1-3-4, ... の三角形になる。
最初の点を中心に、扇形に展開していく。
void XRenderCompositeDoublePoly(Display *dpy, int op, Picture src, Picture dst, _Xconst XRenderPictFormat *maskFormat,
    int xSrc, int ySrc, int xDst, int yDst, _Xconst XPointDouble *fpoints, int npoints, int winding);

typedef struct _XPointDouble {
    XDouble x, y;
} XPointDouble;
多角形のマスクを使用して Picture を合成 (double)
グリフ
GlyphSet XRenderCreateGlyphSet(Display *dpy, _Xconst XRenderPictFormat *format);
グリフセットを作成
format
Direct フォーマットであること。
RGB 値が含まれる場合、グリフは component_alpha = True を使用して合成され、それ以外の場合は component_alpha = False を使用して合成されます。
GlyphSet XRenderReferenceGlyphSet(Display *dpy, GlyphSet existing);
既存のグリフセットの追加の名前を作成します。
グリフセットへの参照がすべて破棄されるまで、グリフセットは解放されません。
void XRenderFreeGlyphSet(Display *dpy, GlyphSet glyphset);
グリフセットを解放する。
すべての参照が解放されると、グリフセットと、それに含まれるすべてのグリフが解放されます。
void XRenderAddGlyphs(Display *dpy, GlyphSet glyphset, _Xconst Glyph *gids,
    _Xconst XGlyphInfo *glyphs, int nglyphs, _Xconst char *images, int nbyte_images);
グリフセットにグリフを追加します。
グリフのイメージは、32 bit 境界にパディングされた個別の Z 形式イメージ内の各グリフとともに保存されます。
同じ名前の既存のグリフは置き換えられます。
nglyphs
グリフ数
images
グリフグラフィック
nbyte_images
images のバイト数
void XRenderFreeGlyphs(Display *dpy, GlyphSet glyphset, _Xconst Glyph *gids, int nglyphs);
グリフセットからグリフを削除します。
各グリフはグリフセット内に存在する必要があります (そうでない場合は Match エラーが発生します)。
void XRenderCompositeString8(Display *dpy, int op, Picture src, Picture dst, _Xconst XRenderPictFormat *maskFormat,
    GlyphSet glyphset, int xSrc, int ySrc, int xDst, int yDst, _Xconst char *string, int nchar);

void XRenderCompositeString16(Display *dpy, int op, Picture src, Picture dst, _Xconst XRenderPictFormat *maskFormat,
    GlyphSet glyphset, int xSrc, int ySrc, int xDst, int yDst, _Xconst unsigned short *string, int nchar);

void XRenderCompositeString32(Display *dpy, int op, Picture src, Picture dst, _Xconst XRenderPictFormat *maskFormat,
    GlyphSet glyphset, int xSrc, int ySrc, int xDst, int yDst, _Xconst unsigned int *string, int nchar);
Picture に 8bit/16bit/32bit 文字列を描画
maskFormat
None でない場合、グリフは、maskFormat で計算された有効なマスクを使用して、次の方法でレンダリングされます。
tmp = 作業用アルファ Picture
Combine (Zero, tmp, tmp, None)
for each glyph
    Combine (Add, tmp, glyph, None)
Combine (op, dst, source, tmp)

None の場合、グリフは dst に直接指定された順序でレンダリングされます。
xDst,yDst
drawable の原点を基準としたベースライン位置
void XRenderCompositeText8(Display *dpy, int op, Picture src, Picture dst, _Xconst XRenderPictFormat *maskFormat,
    int xSrc, int ySrc, int xDst, int yDst, _Xconst XGlyphElt8 *elts, int nelt);

void XRenderCompositeText16(Display *dpy, int op, Picture src, Picture dst, _Xconst XRenderPictFormat *maskFormat,
    int xSrc, int ySrc, int xDst, int yDst, _Xconst XGlyphElt16 *elts, int nelt);

void XRenderCompositeText32(Display *dpy, int op, Picture src, Picture dst, _Xconst XRenderPictFormat *maskFormat,
    int xSrc, int ySrc, int xDst, int yDst, _Xconst XGlyphElt32 *elts, int nelt);
8bit/16bit/32bit 文字列のグリフを描画