3

いつglDeleteBuffersARBを呼び出す必要がありますか?アプリケーションが終了したときにそれを行う必要がありますか?どういうわけか頂点バッファオブジェクトの削除プロセスを自動化できますか?たとえば、smart_ptrのようなものが行います。

4

1 に答える 1

9

一度もない。絶対に電話しないでくださいglDeleteBuffersARB。バッファオブジェクトは、10年以上にわたってコアGL機能でした。まだARBサフィックスの拡張機能を使用している場合は、STOP。それらを使用するチュートリアルに従っている場合は、もう一度停止してください。明らかに古すぎて役に立たない。

さて、いつ使うべきですglDeleteBuffersか?delete通常のC++オブジェクトの場合と同じように使用する必要があります。つまり、オブジェクトを使い終わったときに使用します。あなたがそれをもう使う必要がなく、それを取り除きたいとき。

では、vboオブジェクトを削除するデストラクタを使用してvboのクラスを作成できますか?そして、すべてを自動化するためにsmart_ptrとしてオブジェクトを作成しますか?

できますが、それほど多くを購入することはありません。また、手遅れになるまでオブジェクトの削除を待つという非常に現実的なリスクがあります。

OpenGLコンテキストが作成される(そして現在になる)前、またはGLコンテキストが最新でないとき(たとえば、GLコンテキストを破棄した後)にOpenGL関数を呼び出すことは違法です。そうする試みは良くありません。

これらのリソースを管理するために使用する場合shared_ptr、理論的には、実際のOpenGLコンテキストよりも長持ちすることが可能になります。それは良くないね。個人的には、GLオブジェクトの存続期間をコンテキストの存続期間にしっかりと結び付ける、より厳格な管理スキームを好みます。

于 2012-05-13T18:01:07.223 に答える