最近看render,這真是一門複雜的課 @@,看懂投影片到看懂課本是一段距離,看懂課本到看懂原始碼又是一段距離,看懂原始碼到寫得出作業又是一段距離。
課本的原始碼寫法是用Literate programming,就是像寫pseudo code一樣講解,常常看到後面就忘記前面是什麼。而且render有很多實作上為了加速的技巧,像課本裡看到一段
LinearBVHNode *nodes; // linearBVHNode 是 struct
nodes = AllocAligned<LinearBVHNode>(totalNodes);
for( uint32_t i=0; i<totalNodes; ++i)
new (&nodes[i]) LinearBVHNode;
這種placement new的用處是在已經配置好的空間(&nodes[i]),建一個LinearBVHNode的物件,會比直接用new配置一個全新的物件到heap的方法來的快一點,純struct的也可以省下跑建構子的時間。
其他的還有加空變數的讓使用記憶體對齊8byte,和各懂細節要考慮,有夠混亂。
沒有留言:
張貼留言