gluBuild1DMipmaps - 1
次元のミップマップを作る
GLint
gluBuild1DMipmaps( GLenum
target,
GLint internalFormat,
GLsizei width,
GLenum format,
GLenum type,
const void *data )
引き数¶
- target
- 対象のテクスチャを指定する。
GL_TEXTURE_1D
でなければならない。
- internalFormat
- テクスチャイメージの内部格納領域を要求する。
SGI
による最新バージョンの
GLU の実装では、GLU
から呼び出される OpenGL
の実装にこの値を渡す前に値の正しさのチェックは行われない。
OpenGL
の実装が受け付けない値は、OpenGL
のエラーとなる。 GLU
のレベルで値のチェックをしないことの利点は、GLU
の実装のリビジョン
を取得しなくても OpenGL
の機能拡張としてテクスチャの新しい
内部フォーマットを追加できることである。
古い GLU
の実装はこの値をチェックし、値が
1, 2, 3, 4
または以下に示す
シンボル定数でない場合にエラーとなる:
GL_ALPHA, GL_ALPHA4, GL_ALPHA8, GL_ALPHA12,
GL_ALPHA16, GL_LUMINANCE, GL_LUMINANCE4,
GL_LUMINANCE8, GL_LUMINANCE12, GL_LUMINANCE16,
GL_LUMINANCE_ALPHA, GL_LUMINANCE4_ALPHA4,
GL_LUMINANCE6_ALPHA2, GL_LUMINANCE8_ALPHA8,
GL_LUMINANCE12_ALPHA4, GL_LUMINANCE12_ALPHA12,
GL_LUMINANCE16_ALPHA16, GL_INTENSITY, GL_INTENSITY4,
GL_INTENSITY8, GL_INTENSITY12, GL_INTENSITY16,
GL_RGB, GL_R3_G3_B2, GL_RGB4, GL_RGB5,
GL_RGB8, GL_RGB10, GL_RGB12, GL_RGB16,
GL_RGBA, GL_RGBA2, GL_RGBA4, GL_RGB5_A1,
GL_RGBA8, GL_RGB10_A2, GL_RGBA12,
GL_RGBA16。
- width
- テクスチャイメージの幅をピクセル単位で指定する。
- format
- ピクセルデータのフォーマットを指定する。
フォーマットは以下のいずれかでなければならない:
GL_COLOR_INDEX, GL_DEPTH_COMPONENT, GL_RED,
GL_GREEN, GL_BLUE, GL_ALPHA, GL_RGB,
GL_RGBA, GL_BGR, GL_BGRA, GL_LUMINANCE,
GL_LUMINANCE_ALPHA。
- type
- data
のデータ型を指定する。
データ型は以下のいずれかでなければならない:
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。
- data
- メモリ上のイメージデータを指すポインタを指定する。
gluBuild1DMipmaps
はミップマップと呼ばれる、フィルタ処理された
1
次元のテクスチャマップを解像度を下げながら並べたものを作る。
ミップマップはテクスチャマッピング処理をしたプリミティブの
アンチエイリアス処理に使われる。
返り値は 0
ならば成功を表す。
それ以外の返り値は GLU
のエラーコードである(
gluErrorString を 参照)。
まず、データ(
data)の幅(
width)が 2
のべき乗であるかどうかが
チェックされる。
べき乗でない場合は、
data
のコピーが拡大または縮小され、
幅が最も近い 2
のべき乗になるように調整される。
(
width
がふたつのべき乗値のちょうど中間だった場合は、
data
のコピーは拡大される。)
このコピーが後述のミップマップ操作で使われる。
例えば
width が 57
ならば、
data
のコピーは
ミップマップ処理の前に幅
64 に拡大される。
次にプロキシテクスチャ(
glTexImage1D
を参照)を使って、
要求されたテクスチャを
OpenGL
の実装が当てはめられるかどうかが調べられる。
当てはめられなければ、当てはめられるようになるまで、
width を半分
にする処理が繰り返される。
次に、
data
のコピーを半分の大きさに簡略化する処理を
サイズが
になるまで繰り返すことにより、
ミップマップレベルの列が作られる。
それぞれのレベルでは、半分になったミップマップレベルに含まれる
各テクセル値は、大きいミップマップレベル内でこれに対応するふたつの
テクセル値の平均値となる。
glTexImage1D
はこれらのミップマップレベルを個別にロードするため
に使われる。 レベル 0
は
data
のコピーである。
もっとも大きなレベルは
である。 例えば、
width
が 64 であり、OpenGL
の実装がこのサイズのテクスチャを
格納できる場合には、次のミップマップレベルが作られる:
,
,
,
,
,
。
これらは順にレベル 0
から 6 に対応する。
type
引き数に指定できる値の説明については、
glTexImage1D の
項目を参照すること。
data
引き数に指定できる値の説明については、
glDrawPixels の
項目を参照すること。
最大レベルを直接問い合わせる手段はない点に注意すること。
最大レベルは
glGetTexLevelParameter
を使って間接的に求められる。
最初にレベル 0
で実際に使われている幅を求める。
(この幅は
width
と違うことがある。プロキシテクスチャは
OpenGL
の実装に合うように拡大・縮小されるかもしれないからである。)
すると最大レベルは公式
で計算できる。
フォーマット
GL_BGR
および
GL_BGRA、 型
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
が使えるのは GL
のバージョン 1.2
以降および GLU
のバージョン 1.3 以降
だけである。
エラー¶
width が 1 未満ならば
GLU_INVALID_VALUE が返される。
format または
type
が不正な場合には
GLU_INVALID_ENUM が返される。
type が
GL_UNSIGNED_BYTE_3_3_2 または
GL_UNSIGNED_BYTE_2_3_3_REV
であり、かつ
format が
GL_RGB でない場合には
GLU_INVALID_OPERATION が返される。
type が
GL_UNSIGNED_SHORT_5_6_5 または
GL_UNSIGNED_SHORT_5_6_5_REV
であり、かつ
format が
GL_RGB でない場合には
GLU_INVALID_OPERATION が返される。
type が
GL_UNSIGNED_SHORT_4_4_4_4 または
GL_UNSIGNED_SHORT_4_4_4_4_REV
であり、かつ
format が
GL_RGBA と
GL_BGRA
のいずれでもない
場合には
GLU_INVALID_OPERATION
が返される。
type が
GL_UNSIGNED_SHORT_5_5_5_1 または
GL_UNSIGNED_SHORT_1_5_5_5_REV
であり、かつ
format が
GL_RGBA と
GL_BGRA
のいずれでもない
場合には
GLU_INVALID_OPERATION
が返される。
type が
GL_UNSIGNED_INT_8_8_8_8 または
GL_UNSIGNED_INT_8_8_8_8_REV
であり、かつ
format が
GL_RGBA と
GL_BGRA
のいずれでもない
場合は
GLU_INVALID_OPERATION
が返される。
type が
GL_UNSIGNED_INT_10_10_10_2 または
GL_UNSIGNED_INT_2_10_10_10_REV
であり、かつ
format が
GL_RGBA と
GL_BGRA
のいずれでもない
場合には
GLU_INVALID_OPERATION
が返される。
関連項目¶
glDrawPixels,
glTexImage1D,
glTexImage2D,
glTexImage3D,
gluBuild2DMipmaps,
gluBuild3DMipmaps,
gluErrorString,
glGetTexImage,
glGetTexLevelParameter,
gluBuild1DMipmapLevels,
gluBuild2DMipmapLevels,
gluBuild3DMipmapLevels