多层纹理混合

None.gif // =============================================================================
None.gif
//  Desc: 主程序源文件
None.gif
// =============================================================================
None.gif
#include  " dxstdafx.h "
None.gif#include 
" resource.h "
None.gif
None.gif
None.gif
// -----------------------------------------------------------------------------
None.gif
//  全局变量
None.gif
// -----------------------------------------------------------------------------
None.gif
ID3DXFont *                  g_pFont  =  NULL;           // ID3DXFont字体对象
None.gif
ID3DXSprite *                g_pTextSprite  =  NULL;     // ID3DXSprite文本精灵对象
None.gif
bool                        g_bShowHelp  =   true ;       // 标识是否显示简单说明文本
None.gif

None.gifCDXUTDialogResourceManager g_DialogResourceManager; 
// 对话框资源管理器
None.gif
CD3DSettingsDlg            g_SettingsDlg;            // Direct3D设备设置对话框
None.gif
CDXUTDialog                g_HUD;                    //
None.gif
CDXUTDialog                g_SampleUI;               //
None.gif

None.gifLPDIRECT3DVERTEXBUFFER9    g_pVB       
=  NULL;       // 顶点缓冲区
None.gif
LPDIRECT3DTEXTURE9         g_pTexture1  =  NULL;       // 第一层纹理
None.gif
LPDIRECT3DTEXTURE9         g_pTexture2  =  NULL;       // 第二层纹理
None.gif
None.gif
None.gif
//  定义顶点结构和灵活顶点格式
None.gif
struct  CUSTOMVERTEX
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    FLOAT x, y, z;        
// 未经过坐标转换的顶点坐标
InBlock.gif
    DWORD color;       // 顶点漫反射颜色值
InBlock.gif
    FLOAT u,v ;           // 顶点纹理坐标
InBlock.gif
    FLOAT u1,v1 ;       // 顶点纹理坐标
InBlock.gif

ExpandedBlockEnd.gif}
;
None.gif
#define  D3DFVF_CUSTOMVERTEX  (D3DFVF_XYZ| D3DFVF_DIFFUSE| D3DFVF_TEX2)
None.gif
None.gif
None.gif
// -----------------------------------------------------------------------------
None.gif
//  控件ID
None.gif
// -----------------------------------------------------------------------------
None.gif
#define  IDC_TOGGLEFULLSCREEN      1
None.gif
#define  IDC_TOGGLEREF             2
None.gif
#define  IDC_CHANGEDEVICE          3
None.gif
None.gif
None.gif
// -----------------------------------------------------------------------------
None.gif
//  Desc: 函数声明
None.gif
// ------------------------------------------------------------------------------
None.gif
bool     CALLBACK IsDeviceAcceptable( D3DCAPS9 *  pCaps, D3DFORMAT AdapterFormat, D3DFORMAT BackBufferFormat,  bool  bWindowed,  void *  pUserContext );
None.gif
bool     CALLBACK ModifyDeviceSettings( DXUTDeviceSettings *  pDeviceSettings,  const  D3DCAPS9 *  pCaps,  void *  pUserContext );
None.gifHRESULT CALLBACK OnCreateDevice( IDirect3DDevice9
*  pd3dDevice,  const  D3DSURFACE_DESC *  pBackBufferSurfaceDesc,  void *  pUserContext );
None.gifHRESULT CALLBACK OnResetDevice( IDirect3DDevice9
*  pd3dDevice,  const  D3DSURFACE_DESC *  pBackBufferSurfaceDesc,  void *  pUserContext );
None.gif
void     CALLBACK OnFrameMove( IDirect3DDevice9 *  pd3dDevice,  double  fTime,  float  fElapsedTime,  void *  pUserContext );
None.gif
void     CALLBACK OnFrameRender( IDirect3DDevice9 *  pd3dDevice,  double  fTime,  float  fElapsedTime,  void *  pUserContext );
None.gifLRESULT CALLBACK MsgProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, 
bool *  pbNoFurtherProcessing,  void *  pUserContext );
None.gif
void     CALLBACK KeyboardProc( UINT nChar,  bool  bKeyDown,  bool  bAltDown,  void *  pUserContext );
None.gif
void     CALLBACK OnGUIEvent( UINT nEvent,  int  nControlID, CDXUTControl *  pControl,  void *  pUserContext );
None.gif
void     CALLBACK OnLostDevice(  void *  pUserContext );
None.gif
void     CALLBACK OnDestroyDevice(  void *  pUserContext );
None.gif
None.gif
void     InitApp();
None.gif
void     RenderText();
None.gif
None.gif
None.gif
// -----------------------------------------------------------------------------
None.gif
//  Desc: 入口函数
None.gif
// -----------------------------------------------------------------------------
None.gif
INT WINAPI WinMain( HINSTANCE, HINSTANCE, LPSTR,  int  )
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    
//为Debug配置启用运行时内存检查功能
InBlock.gif
#if defined(DEBUG) | defined(_DEBUG)
InBlock.gif    _CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF 
| _CRTDBG_LEAK_CHECK_DF );
InBlock.gif
#endif
InBlock.gif
InBlock.gif    
//设置回调函数
InBlock.gif
    DXUTSetCallbackDeviceCreated( OnCreateDevice );
InBlock.gif    DXUTSetCallbackDeviceReset( OnResetDevice );
InBlock.gif    DXUTSetCallbackDeviceLost( OnLostDevice );
InBlock.gif    DXUTSetCallbackDeviceDestroyed( OnDestroyDevice );
InBlock.gif    DXUTSetCallbackMsgProc( MsgProc );
InBlock.gif    DXUTSetCallbackKeyboard( KeyboardProc );
InBlock.gif    DXUTSetCallbackFrameRender( OnFrameRender );
InBlock.gif    DXUTSetCallbackFrameMove( OnFrameMove );
InBlock.gif
InBlock.gif    
//应用程序相关的初始化
InBlock.gif
    InitApp();
InBlock.gif
InBlock.gif    
//初始化DXUT, 创建窗口, 创建Direct3D设备对象
InBlock.gif
    DXUTInit( truetruetrue );
InBlock.gif    DXUTSetCursorSettings( 
truetrue );
InBlock.gif    DXUTCreateWindow( L
"MultiTexture" );
InBlock.gif    DXUTCreateDevice( D3DADAPTER_DEFAULT, 
true640480
InBlock.gif        IsDeviceAcceptable, ModifyDeviceSettings );
InBlock.gif
InBlock.gif    
//进入消息循环和场景渲染
InBlock.gif
    DXUTMainLoop();
InBlock.gif
InBlock.gif    
//在此进行应用程序相关的清除工作
InBlock.gif

InBlock.gif    
return DXUTGetExitCode();
ExpandedBlockEnd.gif}

None.gif
None.gif
None.gif
// -----------------------------------------------------------------------------
None.gif
//  Desc: 应用程序相关初始化
None.gif
// -----------------------------------------------------------------------------
None.gif
void  InitApp()
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    
//初始化对话框
InBlock.gif
    g_SettingsDlg.Init( &g_DialogResourceManager );
InBlock.gif    g_HUD.Init( 
&g_DialogResourceManager );
InBlock.gif    g_SampleUI.Init( 
&g_DialogResourceManager );
InBlock.gif
InBlock.gif    
//为g_HUD对话框设置消息处理函数,添加控件
InBlock.gif
    g_HUD.SetCallback( OnGUIEvent ); int iY = 10
InBlock.gif    g_HUD.AddButton( IDC_TOGGLEFULLSCREEN, L
"Toggle full screen"35, iY, 12522 );
InBlock.gif    g_HUD.AddButton( IDC_TOGGLEREF, L
"Toggle REF (F3)"35, iY += 2412522 );
InBlock.gif    g_HUD.AddButton( IDC_CHANGEDEVICE, L
"Change device (F2)"35, iY += 2412522, VK_F2 );
ExpandedBlockEnd.gif}

None.gif
None.gif
None.gif
// -----------------------------------------------------------------------------
None.gif
//  Desc: 设备能力检查
None.gif
// -----------------------------------------------------------------------------
None.gif
bool  CALLBACK IsDeviceAcceptable( D3DCAPS9 *  pCaps, D3DFORMAT AdapterFormat, 
None.gif                                  D3DFORMAT BackBufferFormat, 
bool  bWindowed, 
None.gif                                  
void *  pUserContext )
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    
//检查后台缓冲区格式是否支持Alpha混合等操作(post pixel blending operations)
InBlock.gif
    IDirect3D9* pD3D = DXUTGetD3DObject(); 
InBlock.gif    
if( FAILED( pD3D->CheckDeviceFormat( pCaps->AdapterOrdinal, pCaps->DeviceType,
InBlock.gif                    AdapterFormat, D3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING, 
InBlock.gif                    D3DRTYPE_TEXTURE, BackBufferFormat ) ) )
InBlock.gif        
return false;
InBlock.gif
InBlock.gif    
//检查当前渲染设备是否支持多层纹理混合
InBlock.gif
    if( pCaps->MaxTextureBlendStages <= 1)
InBlock.gif        
return false;
InBlock.gif
InBlock.gif    
return true;
ExpandedBlockEnd.gif}

None.gif
None.gif
None.gif
// -----------------------------------------------------------------------------
None.gif
//  Desc: 修改Direct3D渲染设备设置
None.gif
// -----------------------------------------------------------------------------
None.gif
bool  CALLBACK ModifyDeviceSettings( DXUTDeviceSettings *  pDeviceSettings, 
None.gif                                    
const  D3DCAPS9 *  pCaps,  void *  pUserContext )
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    
//如果不支持硬件顶点处理则使用软件顶点处理
InBlock.gif
    if( (pCaps->DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT) == 0)
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        pDeviceSettings
->BehaviorFlags = D3DCREATE_SOFTWARE_VERTEXPROCESSING;
ExpandedSubBlockEnd.gif    }

InBlock.gif
InBlock.gif    
//如果使用参考设备,则弹出警告对话框
InBlock.gif
    static bool s_bFirstTime = true;
InBlock.gif    
if( s_bFirstTime )
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        s_bFirstTime 
= false;
InBlock.gif        
if( pDeviceSettings->DeviceType == D3DDEVTYPE_REF )
InBlock.gif            DXUTDisplaySwitchingToREFWarning();
ExpandedSubBlockEnd.gif    }

InBlock.gif
InBlock.gif    
return true;
ExpandedBlockEnd.gif}

None.gif
None.gif
None.gif
// -----------------------------------------------------------------------------
None.gif
//  Desc: 在此创建管理内存资源对象
None.gif
// -----------------------------------------------------------------------------
None.gif
HRESULT CALLBACK OnCreateDevice( IDirect3DDevice9 *  pd3dDevice, 
None.gif                                
const  D3DSURFACE_DESC *  pBackBufferSurfaceDesc, 
None.gif                                
void *  pUserContext )
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    HRESULT hr;
InBlock.gif
InBlock.gif    V_RETURN( g_DialogResourceManager.OnCreateDevice( pd3dDevice ) );
InBlock.gif    V_RETURN( g_SettingsDlg.OnCreateDevice( pd3dDevice ) );
InBlock.gif    
InBlock.gif    
//创建字体
InBlock.gif
    V_RETURN( D3DXCreateFont( pd3dDevice, 150, FW_BOLD, 1, FALSE, DEFAULT_CHARSET, 
InBlock.gif                         OUT_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH 
| FF_DONTCARE, 
InBlock.gif                         L
"Arial"&g_pFont ) );
InBlock.gif
InBlock.gif
InBlock.gif    
//创建第一层纹理对象
InBlock.gif
    V_RETURN( D3DXCreateTextureFromFile( pd3dDevice, L"Wall.bmp"&g_pTexture1 ) );
InBlock.gif   
InBlock.gif    
//创建第二层纹理对象
InBlock.gif
    V_RETURN( D3DXCreateTextureFromFile( pd3dDevice, L"light.jpg"&g_pTexture2 ) );
InBlock.gif    
InBlock.gif    
//设置顶点数据
InBlock.gif
    CUSTOMVERTEX g_Vertices[] =
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif-3.0f-3.0f,  0.0f,  0xffffffff0.0f1.0f0.0f1.0f},
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif-3.0f,  3.0f,  0.0f,  0xffffffff0.0f0.0f0.0f0.0f},
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{  3.0f-3.0f,  0.0f,  0xffffffff1.0f1.0f1.0f1.0f},
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{  3.0f,  3.0f,  0.0f,  0xffffffff1.0f0.0f1.0f0.0f}
ExpandedSubBlockEnd.gif    }
;
InBlock.gif
InBlock.gif    
//创建顶点缓冲区
InBlock.gif
    V_RETURN( pd3dDevice->CreateVertexBuffer( 4*sizeof(CUSTOMVERTEX),
InBlock.gif                                                 
0, D3DFVF_CUSTOMVERTEX,
InBlock.gif                                                 D3DPOOL_MANAGED, 
&g_pVB,NULL ) );
InBlock.gif    
//填充顶点数据
InBlock.gif
    VOID* pVertices;
InBlock.gif    V_RETURN( g_pVB
->Lock( 0sizeof(g_Vertices), (void**)&pVertices, 0 ) );
InBlock.gif    memcpy( pVertices, g_Vertices, 
sizeof(g_Vertices) );
InBlock.gif    g_pVB
->Unlock();
InBlock.gif
InBlock.gif    
return S_OK;
ExpandedBlockEnd.gif}

None.gif
None.gif
None.gif
// -----------------------------------------------------------------------------
None.gif
//  Desc: 在此创建默认内存类型资源对象
None.gif
// -----------------------------------------------------------------------------
None.gif
HRESULT CALLBACK OnResetDevice( IDirect3DDevice9 *  pd3dDevice, 
None.gif                                
const  D3DSURFACE_DESC *  pBackBufferSurfaceDesc, 
None.gif                                
void *  pUserContext )
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    HRESULT hr;
InBlock.gif
InBlock.gif    V_RETURN( g_DialogResourceManager.OnResetDevice() );
InBlock.gif    V_RETURN( g_SettingsDlg.OnResetDevice() );
InBlock.gif
InBlock.gif    
//设置对话框位置和尺寸
InBlock.gif
    g_HUD.SetLocation( pBackBufferSurfaceDesc->Width-1700 );
InBlock.gif    g_HUD.SetSize( 
170170 );
InBlock.gif    g_SampleUI.SetLocation( pBackBufferSurfaceDesc
->Width-170
InBlock.gif                            pBackBufferSurfaceDesc
->Height-350 );
InBlock.gif    g_SampleUI.SetSize( 
170300 );
InBlock.gif
InBlock.gif    
//恢复字体
InBlock.gif
    if( g_pFont )
InBlock.gif        V_RETURN( g_pFont
->OnResetDevice() );
InBlock.gif   
InBlock.gif    
//创建ID3DXSprite接口对象
InBlock.gif
    V_RETURN( D3DXCreateSprite( pd3dDevice, &g_pTextSprite ) );
InBlock.gif
InBlock.gif    
//设置观察矩阵
InBlock.gif
    D3DXMATRIXA16 matView;
InBlock.gif    D3DXVECTOR3 vEyePt( 
0.0f0.0f-8 );
InBlock.gif    D3DXVECTOR3 vLookatPt( 
0.0f0.0f0.0f );
InBlock.gif    D3DXVECTOR3 vUpVec( 
0.0f1.0f0.0f );
InBlock.gif    D3DXMatrixLookAtLH( 
&matView, &vEyePt, &vLookatPt, &vUpVec );
InBlock.gif    pd3dDevice
->SetTransform( D3DTS_VIEW, &matView );
InBlock.gif
InBlock.gif    
//设置投影矩阵
InBlock.gif
    D3DXMATRIXA16 matProj;
InBlock.gif    
float fAspectRatio = (float)pBackBufferSurfaceDesc->Width / pBackBufferSurfaceDesc->Height;
InBlock.gif    D3DXMatrixPerspectiveFovLH( 
&matProj, D3DX_PI/4, fAspectRatio, 1.0f100.0f );
InBlock.gif    pd3dDevice
->SetTransform( D3DTS_PROJECTION, &matProj );
InBlock.gif
InBlock.gif    
//设置第层纹理、纹理阶段状态和纹理坐标索引
InBlock.gif
    pd3dDevice->SetTexture( 0, g_pTexture1 );
InBlock.gif    pd3dDevice
->SetTextureStageState( 0, D3DTSS_COLOROP,   D3DTOP_MODULATE );
InBlock.gif    pd3dDevice
->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
InBlock.gif    pd3dDevice
->SetTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_DIFFUSE );
InBlock.gif    pd3dDevice
->SetTextureStageState( 0, D3DTSS_ALPHAOP,   D3DTOP_DISABLE );
InBlock.gif    pd3dDevice
->SetTextureStageState( 0, D3DTSS_TEXCOORDINDEX,   0 );
InBlock.gif    pd3dDevice
->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);
InBlock.gif    pd3dDevice
->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR);
InBlock.gif
InBlock.gif    
//设置第层纹理、纹理阶段状态和纹理坐标索引
InBlock.gif
    pd3dDevice->SetTexture( 1, g_pTexture2 );
InBlock.gif    pd3dDevice
->SetTextureStageState( 1, D3DTSS_COLOROP,   D3DTOP_ADD);
InBlock.gif    pd3dDevice
->SetTextureStageState( 1, D3DTSS_COLORARG1, D3DTA_TEXTURE );
InBlock.gif    pd3dDevice
->SetTextureStageState( 1, D3DTSS_COLORARG2, D3DTA_CURRENT);
InBlock.gif    pd3dDevice
->SetTextureStageState( 1, D3DTSS_ALPHAOP,   D3DTOP_DISABLE );
InBlock.gif    pd3dDevice
->SetTextureStageState( 1, D3DTSS_TEXCOORDINDEX,   1 );
InBlock.gif    pd3dDevice
->SetSamplerState(1, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);
InBlock.gif    pd3dDevice
->SetSamplerState(1, D3DSAMP_MINFILTER, D3DTEXF_LINEAR);
InBlock.gif
InBlock.gif    
//关闭光照计算
InBlock.gif
    pd3dDevice->SetRenderState( D3DRS_LIGHTING, false );
InBlock.gif
InBlock.gif    
return S_OK;
ExpandedBlockEnd.gif}

None.gif
None.gif
None.gif
// -----------------------------------------------------------------------------
None.gif
//  Desc: 更新场景
None.gif
// -----------------------------------------------------------------------------
None.gif
void  CALLBACK OnFrameMove( IDirect3DDevice9 *  pd3dDevice,  double  fTime, 
None.gif                           
float  fElapsedTime,  void *  pUserContext )
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
ExpandedBlockEnd.gif}

None.gif
None.gif
None.gif
// -----------------------------------------------------------------------------
None.gif
//  Desc: 渲染场景
None.gif
// -----------------------------------------------------------------------------
None.gif
void  CALLBACK OnFrameRender( IDirect3DDevice9 *  pd3dDevice,  double  fTime, 
None.gif                            
float  fElapsedTime,  void *  pUserContext )
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    HRESULT hr;
InBlock.gif  
InBlock.gif    
//如果正在利用Direct3D设备设置对话框进行设置, 则不渲染场景
InBlock.gif
    if( g_SettingsDlg.IsActive() )
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        g_SettingsDlg.OnRender( fElapsedTime );
InBlock.gif        
return;
ExpandedSubBlockEnd.gif    }

InBlock.gif
InBlock.gif    
//清除后台颜色缓冲区和深度缓冲区
InBlock.gif
    V( pd3dDevice->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, 
InBlock.gif                         D3DCOLOR_ARGB(
04550170), 1.0f0) );
InBlock.gif
InBlock.gif    
//渲染场景
InBlock.gif
    if( SUCCEEDED( pd3dDevice->BeginScene() ) )
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        pd3dDevice
->SetStreamSource( 0, g_pVB, 0sizeof(CUSTOMVERTEX) );
InBlock.gif        pd3dDevice
->SetFVF( D3DFVF_CUSTOMVERTEX );
InBlock.gif        pd3dDevice
->DrawPrimitive( D3DPT_TRIANGLESTRIP, 02);
InBlock.gif
InBlock.gif        
//渲染文本和控件
InBlock.gif
        DXUT_BeginPerfEvent( DXUT_PERFEVENTCOLOR, L"HUD / Stats" ); 
InBlock.gif        RenderText();
InBlock.gif        V( g_HUD.OnRender( fElapsedTime ) );
InBlock.gif        V( g_SampleUI.OnRender( fElapsedTime ) );
InBlock.gif        DXUT_EndPerfEvent();
InBlock.gif
InBlock.gif        V( pd3dDevice
->EndScene() );
ExpandedSubBlockEnd.gif    }

ExpandedBlockEnd.gif}

None.gif
None.gif
None.gif
// -----------------------------------------------------------------------------
None.gif
//  Desc: 渲染文本
None.gif
// -----------------------------------------------------------------------------
None.gif
void  RenderText()
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    CDXUTTextHelper txtHelper( g_pFont, g_pTextSprite, 
15 );
InBlock.gif
InBlock.gif    
//显示当前Direct3D设备状态和渲染帧速率
InBlock.gif
    txtHelper.Begin();
InBlock.gif    txtHelper.SetInsertionPos( 
55 );
InBlock.gif    txtHelper.SetForegroundColor( D3DXCOLOR( 
1.0f1.0f0.0f1.0f ) );
InBlock.gif    txtHelper.DrawTextLine( DXUTGetFrameStats(
true) );
InBlock.gif    txtHelper.DrawTextLine( DXUTGetDeviceStats() );
InBlock.gif
InBlock.gif    
//显示其他简要信息
InBlock.gif
    txtHelper.SetForegroundColor( D3DXCOLOR( 1.0f1.0f1.0f1.0f ) );
InBlock.gif    txtHelper.DrawTextLine( L
"多层纹理混合" );
InBlock.gif    
InBlock.gif    
//显示简单帮助文本
InBlock.gif
    const D3DSURFACE_DESC* pd3dsdBackBuffer = DXUTGetBackBufferSurfaceDesc();
InBlock.gif    
if( g_bShowHelp )
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        txtHelper.SetInsertionPos( 
10, pd3dsdBackBuffer->Height-15*6 );
InBlock.gif        txtHelper.SetForegroundColor( D3DXCOLOR( 
1.0f0.75f0.0f1.0f ) );
InBlock.gif        txtHelper.DrawTextLine( L
"Controls (F1 to hide):" );
InBlock.gif
InBlock.gif        txtHelper.SetInsertionPos( 
40, pd3dsdBackBuffer->Height-15*5 );
InBlock.gif        txtHelper.DrawTextLine( L
"Quit: ESC" );
ExpandedSubBlockEnd.gif    }

InBlock.gif    
else
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        txtHelper.SetInsertionPos( 
10, pd3dsdBackBuffer->Height-15*2 );
InBlock.gif        txtHelper.SetForegroundColor( D3DXCOLOR( 
1.0f1.0f1.0f1.0f ) );
InBlock.gif        txtHelper.DrawTextLine( L
"Press F1 for help" );
ExpandedSubBlockEnd.gif    }

InBlock.gif    txtHelper.End();
ExpandedBlockEnd.gif}

None.gif
None.gif
None.gif
// -----------------------------------------------------------------------------
None.gif
//  Desc: 消息处理
None.gif
// -----------------------------------------------------------------------------
None.gif
LRESULT CALLBACK MsgProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, 
None.gif                         
bool *  pbNoFurtherProcessing,  void *  pUserContext )
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    
*pbNoFurtherProcessing = g_DialogResourceManager.MsgProc( hWnd, uMsg, wParam, lParam );
InBlock.gif    
if*pbNoFurtherProcessing )
InBlock.gif        
return 0;
InBlock.gif
InBlock.gif    
if( g_SettingsDlg.IsActive() )
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        g_SettingsDlg.MsgProc( hWnd, uMsg, wParam, lParam );
InBlock.gif        
return 0;
ExpandedSubBlockEnd.gif    }

InBlock.gif
InBlock.gif    
*pbNoFurtherProcessing = g_HUD.MsgProc( hWnd, uMsg, wParam, lParam );
InBlock.gif    
if*pbNoFurtherProcessing )
InBlock.gif        
return 0;
InBlock.gif   
InBlock.gif    
*pbNoFurtherProcessing = g_SampleUI.MsgProc( hWnd, uMsg, wParam, lParam );
InBlock.gif    
if*pbNoFurtherProcessing )
InBlock.gif        
return 0;
InBlock.gif
InBlock.gif    
return 0;
ExpandedBlockEnd.gif}

None.gif
None.gif
None.gif
// -----------------------------------------------------------------------------
None.gif
//  Desc: 键盘消息处理
None.gif
// -----------------------------------------------------------------------------
None.gif
void  CALLBACK KeyboardProc( UINT nChar,  bool  bKeyDown,  bool  bAltDown,  void *  pUserContext )
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    
if( bKeyDown )
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        
switch( nChar )
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
case VK_F1: g_bShowHelp = !g_bShowHelp; break;
ExpandedSubBlockEnd.gif        }

ExpandedSubBlockEnd.gif    }

ExpandedBlockEnd.gif}

None.gif
None.gif
None.gif
// -----------------------------------------------------------------------------
None.gif
//  Desc: 处理各种控件消息
None.gif
// -----------------------------------------------------------------------------
None.gif
void  CALLBACK OnGUIEvent( UINT nEvent,  int  nControlID, CDXUTControl *  pControl, 
None.gif                         
void *  pUserContext )
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    
switch( nControlID )
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        
case IDC_TOGGLEFULLSCREEN:
InBlock.gif            DXUTToggleFullScreen(); 
InBlock.gif            
break;
InBlock.gif
InBlock.gif        
case IDC_TOGGLEREF:
InBlock.gif            DXUTToggleREF(); 
InBlock.gif            
break;
InBlock.gif
InBlock.gif        
case IDC_CHANGEDEVICE:
InBlock.gif            g_SettingsDlg.SetActive( 
!g_SettingsDlg.IsActive() ); 
InBlock.gif            
break;
ExpandedSubBlockEnd.gif    }

ExpandedBlockEnd.gif}

None.gif
None.gif
None.gif
// -----------------------------------------------------------------------------
None.gif
//  Desc: 释放在OnResetDevice()中创建的资源
None.gif
// -----------------------------------------------------------------------------
None.gif
void  CALLBACK OnLostDevice(  void *  pUserContext )
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    g_DialogResourceManager.OnLostDevice();
InBlock.gif    g_SettingsDlg.OnLostDevice();
InBlock.gif    
if( g_pFont )
InBlock.gif        g_pFont
->OnLostDevice();
InBlock.gif    SAFE_RELEASE( g_pTextSprite );
ExpandedBlockEnd.gif}

None.gif
None.gif
None.gif
// ------------------------------------------------------------------------------
None.gif
//  Desc: 释放在OnCreateDevice()中创建的资源
None.gif
// ------------------------------------------------------------------------------
None.gif
void  CALLBACK OnDestroyDevice(  void *  pUserContext )
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    g_DialogResourceManager.OnDestroyDevice();
InBlock.gif    g_SettingsDlg.OnDestroyDevice();
InBlock.gif    SAFE_RELEASE( g_pFont );
InBlock.gif
InBlock.gif    SAFE_RELEASE(g_pVB);
InBlock.gif    SAFE_RELEASE(g_pTexture1);
InBlock.gif    SAFE_RELEASE(g_pTexture2);    
ExpandedBlockEnd.gif}

None.gif
None.gif
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值