[英]Using HTML5 WebGL Shaders for Computation
在我看來,理論上可以使用WebGL進行計算 - 例如計算素數或π或沿着這些線的某些東西。 但是,從我看到的很少,着色器本身不是用Javascript編寫的,所以我有幾個問題:
如果相關,在這種特定情況下,我試圖將相當大的數字作為[非常]擴展的compsci項目的一部分。
編輯:
我在Chrome中使用了JavaScript中的計算着色器,使用WebGL來解決旅行商問題,因為片段着色器中解決了一組分布式較小的優化問題,以及其他一些遺傳優化問題。
問題:
您可以將浮點數放入(r:1.00,g:234.24234,b:-22.0),但只能輸出整數(r:255,g:255,b:0)。 這可以通過將單個浮點數編碼為4個整數作為每個片段的輸出來克服。 這實際上是一項非常繁重的操作,幾乎無法解決99%的問題。 您可以使用簡單的整數或布爾子解決方案解決問題。
調試是一個史無前例的噩夢,社區正在積極地寫這篇文章。
將數據注入到着色器中,因為像素數據非常慢,讀取它甚至更慢。 舉個例子,讀取和寫入數據以解決TSP問題分別需要200和400毫秒,該數據的實際“繪制”或“計算”時間為14毫秒。 為了使用,您的數據集必須以正確的方式足夠大。
JavaScript是弱類型的(在表面上......),而OpenGL ES是強類型的。 為了實現互操作,我們必須在JavaScript中使用像Int32Array或Float32Array這樣的東西,這種東西感覺很尷尬並且在一種通常被吹捧為自由的語言中受到限制。
大量支持歸結為使用5或6個紋理的輸入數據,將所有像素數據組合成單個數字結構(以某種方式...),然后以有意義的方式對該大數字進行操作。 非常hacky,完全沒有推薦。
目前正在開展一個項目來完成您正在做的事情 - WebCL 。 不過,我不相信它現在已經存在於任何瀏覽器中。
回答你的問題:
我曾經用這種東西搞砸了。 在回答你的第三個問題時,我通過'制服'傳遞了vars
*編輯 - 回顧現在也使用矢量'屬性'從外部傳遞數據。
你需要運行mamp或其他東西才能在本地工作... https://github.com/byteface/GTP/tree/master/play/simplified
我使用像素來表示字母表的字母,並使用着色器進行字符串搜索。 它的速度非常快。 比基於CPU的本機搜索程序更快。 即在整個書中搜索單個單詞的實例在GPU上的瀏覽器中比在像textedit這樣的輕量級程序中更快。 我只使用一個紋理。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.