2014-12-19 8 views
6

zu speichern Ich beginne mit OpenGL ES2.0 auf Android (5.0.1), API Level 19. Wo sollte ich den Shader-Code speichern? Das erste Beispiel codiert den Shader direkt als Zeichenfolge.Wo Shader-Code in Android-App

Ich hätte gerne den Shader-Code in einer separaten Datei für bessere Benutzerfreundlichkeit. Was ist die beste Vorgehensweise zum Speichern und Laden der Vertex- und Fragment-Shader?

Antwort

9

Es gibt zwei Hauptoptionen:

  • speichern sie als Textdateien im assets Ordner Ihres Projekts. So laden Sie den Shader:

    1. die AssetManager mit der getAssets() Methode des Kontextes Get.
    2. Rufen Sie open() auf der AssetManager, übergeben Sie den Dateinamen des Shaders. Dies gibt Ihnen eine InputStream.
    3. Lesen Sie den Shader-Code von InputStream, und speichern Sie ihn in einem String.
    4. Rufen Sie close() auf der InputStream.
  • Speichern Sie sie im Ordner res/raw Ihres Projekts. So laden Sie den Shader:

    1. die Resources mit der getResources() Methode des Kontextes Get.
    2. Rufen Sie openRawResource() auf der Resources, in der Ressource ID übergeben (R.raw.<name>). Dies gibt Ihnen eine InputStream.
    3. (wie oben)
    4. (wie oben)

Ich glaube nicht, dass es ein großer Grund, einen über den anderen zu bevorzugen. Der Hauptunterschied besteht darin, dass Sie den Dateinamen verwenden, um auf Ressourcen zuzugreifen, während Sie die automatisch zugewiesene Ressourcen-ID für Ressourcen verwenden. Es ist eine Frage der Präferenz, welche dir besser gefällt.

+0

Danke. Ich habe den "Resource" Weg ausprobiert und es funktioniert gut. Allerdings finde ich es eher schwierig, den Dateiinhalt als String zu lesen. Ich fand keine andere Möglichkeit, als alle Zeilen zu lesen und sie zu verbinden. Aber dann musste ich den Zeilenumbruch manuell hinzufügen. Und was ist die beste Dateierweiterung für Shader? – anhoppe

+1

Wenn Sie die Dateierweiterung ".fs" verwenden, interpretiert Android sie als Renderscript-Filterskript und gibt Ihnen eine Syntaxhervorhebung. – HPP

+0

[These] (https://www.khronos.org/opengles/sdk/tools/Reference-Compiler/) sind die offiziellen Erweiterungen – elect