内部形式と形式の適切な説明については、以下を参照してください。
http://opengl.org/wiki/Image_Formatおよびhttp://opengl.org/sdk/docs/man/xhtml/glTexImage2D.xml。
基本的に、フォーマットには GL_RED が必要であり、内部フォーマットには GL_R8 (符号なしで正規化された 8 ビット固定小数点) が必要になる可能性があります。
昔は、輝度テクスチャがシングル チャンネルの標準でしたが、これは最新の GL では非推奨の形式であり、赤/緑が最も論理的な形式であるのと同様に、赤はシングル チャンネルの論理的な「描画可能な」テクスチャ形式になりました。 2チャンネル用。
シェーダーに関しては、コア仕様で定義されたコンポーネント展開のルールがあります。入力として 1 チャンネルのテクスチャがあるが、それを vec4 としてサンプリングする場合、vec4 (RED, 0.0, 0.0, 1.0) と同等になります。
テクスチャへの書き込みは少し異なります。
OpenGL 4.4 Spec、セクション 15.2 (Shader Execution)、pp. 441 から -- http://www.opengl.org/registry/doc/glspec44.core.pdf
When a fragment shader terminates, the value of each active user-defined output variable is written to components of the fragment color output to which it is bound. The set of fragment color components written is determined according to the variable’s data type and component index binding, using the mappings in table 11.1 [pp. 341].
デフォルトでは、フラグメント シェーダーの出力が float の場合、テクスチャの x (赤) コンポーネントに書き込みます。レイアウト修飾子 (例: layout (component=1) out float color; ) を使用して、y (緑)、z (青)、または w (アルファ) に書き込むように指定できます (RGBA テクスチャがある場合)。