小编Zho*_*Hua的帖子

从 GPU 到 RAM 的大量传输后渲染缓慢?

我试图渲染一个点云(> 1 亿点),我将所有数据传输到 GPU 并仅使用缓冲区名称来访问它。一切正常,直到我实现了一项要求我将所有数据传输回 RAM 的功能。

这就是我将数据传递给 GPU 的方式:

glBindVertexArray(vao);

// some data
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBufferData(GL_ARRAY_BUFFER, sizeof(float) * GetSize()  * 3, &vertices[0], GL_STATIC_DRAW); // pos

// some attributes
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(GLfloat), (GLvoid*)0); // pos

...
// some other code
...

glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindVertexArray(0);

glDisableVertexAttribArray(0);

// Clear the contents in the RAM
vertices.clear();
vertices.shrink_to_fit();
Run Code Online (Sandbox Code Playgroud)

然后,我需要一个函数来恢复数据以保存更改,这就是我所做的:

// restore data back to RAM
// this code was called for >4000 times

glBindBuffer(GL_ARRAY_BUFFER, c.vbo);
c.vertices.clear();
c.vertices.resize(c.sizeg);
glGetBufferSubData(GL_ARRAY_BUFFER, 0, …
Run Code Online (Sandbox Code Playgroud)

c++ opengl performance glm-math

2
推荐指数
1
解决办法
76
查看次数

标签 统计

c++ ×1

glm-math ×1

opengl ×1

performance ×1