unityでいってみよう!

unityがチョットワカル位の人のブログ

Shader Cacheを削除してみよう!

Shader Cacheとは?

OpenEL GSのデバイスでは、Shader(Snipet)はRuntime上(デバイスで実行されるアプリケーション内)でGPU Programにコンパイルされます。このコンパイルは非常に処理負荷が高い為、コンパイルされたGPU ProgrameをCacheして再利用しようという仕組みがUnityに組み込まれています。 このCacheされたGPU ProgramをShader Cacheと呼んでいます。

Shader Cacheが利用できる条件

OpenEL GSの端末で必ずしもShader Cacheが利用できる訳ではなく、端末が下記の何れかの条件を見たいしている必要があります、

  • OpenEL GS 3.0以上に対応している
  • GL_OES_get_program_binary/GL_ARB_get_program_binary extensionが有効

Shader Cacheが保存されている場所

Application.temporaryCachePathの"UnityShaderCache"以下に保存されています。

Shader Cahe削除する方法

ここからが本題。

何がしかの理由(ストレージサイズを圧迫するなど)でShader Cacheを削除した場合があるかもしれません。 その場合、上記ディレクトリを削除すれば良い筈ですが、何が起こるか分からない為、Shader Cacheを削除するAPIを使用した方が安全かもしれません。 UnityのスクリプトAPIには記載がありませんが、モバイルプラットフォーム用のインターフェースであるHandheldクラスにShader Cacheクリア用のAPIが用意されています。

Handheld.ClearShaderCache()

非公開である理由は不明ですが、確認した限り、Unity2019.1以降では使用出来るようです。 ※非公開な為、リリースビルドでの使用は辞めた方が良いかもしれません。

以上です!!