質問: ### 前提・実現したいこと Unityのプラグイン(dll側)でOpenGL ESの処理をいろいろと行いUnity側に反映したいと考えております。 方法を調べてみると https://docs.unity3d.com/ja/540/Manual/NativePluginInterface.html と記載されており、Unity側でテクスチャの実体を生成して内容を書き換えるような形で サンプルや内容が記載されておりました。 (調べ方が悪いのか、検索した結果は上記を検証した内容の記事が多かったです。) 実装したい事は dll側で ``` glEnable( GL_TEXTURE_2D ); glGenTextures( 1, &m_TexID ); glBindTexture( GL_TEXTURE_2D, m_TexID ); ``` を呼び出して、dll側でテクスチャの実体を生成してUnity側で描画したり dll側で ``` glClearColor(r, g, b, a); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); ``` を使用して画面をクリアーしたり ``` glViewport(x, y, w, h); ``` を使用してビューポートを指定したりする事は可能なのでしょうか。 ※実行環境はUnity5.6.0f3で、必ずOpenGL ESで動作するようにPlayer Setteingの 「Auto Graphics API」を変更しています。 また、 https://docs.unity3d.com/ja/540/ScriptReference/GL.InvalidateState.html に記載されている ``` GL.InvalidateState(); ``` を使用する必要はあるのでしょうか。 (GL.InvalidateStateの使用例とかも見つからなかったので、 リファレンスの内容では関係があるのか、どのようなタイミングで使用するのか今一つ判断がつきませんでした) どなたか詳しい方がいれば、ご教授頂けますと幸いです。
回答: 試行錯誤した結果、dll側で作成した内容をUnity側で描画させる事は可能だと判明しました。 実際に上記の内容を反映させるには コルーチン等で実行し、 ``` yield return new WaitForEndOfFrame(); ``` まで待機してから ``` GL.IssuePluginEvent(RenderEventFunc(), eventID); ``` でdll側の処理を呼び出して、レンダーイベントでOpenGLの処理を行う必要があります。 WaitForEndOfFrame()まで待機せずに処理した場合、 dll側で作成した内容は描画されません。 (ただし、Unity側で作成したテクスチャやポリゴンを変形させる等の 実体が既に存在する物に関しては適応されるようです。) また、GL.InvalidateState();は使用する必要はありませんでした。