[程式] 關於Shader抽象部份的問題

看板GameDesign (遊戲設計)作者 (等號卡比)時間11年前 (2014/02/03 11:49), 編輯推噓1(107)
留言8則, 1人參與, 最新討論串1/1
最近小弟想趁寒假結束以前,試著做一些簡易的封裝。可是在設計上碰到了一些問題, 想請教各位大大。 就是關於Shader的部分,在DirectX裡面,每個Shader都是可以獨自成一個個體,最後 依照使用狀況不同,互相排列綁在管線上面。 可是在OpenGL裡面,在4.1之前,Shader都不支援這種混合運用,非得要把每個階段的 Shader都綁在Program上面以後,以Program為單位去使用。 我的問題就在這邊,我目前採用的繪圖API是以OpenGL為準,不排除以後加入DirectX 的可能性。但這邊就出現一些分歧的地方,就是我不知道該怎麼設計這邊的關係。 我想讓使用者可以自行決定Shader的綁定,可是在OpenGL裡面,單是要查詢uniform block這種動作也非得透過Program才行。 想請問各位大大,有沒有甚麼比較好的方法可以使用?我目前是盡量不想要再設計一 個Program類@@(因為DirectX很顯然不需要這個類) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.133.181.73

02/15 02:39, , 1F
目前似乎不支援,所以你頂多swap 不同階段的 shader,
02/15 02:39, 1F

02/15 02:40, , 2F
所以你還是得 link program一遍,而且你
02/15 02:40, 2F

02/15 02:42, , 3F
uniform也要重綁。
02/15 02:42, 3F

02/15 02:44, , 4F
但從你最後一句我有疑問的是,為什麼要再設計Program類?
02/15 02:44, 4F

02/15 02:46, , 5F
可以說一下你設計的shader class嗎?
02/15 02:46, 5F

02/15 02:47, , 6F
我的方式是preload所有shader,用resourcemanager去查找
02/15 02:47, 6F

02/15 02:48, , 7F
還有你所謂的uniform block是綁UBO的uniform block嗎?
02/15 02:48, 7F

02/15 02:48, , 8F
還是單純的uniform? (ex: uniform int useTexture;)
02/15 02:48, 8F
我原本的打算是像是DirectX那樣,因為每個Shader自己都是獨立的,所以自己可以擁有所有資訊,舉凡像是 uniform block或是uniform等等。但在OpenGL裡面,要倒出有關資訊都得透過program才行。 而每當換一種組合的時候,都要Link Program感覺會是個消耗時間的操作,而且每次都得重新把資訊撈出 來整理。當然也可以cache起來在一個map裡面,利用vs和fs的值去索引,只是感覺還是浪費不少時間。 所以我想設定program類就是因為這樣的話可以直接使用,而且麻煩的shader parameter也會都被設置完成。 但這種需求只有在OpenGL才需要而已,讓我有點不懂該怎麼設計@@ (Pass雖然記錄該階段所需要的shader們,但他應該是無關繪圖API的...) ※ 編輯: a27417332 來自: 114.42.106.145 (02/17 17:38)
文章代碼(AID): #1Ixn7I7L (GameDesign)
文章代碼(AID): #1Ixn7I7L (GameDesign)