可以直接在C++里面写类似RSL的shader了
今天我搞定了一個新技術
可以直接在C++里面寫類似RSL的shader了
我簡要介紹一下這個新技術,我還在考慮是否要在我們的項目中應用
這個技術的優勢是可以借助現有的C++編譯器,將shader直接編譯成機器碼執行,這樣對于raytracing的效率很高,而且提供像RSL一樣友好的編程接口
我用了一些比較邪門的tricks,現在可以直接用C++寫類似RSL的shader,但是和RSL還有一定差距,shader寫出來類似這樣:
SHADER( phong, surface phong ( float a, float b, vector c, vector output d?) )
surface phong ( float a, float b, vector c, vector output d?)
{
?Ci = 0;
?c = 1 + vector( 1, 2, 3 ) + vector( 1, 2, 3 ) + 3;
?float?dot = c & c;
d = vector( 5, 6, 7 );
?illuminance_all( "catergory", point(1,2,3) )
?{
?}
?illuminance( "catergory", point(1,2,3), vector(4,5,6), PI/2 )
?{
?}
}
END_SHADER( phong )
這里例子里面,和RSL相比,就是頭尾需要多兩行
SHADER( phong, surface phong ( float a, float b, vector c, vector output d?) )
END_SHADER( phong )
中間部分幾乎一樣,差別就是點乘不允許用RSL的.而必須使用&,另外,vector構造的時候不能指定space,而且output關鍵字只能寫在類型的后面而不是前面,還有illuminance的兩種形式不允許重載,其中一種必須寫成illuminance_all
我想這點差別還是可以接受的吧?
至于vector構造的時候不能指定space的問題,可以用類的模板成員函數解決,只是寫的時候,不能像RSL一樣寫:
vector "space" (x,y,z)
而必須寫成:
vector_<space>(x,y,z)
這就要求我們稍微修改一下規范,但是大體還是很像RSL的吧,你們覺得是否應該在項目中應用,還是我們要按照RSL的傳統做,弄編譯器和虛擬機?
posted on 2007-09-27 20:05 Len3d 閱讀(...) 評論(...) 編輯 收藏轉載于:https://www.cnblogs.com/len3d/archive/2007/09/27/908428.html
總結
以上是生活随笔為你收集整理的可以直接在C++里面写类似RSL的shader了的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: photos怎么改成中文_Win10怎么
- 下一篇: mysql 索引查询_mysql索引的建