glCopyPixels 関数

glCopyPixels 関数は、フレームバッファー内のピクセルをコピーします。

構文

void WINAPI glCopyPixels(
   GLint   x,
   GLint   y,
   GLsizei width,
   GLsizei height,
   GLenum  type
);

パラメーター

x

コピーするピクセルの四角形領域の左下隅のウィンドウ x 平面座標。

y

コピーするピクセルの四角形領域の左下隅のウィンドウ y 平面座標。

width

コピーするピクセルの四角形領域の幅ディメンション。 負でない必要があります。

height

コピーするピクセルの四角形領域の高さ寸法。 負でない必要があります。

type

glCopyPixels が色の値、深度値、またはステンシル値をコピーするかどうかを指定します。 許容されるシンボリック定数は です。

説明
GL_COLOR
glCopyPixels 関数は、現在読み取りソース バッファーとして指定されているバッファーからインデックスまたは RGBA 色を読み取ります (glReadBuffer を参照)。
OpenGL がカラー インデックス モードの場合:
  1. このバッファーから読み取られた各インデックスは、バイナリ ポイントの右側にビット数が指定されていない固定小数点形式に変換されます。
  2. 各インデックスはGL_INDEX_SHIFTビットだけ左にシフトされ、GL_INDEX_OFFSETに追加されます。GL_INDEX_SHIFTが負の場合、シフトは右に移動します。 いずれの場合も、ゼロ ビットは、それ以外の場合は結果の未指定のビット位置を埋めます。
  3. GL_MAP_COLORが true の場合、インデックスは参照テーブル GL_PIXEL_MAP_I_TO_Iで参照する値に置き換えられます。
  4. インデックスの検索置換が行われるかどうかに関係なく、インデックスの整数部分は AND で 2b 1 で、b はカラー インデックス バッファー内のビット数です。
OpenGL が RGBA モードの場合:
  1. 読み取られた各ピクセルの赤、緑、青、アルファの各コンポーネントは、精度が指定されていない内部浮動小数点形式に変換されます。
  2. 変換では、表現可能な最大のコンポーネント値が 1.0 に、コンポーネント値 0 が 0.0 にマップされます。
  3. 結果として得られる浮動小数点の色の値は、GL_c_SCALE乗算され、GL_c_BIASに追加されます。 ここで、c はそれぞれの色成分に対して RED、GREEN、BLUE、ALPHA です。
  4. 結果は[0,1]の範囲にクランプされます。
  5. GL_MAP_COLORが true の場合、各色コンポーネントは参照テーブル GL_PIXEL_MAP_c_TO_cのサイズに応じてスケーリングされ、そのテーブル内で参照される値に置き換えられます。 c はそれぞれ R、G、B、または A です。 結果のインデックスまたは RGBA 色は、現在のラスター位置 z 座標とテクスチャ座標を各ピクセルにアタッチし、ウィンドウ座標 (xr + i, yr + j) を割り当てることによってフラグメントに変換されます。ここで、(xr , yr ) は現在のラスター位置であり、ピクセルは j 行の i 位置のピクセルでした。 これらのピクセル フラグメントは、ポイント、線、またはポリゴンをラスタライズすることによって生成されたフラグメントと同様に処理されます。 テクスチャ マッピング、霧、およびすべてのフラグメント操作は、フラグメントがフレームバッファーに書き込まれる前に適用されます。
GL_DEPTH
深度値は深度バッファーから読み取られ、精度が指定されていない内部浮動小数点形式に直接変換されます。 結果として得られる浮動小数点深度値は、GL_DEPTH_SCALE乗算され、GL_DEPTH_BIASに追加されます。 結果は[0,1]の範囲にクランプされます。
結果として得られる深度コンポーネントは、現在のラスター位置の色または色インデックスとテクスチャ座標を各ピクセルにアタッチし、ウィンドウ座標 (xr + i, yr + j) を割り当てることでフラグメントに変換されます。ここで、(xr , yr ) は現在のラスター位置であり、ピクセルは j 行の i 位置のピクセルでした。 これらのピクセル フラグメントは、ポイント、線、またはポリゴンをラスタライズすることによって生成されたフラグメントと同様に処理されます。 テクスチャ マッピング、霧、およびすべてのフラグメント操作は、フラグメントがフレームバッファーに書き込まれる前に適用されます。
GL_STENCIL
ステンシル インデックスはステンシル バッファーから読み取られ、バイナリ ポイントの右側にビット数が指定されていない内部固定小数点形式に変換されます。 各固定小数点インデックスは、GL_INDEX_SHIFT ビットだけ左にシフトされ、GL_INDEX_OFFSETに追加されます。 GL_INDEX_SHIFTが負の場合、シフトは右に移動します。 いずれの場合も、ゼロ ビットは、それ以外の場合は結果の未指定のビット位置を埋めます。 GL_MAP_STENCILが true の場合、インデックスは参照テーブル GL_PIXEL_MAP_S_TO_Sで参照する値に置き換えられます。 インデックスの検索置換が行われるかどうかに関係なく、インデックスの整数部分は AND で 2b から 1 で、b はステンシル バッファー内のビット数です。 結果のステンシル インデックスは、j 行の i 位置から読み取られたインデックスが位置 (xr + i, yr + j) に書き込まれるようステンシル バッファーに書き込まれます。ここで、(xr , yr ) は現在のラスター位置です。 これらの書き込みに影響を与えるのは、ピクセル所有権テスト、ハサミ テスト、ステンシル 書き込みマスクのみです。

戻り値

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

エラー コード

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

名前 意味
GL_INVALID_ENUM
type は受け入れ可能な値ではありません。
GL_INVALID_VALUE
または高さが負の値でした。
GL_INVALID_OPERATION
がGL_DEPTHされ、深度バッファーがありませんでした。
GL_INVALID_OPERATION
type がGL_STENCILされ、ステンシル バッファーがありませんでした。
GL_INVALID_OPERATION
glBegin の呼び出しと glEnd の対応する呼び出しの間に関数が呼び出されました。

解説

glCopyPixels 関数は、指定したフレームバッファー位置から現在のラスター位置を基準とした領域に、画面に合わせたピクセルの四角形をコピーします。 その操作は、ピクセル ソース領域全体がウィンドウの公開された部分内にある場合にのみ適切に定義されます。 ウィンドウの外部または公開されていないウィンドウの領域からのコピーの結果は、ハードウェアに依存し、未定義です。

x パラメーターと y パラメーターは、コピーする四角形領域の左下隅のウィンドウ座標を指定します。 width パラメーターと height パラメーターは、コピーする四角形領域の寸法を指定します。 高さはどちらも負でない必要があります。

複数のパラメーターによって、コピー中のピクセル データの処理が制御されます。 これらのパラメーターは、glPixelTransfer、glPixelMapおよび glPixelZoom の 3 つの関数で設定されます。 このトピックでは、これら 3 つの関数で指定されたパラメーターの大部分 (すべてではない) の glCopyPixels に対する影響について説明します。

glCopyPixels 関数は、左下隅が (x + i, y + j) の各ピクセルから 0 = i<の幅と 0 = j<の高さの値をコピーします。 この画素はj行のi画素と言われる。 ピクセルは、各行の最も低い行から最も高い行 (左から右) に行順にコピーされます。

type パラメーターは、色、深度、またはステンシル データをコピーするかどうかを指定します。

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

(x r + ズームしますか?i, yr + zoomyj)

および

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

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

glPixelStore で指定されたモードは、glCopyPixels の操作には影響しません。

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

引数GL_CURRENT_RASTER_POSITIONを含む glGet

引数GL_CURRENT_RASTER_POSITION_VALIDを含む glGet

ウィンドウの左下隅にあるカラー ピクセルを現在のラスター位置にコピーするには、

glCopyPixels( 0, 0, 1, 1, GL_COLOR );

要件

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

関連項目

glBegin

glDepthFunc

glDrawBuffer

glDrawPixels

glEnd

glGet

glPixelMap

glPixelStore

glPixelTransfer

glPixelZoom

glRasterPos

glReadBuffer

glReadPixels

glStencilFunc