青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

天行健 君子當(dāng)自強(qiáng)而不息

初始化Direct3D(3)

1.4 初始化Direct3D

下面幾點(diǎn)說(shuō)明怎樣初始化Direct3D。根據(jù)下邊的步驟你能初始化Direct3D:

1. 獲得一個(gè)IDirect3D9接口指針。這個(gè)接口用于獲得物理設(shè)備的信息和創(chuàng)建一個(gè)IDirect3DDevice9接口,它是一個(gè)代表我們顯示3D圖形的物理設(shè)備的C++對(duì)象。

2. 檢查設(shè)備能力(D3DCAPS9),搞清楚主顯卡是否支持硬件頂點(diǎn)處理。我們需要知道假如它能支持,我們就能創(chuàng)建IDirect3DDevice9接口。

3. 初始化一個(gè)D3DPRESENT_PARAMETERS結(jié)構(gòu)實(shí)例,這個(gè)結(jié)構(gòu)包含了許多數(shù)據(jù)成員允許我們指定將要?jiǎng)?chuàng)建的IDirect3DDevice9接口的特性。

4. 創(chuàng)建一個(gè)基于已經(jīng)初始化好的D3DPRESENT_PARAMETERS結(jié)構(gòu)的IDirect3DDevice9對(duì)象。它是一個(gè)代表我們顯示3D圖形的物理設(shè)備的C++對(duì)象。

請(qǐng)注意,我們使用主顯示設(shè)備繪制3D圖形,如果你的機(jī)子只有一塊顯卡,那它就是主顯示設(shè)備。如果你有多個(gè)顯卡,那么你當(dāng)前使用的顯卡將會(huì)成為主顯示設(shè)備(如:用來(lái)顯示W(wǎng)indows桌面的顯卡)。

1.4.1獲得IDirect3D9接口

Direct3D的初始化是從獲得一個(gè)IDirect3D9接口指針開(kāi)始的。使用一個(gè)專門的Direct3D函數(shù)來(lái)完成這個(gè)工作是非常容易的,代碼如下:

IDirect3D9* _d3d9;

_d3d9 = Direct3DCreate9(D3D_SDK_VERSION);

Direct3DCreate9的唯一一個(gè)參數(shù)總是D3D_SDK_VERSION,這可以保證應(yīng)用程序通過(guò)正確的頭文件被生成。如果函數(shù)調(diào)用失敗,那么它將返回一個(gè)空指針。

IDirect3D9對(duì)象通常有兩個(gè)用途:設(shè)備列舉和創(chuàng)建IDirect3DDevice9對(duì)象。設(shè)備列舉即為查明系統(tǒng)中顯示設(shè)備的技術(shù)特性,顯示模式、格式,以及其它每一種顯卡各自支持的特性。創(chuàng)建代表物理設(shè)備的IDirect3DDevice9對(duì)象,我們需要利用這個(gè)物理設(shè)備的顯示模式結(jié)構(gòu)和格式來(lái)創(chuàng)建它。為了找到一個(gè)工作配置,我們必須使用IDirect3D9的列舉方法。

然而,設(shè)備列舉實(shí)在太慢了,為了使Direct3D運(yùn)行得盡可能快,我們通常不使用這個(gè)測(cè)試,除了下一節(jié)所談到的一項(xiàng)測(cè)試。為了安全跳過(guò)它,我們可以選擇總是被所有顯卡都支持的“安全”配置。

1.4.2 檢測(cè)硬件頂點(diǎn)處理

當(dāng)我們創(chuàng)建一個(gè)IDirect3DDevice9對(duì)象來(lái)表示主顯示設(shè)備時(shí),必須要設(shè)定其頂點(diǎn)處理的類型。如果可以的話,當(dāng)然要選用硬件頂點(diǎn)處理,但是由于并非所有顯卡都支持硬件頂點(diǎn)處理,因此我們必須首先檢查顯卡是否支持。

首先我們要根據(jù)主顯示設(shè)備的技術(shù)特性來(lái)初始化D3DCAPS9實(shí)例。可以使用如下方法:

HRESULT IDirect3D9::GetDeviceCaps(

       UINT Adapter,

       D3DDEVTYPE DeviceType,

       D3DCAPS9 *pCaps

);

Adapter——指定要獲得哪個(gè)顯示適配器的特性

DeviceType——指定設(shè)備類型(硬件設(shè)備(D3DDEVTYPE_HAL),軟件設(shè)備(D3DDEVTYPE_REF))

PCaps——返回一個(gè)已初始化的D3DCAPS9結(jié)構(gòu)

 

然后,我們就可以象1.3.8部分那樣檢測(cè)顯卡的能力了。下面就是代碼片段:

// Fill D3DCAPS9 structure with the capabilities of the primary display adapter.

D3DCAPS9 caps;

d3d9
->GetDeviceCaps(
      D3DADAPTER_DEFAULT, 
// Denotes primary display adapter.
      deviceType, // Specifies the device type, usually D3DDEVTYPE HAL.
      &caps);     // Return filled D3DCAPS9 structure that contains
                  
// the capabilities of the primary display adapter.

// Can we use hardware vertex processing?

int vp = 0;

if( caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT )
{
      
// yes, save in 'vp' the fact that hardware vertex processing is supported.
      vp = D3DCREATE HARDWARE VERTEXPROCESSING;
}
else
{
      
// no, save in 'vp' the fact that we must use software vertex processing.
      vp = D3DCREATE_SOFTWARE_VERTEXPROCESSING;
}

 

 

觀察代碼,我們使用變量vp來(lái)存儲(chǔ)頂點(diǎn)處理類型。這是因?yàn)樵谏院髣?chuàng)建IDirect3DDevice9對(duì)象時(shí)要求指定其頂點(diǎn)處理的類型。

注意:標(biāo)識(shí)符D3DCREATE_HARDWARE_VERTEXPROCESSING和D3DCREATE_SOFTWARE_VERTEXPROCESSING是預(yù)定義的值,它們分別代表硬件頂點(diǎn)處理和軟件頂點(diǎn)處理。

技巧:若我們開(kāi)發(fā)有一些新的,高級(jí)特性的程序,在使用前我們總是先檢查硬件是否支持這些特性。

注意:如果一個(gè)應(yīng)用程序在你的機(jī)子上不能運(yùn)行,說(shuō)明它用到的一些特性可能你的顯卡并不支持,可以試試把設(shè)備類型換成REF。

1.4.3 填充D3DPRESENT_PARAMETERS結(jié)構(gòu)

初始化過(guò)程的下一步是填充一個(gè)D3DPRESENT_PARAMETERS結(jié)構(gòu)的實(shí)例。這個(gè)結(jié)構(gòu)用于設(shè)定我們將要?jiǎng)?chuàng)建的IDirect3DDevice9對(duì)象的一些特性,它的定義如下:

typedef struct _D3DPRESENT_PARAMETERS_ {

       UINT BackBufferWidth;

       UINT BackBufferHeight;

       D3DFORMAT BackBufferFormat;

       UINT BackBufferCount;

       D3DMULTISAMPLE_TYPE MultiSampleType;

       DWORD MultiSampleQuality;

       D3DSWAPEFFECT SwapEffect;

       HWND hDeviceWindow;

       BOOL Windowed;

       BOOL EnableAutoDepthStencil;

       D3DFORMAT AutoDepthStencilFormat;

       DWORD Flags;

       UINT FullScreen_RefreshRateInHz;

       UINT PresentationInterval;

} D3DPRESENT_PARAMETERS;

下面介紹其比較重要的數(shù)據(jù)成員,至于更詳細(xì)的信息,請(qǐng)查閱SDK:

BackBufferWidth——后備緩沖表面的寬度(以像素為單位)

BackBufferHeight——后備緩沖表面的高度(以像素為單位)

BackBufferFormat——后備緩沖表面的像素格式(如:32位像素格式為D3DFMT——A8R8G8B8)

BackBufferCount——后備緩沖表面的數(shù)量,通常設(shè)為“1”,即只有一個(gè)后備表面

MultiSampleType——全屏抗鋸齒的類型,詳情請(qǐng)看SDK

MultiSampleQuality——全屏抗鋸齒的質(zhì)量等級(jí),詳情看SDK

SwapEffect——指定表面在交換鏈中是如何被交換的,取D3DSWAPEFFECT枚舉類型中的一個(gè)成員。其中D3DSWAPEFFECT_DISCARD是最有效的

hDeviceWindow——與設(shè)備相關(guān)的窗口句柄,你想在哪個(gè)窗口繪制就寫那個(gè)窗口的句柄

Windowed——BOOL型,設(shè)為true則為窗口模式,false則為全屏模式

EnableAutoDepthStencil——設(shè)為true,D3D將自動(dòng)創(chuàng)建深度/模版緩沖

AutoDepthStencilFormat——深度/模版緩沖的格式

Flags——一些附加特性,設(shè)為0或D3DPRESENTFLAG類型的一個(gè)成員。下列兩個(gè)最常用的標(biāo)志

全部的標(biāo)志請(qǐng)查閱SDK:

D3DPRESENTFLAG_LOCKABLE_BACKBUFFER——設(shè)定后備表面能夠被鎖定,這會(huì)降低應(yīng)用程序的性能

D3DPRESENTFLAG_DISCARD_DEPTHSTENCIL——深度/模版緩沖在調(diào)用IDirect3DDevice9::present方法后將被刪除,這有利于提升程序性能

FullScreen_RefreshRateInHz——刷新率,設(shè)定D3DPRESENT_RATE_DEFAULT使用默認(rèn)刷新率

PresentationInterval——屬于D3DPRESENT成員,又有兩個(gè)常用標(biāo)志,其余請(qǐng)查SDK:

         D3DPRESENT_INTERVAL_IMMEDIATE——立即交換

         D3DPRESENT_INTERVAL_DEFAULT——D3D選擇交換速度,通常等于刷新率

填充示例如下:

D3DPRESENT_PARAMETERS d3dpp;

d3dpp.BackBufferWidth = 800;

d3dpp.BackBufferHeight = 600;

d3dpp.BackBufferFormat = D3DFMT_A8R8G8B8; //像素格式

d3dpp.BackBufferCount = 1;

d3dpp.MultiSampleType = D3DMULTISAMPLE_NONE;

d3dpp.MultiSampleQuality = 0;

d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;

d3dpp.hDeviceWindow = hwnd;

d3dpp.Windowed = false; // fullscreen

d3dpp.EnableAutoDepthStencil = true;

d3dpp.AutoDepthStencilFormat = D3DFMT_D24S8; // depth format

d3dpp.Flags = 0;

d3dpp.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT;

d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;

1.4.4 創(chuàng)建IDirect3DDevice9對(duì)象

在填充完了D3DPRESENT_PARAMETERS結(jié)構(gòu)后,我們就可以用下面的方法創(chuàng)建一個(gè)IDirect3DDevice9對(duì)象了:

HRESULT IDirect3D9::CreateDevice(

       UINT Adapter,

       D3DDEVTYPE DeviceType,

       HWND hFocusWindow,

       DWORD BehaviorFlags,

       D3DPRESENT_PARAMETERS *pPresentationParameters,

       IDirect3DDevice9** ppReturnedDeviceInterface

);

Adapter——指定對(duì)象要表示的物理顯示設(shè)備

DeviceType——設(shè)備類型,前面說(shuō)過(guò)

hFocusWindow——同我們?cè)谇懊鎑3dpp.hDeviceWindow的相同

BehaviorFlags——設(shè)定為D3DCREATE_SOFTWARE_VERTEXPROCESSING或者D3DCREATE_HARDWARE_VERTEXPROCESSING

pPresentationParameters——指定一個(gè)已經(jīng)初始化好的D3DPRESENT_PARAMETERS實(shí)例

ppReturnedDeviceInterface——返回創(chuàng)建的設(shè)備

例子:

IDirect3DDevice9* device = 0;

hr 
= d3d9->CreateDevice(
       D3DADAPTER_DEFAULT, 
// primary adapter
       D3DDEVTYPE_HAL, 
// device type
       hwnd, 
// window associated with device
       D3DCREATE_HARDWARE_VERTEXPROCESSING, 
// vertex processing type
       
&d3dpp, // present parameters
       
&device); // returned created device

if( FAILED(hr) )
{
       ::MessageBox(
0"CreateDevice() - FAILED"00);
       
return 0;
}

 

posted on 2008-03-13 11:55 lovedday 閱讀(1542) 評(píng)論(0)  編輯 收藏 引用


只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


公告

導(dǎo)航

統(tǒng)計(jì)

常用鏈接

隨筆分類(178)

3D游戲編程相關(guān)鏈接

搜索

最新評(píng)論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国语自产精品视频在线看一大j8 | 久久电影一区| 99综合电影在线视频| 最新亚洲一区| 亚洲三级电影在线观看 | 欧美一区二区三区另类| 久久国产精品免费一区| 久久久久9999亚洲精品| 欧美freesex交免费视频| 亚洲国产日韩综合一区| 亚洲网站啪啪| 免费在线欧美视频| 欧美视频在线一区二区三区| 国产情侣一区| 亚洲成人在线免费| 亚洲伦伦在线| 性亚洲最疯狂xxxx高清| 久久综合婷婷| aa国产精品| 久久久久久亚洲精品不卡4k岛国| 女主播福利一区| 国产精品成人一区| 揄拍成人国产精品视频| 中文日韩在线| 久久九九国产| 亚洲第一黄色网| 亚洲一区二区三区乱码aⅴ蜜桃女| 午夜宅男欧美| 欧美精品一区二区精品网 | 亚洲国产精品精华液2区45| 亚洲神马久久| 免费不卡在线视频| 国产亚洲制服色| 亚洲午夜三级在线| 欧美激情性爽国产精品17p| 亚洲制服av| 欧美激情中文字幕一区二区| 国内精品久久久久久影视8| 亚洲午夜视频在线| 亚洲国产欧美在线| 久久久国产一区二区三区| 国产精品www994| 日韩亚洲欧美在线观看| 免费试看一区| 久久久精品午夜少妇| 国产亚洲欧美日韩精品| 欧美亚洲视频在线观看| aⅴ色国产欧美| 欧美电影免费观看高清| 在线观看国产日韩| 久久久久久久久岛国免费| 亚洲欧美国产精品专区久久| 欧美日韩免费观看中文| 亚洲片国产一区一级在线观看| 美女精品一区| 久久色中文字幕| 午夜免费在线观看精品视频| 一本一本久久| 亚洲国产欧美日韩| 美女图片一区二区| 在线视频国内自拍亚洲视频| 久久久久久自在自线| 欧美在线播放一区二区| 狠狠狠色丁香婷婷综合激情| 久久中文在线| 久久夜色精品国产噜噜av| 亚洲第一福利社区| 亚洲国产精品久久久久秋霞蜜臀| 免费观看一级特黄欧美大片| 亚洲精品久久久久| 亚洲人成人一区二区在线观看 | 久久全球大尺度高清视频| 狠狠色综合播放一区二区| 久久躁日日躁aaaaxxxx| 欧美freesex8一10精品| 在线一区观看| 亚洲欧美综合另类中字| 狠狠干综合网| 91久久国产精品91久久性色| 欧美大学生性色视频| 亚洲国产日韩一区二区| 欧美日产在线观看| 亚洲免费视频成人| 欧美中文字幕不卡| 亚洲精品久久嫩草网站秘色| 一本久久综合亚洲鲁鲁| 国产亚洲精品bv在线观看| 欧美大片专区| 国产精品久久毛片a| 久久综合九色欧美综合狠狠| 蜜臀91精品一区二区三区| 亚洲一区二区三区欧美| 久久久91精品国产一区二区精品| 亚洲免费激情| 久久成人免费视频| 亚洲少妇自拍| 久久国产精品第一页| 亚洲精品一区在线| 欧美亚洲在线视频| 日韩视频免费观看| 欧美亚洲系列| 亚洲天堂网在线观看| 久久婷婷亚洲| 久久精品国产亚洲a| 欧美日韩国产在线播放| 老司机午夜精品视频在线观看| 欧美日韩网站| 亚洲第一中文字幕| 国产一区二区三区四区hd| 亚洲美女视频网| 亚洲国产日韩精品| 欧美在线日韩在线| 午夜免费日韩视频| 欧美日韩国产三区| 欧美激情免费观看| 国产综合色产| 日韩午夜高潮| 狠狠色2019综合网| 亚洲精品一区二区三区婷婷月| 国产精品美女999| 欧美成人综合一区| 国产精品自拍小视频| 欧美国产日韩一区二区| 欧美伦理一区二区| 久久国产综合精品| 欧美久久一区| 免费观看日韩av| 欧美偷拍一区二区| 欧美大片在线观看一区| 国产精品国产亚洲精品看不卡15| 久久女同互慰一区二区三区| 欧美日韩在线观看视频| 美日韩精品视频| 国产精品亚洲欧美| 亚洲精品激情| 最近中文字幕日韩精品| 欧美影院一区| 亚洲永久在线| 欧美精品一区在线播放| 亚洲国产成人av在线| 亚洲国产一区二区三区高清| 老司机aⅴ在线精品导航| 欧美成人一区二区三区在线观看| 在线观看一区欧美| 牛夜精品久久久久久久99黑人| 亚洲美女在线国产| 国产精品一区二区久久| 欧美中文字幕精品| 亚洲欧美福利一区二区| 久久久精品国产一区二区三区| 欧美日韩视频| 亚洲激情视频| 欧美国产精品劲爆| 欧美怡红院视频| 国产日本欧美一区二区| 亚洲网站在线看| 日韩视频二区| 欧美午夜激情视频| 欧美一区深夜视频| 久久久精品日韩| 一区视频在线| 亚洲黄色三级| 欧美精品在线一区二区三区| 亚洲国产精品一区制服丝袜| 久热国产精品| 欧美日韩亚洲一区三区| 午夜精品久久久久久久久久久| 亚洲一级片在线观看| 狠狠久久亚洲欧美专区| 欧美激情精品久久久久| 欧美日韩亚洲国产一区| 欧美一区二区三区免费观看| 久久精品国产99国产精品| 亚洲人在线视频| 亚洲欧美在线x视频| 亚洲毛片视频| 久久久噜噜噜久久中文字免| 野花国产精品入口| 久久久久久有精品国产| 亚洲欧美中文字幕| 欧美r片在线| 嫩草成人www欧美| 国产视频精品网| 亚洲亚洲精品三区日韩精品在线视频 | 亚洲欧美一区二区三区极速播放| 欲香欲色天天天综合和网| 一区二区不卡在线视频 午夜欧美不卡在| 国产主播在线一区| 久久国产精品久久w女人spa| 亚洲一级二级| 欧美偷拍另类| 一区二区三区国产精品| 亚洲欧美成人网| 国产日韩欧美自拍| 一本色道久久88精品综合| 激情欧美丁香| 蜜臀av性久久久久蜜臀aⅴ| 免费亚洲网站| 日韩视频在线观看免费| 国产精品vip|