GLDRAWPIXELS

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

名前

glDrawPixels - ピクセルのブロックをフレームバッファに書き込む

 

書式

void glDrawPixels( GLsizei width,

                     GLsizei height,
                     GLenum format,
                     GLenum type,
                     const GLvoid *pixels )

delim $$  

引き数

width, height
フレームバッファに書き込むピクセル矩形領域の寸法を指定する。
format
ピクセルデータを指定する。 指定できるシンボル定数は次の通りである: GL_COLOR_INDEX, GL_STENCIL_INDEX, GL_DEPTH_COMPONENT, GL_RGB, GL_BGR, GL_RGBA, GL_BGRA, GL_RED, GL_GREEN, GL_BLUE, GL_ALPHA, GL_LUMINANCE, and GL_LUMINANCE_ALPHA
type
pixels のデータ型を指定する。 指定できるシンボル定数は次の通りである: GL_UNSIGNED_BYTE, GL_BYTE, GL_BITMAP, GL_UNSIGNED_SHORT, GL_SHORT, GL_UNSIGNED_INT, GL_INT, GL_FLOAT, GL_UNSIGNED_BYTE_3_3_2, GL_UNSIGNED_BYTE_2_3_3_REV, GL_UNSIGNED_SHORT_5_6_5, GL_UNSIGNED_SHORT_5_6_5_REV, GL_UNSIGNED_SHORT_4_4_4_4, GL_UNSIGNED_SHORT_4_4_4_4_REV, GL_UNSIGNED_SHORT_5_5_5_1, GL_UNSIGNED_SHORT_1_5_5_5_REV, GL_UNSIGNED_INT_8_8_8_8, GL_UNSIGNED_INT_8_8_8_8_REV, GL_UNSIGNED_INT_10_10_10_2, GL_UNSIGNED_INT_2_10_10_10_REV
pixels
ピクセルデータを指すポインタを指定する。
 

説明

glDrawPixels はピクセルデータをメモリから読み取り、 現在のラスタ位置に対する相対座標でフレームバッファに書き込む。 ラスタ位置は正しい必要がある。 現在のラスタ位置を指定するには glRasterPos を使う。 指定したラスタ位置が正しいかどうか確かめるには、引き数 GL_CURRENT_RASTER_POSITION_VALID を指定して glGet を 呼び出す。 ラスタ位置を問い合わせるには、引き数 GL_CURRENT_RASTER_POSITION を指定して glGet を 呼び出す。 いくつかのパラメータを使い、メモリ上のピクセルのエンコーディング を定義し、ピクセルデータをフレームバッファに書き込まれる前に 行う処理を制御する。 この際に使うパラメータは次の 4 つのコマンドで設定する: glPixelStore, glPixelTransfer, glPixelMap, glPixelZoom。 それぞれのマニュアルページには、これら 4 つのコマンドで 設定するパラメータが glDrawPixels に与える影響の多く(全部では ない)が説明されている。 データは pixels から読み込まれる。 読み込みは type に従って、 符号付きまたは符号なしの byte 型、 符号付きまたは符号なしの short 型、 符号付きまたは符号なしの int 型、 単精度の浮動小数点値のいずれかの列として行われる。 typeGL_UNSIGNED_BYTE, GL_BYTE, GL_UNSIGNED_SHORT, GL_SHORT, GL_UNSIGNED_INT, GL_INT, GL_FLOAT のいずれかの場合、 それぞれの byte 値、short 値、int 値、浮動小数点値は format に従って色、深さ要素、インデックスのいずれかとして解釈される。 typeGL_UNSIGNED_BYTE_3_3_2, GL_UNSIGNED_SHORT_5_6_5, GL_UNSIGNED_SHORT_4_4_4_4, GL_UNSIGNED_SHORT_5_5_5_1, GL_UNSIGNED_INT_8_8_8_8, GL_UNSIGNED_INT_10_10_10_2 のいずれかの場合、 それぞれの値(符号なし)はひとつのピクセルの要素を全て持っているもの として解釈される。色要素の解釈は format に従って行われる。 typeGL_UNSIGNED_BYTE_2_3_3_REV, GL_UNSIGNED_SHORT_5_6_5_REV, GL_UNSIGNED_SHORT_4_4_4_4_REV, GL_UNSIGNED_SHORT_1_5_5_5_REV, GL_UNSIGNED_INT_8_8_8_8_REV, GL_UNSIGNED_INT_2_10_10_10_REV のいずれかの場合、それぞれの 値(符号なし)はひとつのピクセルの要素を全て持っているもの として解釈される。色要素の解釈は format に従って行われるが、 個々のピクセルについて逆順に並んでいる。 インデックスは常にそのままで扱われる。 色要素は 1〜4 個の値のグループとして扱われる。 繰り返しになるがこれは format によって決められる。 個々のインデックスおよび要素のグループがピクセルとして扱われる。 typeGL_BITMAP の場合、データは符号なしの byte 値 でなければならず、formatGL_COLOR_INDEX または GL_STENCIL_INDEX でなければならない。 個々の符号なし byte 値は 8 個の 1 ビットピクセルとして扱われる。 ビットの並び順は GL_UNPACK_LSB_FIRST によって 決められる(glPixelStore を参照)。 width$~ * ~$height 個のピクセルがメモリから読み込まれる。 読み込み開始の位置は pixels である。 デフォルトでは、これらのピクセルは互いに隣接するメモリ領域から 読み込まれるが、width 個のピクセルを全部読んだ後は例外である。 この場合には、ポインタは次の 4 バイト境界の位置まで進む。 4 バイト単位でのアラインメントは、引き数 GL_UNPACK_ALIGNMENTglPixelStore に指定することによって行う。 この単位には 1, 2, 4, 8 バイトを指定できる。 他のピクセル格納パラメータは、いくつかある読み取りポインタの進めかた を指定する。これには、最初のピクセルを読む前の進めかたと、 width 個のピクセルを全て読んだ後の進めかたの両方を含む。 これらのオプションの詳しい説明については glPixelStore の マニュアルページを参照すること。 メモリから読み込まれた width$~ * ~$height 個のピクセルの それぞれに同じ処理が加えられる。 加えられる処理は glPixelTransferglPixelMap で 指定したいくつかのパラメータにしたがって行われる。 これらの操作の詳しい説明および、ピクセルが書き込まれる対象となる バッファはピクセルの内部フォーマットについて固有である。 これは format の項で説明する。 format は以下に示す 13 個のシンボル値の どれかであると仮定できる:
GL_COLOR_INDEX
それぞれのピクセルは、色インデックスをひとつの値として持つ。 この値は、2進数の小数点から右のビット数が不定である固定小数点値に変換される。 変換の際にメモリ上でのデータ型は関係ない。 浮動小数点値は固定小数点値に変換される。 符号付きまたは符号なしの整数データでは、小数点以下のビットは 全て 0 に設定される。 ビットマップデータは 0 か 1 のどちらかに変換される。
固定小数点のインデックスのそれぞれは、次に GL_INDEX_SHIFT ビット 左方向にシフトされ、それから GL_INDEX_OFFSET が加えられる。 GL_INDEX_SHIFT が負の場合はシフトは右方向に行われる。 どちらの場合も、値が不定となるビット位置は 0 で埋められる。
GL が RGBA モードの場合は、結果となるインデックス値は RGBA の ピクセル値に変換される。この際には GL_PIXEL_MAP_I_TO_R, GL_PIXEL_MAP_I_TO_G, GL_PIXEL_MAP_I_TO_B, GL_PIXEL_MAP_I_TO_A テーブルが使われる。 GL が色インデックスモードであり、かつ GL_MAP_COLOR が真の場合は、 インデックスは、参照テーブル GL_PIXEL_MAP_I_TO_I 内で インデックスが参照している値と置き換えられる。 インデックスの参照値による置き換えが行われたかどうかにかかわらず、 インデックスの整数部分は $2 sup b -1$ との AND が取られる。 ここで $b$ は、色インデックスバッファ内のビット数である。
次に GL は結果として得られたインデックス値または RGBA 色を フラグメントに置き換える。置き換えの際には、まず 現在のラスタ位置の z 座標とテクスチャ座標を各ピクセルに 割り当てることと、ウィンドウ座標の $x$, $y$ を $n$ 番目のフラグメントに 割り当てることによって行われる。 ウィンドウ座標からの割り当ては次のように行われる。

$x sub n ~=~ x sub r ~+~ n ~ roman mod ~ "width"$

$y sub n ~=~ y sub r ~+~ |_ n ^/^ "width" ~ _|$

ここで ($x sub r , y sub r$) は現在のラスタ位置である。 これ以降、これらピクセルフラグメントは、点・線・ポリゴンのラスタ処理 によって生成されたフラグメントと同じように扱われる。 テクスチャマッピング、フォグ処理を含む全てのフラグメント操作は、 フラグメントがフレームバッファに書き込まれる前に行われる。
GL_STENCIL_INDEX
各ピクセルはひとつの値(ステンシルのインデックス値)を持つ。 この値は固定小数点値に変換される。 この値は、メモリデータ型に関わらず、 2進数の小数点より右のビット数は不定となる。 浮動小数点値は、本当の固定小数点値に変換される。 符号付きまたは符号なしの整数データは、小数を表すビットが 全て 0 になるように変換される。 ビットマップデータは 0 または 1 に変換される。
次に、固定小数点値のインデックスはそれぞれ、左に GL_INDEX_SHIFT ビットシフトされ、さらに GL_INDEX_OFFSET を加えられる。 GL_INDEX_SHIFT が負の値の場合は、シフトは右方向に 行われる。 どちらの場合も、結果において値が不定となるビット位置には 0 が 設定される。 GL_MAP_STENCIL が真の場合は、インデックスは インデックスが参照テーブル GL_PIXEL_MAP_S_TO_S 内で 参照している値に置き換えられる。 インデックスの参照値による置き換えが行われたかどうかに かかわらず、インデックスの整数部分は $2 sup b -1$ との AND を 取られる。ここで $b$ はステンシルバッファのビット数である。 次に、結果として得られるステンシルのインデックスは、 ステンシルバッファに書き込まれる。 書き込みの際には $n$ 番目のインデックスが次の位置になる:
$x sub n ~=~ x sub r ~+~ n ~ roman mod ~ "width"$

$y sub n ~=~ y sub r ~+~ |_ ~ n / "width" ~ _|$

ここで ($x sub r , y sub r$) は現在のラスタ位置である。 この場合の書き込み操作に影響を与えるのは、 ピクセルの所有者テスト、シザーテスト、ステンシル書き込みマスク だけである。
GL_DEPTH_COMPONENT
それぞれのピクセルは深さをひとつ持つ要素である。 浮動小数点数値のデータは、内部表現の浮動小数点数値に直接変換される。 この際の精度は不定である。 符号付き整数は内部表現の浮動小数点数値に線形にマッピングされる。 この際に表現可能な最大の正の値が 1.0 にマッピングされ、 表現可能な最小の負の値が -1.0 にマッピングされる。 符号なしの整数も同じようにマッピングされる。 最大の整数値が 1.0 にマッピングされ、0 が 0.0 にマッピングされる。 結果として得られる浮動小数点値の深さ値には、次に GL_DEPTH_SCALE が掛けられた上で GL_DEPTH_BIAS が 加えられる。 この結果は [0,1] の範囲に収まるように調整される。
次に、GL は得られた深さ要素をフラグメントに変換する。 変換は、まず現在のラスタ位置の色または色インデックスおよび テクスチャ座標を各ピクセルに割り付け、次に $x$ および $y$ 座標を $n$ 番目のフラグメントに
$x sub n ~=~ x sub r ~+~ n ~ roman mod ~ "width"$

$y sub n ~=~ y sub r ~+~ |_ ~ n / "width" ~ _|$

を満たすように割り付けることによって行う。ここで ($x sub r , y sub r$) は現在のラスタ位置である。 これらのピクセルフラグメントは、次に 点、線、ポリゴンによって生成されたフラグメントと同じように扱われる。 テクスチャマッピング、フォグ処理を含む全てのフラグメント操作は、 フラグメントがフレームバッファに書き込まれる前に行われる。
GL_RGBA
GL_BGRA
それぞれのピクセルは 4 つの要素からなるグループである: GL_RGBA の場合は、赤、緑、青、アルファ値の順で要素が並んでいる。 GL_BGRA の場合は、青、緑、赤、アルファ値の順である。 浮動小数点値は内部表現の浮動小数点値に直接変換される。 変換の際の精度は不定である。 符号付き整数は内部表現の浮動小数点数値に線形にマッピングされる。 この際に表現可能な最大の正の値が 1.0 にマッピングされ、 表現可能な最小の負の値が -1.0 にマッピングされる。 (このマッピングでは 0 が正確に 0.0 にマッピングされない点に注意すること。) 符号なしの整数も同じようにマッピングされる。 最大の整数値が 1.0 にマッピングされ、0 が 0.0 にマッピングされる。 結果として得られる浮動小数点値の深さ値には、次に GL_c_SCALE が掛けられた上で GL_c_BIAS が 加えられる。 ここで c は、それぞれの色要素について RED, GREEN, BLUE, ALPHA となる。 この結果は [0,1] の範囲に収まるように調整される。
GL_MAP_COLOR が真ならば、それぞれの色要素は 参照テーブル GL_PIXEL_MAP_c_TO_c の大きさに従って スケーリングされ、その後、テーブル内で参照している値と置き換えられる。 c は R, G, B, A のいずれかである。
次に、GL は得られた RGBA 色をフラグメントに変換する。 変換は、まず現在のラスタ位置の z 座標とテクスチャ座標を 各ピクセルに割り付け、次に $x$ および $y$ 座標を $n$ 番目のフラグメントに
$x sub n ~=~ x sub r ~+~ n ~ roman mod ~ "width"$

$y sub n ~=~ y sub r ~+~ |_ ~ n / "width" ~ _|$

を満たすように割り付けることによって行う。ここで ($x sub r , y sub r$) は現在のラスタ位置である。 これらのピクセルフラグメントは、次に 点、線、ポリゴンによって生成されたフラグメントと同じように扱われる。 テクスチャマッピング、フォグ処理を含む全てのフラグメント操作は、 フラグメントがフレームバッファに書き込まれる前に行われる。
GL_RED
それぞれのピクセルはひとつの赤色要素を持つ。 この要素は、RGBA ピクセルの赤色要素の変換と同じ方法で 内部表現の浮動小数点値に変換される。 この値は次に、緑色、青色要素が 0, アルファ要素が 1 である RGBA ピクセルに 変換される。 この変換の後には、このピクセルは RGBA ピクセルとして読み込まれた ものとして扱われる。
GL_GREEN
それぞれのピクセルはひとつの緑色要素を持つ。 この要素は、RGBA ピクセルの緑色要素の変換と同じ方法で 内部表現の浮動小数点値に変換される。 この値は次に、赤色、青色要素が 0, アルファ要素が 1 である RGBA ピクセルに 変換される。 この変換の後には、このピクセルは RGBA ピクセルとして読み込まれた ものとして扱われる。
GL_BLUE
それぞれのピクセルはひとつの青色要素を持つ。 この要素は、RGBA ピクセルの青色要素の変換と同じ方法で 内部表現の浮動小数点値に変換される。 この値は次に、赤色、緑色要素が 0, アルファ要素が 1 である RGBA ピクセルに 変換される。 この変換の後には、このピクセルは RGBA ピクセルとして読み込まれた ものとして扱われる。
GL_ALPHA
それぞれのピクセルはひとつの青色要素を持つ。 この要素は、RGBA ピクセルのアルファ要素の変換と同じ方法で 内部表現の浮動小数点値に変換される。 この値は次に、赤色、緑色、青色要素が 0 である RGBA ピクセルに変換される。 この変換の後には、このピクセルは RGBA ピクセルとして読み込まれた ものとして扱われる。
GL_RGB
GL_BGR
それぞれのピクセルは 3 つの要素を持つグループである: 要素は赤、緑、青の順に並んでいる。 GL_BGR の場合は青、緑、赤の順である。 この要素は、RGBA ピクセルの赤色、緑色、青色要素の変換と同じ方法で 内部表現の浮動小数点値に変換される。 この値3つのセットは、次にアルファ値を 1 として RGBA ピクセルに 変換される。 この変換の後には、このピクセルは RGBA ピクセルとして読み込まれた ものとして扱われる。
GL_LUMINANCE
それぞれのピクセルはひとつの輝度要素を持つ. この要素は、RGBA ピクセルの赤色要素の変換と同じ方法で 内部表現の浮動小数点値に変換される。 この値は次に、赤色、緑色、青色要素が変換後の輝度値であり、アルファ値が 1 である RGBA ピクセルに変換される。 この変換の後には、このピクセルは RGBA ピクセルとして読み込まれた ものとして扱われる。
GL_LUMINANCE_ALPHA
それぞれのピクセルはふたつの要素からなるグループである: 輝度値とアルファ値が並んでいる。 ふたつの要素は、RGBA ピクセルの赤色要素の変換と同じ方法で 内部表現の浮動小数点値に変換される。 この値は次に、赤色、緑色、青色要素が変換後の輝度値であり、アルファ値が 変換後のアルファ値である RGBA ピクセルに変換される。 この変換の後には、このピクセルは RGBA ピクセルとして読み込まれた ものとして扱われる。 以下の表は、type パラメータに指定できる正しい定数値の意味を まとめたものである:


対応する型

GL_UNSIGNED_BYTE符号なし 8 ビット整数
GL_BYTE符号付き 8 ビット整数
GL_BITMAP符号なし 8 ビット整数値の中の個々のビット値
GL_UNSIGNED_SHORT符号なし 16 ビット整数
GL_SHORT符号付き 16 ビット整数
GL_UNSIGNED_INT符号なし 32 ビット整数
GL_INT32 ビット整数
GL_FLOAT単精度浮動小数点値
GL_UNSIGNED_BYTE_3_3_2符号なし 8 ビット整数
GL_UNSIGNED_BYTE_2_3_3_REV符号なし 8 ビット整数。要素の並び順は逆。
GL_UNSIGNED_SHORT_5_6_5符号なし 16 ビット整数
GL_UNSIGNED_SHORT_5_6_5_REV符号なし 16 ビット整数。要素の並び順は逆。
GL_UNSIGNED_SHORT_4_4_4_4符号なし 16 ビット整数
GL_UNSIGNED_SHORT_4_4_4_4_REV符号なし 16 ビット整数。要素の並び順は逆。
GL_UNSIGNED_SHORT_5_5_5_1符号なし 16 ビット整数
GL_UNSIGNED_SHORT_1_5_5_5_REV符号なし 16 ビット整数。要素の並び順は逆。
GL_UNSIGNED_INT_8_8_8_8符号なし 32 ビット整数
GL_UNSIGNED_INT_8_8_8_8_REV符号なし 32 ビット整数。要素の並び順は逆。
GL_UNSIGNED_INT_10_10_10_2符号なし 32 ビット整数
GL_UNSIGNED_INT_2_10_10_10_REV符号なし 32 ビット整数。要素の並び順は逆。

今までの説明では、ラスタライズ処理はズーム係数が 1 であると仮定していた。
glPixelZoom を使って $x$ および $y$ のピクセルズーム係数 を変更した場合には、ピクセルは次のようにしてフラグメントに変換される。 ($x sub r$, $y sub r$) が現在のラスタ位置であり、指定されたピクセルが ピクセル矩形の $n$ 行目の $m$ 列目のピクセルであるとする。 すると、隅が

($x sub r ~+~ zoom sub x^ n$, $y sub r ~+~ zoom sub y^ m$)

($x sub r ~+~ zoom sub x^ (n ~+~ 1)$, $y sub r ~+~ zoom sub y^ ( m ~+~ 1 )$)

である矩形に中心が含まれるピクセルに対してフラグメントが生成される。 ここで $zoom sub x$ は GL_ZOOM_X の値であり、 $zoom sub y$ は GL_ZOOM_Y の値である。
 

注意

GL_BGR および GL_BGRAformat に指定できるのは、 バージョン 1.2 以降の GL だけである。 GL_UNSIGNED_BYTE_3_3_2, GL_UNSIGNED_BYTE_2_3_3_REV, GL_UNSIGNED_SHORT_5_6_5, GL_UNSIGNED_SHORT_5_6_5_REV, GL_UNSIGNED_SHORT_4_4_4_4, GL_UNSIGNED_SHORT_4_4_4_4_REV, GL_UNSIGNED_SHORT_5_5_5_1, GL_UNSIGNED_SHORT_1_5_5_5_REV, GL_UNSIGNED_INT_8_8_8_8, GL_UNSIGNED_INT_8_8_8_8_REV, GL_UNSIGNED_INT_10_10_10_2, and GL_UNSIGNED_INT_2_10_10_10_REVtype に指定できるのは、 バージョン 1.2 以降の GL だけである。  

エラー

GL_INVALID_VALUE: width または height が負の場合に起こる。 GL_INVALID_ENUM: format または type が指定可能な値でない場合に起こる。 GL_INVALID_OPERATION: formatGL_RED, GL_GREEN, GL_BLUE, GL_ALPHA, GL_RGB, GL_RGBA, GL_BGR, GL_BGRA, GL_LUMINANCE, GL_LUMINANCE_ALPHA のいずれかであり、かつ GL が色インデックスモードの場合に起こる。 GL_INVALID_ENUM: typeGL_BITMAP であり、かつ formatGL_COLOR_INDEXGL_STENCIL_INDEX のいずれでもない 場合に起こる。 GL_INVALID_OPERATION: formatGL_STENCIL_INDEX であり、かつステンシルバッファが ない場合に起こる。 GL_INVALID_OPERATION: glBegin と、その対になる glEnd の間で glDrawPixels が実行されると起こる。 GL_INVALID_OPERATION: typeGL_UNSIGNED_BYTE_3_3_2, GL_UNSIGNED_BYTE_2_3_3_REV, GL_UNSIGNED_SHORT_5_6_5, of GL_UNSIGNED_SHORT_5_6_5_REV であり、かつ formatGL_RGB でない場合に起こる。 GL_INVALID_OPERATION: typeGL_UNSIGNED_SHORT_4_4_4_4, GL_UNSIGNED_SHORT_4_4_4_4_REV, GL_UNSIGNED_SHORT_5_5_5_1, GL_UNSIGNED_SHORT_1_5_5_5_REV, GL_UNSIGNED_INT_8_8_8_8, GL_UNSIGNED_INT_8_8_8_8_REV, GL_UNSIGNED_INT_10_10_10_2, or GL_UNSIGNED_INT_2_10_10_10_REV であり、かつ formatGL_RGBAGL_BGRA の どちらでもない場合に起こる。  

関連する取得値

引き数に GL_CURRENT_RASTER_POSITION を指定した glGet
引き数に GL_CURRENT_RASTER_POSITION_VALID を指定した glGet  

関連項目

glAlphaFunc(3G), glBlendFunc(3G), glCopyPixels(3G), glDepthFunc(3G), glLogicOp(3G), glPixelMap(3G), glPixelStore(3G), glPixelTransfer(3G), glPixelZoom(3G), glRasterPos(3G), glReadPixels(3G), glScissor(3G), glStencilFunc(3G)


 

Index

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

jman



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