非常に単純なシェーダーを現在のOpenGLセットアップで動作させようとしています。シェーダーマネージャーを使用していますが、シェーダーをロードすると、すべての出力に正しくロードされたことが示されます。
これが私のデータです:
static const GLfloat g_vertex_buffer_data[] = {
-1.0f, -1.0f, 0.0f,
1.0f, -1.0f, 0.0f,
0.0f, 1.0f, 0.0f,
};
これが私のバッファを設定する場所です:
// This will identify our vertex buffer
GLuint vertexbuffer;
// Generate 1 buffer, put the resulting identifier in vertexbuffer
glGenBuffers(1, &vertexbuffer);
// The following commands will talk about our 'vertexbuffer' buffer
glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer);
// Give our vertices to OpenGL.
glBufferData(GL_ARRAY_BUFFER, sizeof(g_vertex_buffer_data), g_vertex_buffer_data, GL_STATIC_DRAW);
テスト済みで動作するシェーダーローダーを使用したシェーダーの宣言は次のとおりです。
Shader shader;
shader.loadFromFile(VERTEX_SHADER, resourcePath() + "tri.vert");
shader.loadFromFile(FRAGMENT_SHADER, resourcePath() + "tri.frag");
shader.createAndLinkProgram();
shader.use();
shader.addAttribute("position");
shader.unUse();
このシェーダーの属性は、マップに保存されます。これはレンダリング呼び出しです:
shader.use();
glEnableVertexAttribArray(shader["position"]);
glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer);
glVertexAttribPointer(
shader["position"], // attribute 0. No particular reason for 0, but must match the layout in the shader.
3, // size
GL_FLOAT, // type
GL_FALSE, // normalized?
0, // stride
(void*)0 // array buffer offset
);
// Draw the triangle !
glDrawArrays(GL_TRIANGLES, 0, 3); // Starting from vertex 0; 3 vertices total -> 1 triangle
glDisableVertexAttribArray(shader["position"]);
shader.unUse();
次に、バッファを交換します。古いGL_TRIANGLES固定パイプライン描画を試してみましたが、正常に機能しました。
これが私の頂点シェーダーです:
#version 330
layout(location = 0) in vec3 position;
void main()
{
gl_Position.xyz = position;
}
これが私のフラグメントシェーダーです:
out vec3 color;
main()
{
color = vec3(1,0,0);
}
単純に赤い三角形を描くことになっています。中間モードを使用して描画すると、正常にレンダリングされます。MacOSX10.7.4でXcodeを実行しています。