非シャドウ サンプラーにアクセスするときはいつでも、実際のフォーマットのチャンネル数に関係なく、g vec4 を取得します ( float、 integer、unsigned integerのg
場合は何もない可能性があります)。i
u
テクスチャのイメージ フォーマットに含まれていない値 (つまり、赤のみのテクスチャから緑のコンポーネントを要求する場合) は、ゼロで埋められます。要求するコンポーネントがアルファでない限り、アルファの場合は 1 になります。
テクスチャ オブジェクトのスウィズル設定を使用して、いつでも新しい値を作成できることを忘れないでください。したがって、単純なスウィズル マスクを使用すると、値が 1 つしか格納されていないテクスチャを、値が 4 つ格納されているように見せることができます。
GLint swizzleMask[] = {GL_RED, GL_RED, GL_RED, GL_RED};
glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_RGBA, swizzleMask);
これは、古い GL_INTENSITY テクスチャと同様に、テクスチャの赤チャンネルを 4 つのコンポーネントすべてにブロードキャストします。アルファ版からのみ出てくるように、それらを入れ替えることができます。
GLint swizzleMask[] = {GL_ZERO, GL_ZERO, GL_ZERO, GL_RED};
glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_RGBA, swizzleMask);
または、他のすべてのチャネルを 1 にしたい場合:
GLint swizzleMask[] = {GL_ONE, GL_ONE, GL_ONE, GL_RED};
glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_RGBA, swizzleMask);