我正在開發飛鏢webgl應用程序,我需要從外部文件加載着色器代碼。我可以發現剩餘的代碼在着色器加載之前運行顯示錯誤。有人可以幫我嗎。如何在飛鏢中同步加載着色器文件
0
A
回答
2
我對加載着色器知之甚少,但可以異步加載資源。利用期貨的HttpRequest:
import 'dart:html';
main() {
HttpRequest.getString(pathToShaderFile).then((shader) {
// do something with the shader, which is a String
});
}
的getString()方法返回一個未來,這是一個包含價值「準備在將來某個時候」的對象。在這種情況下,當服務器使用着色器文件進行響應時,值(HTTP請求的內容)已準備就緒。數值準備就緒後,將觸發then()
回調。
這裏是HttpRequest.getString的文檔():https://api.dartlang.org/apidocs/channels/stable/dartdoc-viewer/dart-dom-html.HttpRequest#id_getString
1
使用基於WebGL的應用程序通常需要加載很多資源,可以讓應用程序設置:着色器文件,模型,紋理,世界數據等等。
我相信你想要做的是加載和處理所有這些資源之前啓動主動畫循環和渲染幀。
要做到這一點,你想安排你的資源加載和處理代碼產生期貨,然後使用靜態Future.wait()
函數來等待每個資源加載和處理。
這是一個有點人爲的例子。請注意,wait()
等待的期貨是在loadAndProcess()
中調用then()
後返回的期貨,即在執行完處理之後完成的期貨,而不是在'HttpRequest.getString()'完成後執行。
void main() {
Future loadAndProcess(String file) {
return HttpRequest.getString(file)
.then((String s) {
// Process resource content
})
.catchError((Error error) {
// Deal with error
});
}
Future.wait([loadAndProcess('a.txt'), loadAndProcess('b.txt'), loadAndProcess('c.txt')])
.then((_) {
// Go on with program ...
});
}
上面假定裝載和處理每個資源是獨立的。
相關問題
- 1. 如何在飛鏢中加載圖像
- 2. 在飛鏢中動態加載課程
- 3. 如何實現異步/地等待着飛鏢
- 4. 如何爲飛鏢中的網頁製作預加載器
- 5. 使用飛鏢動態加載飛鏢腳本
- 6. 同步返回值並等待飛鏢
- 7. 飛鏢限制同步連接
- 8. 如何在飛鏢中使用Lasily/Dynamicaly加載類?
- 9. 在飛鏢編輯器中自動生成飛鏢
- 10. 在飛鏢中讀取文件
- 11. 在飛鏢中逐行讀取文件
- 12. 飛鏢Web_Audio飛鏢1.6
- 13. 文件輸入和飛鏢
- 14. 如何閱讀飛鏢中的過濾器對話文件?
- 15. 如何讀取和寫入飛鏢中的服務器文件
- 16. 飛鏢中的飛鏢websocket:io and dart:html
- 17. 同步等待未來或流在飛鏢中完成
- 18. 如何獲得飛鏢中所有加載庫的列表?
- 19. 飛鏢中的異步/等待模式?
- 20. 如何配置飛鏢編輯器來構建「.UXL」文件
- 21. 如何使用angular2_material飛鏢
- 22. 在瀏覽器中編譯飛鏢
- 23. 如何在飛鏢中動態使用獲取器/設置器
- 24. 着色動態加載的文件
- 25. 如何在飛鏢編輯器中更改文件類型關聯?
- 26. 使用沒有飛鏢編輯器的飛鏢問題
- 27. 飛鏢沒有飛鏢編輯器:刷新
- 28. 飛鏢中的urlencoding
- 29. net :: ERR_UNSAFE_PORT在飛鏢
- 30. 在飛鏢中解析plist
歡迎來到StackOverflow。你能改善你的問題嗎?例如,添加一些代碼,顯示您嘗試過的內容以及有關哪些內容有效的信息。也許添加一些錯誤信息。另見http://stackoverflow.com/help/how-to-ask,http://meta.stackoverflow.com/questions/260648 – 2014-08-29 13:51:58