2016-07-21 5 views
0

私は、インデックス付き描画を使用して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」という意味があります。

+0

m_TriangleIndecesの定義を表示できますか? – BDL

+0

実際の図面にm_IBOを使用していないかもしれませんが、クライアント側のインデックス配列を使用していますか? – derhass

+0

インデックスにはどのようなタイプを使用していますか? 'GLsizei'は間違いなく無効に見えます。私はあなたが記述した問題を引き起こすとは思わないが、 'sizeof(GLsizei)'を使うのは間違っていなければならない。 –

答えて

0

はい、OpenGL実装では実際にデータのコピーを実行する必要があります。

これはドライバのバグです。
2つのGPUを搭載しているようだから、デフォルトではインテルGPU上でアプリケーションを実行していることを前提としています(インテルは悪いGPUドライバが有名です)。両方のGPUでテストしましたか?あなたのGPUドライバーは最新ですか?

+0

あなたの応答に感謝します。私の使用法を特定のGPUに転送するのですか? –

+0

ドライバ設定で。私はそのようなシステムを持っていないので、私は確かにあなたに言うことができません。おそらくこれが役立ちます:https://support.serato.com/hc/en-us/articles/202305784-Changing-graphics-card-settings-to-use-your-dedicated-GPU-on-a-Windows-computer- また、GPUドライバに関する私の質問にお答えください。 – Tara

+0

ドライブに関しては、AMDは実際にアップデートする必要がありました、インテルのドライバはすでに最新のものでしたが、アップデートはそのトリックをしませんでした...あなたが送ったリンゴを見てみましょう –

関連する問題