

Unityのプラグイン(dll側)でOpenGL ESの処理をいろいろと行いUnity側に反映したいと考えております。

方法を調べてみると  
<https://docs.unity3d.com/ja/540/Manual/NativePluginInterface.html>  
と記載されており、Unity側でテクスチャの実体を生成して内容を書き換えるような形で  
サンプルや内容が記載されておりました。  
(調べ方が悪いのか、検索した結果は上記を検証した内容の記事が多かったです。)

実装したい事は  
dll側で

[code]

    glEnable( GL_TEXTURE_2D );
    glGenTextures( 1, &m_TexID );
    glBindTexture( GL_TEXTURE_2D, m_TexID );
    
[/code]

を呼び出して、dll側でテクスチャの実体を生成してUnity側で描画したり

dll側で

[code]

    glClearColor(r, g, b, a);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    
[/code]

を使用して画面をクリアーしたり

[code]

    glViewport(x, y, w, h);
    
[/code]

を使用してビューポートを指定したりする事は可能なのでしょうか。

※実行環境はUnity5.6.0f3で、OpenGL ESで動作するようにPlayer Setteingの  
「Auto Graphics API」を変更しています。

また、  
<https://docs.unity3d.com/ja/540/ScriptReference/GL.InvalidateState.html>  
に記載されている

[code]

    GL.InvalidateState();
    
[/code]

を使用する必要はあるのでしょうか。  
(GL.InvalidateStateの使用例とかも見つからなかったので、  
リファレンスの内容では関係があるのか、どのようなタイミングで使用するのか今一つ判断がつきませんでした)

どなたか詳しい方がいれば、ご教授頂けますと幸いです。


CC BY-SA 3.0
2017-05-10T03:14:35.673
34598
2017-05-13T12:53:16.707
2017-05-10T09:23:19.783
49
23038
question
unity3d opengl-es
Unityのプラグイン側でOpenGL ESの処理を実行させる事は可能でしょうか


試行錯誤した結果、dll側で作成した内容をUnity側で描画させる事は可能だと判明しました。  
実際に上記の内容を反映させるには  
コルーチン等で実行し、

yield return new WaitForEndOfFrame();

まで待機してから

GL.IssuePluginEvent(RenderEventFunc(), eventID);

でdll側の処理を呼び出して、レンダーイベントでOpenGLの処理を行う必要があります。

WaitForEndOfFrame()まで待機せずに処理した場合、  
dll側で指定した動作は描画されません。  
(ただし、Unity側で作成したテクスチャやポリゴンを変形させる等の  
実体が既に存在する物に関しては適応されるようです。)

また、GL.InvalidateState();は使用する必要はありませんでした。  
(GL.InvalidateState()は何に使うんだろ...)


CC BY-SA 3.0
2017-05-13T12:53:16.707
34680
2017-05-13T12:53:16.707
23038
34598
answer