D3D11遊戲程式設計 學習筆記六 定時器的實現

2021-06-11 19:39:41 字數 970 閱讀 3838

(注:

,謝謝~)

這個定時器支援暫時、開始、重置等基本操作,程式中每一幀呼叫一次計數,並隨時返回距離上一次計數之間的差值。這個差值就是控制遊戲、動畫更新的最重要的資料。

這個定時器用到了windows中高精度的計時函式:queryperformancecounter和queryperformancefrequency,原型如下:

bool queryperformancecounter(  large_integer* lpperformancecount );

bool queryperformancefrequency( large_integer* lpfrequency );

這個定時函式以計數為單位,不同的機器兩次計數之間的時間差可能不一樣,因此有了第二個函式,返回一秒內計數的個數,求倒數即是兩次計數之間的時間差(秒)。第個函式返回乙個長整型數,通過傳遞引數位址來獲得。詳細說明參見msdn,參考該定時器類的實現也可以很好的理解它們的使用。

下面是這個定時器的類定義:

class timer

;

注釋已經十分詳細,應該很容易明白各成員函式及變數的作用。

在建構函式中,主要任務是獲得跟機器相關的變數,及m_secspercount,相臨兩次計數之間的時間差,以秒為單位。

在定時器開始工作前,需要先呼叫reset,重置定時器,使定時器處於相應的工作狀態,且設定好起始的引數。

其次,在程式每一幀中呼叫tick來計時,更新定時器。

然後可以通過呼叫如totaltime、deltatime函式來獲得相關的時間值。其中deltatime()是最重要的函式,其返回的時間值是更新遊戲每一幀及動畫的核心引數。

通過呼叫stop和start來暫停和恢復定時器。

該定時器設計設計就這麼簡單,各成員函式的定義及詳細的注釋見源**,通過源**也可以更深入地理解用到的兩個windows定時函式。

定時器源**

D3D11之快取更新 update buffer

話說這兩天我寫程式遇到乙個bug,是關於如何建立的id3d11buffer的應該以一種怎樣的方式在每幀渲染進行快取資源的更新 我總結為下 填充 頂點 快取形容結構體和子資源資料結構體,並建立頂點快取 這裡用的是動態快取 d3d11 buffer desc vertexbufferdesc verte...

D3D 9和D3D 11繪製流水線對比

繪製流水線 pipline 是圖形學程式設計中屬於各種圖形學框架的骨架。windows平台下3d遊戲開發幾乎都會用到d3d來進行遊戲引擎的設計。d3d 9是使用比較廣泛的乙個版本,d3d 9 中比較核心的就是固定渲染管線 fixed function pipline 下圖是從官方的sdk中翻譯的,從...

D3D11計算著色器程式Bug修改記錄(不斷更新)

最近一段時間用計算著色器完成一些影象處理的任務,遇到了不少bug,因為用cs做影象處理的資料較少,很多問題都是通過自己不斷定位,嘗試解決的。有些問題可能對別人有些參考,所以記錄一下,隨時更新。計算著色器的計算是很快的,但是我的程式在測試的時候,會有幾十ms的延時。並且奇怪的是,同樣的電腦,vs201...