我一直在學習OpenGL ES 2.0/GLSL和相關的iOS怪癖,通過查看代碼和開發人員視頻,我注意到從來沒有提到異步着色器編譯。除了講師,作家或推銷員(呃,工程師)擔心增加他們的例子的複雜性之外,是否有這個原因呢?例如,大多數Web數據檢索教程都會回顧需要做某種體操(pthreads,NSOperation,GCD,以異步實例方法烘焙等),以防止阻塞主線程 - 爲什麼會阻止應用程序發射被認爲可以接受?爲什麼不在後臺線程上編譯着色器?
1
A
回答
1
同步兩個EAGLContext
可能有點棘手,除此之外,在後臺加載這種東西(通常是加載各種資源,紋理,着色器等)沒有任何反應。
可能真正的原因是,大多數人認爲OpenGL(ES)是單一的,只能在單一線程上工作,或者他們從來沒有加載時間的問題,使得它值得在後臺線程中加載或他們只是不在乎(對於一些人來說,它可能是一切)。
對於你的最後一個問題:網絡可以添加一個巨大的延遲和「可以」我的意思是「將」。與網絡訪問相比,資源加載並不是問題,與加載着色器或紋理相比,加載着色器或紋理花費的時間更少,並且已知它會在正常情況下花費多少時間。此外,人們習慣於在遊戲中加載屏幕,而他們不希望在滾動表格視圖時看到加載屏幕,以便您的應用程序可以從未響應的服務器獲取圖片。
相關問題
- 1. 爲什麼在引用RWStructuredBuffer時不會編譯HLSL像素着色器?
- 2. 爲什麼在線編譯器編譯過程成功編譯失敗?
- 3. SharpDX編譯着色器
- 4. Nvidia驅動程序更新後無法在Qt 5.3上編譯GLSL着色器
- 5. 爲什麼我們在OpenGL 2的運行時編譯着色器?
- 6. 未能在swift中編譯着色器
- 7. 移動到ES 3.0後,頂點着色器不會編譯IOS
- 8. 在後臺線程上查找backgroundTimeRemaining在後臺線程上
- 9. 着色器編譯器如何工作?
- 10. 爲什麼我的flex/yacc編譯器不能在另一臺linux機器上正確編譯
- 11. 爲什麼在一臺Mac上編譯的_mysql.co不適用於另一臺?
- 12. glsl頂點着色器編譯PC,MAC,而不是在另一臺PC
- 13. Libgdx着色器在舞臺?
- 14. Jogl着色器編程
- 15. 編譯DirectX11着色器文件
- 16. GLSL頂點着色器編譯錯誤
- 17. GLFW - 無法編譯片段着色器
- 18. LWJGL GLSL着色器沒有編譯
- 19. 編譯着色器是否合適?
- 20. 編譯器爲什麼不優化?
- 21. TextWriterTraceListener在後臺線程上
- 22. OpenGL着色器無法在設備上編譯
- 23. 如何加速着色器在Android上的加載/編譯
- 24. 爲什麼程序不能編譯?
- 25. 爲什麼我的後臺線程不運行?
- 26. 爲什麼不着色圖像工作?
- 27. 爲什麼i ++在一臺核心機器上不是線程安全的?
- 28. 什麼時候應該使用統一的着色器編程?
- 29. 程序編譯在一臺服務器上,不在另一臺上
- 30. 爲什麼不編譯?
所以,解釋你的回答:1)這不是不可能的,只是困難的2)延遲可能不會影響到足夠的用戶是值得的。感謝您的輸入! – user396030
@ Mr.Pleasant - 對於這裏的一些具體數字,我認爲我的九個着色器程序總共需要在iPad 1上編譯200毫秒,而且如果沒有編譯它們,我就不能顯示任何東西,所以我從來沒有想過要將它們卸載到後臺線程。我的實際OpenGL ES渲染是在後臺使用GCD串行調度隊列完成的,並且這確實會在多核iPad 2和iPhone 4S上帶來不錯的性能提升。 –
我知道這是一個古老的線程,有沒有人設法做到這一點? – Burf2000