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 –