OpenGL 4.5を使って三角形をレンダリングしたいと思います。私はOpenGLの古いバージョンを使用しているが、OpenGL 4.5の機能を使用していないものの、オンラインのサンプルをたくさん見つけました。したがって、私は自分自身でいくつかのコードを "アップグレード"しようとしました。これは、古い作業コードです:OpenGL 4.5でのvaoとバッファの使い方
// Triangles to render
vec3 vertices[2][3] = { { vec3(-0.90f, -0.90f, 1.0f), vec3(0.85f, -0.90f, 1.0f), vec3(-0.90f, 0.85f, 1.0f) },
{ vec3(0.90f, -0.85f, 1.0f), vec3(0.90f, 0.90f, 1.0f), vec3(-0.85f, 0.90f, 1.0f) } };
//Initialize
glGenVertexArrays(1, &vaos);
glBindVertexArray(vaos);
glGenBuffers(1, &buffers);
glBindBuffer(GL_ARRAY_BUFFER, buffers);
glBufferData(GL_ARRAY_BUFFER, sizeof(triangles), triangles, GL_STATIC_DRAW);
ShaderInfo shaders[] = {
{ GL_VERTEX_SHADER, "triangles.vert" },
{ GL_FRAGMENT_SHADER, "triangles.frag" },
{ GL_NONE, NULL }
};
program = LoadShaders(shaders);
glUseProgram(program);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, BUFFER_OFFSET(0));
glEnableVertexAttribArray(0);
//Render
GLint index;
index = glGetUniformLocation(program, "projectionMatrix");
glUniformMatrix3fv(index, 1, true, value_ptr(projectionMatrix));
glClear(GL_COLOR_BUFFER_BIT);
glBindVertexArray(vaos);
glDrawArrays(GL_TRIANGLES, 0, nvertices);
そして、私は、画面上で何かを描くためには表示されません。このコードは、それを「更新」:
// Same triangles
// Initialize
glCreateVertexArrays(1, &vaos);
glEnableVertexArrayAttrib(vaos, 0);
glVertexArrayAttribFormat(vaos, 0, 3, GL_FLOAT, GL_FALSE, 0);
glCreateBuffers(1, &buffers);
glNamedBufferData(buffers, sizeof(triangles), triangles, GL_STATIC_DRAW);
glVertexArrayAttribBinding(vaos, 0, 0);
glVertexArrayVertexBuffer(vaos, 0, buffers, 0, 0);
ShaderInfo shaders[] = {
{ GL_VERTEX_SHADER, "triangles.vert" },
{ GL_FRAGMENT_SHADER, "triangles.frag" },
{ GL_NONE, NULL }
};
program = LoadShaders(shaders);
glUseProgram(program);
// Same render
誰かが私が間違って何をしたかを教えてもらえ?
編集: triangle.frag
#version 450
in vec4 gl_FragCoord;
out vec4 fColor;
void main()
{
fColor = vec4 (0.0, 0.0, 1.0, 1.0);
}
triangle.vert
#version 450
layout (location = 0) in vec3 vPosition;
uniform mat3 projectionMatrix;
void main()
{
vec3 tmp = projectionMatrix*vPosition;
gl_Position = vec4 (tmp, 1.0f);
}
が必要になりますドライバがまだ存在しない場合は、以前の実装に限定される可能性があります。何をやっているの?シェイダーは通常の問題です。 –
GTX 760と最新のドライバがインストールされています。私は、OpenGL拡張を読み込むためにglewを使用しており、ARB_direct_state_accessが利用可能であることを確認します。 – para
#version 450の代わりに#version 430を試してください....これはGTX 760がOpenGL 4.3をサポートしていると言っています。http://www.geforce.com/hardware/desktop-gpus/geforce-gtx-760/specifications –