私はGTK + 3.16にアップグレードして組み込みのサポートを使用すると思っていましたが、以前はGtkGL拡張を使ってGTKに埋め込まれたOpenGLをレンダリングしていました。 私は残念ながら私が把握できない障害に遭遇しました。GTK + 3 OpenGL:OpenGL呼び出しが失敗する
私は成功しGdkGLContext(私は私のメインウィンドウのリアライズ信号でこれを行う)を初期化することができます。これは、動作しているようです
m_window = gtk_widget_get_window(widget);
GError* err = nullptr;
m_context = gdk_window_create_gl_context(m_window, &err);
ASSERT_FORMAT(m_context != nullptr, "Failed to create OpenGL context for editor window (%s)", err->message);
gdk_gl_context_set_required_version(m_context, 4, 5);
gboolean success = gdk_gl_context_realize(m_context, &err);
ASSERT_FORMAT(success == TRUE, "Failed to realize Editor GL context (%s)", err->message);
gdk_gl_context_make_current(m_context);
Logging::verbose("OpenGL Device: %s - %s.\n", glGetString(GL_VENDOR), glGetString(GL_RENDERER));
Logging::verbose("Version supported: %s, %s\n", glGetString(GL_VERSION), glGetString(GL_SHADING_LANGUAGE_VERSION));
を、それはできるだけ早く私がしようとしても、エラーやglErrorを与えていませんopengl呼び出しを行うには "無効な列挙型"で失敗します: (例:私が最初に行うことの1つはglEnable(GL_CULL_FACE)です。これは "無効なenum"で失敗します)。フレームバッファやシェーダを作成できないと、最終的にクラッシュします。
これは、GdkWindowを作成するときに誤った設定が使用されていると思われますが、実際には何が分かりません。
Bits per RGB: 8. Byte order: LSB
Visual Type: GDK_VISUAL_TRUE_COLOR
OpenGL Device: NVIDIA Corporation - GeForce GTX 970/PCIe/SSE2.
Version supported: 4.5.0 NVIDIA 361.42, 4.50 NVIDIA
(これは実際にも、少し奇妙である、openglの情報がglGetStringから来ているので、これらのOpenGLの呼び出しは、少なくとも動作するようです): 私はGdkVisualとOpenGLコンテキストについてのいくつかのデバッグ情報を印刷しました。
SDLウィンドウで同じコードを実行していて、正常に動作しています。
私はUbuntu 16.04でGTK + 3バージョン3.18.9を実行しています。
代わりにGtkGLAreaを作成しようとしましたが、同じ問題が発生します。
私はGTK + 3.16のGdkGLContextではなく、以前はGtkGLExtで動作していたため、OpenGLコンテキストがどのパラメータで作成されたかとは何かを考えていますが、どのパラメータが違う。
どの「OpenGLが呼び出す」問題がありますか? OpenGL関数にアクセスする前にOpenGLローダーを使用していますか? –
glシンボルを読み込むためにlibepoxyを使用しています。しかし、私はそれを理解したと思う。 GTK + 3はコアプロファイルを持つopenglをロードしています。私はコアプロファイルに準拠していないプログラムをいくつか持っています。実際は失敗したコールだけです。 – Torandi