锘??xml version="1.0" encoding="utf-8" standalone="yes"?> 涓嶇鎬庝箞璇存繪槸楹葷儲浜嗕竴鐐廣傝鍘岀殑鏄疪enderMonkey鍦ㄦ垜鐨勭數鑴戜笂娌¤璧鋒潵錛屼笉鑳芥柟渚跨殑緙栬緫shader鐒跺悗杈撳嚭fx浜嗐傛槑澶╄繕鏄爺絀朵笅濡備綍杈撳嚭緙栬瘧鐨勯敊璇俊鎭傚ソ姝圭紪涓嶈繃瑕佽兘鍛婅瘔鎴戞槸鍝緙栦笉榪囨墠琛?#8230;… VS_OUTPUT VS( float4 Pos : POSITION ) struct PS_OUTPUT PS_OUTPUT PS( float4 Pos : SV_POSITION, technique10 R0
娌″紕鏄庣櫧鎬庝箞綺樺浘錛岄偅灝變笉綆′簡錛屽弽姝d竴涓牬涓夎褰篃娌′粈涔堝ソ鐪嬬殑……
闅忎究鏀逛簡鏀逛唬鐮侊紝鐢≧enderMonkey鏃跺啓鐨勪竴浜泇s鍜宲s鐨勪笢瑗胯繕璁板緱銆?br>鍙﹀Dx10鐨勭敤浜庤緭鍑虹殑涓浜汼emantics鐨勫悕瀛楁敼浜嗭細
Direct3D 10 Semantic
Direct3D 9 Equivalent Semantic
SV_Depth
DEPTH
SV_Position
POSITION
SV_Target
COLOR
鐜板湪鐨凷hader浠g爜錛氾紙灝遍殢渚挎悶浜嗕笅錛屾樉紺哄嚭涓涓殫綰㈣壊鐨勬笢瑗匡細錛?br>struct VS_OUTPUT
{
float4 Pos : SV_POSITION;
float4 Color: COLOR0;
};
{
VS_OUTPUT Output;
Output.Pos = Pos;
Output.Color = float4( 0.3f, Pos.y, Pos.x, 1.0f );
return Output;
}
{
float4 RGBColor : SV_Target; // Pixel color
};
float4 Color: COLOR0 )
{
PS_OUTPUT Output;
Output.RGBColor = Color;
return Output;
}
{
pass P0
{
SetVertexShader( CompileShader( vs_4_0, VS() ) );
SetGeometryShader( NULL );
SetPixelShader( CompileShader( ps_4_0, PS() ) );
}
}
涓昏鏄妸Tutorial2閲岀殑fx鎷垮嚭鏉ワ紝鎶婁袱涓緭鍑轟粠鍗曠函鐨刦loat4鍙樻垚浜嗕竴涓粨鏋勪綋錛岀劧鍚庣粰VS鐨勮緭鍑哄鍔犱簡涓涓狢olor錛屾渶鍚庡啀鎶婂潗鏍囩殑涓閮ㄥ垎褰撲綔棰滆壊杈撳嚭浜嗗嚭鍘匯?/p>
灝辨槸DXSDK閲岄偅涓摑钃濈殑紿楀彛錛屼笉榪囨垜涓轟簡鎼緩Frame錛岀粫浜嗗ソ澶氬集錛屽垰鍒氭墠緇堜簬鏄劇ず鍑烘潵銆?br>鐩墠瀹屾垚浜咷raphicsDevice綾葷殑鍒涘緩浜嗭紝鎴戞鍦ㄨ冭檻鎬庢牱璁捐閫氱敤鐨勭偣鍒楄〃銆佹潗璐ㄧ瓑絳夋帴鍙o紝寰楀浜哄挩璇笅OpenGL鐨勫叧浜庣偣鍒楄〃鐨勬帴鍙c傚鏋滃ぇ瀹墮兘鏄嚜瀹氫箟緇撴瀯浣?鍙傛暟閭e氨娌′粈涔堝ソ璇寸殑鑰侊紝鎶婄偣鍒楄〃鍋氭垚涓涓偣瀹瑰櫒閭d箞澶嶆潅浼間箮涔熸病鏈夊繀瑕併傚攭錛屽仛鍒板啀璇村惂錛?
鐩墠鐨勪富鍑芥暟浠g爜錛?br>
int _tmain(int argc, _TCHAR* argv[])
{
InitFramework();
CComPtr<IGraphicsLibrary> pGL;
if (FAILED(GetDefaultFrameworkLibrary(&pGL)))
{
wprintf(L"No default graphics library found.\n");
ATLASSERT(false);
return 1;
}
CComBSTR bsGLName;
if (SUCCEEDED(pGL->GetLibraryName(&bsGLName)))
{
wprintf(L"Default graphics library is: %s\n", (BSTR)bsGLName);
}
pGL->EnumAdapters();
CComPtr<IGraphicsDevice> pGraphicsDevice;
if (FAILED(pGL->CreateGraphicsDevice(FALSE, 640, 480, L"Only a test", &pGraphicsDevice)))
{
ATLASSERT(false);
return 1;
}
FrameworkSimpleMainLoop(pGraphicsDevice);
return 0;
}
鏈鍚庣殑FrameworkSimpleMainLoop灝辨槸榪戜技浼犺涓殑glutMainLoop鍟︼紝涓嶈繃涓轟簡閬垮厤鍏ㄥ眬鍙橀噺錛屾垜鎶妏GraphicsDevice緇欎紶榪涘幓浜?#8230;…
鐒跺悗鎯蟲兂璨屼技榪欓噷娌′粈涔堥伩鍏嶅叏灞鍙橀噺鐨勫繀瑕侊紙鎴栬呮暣涓被錛岀劧鍚庣敤闈欐佸彉閲忕畻浜嗭級銆傜幇鍦ㄧ殑璇濓紝濡傛灉鎯沖湪MainLoop鍐呮洿鎹raphicsDevice錛屽師鏉ョ殑Device鐨勫紩鐢ㄨ鏁頒篃閲婃斁涓嶆帀浜嗐?br>鐒跺悗瑙夊緱涓寮濮嬬殑娉ㄥ唽鍙敤搴撲箣綾葷殑嫻佺▼涔熻鏀癸紝鐩墠閭d釜鍏ㄥ眬map涔熶細鎶婃墍鏈夌殑DLL閮戒繚鐣欑潃錛屾病鏈夐噴鏀炬帀銆?br>鏈濂界殑鍔炴硶鏄紝鍏ㄥ眬map閲屽彧淇濈暀鍒涘緩鍑芥暟錛屽湪鑾峰彇Library銆備富紼嬪簭鍙互Enum姣忎釜鍙敤綾伙紙鎸夋帴鍙o級錛屼紶閫扜UID榪涘幓錛岃幏寰椾竴涓帴鍙o紝涔熷彲浠ラ夋嫨鍒涘緩榛樿綾伙紝鐒跺悗鑾峰緱涓涓帴鍙c傚湪InitFramework鐨勬椂鍊欙紝姣忎釜DLL鍙皾璇曟ц繛鎺ワ紝濡傛灉榪炴帴鎴愬姛錛屽彲浠ョ珛鍒婚噴鏀俱傜瓑鍒板搴旂殑綾昏鍒涘緩鐨勬椂鍊欏啀鍘婚噸鏂拌繛鎺ャ?br>鍙﹀鍦═oggleDevice鐨勬柟闈㈣繕娌′粈涔堝ソ鐨勬兂娉曘傛垨鑰呭共鑴嗙淮鎶や竴涓狣evice鍒楄〃錛熷垪琛ㄥ唴鐨勮Render銆傝繖涔熸槸闇瑕佹敼榪涚殑銆?/p>
#define CallModuleFunc(Module, ProcName, Args) (GetModuleFunc(Module, #ProcName, ProcName))?((GetModuleFunc(Module, #ProcName, ProcName)) Args) : E_FAIL
鎬濊礬鏄氳繃鍑芥暟鐨勫0鏄庢紨緇庡嚭鍑芥暟綾誨瀷錛岃繘琛屽己杞劧鍚庤皟鐢ㄣ?br>
澶辮觸鍘熷洜鏄敖綆℃病鏈夌洿鎺ヨ皟鐢╬Func錛屼絾pFunc渚濈劧浣滀負鍙傛暟琚紩鐢ㄤ簡錛屽洜涓烘槸鍔ㄦ侀摼鎺ョ殑DLL錛屾病鏈夊紩鐢ㄥ搴旂殑lib錛屾墍浠ラ摼鎺ユ椂鎻愮ず鎵句笉鍒扮鍙風殑閿欒淇℃伅銆?br>
鎯崇煡閬撴湁娌℃湁浠涔堝叾浠栫殑鍔炴硶鍙氳繃鍑芥暟澹版槑鑰屼笉閫氳繃寮曠敤鏉ヨ幏寰楃被鍨嬩互瀹炵幇瀵瑰姩鎬侀摼鎺ョ殑DLL涓殑鍑芥暟鐨勮皟鐢紵vs2005榪樹笉鏀寔typeof鍏抽敭瀛楋紝鏆傛椂娌℃湁鎯沖埌浠涔堝ソ鍔炴硶銆?
璋冪敤鏂逛唬鐮佸ぇ鑷村涓嬶細浠reateDXGIFactory錛圖irect10閲岀殑涓涓嚱鏁幫級 涓句緥錛?br>HRESULT ret = CallModuleFunc(m_hDXGIModule, CreateDXGIFactory, (__uuidof(IDXGIFactory), (void **)&pDXGIFactory) );
if (FAILED(ret))
{
ATLASSERT(0);
return E_FAIL;
}
鍚庤錛?br>鍦ㄤ紵澶х殑鍙涘彌鐨勬寚瀵間笅錛岀敤boost鎼炲畾浜嗚繖涓棶棰樸?br>涓涓猼est紼嬪簭濡備笅錛?br> BOOST_TYPEOF(Direct3DCreate9) *pDirect3DCreate9 = NULL;
HMODULE hdx = LoadLibrary(_T("d3d9.dll"));
pDirect3DCreate9 = reinterpret_cast<BOOST_TYPEOF(Direct3DCreate9) *>(GetProcAddress(hdx, "Direct3DCreate9"));
if (pDirect3DCreate9 == NULL)
{
ATLASSERT(0);
}
else
{
IDirect3D9 * pD3D = pDirect3DCreate9(D3D_SDK_VERSION);
if (pD3D == NULL)
{
ATLASSERT(0);
}
}
鎸夌収榪欎釜鎬濊礬宸茬粡鍙互鍐欏嚭閫氱敤鐨勫畯浜嗐?br>template <typename FuncType>
FuncType __forceinline GetModuleFunc(HMODULE hModule, LPCSTR lpProcName)
{
FuncType fun = reinterpret_cast<FuncType>(GetProcAddress(hModule, lpProcName));
return fun;
}
#define CallModuleFunc(Module, ProcName, Args) (GetModuleFunc<BOOST_TYPEOF(ProcName) *>(Module, #ProcName))?((GetModuleFunc<BOOST_TYPEOF(ProcName) *>(Module, #ProcName)) Args) : E_FAIL
鍙儨鐨勬槸boost::typeof鐨勪唬鐮佹垜瀹屽叏鐪嬩笉鎳?#8230;…瀛︿範C++鐨勮礬婕極鍏朵慨榪滃叜……
#include "stdafx.h"
#include "FWBase.h"
[
module (name="TestFramework")
];
int _tmain(int argc, _TCHAR* argv[])
{
InitFramework();
CComPtr<IGraphicsLibrary> pGL;
if (FAILED(GetDefaultFrameworkLibrary(&pGL)))
{
wprintf(L"No default graphics library found.");
ATLASSERT(0);
return 1;
}
CComBSTR bsGLName;
if (SUCCEEDED(pGL->GetLibraryName(&bsGLName)))
{
wprintf(L"Default graphics library is: %s", (BSTR)bsGLName);
}
return 0;
}
鎺ュ彛錛?/p>
[
object,
uuid("914F136A-FCC8-4e1b-9E5D-95797B6DE183")
]
__interface ILibrary : public IDispatch
{
[id(1), helpstring("Init the library. Return E_FAIL if failed.")]
HRESULT InitLibrary();
[id(2), helpstring("Retrieves the name of this library")]
HRESULT GetLibraryName(BSTR *pbsName);
};
[
object,
uuid("9E979A9A-A271-496f-B04E-7A9AE0BAE335")
]
__interface IGraphicsLibrary : public ILibrary
{
//鏆傛椂榪樹粈涔堜篃娌″啓
};
Framework鎺ュ彛錛?br>HRESULT InitFramework();
HRESULT RegisterFrameworkLibrary(REFIID idLibaryType, ILibrary *pLibrary);
HRESULT GetDefaultFrameworkLibrary(REFIID idLibraryType, ILibrary **ppLibrary);
template <typename Interface, typename ClassType>
HRESULT RegisterFrameworkLibrary();
template <typename LibraryType>
HRESULT GetDefaultFrameworkLibrary(LibraryType **ppLibrary);
榪愯鏁堟灉錛?br>On Vista:
Default graphics library is: Direct3D 10 Library
On XP:
No default graphics library found.
錛圖irect3D 9鎺ュ彛灝氭湭緙栧啓錛?br>