Qtユーザーが知っているように、OpenGL拡張機能の使用は非常に面倒な場合があります。私がそれを機能させた方法は、次のようにQGLFunctionsクラスを拡張することです。
class Object3D : protected QGLFunctions{
...
}
Object3DがglGenBuffer()などの関数を呼び出すことができるように正しく機能するためには、呼び出す必要があります。
initializeGLFunctions(glWidget->context());
QGLWidgetが作成された後、そうでない場合は、拡張関数を使用するとアプリケーションがクラッシュします。Object3Dの存在中に、最終的に「glGenBuffer()」などを呼び出すことができますが、「glDeleteBuffer()」呼び出しを含む〜Object3D()呼び出しでクラッシュするようです。アプリケーションがクラッシュするのはその呼び出しだと確信しています。
誰もがこの問題を解決する方法を知っていますか?これは、Object3Dの前にQGLWidgetが最初に削除されているため、QGLWidgetのコンテキストがなくなっているためと思われます。その場合、QGLWidgetがQMainWindowに追加され、追加された順序で子が削除されるため、QGLWidgetが最後に削除されたことを確認するにはどうすればよいですか?