【轉載】Direct3D基礎知識

原文:Direct3D基礎知識

?

重新從頭開始學習DX,以前太急于求成了,很多基礎知識都沒掌握就開始寫程序了,結果出了問題很難解決.
1.???????D3D體系結構
D3D與GDI處與同一層次,區別在于,D3D可以使用HAL(Hardware Abstraction Layer)通過DDI來訪問圖形硬件,充分發揮硬件性能.
2.???????D3D設備對象
2.1 D3D設備類型
HAL,支持硬件加速光柵化和硬件或軟件處理
Software Device,硬件模擬層
REF,reference device,SDK專用.不過nVidia的PerfHUD就是用的這種設備類型
2.2???D3DPRESENT_PARAMETERS
1: typedef struct D3DPRESENT_PARAMETERS {
 2: ????UINT BackBufferWidth, BackBufferHeight;//后臺緩沖區寬高
 3: ????D3DFORMAT BackBufferFormat;//后臺緩沖區像素格式
 4: ????UINT BackBufferCount;//后臺緩沖區的數量
 5: ????D3DMULTISAMPLE_TYPE MultiSampleType;//多重采樣類型,用于反鋸齒
 6: ????DWORD MultiSampleQuality;
 7: ????D3DSWAPEFFECT SwapEffect;//后臺緩沖區復制到前臺緩沖區的方式
 8: ????HWND hDeviceWindow;//圖形繪制窗口
 9: ????BOOL Windowed;//窗口/全屏
10: ????BOOL EnableAutoDepthStencil;
11: ????D3DFORMAT AutoDepthStencilFormat;
12: ????DWORD Flags;
13: ????UINT FullScreen_RefreshRateInHz;//刷新速率,窗口時必須為0
14: ????UINT PresentationInterval;
15:?}?D3DPRESENT_PARAMETERS,?*LPD3DPRESENT_PARAMETERS;
BackBufferWidth與BackBufferHeight為0時系統自動使用當前窗口客戶區寬高
BackBufferCount取0和1時都表示一個后臺緩沖區
hDeviceWindow為NULL時默認為當前被激活的窗口
BackBufferFormat取D3DFMT_UNKNOWN時,像素格式取當前顯卡的像素格式
2.3???CreateDevice中的BehaviorFlag
D3DCREATE_HARDWARE_VERTEXPROCESSING,硬件頂點運算
D3DCREATE_MIXED_VERTEXPROCESSING,軟硬件共同進行頂點運算
D3DCREATE_MULTITHREADED,多線程繪制,會降低性能
D3DCREATE_SOFTWARE_VERTEXPROCESSING,軟件頂點運算
??????????????通常某些集成顯卡不支持硬件頂點運算,如intel 的GMA900/950
2.4???D3D繪制
Clear(),可以清空顏色緩沖區,深度緩沖區,模板緩沖區.可以選擇清除區域
BeginScene()和EndScene()不允許嵌套
Present(),可以指定更新區域(臟矩形技術?),不過要求用D3DSWAPEFFECT_COPY
3.???????D3D設備對象
全屏模式:
枚舉顯示適配器(多顯示器適用)
IDirect3D9::EnumAdpterModes()枚舉支持的顯示模式
IDirect3D9::CheckDeviceType()檢測顯示模式是否支持硬件加速
IDirect3D9::GetDeviceCaps()檢查渲染設備是否支持所需要的功能(顯卡兼容性檢測)
IDirect3D9::CheckDeviceFormat()檢測其它表面格式是否支持
IDirect3D9::CheckDepthStencilMatch()檢測深度/模板緩沖區是否和渲染目標兼容
IDirect3D9::CheckDeviceMultiSampleType()檢查設備是否支持多重采樣(反鋸齒用)
窗口模式:
直接用D3DADAPTER_DEFAULT就可以忽略前兩步了,剩下的都一樣
設備丟失:
圖形顯示丟失焦點,必須重新創建相關資源
任何顯存資源在設備丟失時必須銷毀,包括CreateAdditionalSwapChain()創建的交換鏈和D3DPOOL_DEFAULT格式的內存資源
4.???????D3D表面
表面格式:通常有兩個屬性,表面大小與顏色位數
表面翻轉:將后臺緩沖區移動到前臺緩沖區的過程
交換鏈:按順序逐個提交到前臺顯示的多個后臺緩沖區的集合
多個視圖的應用程序用多個交換鏈
訪問表面內存:IDirect3DSurface9::LockRect(),不適用于多重采樣后臺緩沖區

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/458425.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/458425.shtml
英文地址,請注明出處:http://en.pswp.cn/news/458425.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

翻譯:程序員數據結構基礎:選擇正確的數據結構

本文轉載自GameDev.net,僅供學習交流。因為剛剛開始學習翻譯,難免有些疏漏,如果有哪些地方翻譯的不正確,請不吝告知,萬分感謝。 原文鏈接:http://www.gamedev.net/page/resources/_/technical/general-prog…

關于Xcode隱藏打印的logs的方法

https://www.cnblogs.com/jukaiit/p/5881062.html 第一步: 第二步: 第三步: 添加參數: Name :OS_ACTIVITY_MODE Value : disable

指針函數與函數指針的區別

首先它們之間的定義:1、指針函數是指帶指針的函數,即本質是一個函數,函數返回類型是某一類型的指針。 類型標識符 *函數名(參數表)int *f(x,y);首先它是一個函數,只不過這個函數的返回值是一個地址值。函數返回值必須用…

數組字典

#import <Foundation/Foundation.h>int main(int argc, const char * argv[]) {autoreleasepool { //把字典放到數組中NSDictionary *dic1{"name":"小明","class":"IOS8","age":"22"};NSDictionary *dic2{&…

C++走向遠洋——63(項目二2、兩個成員的類模板)

*/ * Copyright (c) 2016&#xff0c;煙臺大學計算機與控制工程學院 * All rights reserved. * 文件名&#xff1a;text.cpp * 作者&#xff1a;常軒 * 微信公眾號&#xff1a;Worldhello * 完成日期&#xff1a;2016年6月4日 * 版本號&#xff1a;V1.0 * 問題描述&…

iOS 抓包工具 charles工具

在Charles官網下載最新的 安裝包 在電腦上安裝完成之后&#xff0c;以 注冊碼 Registered Name: https://zhile.io License Key: 48891cf209c6d32bf4 進行注冊即可完成 在手機上面設置代理&#xff1a;輸入電腦的網絡IP以及端口號 以下為查找的步驟&#xff1a; 在手機上手…

指針數組與數組指針詳解

指針數組與數組指針詳解 1.什么是指針數組和數組指針&#xff1f; 指針數組&#xff1a;指針數組可以說成是”指針的數組”&#xff0c;首先這個變量是一個數組&#xff0c;其次&#xff0c;”指針”修飾這個數組&#xff0c;意思是說這個數組的所有元素都是指針類型&#xff0…

寫一個Android輸入法01——最簡步驟

本文演示用Android Studio寫一個最簡單的輸入法。界面和交互都很簡陋&#xff0c;只為剔肉留骨&#xff0c;彰顯寫一個Android輸入法的要點。 1、打開Android Studio創建項目&#xff0c;該項目和普通APP的不同之處在于它不需要添加任何Activity&#xff1a;我給該輸入法命名為…

句柄與指針的區別

句柄實際上是一種指向某種資源的指針&#xff0c;但與指針又有所不同&#xff1a;指針對應著一個數據在內存中的地址&#xff0c;得到了指針就可以自由地修改該數據。 Windows并不希望一般程序修改其內部數據結構&#xff0c;因為這樣太不安全。所以Windows給每個使用GlobalAll…

iOS 11 適配

http://blog.csdn.net/st646889325/article/details/79066361 這一個不錯的文章

談談自己對于Auth2.0的見解

Auth的原理網上有很多&#xff0c;我這里就不在贅述了。 這里有張時序圖我個人覺得是比較合理而且直觀的&#xff0c;&#xff08;感謝這篇博文&#xff1a;http://justcoding.iteye.com/blog/1950270&#xff09; 參照這個流程&#xff0c;模擬了下部分代碼&#xff0c;當然是…

某個時間點 幾天后

1、某個時間點 3天后 NSDate *maxDate [NSDate dateWithTimeInterval:3 * 24 * 60 * 60 sinceDate:date];//3天后 2、現在 3天后 NSDate *minDate [[NSDate date] initWithTimeIntervalSinceNow:3 * 24 * 60 * 60];

iPad開發--QQ空間,處理橫豎屏布局,實現子控件中的代理

一.主界面橫豎屏效果圖 二.主界面加載, 初始化Dock(紅色框的控件),判斷程序啟動時的屏幕方向.調用自己- (void)transitionToLandScape:(BOOL)isLandScape;方法,通知子控件屏幕方向改變,將此事件一直傳遞下去程序運行過程中屏幕方向改變會調用- (void)viewWillTransitionToSize:…

C++ Vector 匯總

C vector erase函數最近使用了順序容器的刪除元素操作&#xff0c;特此記錄下該函數的注意事項。 在Cprimer中對c.erase(p) 這樣解釋的&#xff1a;c.erase(p) 刪除迭代器p所指向的元素&#xff0c;返回一個指向被刪元素之后元素的迭代器&#xff0c;若p指向尾元素&#xff…

vNext之旅(2):net451、dotnet5.4、dnx451、dnxcore50都是什么鬼

繼上次”vNext之旅&#xff08;1&#xff09;&#xff1a;從概念和基礎開始”之后再次學習vNext重新遇到了弄不懂的事情&#xff0c;花了一些時間學習&#xff0c;今天來分享一下&#xff0c;為后人節省些時間。起因 在用vNext造輪子——框架的時候引入“Microsoft.Dnx.Runtime…

C++中模板使用詳解

轉自&#xff1a;http://www.360doc.com/content/09/0403/17/799_3011262.shtml 1. 模板的概念。 我們已經學過重載(Overloading)&#xff0c;對重載函數而言,C的檢查機制能通過函數參數的不同及所屬類的不同。正確的調用重載函數。例如&#xff0c;為求兩個數的最大值&#xf…

騰訊2016春招安全崗筆試題解析

騰訊2016春招安全崗筆試題解析 昨天&#xff08;4月2日&#xff09;晚上7:00到9:00做了騰訊春招安全崗的筆試題。下面解析一下&#xff1a; 題目解析 1 在生成隨機數前用當前時間設置隨機數種子應該是安全的。如果程序用固定的數產生隨機數&#xff0c;其結果也是固定的。如果用…

網絡請求數據解析時,判斷數據是否為空

//判斷是否為空 (BOOL)IsStringEmptyOrNull:(NSString *)str { if (!str) { // null object return true; }else if (str nil){ return true; }else { if ([str isKindOfClass:[NSNull class]]) { return true; …

VS項目屬性的一些配置項的總結(持續增加。。。)

首先&#xff0c;解決方案和項目文件夾包含關系(c項目)&#xff1a; VS解決方案和各個項目文件夾以及解決方案和各個項目對應的配置文件包含關系&#xff1a;假設新建一個項目ssyy&#xff0c;解決方案起名fangan&#xff0c;注意解決方案包括項目&#xff0c;此時生成的最外層…

shell編程中date用法(轉)

原文地址:http://blog.sina.com.cn/s/blog_61c006ea0100mgxe.html 1、date --help %% 輸出%符號 a literal % %a 當前域的星期縮寫 locale’s abbreviated weekday name (Sun..Sat) %A 當前域的星期全寫 locale’s full weekday name, variable length (Sunday..Saturday) %b 當…