メインウィンドウにQOpenGLWidgetを使用するQtアプリケーションがあります。 QOpenGLFunctionsを使用してOpenGL関数を解決するOpenGL ES 2.0を使用して描画します。すべてがWindowsとLinux上で完全に(同じQtアプリケーションを使用して)動作します。私は3つのプラットフォームすべてでQt 5とQt Creatorを使用しています。OpenGL ES 2.0はWindowsとLinuxでは動作しますが、Macでは動作しません
ただし、Macではグラフィックスの描画が機能しません。最初にアプリケーションを実行しようとしたときに、シェーダプログラムをコンパイルできず、 'precision'キーワードが構文的に間違っていると不満を表明したため、クラッシュしました。これは、おそらく、シェーダコンパイラが異なるバージョンのシェーダ言語を期待していることを示しています。
シェーダープログラムの先頭に '#version 100'を挿入しようとしましたが、これは役に立たなかった:今回はバージョン100がサポートされていなかったというエラーメッセージでした。
シェイダーから 'precision'ステートメントを削除することで、ディスプレイにグラフィックスが表示されることがありました。しかし、表示が間違っていた - 一部のグラフィックが欠落していた。透過性のないピクセル(アルファ= 1)だけが描画されていることがわかりました。
OpenGL ES 2.0を正しく使用していることを確信しています.WindowsとLinuxのQtで動作するだけでなく、同じコードがAndroid(ネイティブコード)とiOSのQtの外でも完全に機能するためです。
Qtのドキュメントによると、QOpenGLFunctions 'は、OpenGL ES 2.0 APIへのクロスプラットフォームアクセスを提供します。それは真実ではないようです。
この問題を解決する方法はありますか?私は数時間を探して何も見つけなかった。
QSurfaceFormat :: setProfile()を使用していますか? (Appleはwin/linuxのようなプロファイルを使用していない)。 'Qt 5.1'を使用していない場合は、このシナリオに関係なく' QOpenGLContext :: versionFunctions() 'が役立ちます。'Qt 5.1'を使用している場合は、' QAbstractOpenGLFunctions'が役立つ可能性があります。 http://qt.apidoc.info/5.1.1/qtgui/qabstractopenglfunctions.html#details –
私はそれを試みました。それは助けになりませんでした。 OpenGL ES 2.0コンテキストを明示的に要求すると、黒い画面が表示され、「コンテキストを作成できませんでした」というエラーが発生しました。現時点では、シェーダで「精度」を取り除くことによって、上に述べたように、ピクセル透明度以外のすべてが機能しています。 –
この時点で私の唯一の提案は、おそらくこの質問を見てみることです(著者は彼の問題の解決策を投稿します)。 https://stackoverflow.com/q/23779357/499581 –