03.テクスチャを異なるターゲットでバインドするとエラーが発生する事象の確認
結果としては、以下の事象を確認した。
・GL_TEXTURE_2Dでバインド、バインド解除した後に、GL_TEXTURE_EXTERNAL_OESでバインドするとエラーが発生する。
・GL_TEXTURE_EXTERNAL_OESでバインド、バインド解除した後に、GL_TEXTURE_2Dでバインドするとエラーが発生する。
解説
以下の処理を行い、エラーが発生するかどうかを確認する。
- GL_TEXTURE_2Dでバインド、バインド解除した後に、GL_TEXTURE_EXTERNAL_OESでバインドする。
- GL_TEXTURE_EXTERNAL_OESでバインド、バインド解除した後に、GL_TEXTURE_2Dでバインドする。
実装
プロジェクトを開く
「02.Unity側で作成したテクスチャを、Java側でGL_TEXTURE_2DのテクスチャとしてSurfaceTextureに割り付けて使用する方法」を実施していない場合は、実施します。
Javaクラスの編集
Androidライブラリのプロジェクトを開きます。
Surfaceの初期化の関数に以下の変更を加えます。
- 「テクスチャを2つ作成する処理」を追加します。
- 「GL_TEXTURE_2Dでバインド、バインド解除した後に、GL_TEXTURE_EXTERNAL_OESでバインドする処理」を追加します。
- 「GL_TEXTURE_EXTERNAL_OESでバインド、バインド解除した後に、GL_TEXTURE_2Dでバインドする処理」を追加します。
Surfaceの初期化 initSurface関数の内容を以下のようにします。
Androidライブラリモジュールのビルド
Androidライブラリモジュールをビルドします。
「Gradle」ウィンドウの「SurfaceTextureRendererProject > surfacetexturerenderer
> Tasks > build > build」をダブルクリックします。
モジュールのビルドが開始します。
しばらく待ちます。
Android Studio のステータスバーに「Gradle build finished in ・・・」と出るまで待ちます。
「{Androidプロジェクトフォルダ}\{Androidライブラリモジュール名}\build\outputs\aar」フォルダに、リリースビルド、デバッグビルドの2つの「aar」ファイルが生成されます。
aarファイルの配置
Androidライブラリモジュールのファイル(aarファイル)を、Unityアプリのプロジェクトに配置します。
「{Unityプロジェクトフォルダ}\Assets\Plugins\Android」フォルダに、
「{Androidプロジェクトフォルダ}\{Androidライブラリモジュール名}\build\outputs\aar」フォルダに生成済みの「aar」ファイルのリリースビルドの方を、コピ-します。
Unityスクリプトの編集
Unityアプリ側の変更はありません。
実行
Build And Run
Unityアプリのプロジェクトを開きます。
Android端末をUSB接続しておきます。
メインメニュー「File > Build And Run」を選択します。
Unityアプリのビルドが開始し、ビルドが終了すると、Android端末上でUnityアプリが実行されます。
起動直後
アプリ画面のボタンを押します。
TextureRendererの初期化処理が実行されます。
「Android Logcat」ウィンドウを確認すると、
・GL_TEXTURE_2Dでバインド、バインド解除した後に、GL_TEXTURE_EXTERNAL_OESでバインドするとエラーが発生しています。エラーコードは1282、GL_INVALID_OPERATION
です。
・GL_TEXTURE_EXTERNAL_OESでバインド、バインド解除した後に、GL_TEXTURE_2Dでバインドするとエラーが発生しています。エラーコードは1282、GL_INVALID_OPERATION
です。
考察
以下の事象を確認した。
・GL_TEXTURE_2Dでバインド、バインド解除した後に、GL_TEXTURE_EXTERNAL_OESでバインドするとエラーが発生する。
・GL_TEXTURE_EXTERNAL_OESでバインド、バインド解除した後に、GL_TEXTURE_2Dでバインドするとエラーが発生する。
関連ページ
前項目:02.Unity側で作成したテクスチャを、Java側でGL_TEXTURE_2DのテクスチャとしてSurfaceTextureに割り付けて使用する方法
前項目:04.Java側で作成したGL_TEXTURE_EXTERNAL_OESのテクスチャを、Unity側でUpdateExternalTexture()を利用し使用する方法