亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? dxutil.h

?? 《3D游戲編程》隨書光盤 12章: 設計陰影的多種技巧, 有詳細源代碼
?? H
字號:
//-----------------------------------------------------------------------------
// File: DXUtil.h
//
// Desc: Helper functions and typing shortcuts for DirectX programming.
//-----------------------------------------------------------------------------
#ifndef DXUTIL_H
#define DXUTIL_H


//-----------------------------------------------------------------------------
// Miscellaneous helper functions
//-----------------------------------------------------------------------------
#define SAFE_DELETE(p)       { if(p) { delete (p);     (p)=NULL; } }
#define SAFE_DELETE_ARRAY(p) { if(p) { delete[] (p);   (p)=NULL; } }
#define SAFE_RELEASE(p)      { if(p) { (p)->Release(); (p)=NULL; } }


#ifndef UNDER_CE
//-----------------------------------------------------------------------------
// Name: DXUtil_GetDXSDKMediaPath() and DXUtil_FindMediaFile() 
// Desc: Returns the DirectX SDK path, as stored in the system registry
//       during the SDK install.
//-----------------------------------------------------------------------------
HRESULT DXUtil_GetDXSDKMediaPathCch( TCHAR* strDest, int cchDest );
HRESULT DXUtil_GetDXSDKMediaPathCb( TCHAR* szDest, int cbDest );
HRESULT DXUtil_FindMediaFileCch( TCHAR* strDestPath, int cchDest, TCHAR* strFilename );
HRESULT DXUtil_FindMediaFileCb( TCHAR* szDestPath, int cbDest, TCHAR* strFilename );
#endif // !UNDER_CE


//-----------------------------------------------------------------------------
// Name: DXUtil_Read*RegKey() and DXUtil_Write*RegKey()
// Desc: Helper functions to read/write a string registry key 
//-----------------------------------------------------------------------------
HRESULT DXUtil_WriteStringRegKey( HKEY hKey, TCHAR* strRegName, TCHAR* strValue );
HRESULT DXUtil_WriteIntRegKey( HKEY hKey, TCHAR* strRegName, DWORD dwValue );
HRESULT DXUtil_WriteGuidRegKey( HKEY hKey, TCHAR* strRegName, GUID guidValue );
HRESULT DXUtil_WriteBoolRegKey( HKEY hKey, TCHAR* strRegName, BOOL bValue );

HRESULT DXUtil_ReadStringRegKeyCch( HKEY hKey, TCHAR* strRegName, TCHAR* strDest, DWORD cchDest, TCHAR* strDefault );
HRESULT DXUtil_ReadStringRegKeyCb( HKEY hKey, TCHAR* strRegName, TCHAR* strDest, DWORD cbDest, TCHAR* strDefault );
HRESULT DXUtil_ReadIntRegKey( HKEY hKey, TCHAR* strRegName, DWORD* pdwValue, DWORD dwDefault );
HRESULT DXUtil_ReadGuidRegKey( HKEY hKey, TCHAR* strRegName, GUID* pGuidValue, GUID& guidDefault );
HRESULT DXUtil_ReadBoolRegKey( HKEY hKey, TCHAR* strRegName, BOOL* pbValue, BOOL bDefault );


//-----------------------------------------------------------------------------
// Name: DXUtil_Timer()
// Desc: Performs timer opertations. Use the following commands:
//          TIMER_RESET           - to reset the timer
//          TIMER_START           - to start the timer
//          TIMER_STOP            - to stop (or pause) the timer
//          TIMER_ADVANCE         - to advance the timer by 0.1 seconds
//          TIMER_GETABSOLUTETIME - to get the absolute system time
//          TIMER_GETAPPTIME      - to get the current time
//          TIMER_GETELAPSEDTIME  - to get the time that elapsed between 
//                                  TIMER_GETELAPSEDTIME calls
//-----------------------------------------------------------------------------
enum TIMER_COMMAND { TIMER_RESET, TIMER_START, TIMER_STOP, TIMER_ADVANCE,
                     TIMER_GETABSOLUTETIME, TIMER_GETAPPTIME, TIMER_GETELAPSEDTIME };
FLOAT __stdcall DXUtil_Timer( TIMER_COMMAND command );


//-----------------------------------------------------------------------------
// UNICODE support for converting between CHAR, TCHAR, and WCHAR strings
//-----------------------------------------------------------------------------
HRESULT DXUtil_ConvertAnsiStringToWideCch( WCHAR* wstrDestination, const CHAR* strSource, int cchDestChar );
HRESULT DXUtil_ConvertWideStringToAnsiCch( CHAR* strDestination, const WCHAR* wstrSource, int cchDestChar );
HRESULT DXUtil_ConvertGenericStringToAnsiCch( CHAR* strDestination, const TCHAR* tstrSource, int cchDestChar );
HRESULT DXUtil_ConvertGenericStringToWideCch( WCHAR* wstrDestination, const TCHAR* tstrSource, int cchDestChar );
HRESULT DXUtil_ConvertAnsiStringToGenericCch( TCHAR* tstrDestination, const CHAR* strSource, int cchDestChar );
HRESULT DXUtil_ConvertWideStringToGenericCch( TCHAR* tstrDestination, const WCHAR* wstrSource, int cchDestChar );
HRESULT DXUtil_ConvertAnsiStringToWideCb( WCHAR* wstrDestination, const CHAR* strSource, int cbDestChar );
HRESULT DXUtil_ConvertWideStringToAnsiCb( CHAR* strDestination, const WCHAR* wstrSource, int cbDestChar );
HRESULT DXUtil_ConvertGenericStringToAnsiCb( CHAR* strDestination, const TCHAR* tstrSource, int cbDestChar );
HRESULT DXUtil_ConvertGenericStringToWideCb( WCHAR* wstrDestination, const TCHAR* tstrSource, int cbDestChar );
HRESULT DXUtil_ConvertAnsiStringToGenericCb( TCHAR* tstrDestination, const CHAR* strSource, int cbDestChar );
HRESULT DXUtil_ConvertWideStringToGenericCb( TCHAR* tstrDestination, const WCHAR* wstrSource, int cbDestChar );


//-----------------------------------------------------------------------------
// Readme functions
//-----------------------------------------------------------------------------
VOID DXUtil_LaunchReadme( HWND hWnd, TCHAR* strLoc = NULL );

//-----------------------------------------------------------------------------
// GUID to String converting 
//-----------------------------------------------------------------------------
HRESULT DXUtil_ConvertGUIDToStringCch( const GUID* pGuidSrc, TCHAR* strDest, int cchDestChar );
HRESULT DXUtil_ConvertGUIDToStringCb( const GUID* pGuidSrc, TCHAR* strDest, int cbDestChar );
HRESULT DXUtil_ConvertStringToGUID( const TCHAR* strIn, GUID* pGuidOut );


//-----------------------------------------------------------------------------
// Debug printing support
// See dxerr9.h for more debug printing support
//-----------------------------------------------------------------------------
VOID    DXUtil_Trace( TCHAR* strMsg, ... );

#if defined(DEBUG) | defined(_DEBUG)
    #define DXTRACE           DXUtil_Trace
#else
    #define DXTRACE           sizeof
#endif


//-----------------------------------------------------------------------------
// Name: ArrayListType
// Desc: Indicates how data should be stored in a CArrayList
//-----------------------------------------------------------------------------
enum ArrayListType
{
    AL_VALUE,       // entry data is copied into the list
    AL_REFERENCE,   // entry pointers are copied into the list
};


//-----------------------------------------------------------------------------
// Name: CArrayList
// Desc: A growable array
//-----------------------------------------------------------------------------
class CArrayList
{
protected:
    ArrayListType m_ArrayListType;
    void* m_pData;
    UINT m_BytesPerEntry;
    UINT m_NumEntries;
    UINT m_NumEntriesAllocated;

public:
    CArrayList( ArrayListType Type, UINT BytesPerEntry = 0 );
    ~CArrayList( void );
    HRESULT Add( void* pEntry );
    void Remove( UINT Entry );
    void* GetPtr( UINT Entry );
    UINT Count( void ) { return m_NumEntries; }
    bool Contains( void* pEntryData );
    void Clear( void ) { m_NumEntries = 0; }
};

//-----------------------------------------------------------------------------
// WinCE build support
//-----------------------------------------------------------------------------

#ifdef UNDER_CE

#define CheckDlgButton(hdialog, id, state) ::SendMessage(::GetDlgItem(hdialog, id), BM_SETCHECK, state, 0)
#define IsDlgButtonChecked(hdialog, id) ::SendMessage(::GetDlgItem(hdialog, id), BM_GETCHECK, 0L, 0L)
#define GETTIMESTAMP GetTickCount
#define _TWINCE(x) _T(x)

__inline int GetScrollPos(HWND hWnd, int nBar)
{
	SCROLLINFO si;
	memset(&si, 0, sizeof(si));
	si.cbSize = sizeof(si);
	si.fMask = SIF_POS;
	if (!GetScrollInfo(hWnd, nBar, &si))
	{
		return 0;
	}
	else
	{
		return si.nPos;
	}
}

#else // !UNDER_CE

#define GETTIMESTAMP timeGetTime
#define _TWINCE(x) x

#endif // UNDER_CE


#endif // DXUTIL_H

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产日韩三级在线| 欧美撒尿777hd撒尿| 粉嫩13p一区二区三区| 欧美嫩在线观看| 婷婷成人综合网| 欧美精选在线播放| 裸体一区二区三区| 成人美女在线观看| 亚洲自拍欧美精品| 日韩一区二区免费电影| 国产米奇在线777精品观看| 国产精品久久久久国产精品日日| 91伊人久久大香线蕉| 日韩主播视频在线| 国产欧美日韩在线观看| 久久中文字幕电影| 色菇凉天天综合网| 久久99精品久久久| 亚洲一区二区黄色| 午夜亚洲国产au精品一区二区| 亚洲你懂的在线视频| 欧美成人免费网站| 欧亚一区二区三区| eeuss鲁片一区二区三区| 石原莉奈一区二区三区在线观看 | 一区2区3区在线看| 欧美岛国在线观看| 欧美性感一区二区三区| 东方aⅴ免费观看久久av| bt欧美亚洲午夜电影天堂| 色婷婷综合久久久久中文| 精品一区二区三区久久久| 国产乱码精品一区二区三区av| 午夜精品一区二区三区电影天堂 | 欧美自拍偷拍午夜视频| 欧美久久久久久久久| 精品女同一区二区| 中文字幕一区二区三区蜜月| 精品久久五月天| 中文字幕中文字幕中文字幕亚洲无线| 亚洲欧美激情一区二区| 日韩电影免费一区| 午夜精品久久久久久不卡8050| 久久国内精品自在自线400部| 波多野结衣一区二区三区| 日本韩国欧美三级| 久久精品夜色噜噜亚洲a∨| 91精品国产日韩91久久久久久| 在线视频国内自拍亚洲视频| 日韩精品一区二区三区四区| 中文字幕一区av| 美腿丝袜亚洲三区| 色偷偷久久一区二区三区| 日韩一级在线观看| 亚洲日本韩国一区| 亚洲精品视频免费看| 亚洲免费观看高清完整版在线 | 91网站在线播放| 欧美第一区第二区| 亚洲国产一区在线观看| 亚洲影视在线播放| 成人免费观看av| 久久久综合网站| 中文字幕亚洲区| 国产精品亚洲人在线观看| 欧美撒尿777hd撒尿| 亚洲视频在线一区二区| 国产精品一区专区| 欧美成人精品1314www| 香蕉久久一区二区不卡无毒影院 | 色婷婷av一区二区三区大白胸| 久久久国产精品午夜一区ai换脸| 五月婷婷另类国产| 在线观看国产91| 亚洲欧美乱综合| 不卡的av网站| 欧美日韩一本到| 一区二区欧美精品| 色屁屁一区二区| 国产精品久久久久天堂| 成人小视频免费在线观看| 久久精品亚洲精品国产欧美kt∨ | 亚洲国产精品久久久久婷婷884 | 国产日本一区二区| 蜜臀a∨国产成人精品| 欧美电影在哪看比较好| 亚欧色一区w666天堂| 欧美日韩久久一区| 亚洲高清久久久| 91精品国产美女浴室洗澡无遮挡| 亚洲高清免费在线| 欧美一区二区三级| 韩国av一区二区| 91免费观看国产| 亚洲欧美偷拍卡通变态| 在线观看一区日韩| 天堂一区二区在线免费观看| 欧美日韩一区二区三区视频| 亚洲国产精品麻豆| 欧美一级午夜免费电影| 久久国产夜色精品鲁鲁99| 久久久久国产精品麻豆ai换脸 | 国产美女在线精品| 亚洲欧洲国产专区| 欧美亚洲另类激情小说| 午夜欧美视频在线观看| 欧美一区二区播放| 国产专区欧美精品| 亚洲女厕所小便bbb| 在线91免费看| 亚洲黄色尤物视频| 欧美一级在线观看| 成人午夜电影小说| 五月天精品一区二区三区| 日韩欧美久久一区| aaa欧美色吧激情视频| 亚洲高清免费观看高清完整版在线观看| 欧美一区二区三区在线电影| 国产麻豆欧美日韩一区| 亚洲精品成人精品456| 91精品国产手机| 欧美私模裸体表演在线观看| 精品一二三四区| 亚洲精品国产a| 亚洲精品一区二区三区精华液| 亚洲大尺度视频在线观看| 精品久久一区二区三区| 99视频一区二区三区| 青青草国产成人av片免费| 欧美日韩国产在线播放网站| 国产精品一区免费视频| 婷婷综合久久一区二区三区| 国产欧美一区二区精品婷婷| 欧美日韩国产一级片| 成人白浆超碰人人人人| 美女尤物国产一区| 亚洲美女视频在线观看| 久久久亚洲午夜电影| 678五月天丁香亚洲综合网| 福利一区二区在线| 久久99国产精品免费| 亚洲一区二区五区| 国产精品久久久99| 久久综合色综合88| 欧美一区二区福利视频| 欧美色网站导航| 99精品国产一区二区三区不卡| 亚洲人成网站在线| 久久久99免费| 久久综合九色综合欧美98 | 亚洲国产精品一区二区久久 | 综合欧美亚洲日本| 国产欧美一区二区精品仙草咪| 日韩欧美久久一区| 欧美哺乳videos| 91精品欧美一区二区三区综合在| 欧美中文一区二区三区| 日本精品一区二区三区四区的功能| 国产精品夜夜嗨| 国产精品一级片在线观看| 黑人巨大精品欧美一区| 精品一区二区三区久久| 久久精品国产精品青草| 日本va欧美va精品| 麻豆精品一二三| 狠狠色丁香婷婷综合| 国产在线一区二区| 国产成人精品免费| 亚洲欧美日韩国产综合在线| 亚洲精品高清在线| 性做久久久久久久免费看| 亚州成人在线电影| 久久97超碰色| 国产精品77777| 成年人午夜久久久| 色菇凉天天综合网| 91精品在线观看入口| 精品免费国产二区三区| 久久亚洲捆绑美女| 国产精品白丝在线| 看片网站欧美日韩| 黄色小说综合网站| 处破女av一区二区| 91免费在线看| 欧美一卡二卡三卡| 日本一区二区视频在线观看| 国产精品嫩草影院av蜜臀| 欧美一区二区三区精品| 久久久蜜桃精品| 国产精品高潮久久久久无| 一区二区高清免费观看影视大全| 亚洲成精国产精品女| 麻豆精品一二三| 一本一本大道香蕉久在线精品| 精品视频一区二区三区免费| 精品久久久久久综合日本欧美| 国产精品九色蝌蚪自拍| 亚洲国产日韩在线一区模特| 激情文学综合丁香| 一本色道a无线码一区v|