03.テクスチャを異なるターゲットでバインドするとエラーが発生する事象の確認

結果としては、以下の事象を確認した。
・GL_TEXTURE_2Dでバインド、バインド解除した後に、GL_TEXTURE_EXTERNAL_OESでバインドするとエラーが発生する。
・GL_TEXTURE_EXTERNAL_OESでバインド、バインド解除した後に、GL_TEXTURE_2Dでバインドするとエラーが発生する。

解説

以下の処理を行い、エラーが発生するかどうかを確認する。

実装

プロジェクトを開く

02.Unity側で作成したテクスチャを、Java側でGL_TEXTURE_2DのテクスチャとしてSurfaceTextureに割り付けて使用する方法」を実施していない場合は、実施します。

Javaクラスの編集

Androidライブラリのプロジェクトを開きます。

Surfaceの初期化の関数に以下の変更を加えます。

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()を利用し使用する方法