현재 VBO 데이터를 지속적으로 업데이트해야하는 프로그램을 작성 중입니다. 그러나 버퍼를 초기화 한 후 glBindBuffer(GL_ARRAY_BUFFER, 0)
을 호출하면 어떻게 든 창이 닫히는 것을 알았습니다. 점은 지속적으로 업데이트됩니다 참고OpenGL - VBO가 변경되었음을 버텍스 쉐이더에 알리기
glGenBuffers(1, &vertex_buffer);
glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(pts[0]) * pts.size(), NULL, GL_DYNAMIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);
vertex_shader = glCreateShader(GL_VERTEX_SHADER);
glShaderSource(vertex_shader, 1, &vertex_shader_text, NULL);
glCompileShader(vertex_shader);
fragment_shader = glCreateShader(GL_FRAGMENT_SHADER);
glShaderSource(fragment_shader, 1, &fragment_shader_text, NULL);
glCompileShader(fragment_shader);
program = glCreateProgram();
glAttachShader(program, vertex_shader);
glAttachShader(program, fragment_shader);
glLinkProgram(program);
mvp_location = glGetUniformLocation(program, "MVP");
vpos_location = glGetAttribLocation(program, "vPos");
glEnableVertexAttribArray(vpos_location);
glVertexAttribPointer(vpos_location, 3, GL_FLOAT, GL_FALSE,
sizeof(float) * 3, (void*) 0);
while(!glfwWindowShouldClose(window)) {
glUseProgram(program);
glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer);
glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(pts[0]) * pts.size(), &pts);
glBindBuffer(GL_ARRAY_BUFFER, 0);
mat4x4_mul(mvp, m, p);
glUniformMatrix4fv(mvp_location, 1, GL_FALSE, (const GLfloat*) mvp);
glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer);
glDrawArrays(GL_POINTS, 0, pts.size());
glBindBuffer(GL_ARRAY_BUFFER, 0);
glfwSwapBuffers(window);
glfwPollEvents();
}
: 다음은 내 코드입니다.
거기에 VBO 데이터가 업데이트되었다는 사실을 버텍스 쉐이더에게 알려주는 방법이 있습니까?
편집 : 업데이트 된 코드
편집 : 나는 정점마다의 pts.size()
수를 그릴 생각하지만, 당신이 어디에서 하나의 지점이 드로우 호출하기 전에 화면
그리기 전에 왜'glBindBuffer'를 호출합니까? –
방금 glBindBuffer가 버퍼의 데이터를 플러시한다고 말하는 튜토리얼을 따라갔습니다. – SydC
이 튜토리얼에 대한 링크를 제공합니다. 나는 그것이 당신이 말한 것과 오해하고 있거나 자습서가 어리 석다는 것을 의심합니다. 어쨌든, 당신은 여전히 [mcve]를 제공 할 필요가 있습니다. 그리고 위의 스 니펫은 무슨 일이 일어나고 있는지를 알기에는 너무 많은 것들이 빠져 있습니다. –