我使用索引绘图绘制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();
但是如果我取消注释最后两行 - 没有显示任何内容。
我还尝试在首次渲染后释放缓冲区,但发生了相同的现象。
我明白,一旦opengl缓冲数据,如果是驱动程序或显卡,它的本地副本对我来说是免费滥用,所以我很困惑。
我正在使用Windows 10.设备管理员说我有“AMD radeon(TM)R7 M360”和“英特尔高清显卡520”,无论这意味着什么。
答案 0 :(得分:0)
是的,OpenGL实现应该确实执行数据的副本。
这可能是一个驱动程序错误 由于您似乎有两个GPU,我假设您默认在英特尔GPU上运行该应用程序(英特尔以出现糟糕的GPU驱动程序而闻名)。您是否尝试在两个GPU上进行测试?你的GPU驱动程序是最新的吗?