opengl在调用glBufferData后释放内存会导致数据不显示

opengl release memory after calling glBufferData causes the data not to display

本文关键字:数据 显示 内存 调用 glBufferData 释放 opengl      更新时间:2023-10-16

我在opengl中使用索引绘图进行绘图。我正在发送顶点&图形卡的索引,然后尝试释放本地缓冲区。释放顶点缓冲区-没有问题,但如果我释放索引缓冲区,则不会显示任何内容。

简单地说,这段代码有效:

glGenBuffers(1, &m_VBO);
glBindBuffer(GL_ARRAY_BUFFER, m_VBO);
glBufferData(GL_ARRAY_BUFFER, m_Vertices.size()*6*sizeof(float), m_Vertices.data(),GL_STATIC_DRAW); 
m_Vertices.clear();
m_Vertices.shrink_to_fit();
glGenBuffers(1, &m_IBO);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_IBO);   
glBufferData(GL_ELEMENT_ARRAY_BUFFER, m_TriangleIndeces.size() * sizeof(GLsizei), m_TriangleIndeces.data(), GL_STATIC_DRAW); 
//  m_TriangleIndeces.clear();
//  m_TriangleIndeces.shrink_to_fit();

但如果我取消对最后2行的注释,则不会显示任何内容。

我也试图在第一次渲染后释放缓冲区,但也出现了同样的现象。

我知道,一旦opengl缓冲了数据,无论是到驱动程序还是到显卡,它的本地副本都可以自由滥用,所以我很困惑。

我正在修窗户10。设备经理说我有"AMD radeon(TM)R7 M360"answers"英特尔高清显卡520",不管这意味着什么。

是的,OpenGL实现确实应该执行数据的副本。

这可能是驱动程序错误
由于你似乎有两个GPU,我假设你默认在英特尔GPU上运行应用程序(英特尔以GPU驱动程序不好而闻名)。你试过在两个GPU上测试它吗?你的GPU驱动程序是最新的吗?