2014-12-19 11 views
6

Sto iniziando con OpenGL ES2.0 su Android (5.0.1), livello API 19. Dove dovrei memorizzare il codice dello shader? Il primo esempio codifica lo shader direttamente come una stringa.Dove memorizzare il codice shader nell'app per Android

Mi piacerebbe avere il codice dello shader in un file separato per una migliore usabilità. Qual è la procedura migliore per archiviare e caricare i vertex e gli shader dei frammenti?

risposta

9

ci sono due opzioni principali:

  • memorizzarli come file di testo nella cartella assets del progetto. Per caricare lo shader:

    1. Prendi il AssetManager con il metodo del contesto getAssets().
    2. Chiama il open() allo AssetManager, passando il nome del file dello shader. Questo ti dà un InputStream.
    3. Leggere il codice shader da InputStream e memorizzarlo in un String.
    4. Chiama close() su InputStream.
  • Archiviarli nella cartella res/raw del progetto. Per caricare lo shader:

    1. Prendi il Resources con il metodo del contesto getResources().
    2. Chiama openRawResource() su Resources, passando l'ID risorsa (R.raw.<name>). Questo ti dà un InputStream.
    3. (come sopra)
    4. (come sopra)

Non credo ci sia un grande motivo per preferire uno sopra l'altro. La differenza principale è che si utilizza il nome del file per accedere alle risorse, mentre si utilizza l'ID risorsa assegnato automaticamente per le risorse. È una questione di preferenza quale ti piace di più.

+0

Grazie. Ho provato il modo 'Risorsa' e funziona bene. Tuttavia, trovo piuttosto difficile leggere il contenuto del file come stringa. Non ho trovato altro modo di leggere tutte le righe e collegarle. Ma poi ho dovuto aggiungere manualmente l'interruzione di riga. E qual è la migliore estensione di file per gli shader? – anhoppe

+1

se si utilizza l'estensione di file ".fs", Android lo interpreterà come uno script di filtro Renderscript e fornirà alcune evidenziazioni della sintassi. – HPP

+0

[Questi] (https://www.khronos.org/opengles/sdk/tools/Reference-Compiler/) sono le estensioni ufficiali – elect

Problemi correlati