godot computer shader 的簡單原理
emmm,我這輩子用過最麻煩的玩意兒就是opengl。只要有了它,簡單的代碼,也會變得惡心的要死要死的。當(dāng)然自己封裝就更麻煩了,如果可以不用它,那就最好不用。
如果要在opencl 和 cuda 中要傳一頭大象。那太簡單了。
1、準(zhǔn)備一頭大象
2、告訴gpu我要給一頭大象,有30噸。
3、把大象扔過去。
如果是global,那我想看就看。
如果是device,那就我看不到了,不過但是還可以device to device 復(fù)制。
甚至還可以device to local 復(fù)制回來。
要在opengl中,想起都惡心。
1、準(zhǔn)備一頭大象
2、準(zhǔn)備一個名片裝用來指向保存后的大象的位置
????(常見的 uint VAO,VBO,EBO,F(xiàn)BO,不是我來設(shè)計(jì)的,而是opengl分配后會自動修改這里面的值,而且這個值在本地基本沒用)
3、告訴gpu我要給一頭大象,有30噸,并把準(zhǔn)備好的名片讓opengl填位置。
4、告知這個大象必須放在opengl編號3的倉庫,我之后會專門訪問。

這個單號還用set綁定一下,才能再使用

到時他的layout(set = 0,binding = 3) 就可以訪問params_uniform的數(shù)據(jù)了,這里只是傳入了一個time誒,就是要這樣。
如果大家有幸使用過opengl,uniform都比他簡單。
當(dāng)然不要以為這樣就是他的極限了

fmt:format,要生成一個格式信息,這個format要保存長寬,數(shù)據(jù)類型、已經(jīng)這個數(shù)據(jù)可以怎么用,可以更新的、可以用來存儲的、比特形式傳入(copy_from_bity)
????我不知道一般人會不會有疑問,隨便一個int 難道不能保存?難道不能更新?這已經(jīng)到了脫褲子放屁的最高境界了。
????這就是opengl,如果是一般人,我不推薦用這東東,opencl的入門門檻比這個低一大截,可以說opencl沒有門檻。
????總結(jié)來說:
????_on_GPU_ float* p = new float[30]();
????p.copy_bity_from(base_data_form_CPU);
????數(shù)組p就是指向float[30]的首地址,和他的unifrom存儲的一個意思。
????里面最重要的應(yīng)該就是 uniform_type_image,說明這東東是image。(這里的image在godot中叫texture)
參考:https://github.com/nekotogd/Raytracing_Godot4/blob/master/BasicComputeShader/ray_tracer_simple.gd
總結(jié):如果這東西難度為2,麻煩程度10;opencl的難度為3,麻煩程度為1;