gpt4 book ai didi

c++ - OpenGL - 告诉顶点着色器 VBO 已经改变

转载 作者:行者123 更新时间:2023-11-30 05:25:25 25 4
gpt4 key购买 nike

我目前正在编写一个需要不断更新我的 VBO 数据的程序。但是,我发现如果在初始化缓冲区后调用 glBindBuffer(GL_ARRAY_BUFFER, 0),窗口会以某种方式自行关闭。下面是我的代码片段:

 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();
}

仅供引用:pts 不断更新。

有没有办法告诉顶点着色器 VBO 数据已更新?

编辑:更新了代码片段

编辑:我应该每次绘制 pts.size() 个顶点,但屏幕上只出现一个点

最佳答案

就在你的绘图调用之前,你有 glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer);您需要实际设置属性指针(glVertexAttribPointer())。次要说明是 GlVertexAttribPointer() 将 GL_ARRAY_BUFFER 绑定(bind)到指定的属性指针。目前你调用它的地方没有任何绑定(bind)到 GL_ARRAY_BUFFER 的地方。

供引用 GLEnum error = glGetError() 将返回 openGL 的错误状态,是一个强大的调试工具。如果您使用的是 glew,glewGetErrorString() 将为任何非零错误代码获取一个字符串,该字符串更详细地解释了错误。

附注对不起,我的写作能力很差。

关于c++ - OpenGL - 告诉顶点着色器 VBO 已经改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38255259/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com