6
我在Android(5.0.1)API級別19上從OpenGL ES2.0開始。我應該在哪裏存儲着色器代碼?第一個示例將着色器直接編碼爲字符串。Android應用程序中着色器代碼的存儲位置
我想將着色器代碼放在單獨的文件中以提高可用性。存儲和加載頂點和片段着色器的最佳做法是什麼?
我在Android(5.0.1)API級別19上從OpenGL ES2.0開始。我應該在哪裏存儲着色器代碼?第一個示例將着色器直接編碼爲字符串。Android應用程序中着色器代碼的存儲位置
我想將着色器代碼放在單獨的文件中以提高可用性。存儲和加載頂點和片段着色器的最佳做法是什麼?
主要有兩種選擇:在你的項目的assets
文件夾
它們存儲爲文本文件。加載着色器:
getAssets()
方法獲取AssetManager
。AssetManager
上調用open()
,傳入着色器的文件名。這給你一個InputStream
。InputStream
中讀取着色器代碼,並將其存儲在String
中。close()
在InputStream
。將它們存儲在項目的res/raw
文件夾中。加載着色器:
getResources()
方法獲取Resources
。openRawResource()
在Resources
,傳入資源id(R.raw.<name>
)。這給你一個InputStream
。我不相信有一個大的理由,更喜歡一個比其他。主要區別在於您使用文件名來訪問資產,而您使用資源的自動分配的資源ID。這是一個你喜歡哪一個更好的偏好問題。
謝謝。我試過'資源'的方式,它工作正常。但是,我發現將文件內容作爲字符串讀取相當困難。我沒有找到其他方式,然後閱讀所有的線路並連接它們。但是,我不得不手動添加換行符。什麼是着色器的最佳文件擴展名? – anhoppe
如果您使用「.fs」文件擴展名,則Android會將其解釋爲Renderscript過濾器腳本,併爲您提供一些語法高亮顯示。 – HPP
[這些](https://www.khronos.org/opengles/sdk/tools/Reference-Compiler/)是官方擴展 – elect