2014-12-19 68 views
6

我在Android(5.0.1)API級別19上從OpenGL ES2.0開始。我應該在哪裏存儲着色器代碼?第一個示例將着色器直接編碼爲字符串。Android應用程序中着色器代碼的存儲位置

我想將着色器代碼放在單獨的文件中以提高可用性。存儲和加載頂點和片段着色器的最佳做法是什麼?

回答

9

主要有兩種選擇:在你的項目的assets文件夾

  • 它們存儲爲文本文件。加載着色器:

    1. 使用上下文的getAssets()方法獲取AssetManager
    2. AssetManager上調用open(),傳入着色器的文件名。這給你一個InputStream
    3. InputStream中讀取着色器代碼,並將其存儲在String中。
    4. 致電close()InputStream
  • 將它們存儲在項目的res/raw文件夾中。加載着色器:

    1. 使用上下文的getResources()方法獲取Resources
    2. 致電openRawResource()Resources,傳入資源id(R.raw.<name>)。這給你一個InputStream
    3. (同上)
    4. (同上)

我不相信有一個大的理由,更喜歡一個比其他。主要區別在於您使用文件名來訪問資產,而您使用資源的自動分配的資源ID。這是一個你喜歡哪一個更好的偏好問題。

+0

謝謝。我試過'資源'的方式,它工作正常。但是,我發現將文件內容作爲字符串讀取相當困難。我沒有找到其他方式,然後閱讀所有的線路並連接它們。但是,我不得不手動添加換行符。什麼是着色器的最佳文件擴展名? – anhoppe

+1

如果您使用「.fs」文件擴展名,則Android會將其解釋爲Renderscript過濾器腳本,併爲您提供一些語法高亮顯示。 – HPP

+0

[這些](https://www.khronos.org/opengles/sdk/tools/Reference-Compiler/)是官方擴展 – elect

相關問題