- GL_PACK_SWAP_BYTES
-
この値が真ならば、
マルチバイトの色要素、深さ要素、色インデックス、ステンシルインデックス
のバイト順序は逆になる。
つまり、4 バイトの要素が
$b sub 0$,
$b sub 1$,
$b sub 2$,
$b sub 3$
から構成されている場合、GL_PACK_SWAP_BYTES が真ならば
メモリには
$b sub 3$,
$b sub 2$,
$b sub 1$,
$b sub 0$
と格納される。
GL_PACK_SWAP_BYTES はピクセル内の要素のメモリ順には影響を与えない。
要素やインデックスに含まれるバイト順にのみ影響を与える。
例えば、GL_RGB ピクセルの 3 個の要素は、GL_PACK_SWAP_BYTES の
値にかかわらず、赤が最初、緑が二番目、青が三番目の順で必ず格納される。
- GL_PACK_LSB_FIRST
-
この値が真ならば、バイト値内のビット値は、最下位ビットから最上位ビットの順で並ぶ。
そうでない場合は、それぞれのバイト値の最初のビットが最上位ビットとなる。
このパラメータは、ビットマップデータに対してしか意味がない。
- GL_PACK_ROW_LENGTH
-
この値が 0 より大きい場合、GL_PACK_ROW_LENGTH は
行のピクセル数を定義する。
ある行の最初のピクセルがメモリ中の $p$ の位置に置かれる場合は、次の行の最初の
ピクセルの位置は
$k ~=~~ left { ^ lpile { n l above {a over s left ceiling { s n l } over a right ceiling}} ~~ lpile {s ~>=~ a above s ~<~ a }$
個の要素またはインデックスを飛ばすことによって得られる。
ここで、$n$ はひとつのピクセルに含まれる要素またはインデックスの数である。
$l$ は行に含まれるピクセル数である(
0 より大きければ GL_PACK_ROW_LENGTH であり、それ以外の場合には
ピクセル処理ルーチンに渡す $width$ 引き数である)。
$a$ は GL_PACK_ALIGNMENT の値である。
$s$ はひとつの要素の大きさ(バイト数)である($ a < s$ ならば、$a ~=~ s$ と
して扱われる)。
1ビット値の場合には、次の行の位置は
$k ~=~ 8 a left ceiling { n l } over { 8 a } ^ right ceiling$
個の要素またはインデックスを飛ばすことによって得られる。
-
この説明における「要素(component)」という用語は、
インデックス値でない赤、緑、青、アルファ値、深さである。
例えば、GL_RGB という保存形式はピクセルごとに
3つの要素を持つ:
最初が赤要素、その次が緑要素、最後が青要素である。
- GL_PACK_IMAGE_HEIGHT
-
0 より大きい場合には、
GL_PACK_IMAGE_HEIGHT は、
3次元テクスチャボリュームのイメージに含まれるピクセル数を定義する。
ここで「イメージ」は、同じ3次元インデックスを共有する全ての
ピクセル群として定義される。
ある行の最初のピクセルがメモリ上の位置 $p$ にある場合には、
次の行の最初のピクセルの位置は、
$k ~=~~ left { ~ lpile { n l h above {a over s left ceiling { s n l h }
over a ^ right ceiling}} ~~ lpile {s ~>=~ a above s ~<~ a }$
個の要素またはインデックスを飛ばすことで得られる。
ここで $n$ はひとつのピクセルに含まれる要素またはインデックスの数である
(GL_PACK_ROW_LENGTH が 0 より大きければ GL_PACK_ROW_LENGTH
であり、それ以外の場合には glTexImage3d に与えた引き数 $width$ の
値である)。
$h$ はピクセルイメージの行数である(GL_PACK_IMAGE_HEIGHT が 0 より
大きければ GL_PACK_IMAGE_HEIGHT であり、それ以外の場合には
glTexImage3D に与えた引き数 $height$ の値である)。
$a$ は GL_PACK_ALIGNMENT の値であり、
$s$ はひとつの要素の大きさ(バイト単位)である($a < s$ ならば、$a = s$
として扱われる)。
-
この説明における「要素」という用語は、
インデックス値でない赤、緑、青、アルファ値、深さである。
例えば、GL_RGB という保存形式はピクセルごとに
3つの要素を持つ:
最初が赤要素、その次が緑要素、最後が青要素である。
- GL_PACK_SKIP_PIXELS, GL_PACK_SKIP_ROWS, and GL_PACK_SKIP_IMAGES
-
これらの値はプログラマの便利のために用意されている。
これらの値は、glReadPixels に渡したポインタを単にインクリメント
する以外の機能は持たない。
$i$ に GL_PACK_SKIP_PIXELS を設定することは、ポインタを
$i n$ 個の要素またはインデックスの分だけインクリメントすることと
等価である。
ここで $n$ は、各ピクセルに含まれる要素またはインデックスの数である。
$j$ に GL_PACK_SKIP_ROWS を設定することは、
ポインタを $j m$ 個の要素またはインデックスの分だけインクリメント
することと等価である。
ここで $m$ は1行あたりの要素またはインデックスの数であり、
「GL_PACK_ROW_LENGTH」の項目の説明の通りに計算される。
$k$ に GL_PACK_SKIP_IMAGESを設定することは、
ポインタを $k p$ だけインクリメントすることと等価である。
ここで $p$ はイメージあたりの要素またはインデックスの数であり、
「GL_PACK_IMAGE_HEIGHT」の項目の説明の通りに計算される。
- GL_PACK_ALIGNMENT
-
メモリ上の各ピクセル行の先頭位置について、メモリ配置の必要条件を指定する。
指定できる値は
1 (バイト配置),
2 (偶数バイトの位置に行の先頭を配置する),
4 (ワード配置),
8 (2ワード境界に行の先頭を配置する)
である。
他の 12 個の保存形式を表す引き数のうち 6 個は、ピクセルデータの
クライアントメモリからの読み取りかたに影響を与える。
これらの値は
glDrawPixels,
glTexImage1D,
glTexImage2D,
glTexImage3D,
glTexSubImage1D,
glTexSubImage2D,
glTexSubImage3D,
glBitmap,
glPolygonStipple
に影響する。
さらに、GL_ARB_imaging 機能拡張に対応している場合には、
glColorTable,
glColorSubTable,
glConvolutionFilter1D,
glConvolutionFilter2D,
glSeparableFilter2D
に影響する。
これらについて次に説明する:
- GL_UNPACK_SWAP_BYTES
-
これが真ならば、マルチバイトの色要素、
深さ要素、色インデックス、ステンシルインデックスの
バイト順序は逆順になる。
つまり、4バイトからなる要素
$b sub 0$,
$b sub 1$,
$b sub 2$,
$b sub 3$,
について、GL_UNPACK_SWAP_BYTES が真ならば、
この要素はメモリから
$b sub 3$,
$b sub 2$,
$b sub 1$,
$b sub 0$
の順序で取り出される。
GL_UNPACK_SWAP_BYTES はピクセル内の要素のメモリ順には影響しない。
要素またはインデックス内のバイト順にのみ影響する。
例えば、GL_RGB ピクセルの 3 個の要素は、
GL_UNPACK_SWAP_BYTES の値とは無関係に常に
赤、緑、青の順で格納される。
- GL_UNPACK_LSB_FIRST
-
この値が真ならば、バイト値内のビット列は、最下位から最上位の
順に並べられる。
真でない場合には、それぞれのバイト値の最初のビット値は
最上位ビットである。
この値が関係するのはビットマップデータだけである。
- GL_UNPACK_ROW_LENGTH
-
この値が 0 より大きい場合には、GL_UNPACK_ROW_LENGTH は
1 行あたりのピクセル数を定義する。
最初の行のピクセルがメモリ上で $p$ の位置にある場合は、
次の行の最初のピクセルの位置は
$k ~=~~ left { ~ lpile { n l above {a over s left ceiling { s n l }
over a ^ right ceiling}} ~~ lpile {s ~>=~ a above s ~<~ a }$
個の要素またはインデックスを飛ばすことによって求められる。
ここで $n$ はピクセル1個あたりの要素数またはインデックス数である。
また、$l$ は1行あたりのピクセル数(
GL_UNPACK_ROW_LENGTH が 0 より大きければ
GL_UNPACK_ROW_LENGTH であり、そうでない場合には
ピクセル操作関数の $width$ 引き数である)、
$a$ は GL_UNPACK_ALIGNMENT の値、
$s$ はひとつの要素の大きさ(バイト単位)である($ a < s$ ならば、
$a = s$ となる)。
1ビットの値である場合には、次の行の最初の位置は
$k ~=~ 8 a left ceiling { n l } over { 8 a } right ceiling$
個の要素またはインデックスを飛ばすことによって求められる。
-
この説明における「要素」という用語は、
インデックス値でない赤、緑、青、アルファ値、深さである。
例えば、GL_RGB という保存形式はピクセルごとに
3つの要素を持つ:
最初が赤要素、その次が緑要素、最後が青要素である。
- GL_UNPACK_IMAGE_HEIGHT
-
0 より大きい場合は、GL_UNPACK_IMAGE_HEIGHT は
3次元のテクスチャボリュームのイメージに含まれるピクセル数を定義する。
ここで「イメージ」は、同じ3次元インデックスを共有する全てのピクセル
によって定義される。
ある行の最初のピクセルがメモリ上で $p$ の位置にある場合には、
次の行の最初のピクセルの位置は
$k ~=~~ left {~ lpile { n l h above {a over s left ceiling { s n l h }
over a ^ right ceiling}} ~~ lpile {s ~ >=~ a above s ~<~ a }$
個の要素またはインデックスを飛ばすことによって求められる。
ここで $n$ はピクセル1個あたりの要素数またはインデックス数である。
また、$l$ は1行あたりのピクセル数(
GL_UNPACK_ROW_LENGTH が 0 より大きければ
GL_UNPACK_ROW_LENGTH であり、そうでない場合には
ピクセル操作関数の $width$ 引き数である)、
$h$ はイメージ内の行数(GL_UNPACK_IMAGE_HEIGHT が
0 より大きければ GL_UNPACK_IMAGE_HEIGHT であり、
そうでない場合にはピクセル操作関数の $height$ 引き数である)、
$a$ は GL_UNPACK_ALIGNMENT の値、
$s$ はひとつの要素の大きさ(バイト単位)である($ a < s$ ならば、
$a = s$ となる)。
-
この説明における「要素」という用語は、
インデックス値でない赤、緑、青、アルファ値、深さである。
例えば、GL_RGB という保存形式はピクセルごとに
3つの要素を持つ:
最初が赤要素、その次が緑要素、最後が青要素である。
-
-
GL_UNPACK_SKIP_PIXELS および GL_UNPACK_SKIP_ROWS
これらの値は、プログラマの便宜のために用意されている。
これらの値は、
glDrawPixels,
glTexImage1D,
glTexImage2D,
glTexSubImage1D,
glTexSubImage2D,
glBitmap,
glPolygonStipple
に渡すポインタをインクリメントすること以上の機能は持たない。
GL_UNPACK_SKIP_PIXELS に $i$ を設定することは、
このポインタを $i n$ 個の要素またはインデックス分だけ
インクリメントすることと同じである。
GL_UNPACK_SKIP_ROWS に $j$ を設定することは、
このポインタを $j k$ 個の要素またはインデックス分だけ
インクリメントすることと同じである。
ここで $k$ は、行あたりの要素数またはインデックス数であり、その算出方法は
GL_UNPACK_ROW_LENGTH の項で説明した通りである。
- GL_UNPACK_ALIGNMENT
-
メモリ上の各ピクセル行の先頭位置について、メモリ配置の必要条件を指定する。
指定できる値は
1 (バイト配置),
2 (偶数バイトの位置に行の先頭を配置する),
4 (ワード配置),
8 (2ワード境界に行の先頭を配置する)
である。
以下の表は、glPixelStore に設定できる格納パラメータ
のそれぞれについての型、初期値、範囲を示す。
_
|
pname | 型 | 初期値 | 有効範囲
|
|
GL_PACK_SWAP_BYTES | boolean | false | true または false
|
GL_PACK_LSB_FIRST | boolean | false | true または false
|
GL_PACK_ROW_LENGTH | integer | 0 | [0,Infinity)
|
GL_PACK_IMAGE_HEIGHT | integer | 0 | [0, Infinity)
|
GL_PACK_SKIP_ROWS | integer | 0 | [0,Infinity)
|
GL_PACK_SKIP_PIXELS | integer | 0 | [0,Infinity)
|
GL_PACK_SKIP_IMAGES | integer | 0 | [0,Infinity)
|
GL_PACK_ALIGNMENT | integer | 4 | 1, 2, 4, 8
|
|
GL_UNPACK_SWAP_BYTES | boolean | false | true または false
|
GL_UNPACK_LSB_FIRST | boolean | false | true または false
|
GL_UNPACK_ROW_LENGTH | integer | 0 | [0,Infinity)
|
GL_UNPACK_IMAGE_HEIGHT | integer | 0 | [0,Infinity)
|
GL_UNPACK_SKIP_ROWS | integer | 0 | [0,Infinity)
|
GL_UNPACK_SKIP_PIXELS | integer | 0 | [0,Infinity)
|
GL_UNPACK_SKIP_IMAGES | integer | 0 | [0,Infinity)
|
GL_UNPACK_ALIGNMENT | integer | 4 | 1, 2, 4, 8
|
|
どのピクセル格納パラメータも、glPixelStoref を使って
設定することができる。
パラメータの型が真偽値型ならば、param の値が 0 の
場合にそのパラメータは偽となる。
それ以外の場合には真となる。
pname が整数型のパラメータの場合には、
param は最も近い整数に丸められる。
同様に、どのピクセル格納パラメータも、glPixelStorei を使って
設定できる。
パラメータ
真偽値を取るパラメータは、param が 0 の場合に偽となり、
それ以外の場合に真となる。