第三篇:序列模型
- 雙緩沖模式算是書中第三篇:序列模型中的一個(gè)详瑞,它與游戲循環(huán)和更新方法組成了第三篇。后兩者可以說是在我做Unity中最常用到的街望,而且也是游戲引擎本身已經(jīng)實(shí)現(xiàn)了的嘴拢。謹(jǐn)以下文來說明下序列模型部分的重要性仗处。
電子游戲之所有有趣优幸,很大程度上歸功于它們會(huì)將我們帶到別的地方吨拍。 幾分鐘后(或者,誠實(shí)點(diǎn)网杆,可能會(huì)更長(zhǎng))羹饰,我們活在一個(gè)虛擬的世界。 創(chuàng)造那樣的世界是游戲程序員至上的歡愉碳却。
大多數(shù)游戲世界都有的特性是時(shí)間——虛構(gòu)世界以其特定的節(jié)奏運(yùn)行队秩。 作為世界的架構(gòu)師,我們必須發(fā)明時(shí)間昼浦,制造推動(dòng)游戲時(shí)間運(yùn)作的齒輪馍资。
這本篇的模式是建構(gòu)這些的工具。 游戲循環(huán)是時(shí)鐘的中心軸座柱。 對(duì)象通過更新方法來聆聽時(shí)鐘的滴答聲迷帜。 我們可以用雙緩沖模式存儲(chǔ)快照來隱藏計(jì)算機(jī)的順序執(zhí)行,這樣看起來世界可以進(jìn)行同步更新色洞。
雙緩沖
一個(gè)典型的例子
- 這個(gè)例子非常經(jīng)典,就是渲染時(shí)候的雙緩沖冠胯。只有當(dāng)一幀的色值數(shù)據(jù)完全計(jì)算出來后火诸,才能在屏幕上展示出來,如果在計(jì)算的同時(shí)就開始渲染荠察,那么屏幕只會(huì)出現(xiàn)一部分的色彩置蜀。所以我們?cè)谄聊豢吹降纳手灯鋵?shí)往往是GPU算出的上一幀的數(shù)據(jù)奈搜。
使用場(chǎng)景
我們需要維護(hù)一些被逐步改變著的狀態(tài)量。
同個(gè)狀態(tài)可能會(huì)在其被修改的同時(shí)被訪問到盯荤。
我們希望避免訪問狀態(tài)的代碼能看到具體的工作過程馋吗。
我們希望能夠讀取狀態(tài)但不希望等到寫入操作的完成。
我對(duì)雙緩沖的理解
- 說白了秋秤,雙緩沖是為了維護(hù)完整性宏粤。它展示給外界的永遠(yuǎn)是一個(gè)完整的,已經(jīng)準(zhǔn)備好被使用的內(nèi)容灼卢。在其內(nèi)部绍哎,有一個(gè)緩沖是用于寫入數(shù)據(jù)的,寫入的過程可能是緩慢的鞋真,但是沒關(guān)系崇堰,另一個(gè)緩沖已經(jīng)做好了被使用的準(zhǔn)備,外界讀取的是這個(gè)已經(jīng)寫好的緩沖涩咖。
- 當(dāng)寫入完成時(shí)海诲,兩個(gè)緩沖互換,剛剛寫完的這個(gè)緩沖變?yōu)闇?zhǔn)備被讀取的一個(gè)檩互,而被讀取的緩沖開始作為寫入緩沖使用特幔。
設(shè)計(jì)決策
-
緩沖區(qū)如何交互?
- 在文中作者使用的是C++盾似,因此交換只不過是一個(gè)指針重定向的過程敬辣。
- 如果不能指針重定向,就要考慮數(shù)據(jù)拷貝了零院。
- C#中一個(gè)集合對(duì)象表現(xiàn)出來的也是一個(gè)指針(引用)溉跃,可以直接做重定向。
-
緩沖的粒度
- 書中提到兩個(gè)粒度告抄,一個(gè)是緩沖區(qū)是單個(gè)整體撰茎,也就是渲染的時(shí)候一個(gè)圖像的內(nèi)容就在一個(gè)緩沖區(qū)中。
- 另一種情況就是多個(gè)對(duì)象中都存在一個(gè)緩沖數(shù)據(jù)打洼。