数日前に Gwen を見つけ、私のプロジェクトに最適な GUI ツールキットのように思えました。しかし、レンダラーの OpenGL 2 コードをすべて見てください。そこで、OpenGL 3 レンダラーを作成して実際に使用できるようにしようと考えましたが、GLSL よりも CG に精通しているため、サンプルの作成に行き詰まってしまいました。これらの均一な変数を設定できれば、基本的には完了すべきだと思います。
シェーダーは問題なくコンパイルおよびリンクされます。正射行列とテクスチャ サンプラーに対して -1 を返す glGetUniformLocation に絞り込みましたが、正確にそれを行っている理由がわかりません。典型的な問題は、実際にそれらを使用していない場合、それらが最適化されてしまうことのようですが、私は両方を使用しました。
誰かがアイデアを持っているなら、私はすべて耳を傾けます。適切に機能したら、完全なものを投稿/リンクしていただければ幸いです。これは GLSL での最初の試みなので、ばかげたことを簡単に行うことができます。別のプロジェクトの CG のセットアップを終えたばかりなので、完全に無知というわけではありません。
OpenGL コンテキストの設定後に呼び出される Shader Init コード:
void InitializeShaders(void)
{
g_ShaderProgram = glCreateProgram();
g_VertexShader = glCreateShader(GL_VERTEX_SHADER);
g_FragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
glShaderSource(g_VertexShader, 1, (const GLchar **)&VertexShaderData, 0);
glShaderSource(g_FragmentShader, 1, (const GLchar **)&FragmentShaderData, 0);
glCompileShader(g_VertexShader);
CheckShaderCompile(g_VertexShader);
glCompileShader(g_FragmentShader);
CheckShaderCompile(g_FragmentShader);
glAttachShader(g_ShaderProgram, g_VertexShader);
glAttachShader(g_ShaderProgram, g_FragmentShader);
glBindAttribLocation(g_ShaderProgram, 0, "position");
glBindAttribLocation(g_ShaderProgram, 1, "color");
glBindAttribLocation(g_ShaderProgram, 2, "texCoord");
glBindFragDataLocation(g_ShaderProgram, 0, "color");
glLinkProgram(g_ShaderProgram);
CheckShaderLink();
g_OrthoTransformLocation = glGetUniformLocation(g_ShaderProgram, "orthoTransform");
g_TextureLocation = glGetUniformLocation(g_ShaderProgram, "textureSampler");
}
シェーダーはヘッダー ファイルに文字列として保存されますが、改行とバックスラッシュをすべて取り除いて、見やすくしています。
頂点シェーダー:
#version 330
in vec4 position;
out vec4 outPosition;
uniform mat4x4 orthoTransform;
void main(void)
{
outPosition = position * orthoTransform;
}
フラグメント シェーダー:
#version 330
in vec2 texCoord;
in vec4 color;
out vec4 outColor;
uniform sampler2D textureSampler;
void main(void)
{
//outColor = texture(textureSampler, texCoord) * color;
outColor = vec4(1.0f, 0.0f, 0.0f, 1.0f);
}