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が負の場合、シフトは右に移動します。 どちらの場合も、ゼロ ビットは、それ以外の場合は結果内の指定されていないビット位置を埋めます。
  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. インデックスの検索置換が行われるかどうかに関係なく、インデックスの整数部分は 2b から 1 で AND されます。ここで、b はカラー インデックス バッファー内のビット数です。
  5. 結果のインデックスまたは RGBA の色は、現在のラスター位置の z 座標とテクスチャ座標を各ピクセルにアタッチし、xy のウィンドウ座標を n 番目のフラグメントに割り当てることによってフラグメントに変換されます。x? = xrn + mod width
    y? = yrn + /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が負の場合、シフトは右に移動します。 どちらの場合も、ゼロ ビットは、それ以外の場合は結果内の指定されていないビット位置を埋めます。
  3. GL_MAP_STENCILが true の場合、インデックスは参照テーブル GL_PIXEL_MAP_S_TO_S で glDrawPixels が 参照する値に置き換えられます。
  4. インデックスの検索置換が行われるかどうかに関係なく、インデックスの整数部分は 2b から 1 で AND されます。ここで、b はステンシル バッファー内のビット数です。 その後、 n 番目のインデックスが x の場所に書き込まれるよう、結果のステンシル インデックスがステンシル バッファーに書き込 まれます。 = xrn + mod width
    y? = yrn + /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 のウィンドウ座標を n 番目のフラグメントに割り当てることで、結果の深度コンポーネントをフラグメントに変換します。 = xrn + mod width
    y? = yrn + /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 のウィンドウ座標を n 番目のフラグメントに割り当てることで、結果の RGBA 色をフラグメントに変換します。 = xrn + mod width
    y? = yrn + /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 ピクセルの赤のコンポーネントと同じ方法でこのコンポーネントを内部浮動小数点形式に変換し、赤、緑、青が変換された輝度値に設定された RGBA ピクセルに変換し、アルファを 1.0 に設定します。 この変換後、ピクセルは RGBA ピクセルとして読み取られたかのように扱われます。
GL_LUMINANCE_ALPHA
各ピクセルは、輝度、アルファという 2 つのコンポーネントのグループです。
glDrawPixels 関数は、RGBA ピクセルの赤のコンポーネントと同じ方法で 2 つのコンポーネントを内部浮動小数点形式に変換し、赤、緑、青が変換された輝度値に設定された RGBA ピクセルに変換し、アルファを変換されたアルファ値に設定します。 この変換後、ピクセルは RGBA ピクセルとして読み取られたかのように扱われます。
GL_BGR_EXT
各ピクセルは、青、緑、赤の 3 つのコンポーネントのグループです。
GL_BGR_EXTは、デバイスに依存しないビットマップ (DIB) のメモリ レイアウトWindows一致する形式を提供します。 したがって、アプリケーションは、Windows関数呼び出しと OpenGL ピクセル関数呼び出しで同じデータを使用できます。
GL_BGRA_EXT
各ピクセルは、青、緑、赤、アルファの 4 つのコンポーネントのグループです。
GL_BGRA_EXTは、デバイスに依存しないビットマップ (DIB) のメモリ レイアウトWindows一致する形式を提供します。 したがって、アプリケーションは、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
type が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を使用してラスター位置を照会します。

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

データは、型に応じて、符号付きまたは符号なしバイト、符号付きまたは符号なしショート、符号付き整数または符号なし整数、または単精度浮動小数点値のシーケンスとして ピクセル から読み取 られます。 これらの各バイト、ショーツ、整数、または浮動小数点値は、 形式に応じて、1 つの色または深度コンポーネント、または 1 つのインデックスとして解釈されます。 インデックスは常に個別に処理されます。 色コンポーネントは、 書式に基づいて 1 つ、2 つ、3 つ、または 4 つの値のグループとして扱われます。 個々のインデックスとコンポーネントのグループはどちらもピクセルと呼ばれます。 が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 で指定された複数のパラメーターの値に基づいて、同じ方法でメモリから読み取る高単位の各ピクセルで動作します。 これらの操作の詳細と、ピクセルが描画されるターゲット バッファーは、 形式で指定されたピクセルの形式に固有です。

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

(xr + zoom?n, yrzoomym + )

(xr + zoom? (n + 1)、yrzoomy + (m + 1))

ズームの場所はGL_ZOOM_Xの値で、zoomy はGL_ZOOM_Yの値です。

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

引数がGL_CURRENT_RASTER_POSITIONされた glGet

引数がGL_CURRENT_RASTER_POSITION_VALIDされた glGet

要件

要件
サポートされている最小のクライアント
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