日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

可以直接在C++里面写类似RSL的shader了

發布時間:2023/12/18 c/c++ 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 可以直接在C++里面写类似RSL的shader了 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
可以直接在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了的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。