質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
OpenGL

OpenGLは、プラットフォームから独立した、デスクトップやワークステーション、モバイルサービスで使用可能な映像処理用のAPIです。

Q&A

解決済

1回答

921閲覧

openGL openTK テッセレーションを使うとGLSLのコンパイルエラーが出る

cure_fontaine

総合スコア137

OpenGL

OpenGLは、プラットフォームから独立した、デスクトップやワークステーション、モバイルサービスで使用可能な映像処理用のAPIです。

0グッド

0クリップ

投稿2022/02/07 07:38

編集2022/02/07 07:43

開発用PCはWindows7(64Bit) VS2019,VB.net,openTK という開発環境です。

開発用PC上では、OpenGL 4.0以降で動作するテッセレーションを動作させるテストプログラムを書いており、正常に動作します。

バージョンはOpenTK V3.2.0 OpenTK.GLControl V3.1.0
ディスプレイコントローラー Intel(R) HD Graphics 4000 OpenGL 4.0に対応している

なお、テッセレーションコントロール/テッセレーション評価 シェーダーのコンパイル、リンクでエラーが発生するとメッセージを表示して停止するようにプログラムされています。

'エラーを検出している箇所  リンクに成功するとiに1が入る
GL.GetProgram(プログラム番号, GetProgramParameterName.LinkStatus, i)
GL.GetProgramInfoLog(プログラム番号, ErrorInfo) '← エラーメッセージはここで入る

実行に必要なファイルはこの4つです。
WpfApp1a.exe.config
WpfApp1a.exe
OpenTK.dll
OpenTK.GLControl.dll

ここで、上の4つの構成ファイルをWindows10 64Bitが動作してOpenGL 4.0以降のOpenGLが正常にインストールされたほかのPC(ターゲット)にコピーして動作させると、必ずコンパイル、リンク段階でエラーが発生します。
ターゲットPCは4台試しましたが、全て同様のエラーになります。
ターゲットPCのディスプレイコントローラーは全てOpenGL 4.0以降に対応しています。

GL.GetProgramInfoLogで得られたエラーメッセージは
「Attached tessellation evaluation shader is not compiled.」 または
「Attached tessellation control shader is not compiled.」になります。
上の2つは、どちらが出るかは不定です。

開発用PCで動作するVisual Studioのコードと環境設定をターゲットPCにコピーして動作させても、同じようにGLSLのコンパイルエラーが出ます。

このエラーは何が原因で発生しているのか、御教授願います。
* Windows10 PCのOpenGLの問題なのか?
* OpenTK とOpenTK.GLControlの問題なのか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

自分で解決方法を発見しましたのでお知らせします。

コンパイルエラーが出力されたのは開発環境の違い(Windows7/10)ではなく、ディスプレイアダプターの違いでした。
開発用PC:Intel(R) HD Graphics 4000 では正常にコンパイルできていたシェーダーのソースも、他のディスプレイアダプターの搭載されたPCではコンパイルできないということです。

まず、テッセレーション制御シェーダーでは、Intel HD Graphics 4000では通る
in vec4 id1;
out vec4 id2; は、(注釈:ネットで公開されている、動作するサンプルプログラムではこうなっている)

in vec4 id1[];
out vec4 id2[]; としなければなりません。この様に文法解析は厳格になります。

次に、gl_TessLevelInner[2] = 2.0; と間違えて記述していた箇所がありましたが、Intel HD Graphics 4000では通りますが他のPCでは通りませんでした。

次に、曲線のテッセレーション制御シェーダーで
gl_TessLevelOuter[0] = 4.0;
gl_TessLevelOuter[1] = 1.0; でベジエ曲線が描画されていましたが、他のPCでは曲線になりませんでした。
これは、ある学術書に記載されていましたが、[0][1]を逆にすることで解決できました。

他にも細かい箇所で解析が厳格化されているのが確認され、現在少しずつデバッグを行っています。

投稿2022/02/11 07:21

編集2022/02/11 07:25
cure_fontaine

総合スコア137

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問