多くのGL_POINTSといくつかのGL_LINESを描画する古いOpenGLプログラムにいくつかのシェーダーを追加しようとしています。
これらの2つのシェーダーを作成しました。
バーテックスシェーダー:
void main()
{
vec4 v = vec4(gl_Vertex);
v.z = v.z + sin(v.x*v.x + v.y*v.y)/10.0;
gl_Position = gl_ModelViewProjectionMatrix * v;
}
フラグメントシェーダー:
#version 120
void main()
{
vec4 myOutputColor = gl_Color;
gl_FragColor = myOutputColor;
//gl_FragColor.r = 0.5;
}
これらの2つのシェーダーは、問題なくコンパイルおよびリンクされます。そして、頂点シェーダーはうまく機能します。頂点シェーダーでそのsinを使用してGL_POINTSが置き換えられているのがわかります。しかし、問題は、すべての点と線が黒にレンダリングされるため、背景色が黒でない場合にのみGL_POINTSとGL_LINESを表示できることです。レンダリングコードでglColor3fで設定されたすべての色が無視されているようです。フラグメントシェーダーでコメント化された行のコメントを解除すると、すべての行とポイントを赤にすることができますが、gl_Colorは各ポイントにglColor3fで設定された色に対応するべきではありませんか?
この動作を引き起こす可能性のあるOpenGLコードに他に何かありますか?