GLPIXELSTORE

Section: Misc. Reference Manual Pages (3G)
索引 xjman
 

名前

glPixelStoref, glPixelStorei - ピクセルの保存モードを指定する

 

書式

void glPixelStoref( GLenum pname,

                      GLfloat param )
void glPixelStorei( GLenum pname,

                      GLint param )

delim $$  

引き数

pname
設定するパラメータのシンボル名を指定する。 6 個の値は、ピクセルデータのメモリへの詰めかたに影響を与える: GL_PACK_SWAP_BYTES, GL_PACK_LSB_FIRST, GL_PACK_ROW_LENGTH, GL_PACK_IMAGE_HEIGHT, GL_PACK_SKIP_PIXELS, GL_PACK_SKIP_ROWS, GL_PACK_SKIP_IMAGES, GL_PACK_ALIGNMENT。 さらに 6 個の値があり、これらはピクセルデータのメモリからの 取り出しかたに影響を与える。 GL_UNPACK_SWAP_BYTES, GL_UNPACK_LSB_FIRST, GL_UNPACK_ROW_LENGTH, GL_UNPACK_IMAGE_HEIGHT, GL_UNPACK_SKIP_PIXELS, GL_UNPACK_SKIP_ROWS, GL_UNPACK_SKIP_IMAGES, GL_UNPACK_ALIGNMENT
param
pname が設定される値を指定する。
 

説明

glPixelStore はピクセルの設定モードを指定する。 これは、その後に実行する glDrawPixelsglReadPixelsの 操作に影響を与える。また、ポリゴンのスティプルパターン(glPolygonStipple を参照)や ビットマップ(glBitmap を参照)、 テクスチャパターン(glTexImage1D, glTexImage2D, glTexImage3D, glTexSubImage1D, glTexSubImage2D, glTexSubImage3D)の展開にも影響を与える。 これに加えて、GL_ARB_imaging 機能拡張に対応している場合には、 ピクセルの格納モードは畳み込みフィルタ (glConvolutionFilter1D, glConvolutionFilter2D, glSeparableFilter2D を参照)や色テーブル (glColorTable, glColorSubTable を参照)、 ヒストグラム(glHistogram を参照)の展開や minmax (glMinmax を参照) データにも影響を与える。 pname は設定するパラメータを示すシンボル定数である。 param は新しい値である。 12個の格納パラメータのうちの 6 個は、ピクセルデータのクライアントメモリへの 返されかたに影響を与える。 これを以下に示す:
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_BYTESbooleanfalsetrue または false
GL_PACK_LSB_FIRSTbooleanfalsetrue または false
GL_PACK_ROW_LENGTHinteger0[0,Infinity)
GL_PACK_IMAGE_HEIGHTinteger0[0, Infinity)
GL_PACK_SKIP_ROWSinteger0[0,Infinity)
GL_PACK_SKIP_PIXELSinteger0[0,Infinity)
GL_PACK_SKIP_IMAGESinteger0[0,Infinity)
GL_PACK_ALIGNMENTinteger41, 2, 4, 8

GL_UNPACK_SWAP_BYTESbooleanfalsetrue または false
GL_UNPACK_LSB_FIRSTbooleanfalsetrue または false
GL_UNPACK_ROW_LENGTHinteger0[0,Infinity)
GL_UNPACK_IMAGE_HEIGHTinteger0[0,Infinity)
GL_UNPACK_SKIP_ROWSinteger0[0,Infinity)
GL_UNPACK_SKIP_PIXELSinteger0[0,Infinity)
GL_UNPACK_SKIP_IMAGESinteger0[0,Infinity)
GL_UNPACK_ALIGNMENTinteger41, 2, 4, 8

どのピクセル格納パラメータも、glPixelStoref を使って 設定することができる。 パラメータの型が真偽値型ならば、param の値が 0 の 場合にそのパラメータは偽となる。 それ以外の場合には真となる。 pname が整数型のパラメータの場合には、 param は最も近い整数に丸められる。 同様に、どのピクセル格納パラメータも、glPixelStorei を使って 設定できる。 パラメータ 真偽値を取るパラメータは、param が 0 の場合に偽となり、 それ以外の場合に真となる。

 

注意

glDrawPixels, glReadPixels, glTexImage1D, glTexImage2D, glTexImage3D, glTexSubImage1D, glTexSubImage2D, glTexSubImage3D, glBitmap, glPolygonStipple のいずれかがディスプレイリストに置かれている時に有効な ピクセル格納モードは、メモリデータの解釈の仕方も制御する。 同様に、GL_ARB_imaging 機能拡張がサポートされている 場合には、 glColorTable, glColorSubTable, glConvolutionFilter1D, glConvolutionFilter2D, glSeparableFilter2D のいずれかがディスプレイリストに置かれている時に有効な ピクセル格納モードは、メモリデータの解釈の仕方も制御する。 ディスプレイリストが実行された時に有効なピクセル格納モードは 重要ではない。
ピクセル格納モードはクライアント側の状態である。したがって、 保存と復元には glPushClientAttribglPopClientAttrib を 使わなければならない。  

エラー

GL_INVALID_ENUM: pname の値が不正な場合に起こる。 GL_INVALID_VALUE: 行の長さ、ピクセルのスキップ幅、行のスキップ幅の値が負の場合に起こる。 アラインメント値として 1, 2, 4, 8 以外の値を指定した場合にも起こる。 GL_INVALID_OPERATION: glBegin と、その対になる glEnd の間で glPixelStore が実行されると起こる。  

関連する取得値

引き数 GL_PACK_SWAP_BYTES を指定した glGet
引き数 GL_PACK_LSB_FIRST を指定した glGet
引き数 GL_PACK_ROW_LENGTH を指定した glGet
引き数 GL_PACK_IMAGE_HEIGHT を指定した glGet
引き数 GL_PACK_SKIP_ROWS を指定した glGet
引き数 GL_PACK_SKIP_PIXELS を指定した glGet
引き数 GL_PACK_SKIP_IMAGES を指定した glGet
引き数 GL_PACK_ALIGNMENT を指定した glGet
引き数 GL_UNPACK_SWAP_BYTES を指定した glGet
引き数 GL_UNPACK_LSB_FIRST を指定した glGet
引き数 GL_UNPACK_ROW_LENGTH を指定した glGet
引き数 GL_UNPACK_IMAGE_HEIGHT を指定した glGet
引き数 GL_UNPACK_SKIP_ROWS を指定した glGet
引き数 GL_UNPACK_SKIP_PIXELS を指定した glGet
引き数 GL_UNPACK_SKIP_IMAGES を指定した glGet
引き数 GL_UNPACK_ALIGNMENT を指定した glGet  

関連項目

glBitmap(3G), glColorTable(3G), glColorSubTable(3G), glConvolutionFilter1D(3G), glConvolutionFilter2D(3G), glSeparableFilter2D(3G), glDrawPixels(3G), glHistogram(3G), glMinmax(3G), glPixelMap(3G), glPixelTransfer(3G), glPixelZoom(3G), glPolygonStipple(3G), glPushClientAttrib(3G), glReadPixels(3G), glTexImage1D(3G), glTexImage2D(3G), glTexImage3D(3G), glTexSubImage1D(3G), glTexSubImage2D(3G), glTexSubImage3D(3G)


 

Index

名前
書式
引き数
説明
注意
エラー
関連する取得値
関連項目

jman



Time: 07:01:09 GMT, January 12, 2009