私は、インデックス付き描画を使用してOpenGLで描画しています。私はグラフィックカードに頂点&のインデックスを送信してから、ローカルバッファを解放しようとしています。 頂点バッファを解放する - 問題はありませんが、インデックスバッファを解放すると何も表示されません。glBufferDataを呼び出した後の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が一度データをバッファリングすると、ドライバやグラフィックカードの場合、そのローカルコピーが私に悪用されることはないとわかったので、私は困惑しています。
私はWindows 10で作業しています。デバイスマネージャーには、「AMD radeon(R)M360」と「Intel HDグラフィック520」という意味があります。
m_TriangleIndecesの定義を表示できますか? – BDL
実際の図面にm_IBOを使用していないかもしれませんが、クライアント側のインデックス配列を使用していますか? – derhass
インデックスにはどのようなタイプを使用していますか? 'GLsizei'は間違いなく無効に見えます。私はあなたが記述した問題を引き起こすとは思わないが、 'sizeof(GLsizei)'を使うのは間違っていなければならない。 –