2016-05-15 13 views
1

私は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コンテキストがどのパラメータで作成されたかとは何かを考えていますが、どのパラメータが違う。

+1

どの「OpenGLが呼び出す」問題がありますか? OpenGL関数にアクセスする前にOpenGLローダーを使用していますか? –

+0

glシンボルを読み込むためにlibepoxyを使用しています。しかし、私はそれを理解したと思う。 GTK + 3はコアプロファイルを持つopenglをロードしています。私はコアプロファイルに準拠していないプログラムをいくつか持っています。実際は失敗したコールだけです。 – Torandi

答えて

0

私の問題は、自分のコードがOpenGLコアプロファイルと互換性がないことでした。 他の人が同様の問題に遭遇した場合:OpenGLコールがコアプロファイルに従っていることを確認してください(VAOは常にバインドされており、一部の機能は削除されています)。

関連する問題