3.2で実行するように変更した。柔軟性は高いほうがいいだろうし、今のところ全くアイデアはないけどジオメトリシェーダでなにか出来るかもしれないし。OpenGLのバージョンの変更に伴い、コードの修正が必要になった。シェーダ全開で固定機能の関数は使ってなかったので楽に対応できたと思う。バージョン等は以下のコードで調べた。glGetString(GL_SHADING_LANGUAGE_VERSION));この実行結果は以下のとおり。変更前が上、変更後が下。1.50今回行った修正は以下の4点。いうメッセージが得られる問題。問題というかこれは私がglValidateProgramの用途を勘違いしてただけだけど。何のための関数なのか。http://www.opengl.org/sdk/docs/man3/xhtml/glValidateProgram.xmlを読むと解るとおり、現在のOpenGLステートでシェーダプログラムが実行可能か(実行可能であっても非効率ではないか等も)を調べる関数。これはシェーダの生成フェーズで使うものではなく、シェーダの実行前、つまり描画コマンドの実行前に呼ぶべきものである。開発中には便利に使える関数だが、描画ループごとシェーダごとに毎回呼び出してたら効率が悪いので、問題ないということが確認できたら何か事情が無い限り最終的には呼び出さないようにすべきだろう。これを勘違いしてシェーダのリンク直後に行っていた。3.2ではVAOが必須になったが、シェーダの初期化段階、つまりまだVAOのバインドをしてない段階で実行していたため、エラーが起こるようになったみたい。3.2で描画にVAOが必須になったと書いたけど厳密には違うらしい。誰かがそう書いていたのをチラッと見ただけで、どこに書いてあったか忘れてしまったので、真偽の程は分からない。必須なのはAppleのOpenGLの実装だけの話かもしれない。Object(VAO)対応すでにglGenVertexArraysAPPLEとかを使ってたので、基本的にはそれらをglGenVertexArraysとかに書き換えただけ。シェーダの書き換えGLSLのバーションが1.20から1.50に変わったのでそのままではシェーダがコンパイル出来なくなった。機械的に変更するだけなのでたいして大変ではなかった。変更した内容は次のような感じ。頂点シェーダのattributeをin、varyingをoutに、フラグメントシェーダのvaryingをinに書き換え。fragColor0;みたいな宣言を追加してそこに書き込むようにした。texture2D関数が無くなったのでtexture関数に変更。それに合わせtextureという変数名を使ってた部分を変更。宣言したけど、これだけではダメで、どの変数が何番目の出力先に対応するのか、OpenGLの関数で教えてあげないといけないみたい。(この仕様って出力先の変数名を自由にできる以外の利点って何かあるのかな?)とりあえず以下のように固定的に設定するようにした。これをシェーダプログラムのリンク直後に行う。"fragColor3");うちの環境でしか確認してないけど、シェーダにfragColor0しか書いてなくても、つまり存在しない変数に対してglBindFragDataLocationを呼んでも、特に動作がおかしくなったりすることは無いみたい。以前のように固定的にしたいってときに、これでいちいち問題が出てたら面倒だもんね。コメントをキャンセルメールアドレスが公開されることはありません。コメントデータの処理方法の詳細はこちらをご覧ください。...774Fedexアカウント取得後にオンラインで手続きすれ...NETこういうのずっと見てしまう気持ちがよくわかります(...BINGEブログを拝見させていただきました・・・。花粉症対策についてはこれまで次の記事を書いてきました。花粉症対策についてはこれまで次の記事を書いてきました。花粉症対策についてはこれまで次の記事を書いてきました。花粉症対策についてはこれまで次の記事を書いてきました。花粉症対策についてはこれまで次の記事を書いてきました。