glDrawPixels 関数

glDrawPixels 関数は、フレームバッファーにピクセルブロックを書き込みます。

構文

void WINAPI glDrawPixels(
         GLsizei width,
         GLsizei height,
         GLenum  format,
         GLenum  type,
   const GLvoid  *pixels
);

パラメーター

width

フレームバッファーに書き込まれるピクセル四角形の幅の寸法。

height

フレームバッファーに書き込まれるピクセル四角形の高さ寸法。

format

ピクセル データの形式。 使用できるシンボリック定数は次のとおりです。

説明
GL_COLOR_INDEX
各ピクセルは 1 つの値 (色のインデックス) です。
  1. glDrawPixels 関数は、メモリ データ型に関係なく、各ピクセルを固定小数点形式に変換します。バイナリ ポイントの右側にビット数が指定されていません。 浮動小数点値は、実際の固定小数点値に変換されます。 glDrawPixels 関数は、すべての分数ビットが 0 に設定された符号付きおよび符号なし整数データを変換します。 関数は、ビットマップ データを 0.0 または 1.0 に変換します。
  2. glDrawPixels 関数は、各固定小数点インデックスをGL_INDEX_SHIFTビットだけシフトし、GL_INDEX_OFFSETに追加します。 GL_INDEX_SHIFTが負の場合、シフトは右に移動します。 どちらの場合も、0 ビットは、それ以外の場合、結果内の指定されていないビット位置を埋めます。
  3. RGBA モードの場合、 glDrawPixels は 、GL_PIXEL_MAP_I_TO_R、GL_PIXEL_MAP_I_TO_G、GL_PIXEL_MAP_I_TO_B、GL_PIXEL_MAP_I_TO_A の各テーブルを使用して、結果のインデックスを RGBA ピクセルに変換します。 色インデックス モードで GL_MAP_COLOR が true の場合、インデックスは、参照テーブル GL_PIXEL_MAP_I_TO_I で glDrawPixels が参照する値に置き換えられます。
  4. インデックスの検索置換が行われるかどうかに関係なく、インデックスの整数部分は ANDで 2b - 1 で表されます。 ここで、b はカラー インデックス バッファー内のビット数です。
  5. 結果のインデックスまたは RGBA 色は、現在のラスター位置 z 座標とテクスチャ座標を各ピクセルにアタッチし、xy のウィンドウ座標を x番目のフラグメントに割り当てることによってフラグメントに変換されます。 = xr + n mod width
    y? = yr + n/width
    ここで (xr , yr ) は現在のラスター位置です。
  6. glDrawPixels 関数は、これらのピクセル フラグメントを、ポイント、線、またはポリゴンのラスター化によって生成されたフラグメントと同様に処理します。 フレームバッファーにフラグメントを書き込む前に、テクスチャ マッピング、霧、およびすべてのフラグメント操作を適用します。
GL_STENCIL_INDEX
各ピクセルは 1 つの値であり、ステンシル インデックスです。
  1. glDrawPixels 関数は、メモリ データ型に関係なく、バイナリ ポイントの右側にビット数が指定されていない固定小数点形式に変換します。 浮動小数点値は、実際の固定小数点値に変換されます。 glDrawPixels 関数は、すべての分数ビットが 0 に設定された符号付きおよび符号なし整数データを変換します。 ビットマップ データは、0.0 または 1.0 に変換されます。
  2. glDrawPixels 関数は、各固定小数点インデックスをGL_INDEX_SHIFT ビットだけシフトし、GL_INDEX_OFFSETに追加します。 GL_INDEX_SHIFTが負の場合、シフトは右に移動します。 どちらの場合も、0 ビットは、それ以外の場合、結果内の指定されていないビット位置を埋めます。
  3. GL_MAP_STENCILが true の場合、インデックスは、参照テーブル GL_PIXEL_MAP_S_TO_Sで glDrawPixels が参照する値に置き換えられます。
  4. インデックスの検索置換が行われるかどうかに関係なく、インデックスの整数部分は AND に 2b - 1 で付けられます。ここで、b はステンシル バッファー内のビット数です。 その後、結果のステンシル インデックスがステンシル バッファーに書き込まれ、 n番目のインデックスが場所 x に書き込まれますか? = xr + n mod width
    y? = yr + n/width
    ここで (xr ,yr ) は現在のラスター位置です。 ピクセル所有権テスト、ハサミ テスト、ステンシル 書き込みマスクのみがこれらの書き込みに影響します。
GL_DEPTH_COMPONENT
各ピクセルは単一深度コンポーネントです。
  1. glDrawPixels 関数は、浮動小数点データを、精度が指定されていない内部浮動小数点形式に直接変換します。 符号付き整数データは、最も正の表現可能な整数値が 1.0 にマップされ、最も負の表現可能な値が -1.0 にマップされるように、内部浮動小数点形式に線形にマップされます。 符号なし整数データも同様にマップされます。最大値は 1.0 に、ゼロは 0.0 にマップされます。
  2. glDrawPixels 関数は、結果の浮動小数点深度値に GL_DEPTH_SCALE を乗算し、それを GL_DEPTH_BIAS に加算します。 結果は[0,1]の範囲にクランプされます。
  3. glDrawPixels 関数は、現在のラスター位置の色または色インデックスとテクスチャ座標を各ピクセルにアタッチし、xy のウィンドウ座標を x のように n 番目のフラグメントに割り当てることで、結果の深度コンポーネントをフラグメントに変換します。 = xr + n mod width
    y? = yr + n/width
    ここで (xr ,yr ) は現在のラスター位置です。
  4. これらのピクセル フラグメントは、ポイント、ライン、またはポリゴンをラスター化することによって生成されたフラグメントと同じように処理されます。 glDrawPixels 関数は、フレームバッファーにフラグメントを書き込む前に、テクスチャ マッピング、霧、およびすべてのフラグメント操作を適用します。
GL_RGBA
各ピクセルは、赤、緑、青、アルファの順に 4 つのコンポーネント グループです。
  1. glDrawPixels 関数は、浮動小数点値を、精度が指定されていない内部浮動小数点形式に直接変換します。 符号付き整数値は、最も正の表現可能な整数値が 1.0 にマップされ、最も負の表現可能な値が -1.0 にマップされるように、内部浮動小数点形式に線形にマップされます。 符号なし整数データも同様にマップされます。最大値は 1.0 に、ゼロは 0.0 にマップされます。
  2. glDrawPixels 関数は、結果の浮動小数点カラー値にGL_c_SCALEを乗算し、GL_c_BIASに加算します。ここで、c はそれぞれの色コンポーネントの RED、GREEN、BLUE、ALPHA です。 結果は[0,1]の範囲にクランプされます。
  3. GL_MAP_COLORが true の場合、 glDrawPixels は、各色コンポーネントを参照テーブルGL_PIXEL_MAP_c_TO_cのサイズでスケーリングし、そのコンポーネントをそのテーブル内で参照する値に置き換えます。 c はそれぞれ R、G、B、または A です。
  4. glDrawPixels 関数は、現在のラスター位置 z 座標とテクスチャ座標を各ピクセルにアタッチし、xy のウィンドウ座標を x のように n番目のフラグメントに割り当てることで、結果の RGBA 色をフラグメントに変換します。 = xr + n mod width
    y? = yr + n /width
    ここで (xr ,yr ) は現在のラスター位置です。
  5. これらのピクセル フラグメントは、ポイント、ライン、またはポリゴンをラスター化することによって生成されたフラグメントと同じように処理されます。 glDrawPixels 関数は、フレームバッファーにフラグメントを書き込む前に、テクスチャ マッピング、霧、およびすべてのフラグメント操作を適用します。
GL_RED
各ピクセルは 1 つの赤いコンポーネントです。
glDrawPixels 関数は、RGBA ピクセルの赤のコンポーネントと同じ方法で、このコンポーネントを内部浮動小数点形式に変換し、緑と青を 0.0 に設定し、アルファを 1.0 に設定した RGBA ピクセルに変換します。 この変換後、ピクセルは RGBA ピクセルとして読み取られたかのように処理されます。
GL_GREEN
各ピクセルは 1 つの緑色のコンポーネントです。
glDrawPixels 関数は、RGBA ピクセルの緑のコンポーネントと同じ方法で、このコンポーネントを内部浮動小数点形式に変換し、赤と青を 0.0 に設定し、アルファを 1.0 に設定した RGBA ピクセルに変換します。 この変換後、ピクセルは RGBA ピクセルとして読み取られたかのように処理されます。
GL_BLUE
各ピクセルは 1 つの青いコンポーネントです。
glDrawPixels 関数は、RGBA ピクセルの青成分と同じ方法でこのコンポーネントを内部浮動小数点形式に変換し、赤と緑を 0.0 に設定し、アルファを 1.0 に設定した RGBA ピクセルに変換します。 この変換後、ピクセルは RGBA ピクセルとして読み取られたかのように処理されます。
GL_ALPHA
各ピクセルは 1 つのアルファ コンポーネントです。
glDrawPixels 関数は、RGBA ピクセルのアルファ コンポーネントと同じ方法で、このコンポーネントを内部浮動小数点形式に変換し、赤、緑、青を 0.0 に設定した RGBA ピクセルに変換します。 この変換後、ピクセルは RGBA ピクセルとして読み取られたかのように処理されます。
GL_RGB
各ピクセルは、赤、緑、青の 3 つのコンポーネントのグループです。 glDrawPixels 関数は、RGBA ピクセルの赤、緑、青の各コンポーネントと同じ方法で、各コンポーネントを内部浮動小数点形式に変換します。 カラー トリプルは、アルファが 1.0 に設定された RGBA ピクセルに変換されます。 この変換後、ピクセルは RGBA ピクセルとして読み取られたかのように処理されます。
GL_LUMINANCE
各ピクセルは 1 つの輝度コンポーネントです。
glDrawPixels 関数は、RGBA ピクセルの赤のコンポーネントと同じ方法で、このコンポーネントを内部浮動小数点形式に変換し、赤、緑、青を変換された輝度値に設定し、アルファを 1.0 に設定した RGBA ピクセルに変換します。 この変換後、ピクセルは RGBA ピクセルとして読み取られたかのように処理されます。
GL_LUMINANCE_ALPHA
各ピクセルは、輝度、アルファの 2 つのコンポーネントのグループです。
glDrawPixels 関数は、RGBA ピクセルの赤のコンポーネントと同じ方法で 2 つのコンポーネントを内部浮動小数点形式に変換し、赤、緑、青が変換された輝度値に設定された RGBA ピクセルに変換し、alpha を変換されたアルファ値に設定します。 この変換後、ピクセルは RGBA ピクセルとして読み取られたかのように処理されます。
GL_BGR_EXT
各ピクセルは、青、緑、赤の 3 つのコンポーネントのグループです。
GL_BGR_EXTは、Windows デバイスに依存しないビットマップ (DIB) のメモリ レイアウトに一致する形式を提供します。 したがって、アプリケーションは、Windows 関数呼び出しと OpenGL ピクセル関数呼び出しで同じデータを使用できます。
GL_BGRA_EXT
各ピクセルは、青、緑、赤、アルファの 4 つのコンポーネントのグループです。
GL_BGRA_EXTは、Windows デバイスに依存しないビットマップ (DIB) のメモリ レイアウトに一致する形式を提供します。 したがって、アプリケーションは、Windows 関数呼び出しと OpenGL ピクセル関数呼び出しで同じデータを使用できます。

type

ピクセルのデータ型。 受け入れられるシンボリック定数とその意味を次に示します。

説明
GL_UNSIGNED_BYTE
符号なし 8 ビット整数
GL_BYTE
符号付き 8 ビット整数
GL_BITMAP
符号なし 8 ビット整数の単一ビット
GL_UNSIGNED_SHORT
符号なし 16 ビット整数
GL_SHORT
符号付き 16 ビット整数
GL_UNSIGNED_INT
符号なし 32 ビット整数
GL_INT
32-bit integer
GL_FLOAT
単精度浮動小数点

ピクセル

ピクセル データへのポインター。

戻り値

この関数は値を返しません。

エラー コード

glGetError 関数では、次のエラー コードを取得できます。

名前 意味
GL_INVALID_VALUE
または高さが負の値でした。
GL_INVALID_ENUM
形式またはが受け入れられた値ではありません。
GL_INVALID_OPERATION
format はGL_RED、GL_GREEN、GL_BLUE、GL_ALPHA、GL_RGB、GL_RGBA、GL_BGR_EXT、GL_BGRA_EXT、GL_LUMINANCE、またはGL_LUMINANCE_ALPHAで、OpenGL はカラー インデックス モードでした。
GL_INVALID_ENUM
がGL_BITMAPされ、 形式 がGL_COLOR_INDEXでもGL_STENCIL_INDEXでもありません。
GL_INVALID_OPERATION
format がGL_STENCIL_INDEXされ、ステンシル バッファーが存在しません。
GL_INVALID_OPERATION
この関数は、 glBegin の呼び出しと glEnd の対応する呼び出しの間で呼び出されました。

解説

glDrawPixels 関数は、メモリからピクセル データを読み取り、現在のラスター位置を基準にしてフレームバッファーに書き込みます。 glRasterPos を使用して現在のラスター位置を設定し、glGet と引数 GL_CURRENT_RASTER_POSITIONを使用してラスター位置を照会します。

いくつかのパラメーターは、メモリ内のピクセル データのエンコードを定義し、フレームバッファーに配置される前にピクセル データの処理を制御します。 これらのパラメーターは、glPixelStoreglPixelTransfer、glPixelMapglPixelZoom の 4 つの関数で設定されます。 このトピックでは、これら 4 つの関数で指定されたパラメーターの多く (すべてではない) の glDrawPixels に対する影響について説明します。

データは、型に応じて、符号付きまたは符号なしバイト、符号付きまたは符号なしショート、符号付き整数または符号なし整数、または単精度浮動小数点値のシーケンスとして ピクセル から読み取 られます。 これらの各バイト、ショート、整数、または浮動小数点値は、 形式に応じて、1 つの色または深度コンポーネント、または 1 つのインデックスとして解釈されます。 インデックスは常に個別に処理されます。 色コンポーネントは、 書式に基づいて、1 つ、2 つ、3 つ、または 4 つの値のグループとして扱われます。 個々のインデックスとコンポーネントのグループはどちらもピクセルと呼ばれます。 type がGL_BITMAPの場合、データは符号なしバイトで、形式はGL_COLOR_INDEXまたはGL_STENCIL_INDEXである必要があります。 各符号なしバイトは 8 個の 1 ビット ピクセルとして扱われ、ビット順序はGL_UNPACK_LSB_FIRSTによって決定されます ( glPixelStore を参照)。

高さピクセル単位のは、位置ピクセルから始まるメモリから読み取られます。 既定では、これらのピクセルは隣接するメモリ位置から取得されます。ただし、すべての ピクセルが読み取られた後、読み取りポインターは次の 4 バイト境界に進みます。 glPixelStore 関数は、引数 GL_UNPACK_ALIGNMENT を使用して 4 バイトの行の配置を指定し、1、2、4、または 8 バイトに設定できます。 他のピクセル ストア パラメーターでは、最初のピクセルが読み取る前と、すべての ピクセルが読み取られた後の両方で、異なる読み取りポインターの進歩が指定されます。 glPixelStore 関数は、glPixelTransferglPixelMap で指定された複数のパラメーターの値に基づいて、メモリから同じ方法で読み取る高さ単位の各ピクセルで動作します。 これらの操作の詳細と、ピクセルが描画されるターゲット バッファーは、 format で指定されたピクセルの形式に固有です。

これまで説明したラスター化では、ピクセル ズーム係数が 1.0 であると想定されています。 glPixelZoom を使用して x と y のピクセル ズーム係数変更すると、ピクセルは次のようにフラグメントに変換されます。 (xr,yr) が現在のラスター位置であり、指定されたピクセルがピクセル四角形の n番目の列と m番目の行にある場合、角が付いた四角形の中央にあるピクセルに対してフラグメントが生成されます。

(x r + ズームしますか?n, yr + zoomym)

(x r + ズームしますか? (n + 1)、 yr + ズームy (m + 1))

ズームはどこに ありますか?はGL_ZOOM_Xの値で、 ズームy は GL_ZOOM_Y の値です。

次の関数は 、glDrawPixels に関連する情報を取得します。

glGet と引数 GL_CURRENT_RASTER_POSITION

glGet と引数 GL_CURRENT_RASTER_POSITION_VALID

必要条件

要件
サポートされている最小のクライアント
Windows 2000 Professional [デスクトップ アプリのみ]
サポートされている最小のサーバー
Windows 2000 Server [デスクトップ アプリのみ]
ヘッダー
Gl.h
ライブラリ
Opengl32.lib
[DLL]
Opengl32.dll

関連項目

glAlphaFunc

glBegin

glBlendFunc

glCopyPixels

glDepthFunc

glEnd

glGet

glLogicOp

glPixelMap

glPixelStore

glPixelTransfer

glPixelZoom

glRasterPos

glReadPixels

glScissor

glStencilFunc