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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? d3dapp.cpp

?? 3d 游戲編程入門教程之例子源碼--飛機(jī)繞茶壺
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
//-----------------------------------------------------------------------------
// File: D3DApp.cpp
//
// Desc: Application class for the Direct3D samples framework library.
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//-----------------------------------------------------------------------------
#define STRICT
#include <windows.h>
#include <windowsx.h>
#include <mmsystem.h>
#include <stdio.h>
#include <tchar.h>
#include <D3D9.h>
#include "DXUtil.h"
#include "D3DUtil.h"
#include "D3DEnumeration.h"
#include "D3DSettings.h"
#include "D3DApp.h"
#include "D3DRes.h"




//-----------------------------------------------------------------------------
// Global access to the app (needed for the global WndProc())
//-----------------------------------------------------------------------------
static CD3DApplication* g_pD3DApp = NULL;




//-----------------------------------------------------------------------------
// Name: CD3DApplication()
// Desc: Constructor
//-----------------------------------------------------------------------------
CD3DApplication::CD3DApplication()
{
    g_pD3DApp           = this;

    m_pD3D              = NULL;
    m_pd3dDevice        = NULL;
    m_hWnd              = NULL;
    m_hWndFocus         = NULL;
    m_hMenu             = NULL;
    m_bWindowed         = true;
    m_bActive           = false;
    m_bDeviceLost       = false;
    m_bMinimized        = false;
    m_bMaximized        = false;
    m_bIgnoreSizeChange = false;
    m_bDeviceObjectsInited = false;
    m_bDeviceObjectsRestored = false;
    m_dwCreateFlags     = 0;

    m_bFrameMoving      = true;
    m_bSingleStep       = false;
    m_fTime             = 0.0f;
    m_fElapsedTime      = 0.0f;
    m_fFPS              = 0.0f;
    m_strDeviceStats[0] = _T('\0');
    m_strFrameStats[0]  = _T('\0');

    m_strWindowTitle    = _T("D3D9 Application");
    m_dwCreationWidth   = 400;
    m_dwCreationHeight  = 300;
    m_bShowCursorWhenFullscreen = false;
    m_bStartFullscreen  = false;

    Pause( true ); // Pause until we're ready to render

    // When m_bClipCursorWhenFullscreen is true, the cursor is limited to
    // the device window when the app goes fullscreen.  This prevents users
    // from accidentally clicking outside the app window on a multimon system.
    // This flag is turned off by default for debug builds, since it makes 
    // multimon debugging difficult.
#if defined(_DEBUG) || defined(DEBUG)
    m_bClipCursorWhenFullscreen = false;
#else
    m_bClipCursorWhenFullscreen = true;
#endif
}




//-----------------------------------------------------------------------------
// Name: WndProc()
// Desc: Static msg handler which passes messages to the application class.
//-----------------------------------------------------------------------------
LRESULT CALLBACK WndProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
    return g_pD3DApp->MsgProc( hWnd, uMsg, wParam, lParam );
}



//-----------------------------------------------------------------------------
// Name: ConfirmDeviceHelper()
// Desc: Static function used by D3DEnumeration
//-----------------------------------------------------------------------------
bool CD3DApplication::ConfirmDeviceHelper( D3DCAPS9* pCaps, VertexProcessingType vertexProcessingType, 
                         D3DFORMAT adapterFormat, D3DFORMAT backBufferFormat )
{
    DWORD dwBehavior;

    if (vertexProcessingType == SOFTWARE_VP)
        dwBehavior = D3DCREATE_SOFTWARE_VERTEXPROCESSING;
    else if (vertexProcessingType == MIXED_VP)
        dwBehavior = D3DCREATE_MIXED_VERTEXPROCESSING;
    else if (vertexProcessingType == HARDWARE_VP)
        dwBehavior = D3DCREATE_HARDWARE_VERTEXPROCESSING;
    else if (vertexProcessingType == PURE_HARDWARE_VP)
        dwBehavior = D3DCREATE_HARDWARE_VERTEXPROCESSING | D3DCREATE_PUREDEVICE;
    else
        dwBehavior = 0; // TODO: throw exception
    
    return SUCCEEDED( g_pD3DApp->ConfirmDevice( pCaps, dwBehavior, adapterFormat, backBufferFormat ) );
}




//-----------------------------------------------------------------------------
// Name: Create()
// Desc:
//-----------------------------------------------------------------------------
HRESULT CD3DApplication::Create( HINSTANCE hInstance )
{
    HRESULT hr;

    // Create the Direct3D object
    m_pD3D = Direct3DCreate9( D3D_SDK_VERSION );
    if( m_pD3D == NULL )
        return DisplayErrorMsg( D3DAPPERR_NODIRECT3D, MSGERR_APPMUSTEXIT );

    // Build a list of Direct3D adapters, modes and devices. The
    // ConfirmDevice() callback is used to confirm that only devices that
    // meet the app's requirements are considered.
    m_d3dEnumeration.SetD3D( m_pD3D );
    m_d3dEnumeration.ConfirmDeviceCallback = ConfirmDeviceHelper;
    if( FAILED( hr = m_d3dEnumeration.Enumerate() ) )
    {
        SAFE_RELEASE( m_pD3D );
        return DisplayErrorMsg( hr, MSGERR_APPMUSTEXIT );
    }

    // Unless a substitute hWnd has been specified, create a window to
    // render into
    if( m_hWnd == NULL)
    {
        // Register the windows class
        WNDCLASS wndClass = { 0, WndProc, 0, 0, hInstance,
                              LoadIcon( hInstance, MAKEINTRESOURCE(IDI_MAIN_ICON) ),
                              LoadCursor( NULL, IDC_ARROW ),
                              (HBRUSH)GetStockObject(WHITE_BRUSH),
                              NULL, _T("D3D Window") };
        RegisterClass( &wndClass );

        // Set the window's initial style
        m_dwWindowStyle = WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | 
                          WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_VISIBLE;

        // Set the window's initial width
        RECT rc;
        SetRect( &rc, 0, 0, m_dwCreationWidth, m_dwCreationHeight );
        AdjustWindowRect( &rc, m_dwWindowStyle, true );

        // Create the render window
        m_hWnd = CreateWindow( _T("D3D Window"), m_strWindowTitle, m_dwWindowStyle,
                               CW_USEDEFAULT, CW_USEDEFAULT,
                               (rc.right-rc.left), (rc.bottom-rc.top), 0,
                               LoadMenu( hInstance, MAKEINTRESOURCE(IDR_MENU) ),
                               hInstance, 0 );
    }

    // The focus window can be a specified to be a different window than the
    // device window.  If not, use the device window as the focus window.
    if( m_hWndFocus == NULL )
        m_hWndFocus = m_hWnd;

    // Save window properties
    m_dwWindowStyle = GetWindowLong( m_hWnd, GWL_STYLE );
    GetWindowRect( m_hWnd, &m_rcWindowBounds );
    GetClientRect( m_hWnd, &m_rcWindowClient );

    if( FAILED( hr = ChooseInitialD3DSettings() ) )
    {
        SAFE_RELEASE( m_pD3D );
        return DisplayErrorMsg( hr, MSGERR_APPMUSTEXIT );
    }

    // Initialize the application timer
    DXUtil_Timer( TIMER_START );

    // Initialize the app's custom scene stuff
    if( FAILED( hr = OneTimeSceneInit() ) )
    {
        SAFE_RELEASE( m_pD3D );
        return DisplayErrorMsg( hr, MSGERR_APPMUSTEXIT );
    }

    // Initialize the 3D environment for the app
    if( FAILED( hr = Initialize3DEnvironment() ) )
    {
        SAFE_RELEASE( m_pD3D );
        return DisplayErrorMsg( hr, MSGERR_APPMUSTEXIT );
    }

    // The app is ready to go
    Pause( false );

    return S_OK;
}




//-----------------------------------------------------------------------------
// Name: FindBestWindowedMode()
// Desc: Sets up m_d3dSettings with best available windowed mode, subject to 
//       the bRequireHAL and bRequireREF constraints.  Returns false if no such
//       mode can be found.
//-----------------------------------------------------------------------------
bool CD3DApplication::FindBestWindowedMode( bool bRequireHAL, bool bRequireREF )
{
    // Get display mode of primary adapter (which is assumed to be where the window 
    // will appear)
    D3DDISPLAYMODE primaryDesktopDisplayMode;
    m_pD3D->GetAdapterDisplayMode(0, &primaryDesktopDisplayMode);

    D3DAdapterInfo* pBestAdapterInfo = NULL;
    D3DDeviceInfo* pBestDeviceInfo = NULL;
    D3DDeviceCombo* pBestDeviceCombo = NULL;

    for( UINT iai = 0; iai < m_d3dEnumeration.m_pAdapterInfoList->Count(); iai++ )
    {
        D3DAdapterInfo* pAdapterInfo = (D3DAdapterInfo*)m_d3dEnumeration.m_pAdapterInfoList->GetPtr(iai);
        for( UINT idi = 0; idi < pAdapterInfo->pDeviceInfoList->Count(); idi++ )
        {
            D3DDeviceInfo* pDeviceInfo = (D3DDeviceInfo*)pAdapterInfo->pDeviceInfoList->GetPtr(idi);
            if (bRequireHAL && pDeviceInfo->DevType != D3DDEVTYPE_HAL)
                continue;
            if (bRequireREF && pDeviceInfo->DevType != D3DDEVTYPE_REF)
                continue;
            for( UINT idc = 0; idc < pDeviceInfo->pDeviceComboList->Count(); idc++ )
            {
                D3DDeviceCombo* pDeviceCombo = (D3DDeviceCombo*)pDeviceInfo->pDeviceComboList->GetPtr(idc);
                bool bAdapterMatchesBB = (pDeviceCombo->BackBufferFormat == pDeviceCombo->AdapterFormat);
                if (!pDeviceCombo->IsWindowed)
                    continue;
                if (pDeviceCombo->AdapterFormat != primaryDesktopDisplayMode.Format)
                    continue;
                // If we haven't found a compatible DeviceCombo yet, or if this set
                // is better (because it's a HAL, and/or because formats match better),
                // save it
                if( pBestDeviceCombo == NULL || 
                    pBestDeviceCombo->DevType != D3DDEVTYPE_HAL && pDeviceCombo->DevType == D3DDEVTYPE_HAL ||
                    pDeviceCombo->DevType == D3DDEVTYPE_HAL && bAdapterMatchesBB )
                {
                    pBestAdapterInfo = pAdapterInfo;
                    pBestDeviceInfo = pDeviceInfo;
                    pBestDeviceCombo = pDeviceCombo;
                    if( pDeviceCombo->DevType == D3DDEVTYPE_HAL && bAdapterMatchesBB )
                    {
                        // This windowed device combo looks great -- take it
                        goto EndWindowedDeviceComboSearch;
                    }
                    // Otherwise keep looking for a better windowed device combo
                }
            }
        }
    }
EndWindowedDeviceComboSearch:
    if (pBestDeviceCombo == NULL )
        return false;

    m_d3dSettings.pWindowed_AdapterInfo = pBestAdapterInfo;
    m_d3dSettings.pWindowed_DeviceInfo = pBestDeviceInfo;
    m_d3dSettings.pWindowed_DeviceCombo = pBestDeviceCombo;
    m_d3dSettings.IsWindowed = true;
    m_d3dSettings.Windowed_DisplayMode = primaryDesktopDisplayMode;
    m_d3dSettings.Windowed_Width = m_rcWindowClient.right - m_rcWindowClient.left;
    m_d3dSettings.Windowed_Height = m_rcWindowClient.bottom - m_rcWindowClient.top;
    if (m_d3dEnumeration.AppUsesDepthBuffer)
        m_d3dSettings.Windowed_DepthStencilBufferFormat = *(D3DFORMAT*)pBestDeviceCombo->pDepthStencilFormatList->GetPtr(0);
    m_d3dSettings.Windowed_MultisampleType = *(D3DMULTISAMPLE_TYPE*)pBestDeviceCombo->pMultiSampleTypeList->GetPtr(0);
    m_d3dSettings.Windowed_MultisampleQuality = 0;
    m_d3dSettings.Windowed_VertexProcessingType = *(VertexProcessingType*)pBestDeviceCombo->pVertexProcessingTypeList->GetPtr(0);
    m_d3dSettings.Windowed_PresentInterval = *(UINT*)pBestDeviceCombo->pPresentIntervalList->GetPtr(0);
    return true;
}




//-----------------------------------------------------------------------------
// Name: FindBestFullscreenMode()
// Desc: Sets up m_d3dSettings with best available fullscreen mode, subject to 
//       the bRequireHAL and bRequireREF constraints.  Returns false if no such
//       mode can be found.
//-----------------------------------------------------------------------------
bool CD3DApplication::FindBestFullscreenMode( bool bRequireHAL, bool bRequireREF )
{
    // For fullscreen, default to first HAL DeviceCombo that supports the current desktop 
    // display mode, or any display mode if HAL is not compatible with the desktop mode, or 
    // non-HAL if no HAL is available
    D3DDISPLAYMODE adapterDesktopDisplayMode;
    D3DDISPLAYMODE bestAdapterDesktopDisplayMode;
    D3DDISPLAYMODE bestDisplayMode;
    bestAdapterDesktopDisplayMode.Width = 0;
    bestAdapterDesktopDisplayMode.Height = 0;
    bestAdapterDesktopDisplayMode.Format = D3DFMT_UNKNOWN;
    bestAdapterDesktopDisplayMode.RefreshRate = 0;

    D3DAdapterInfo* pBestAdapterInfo = NULL;
    D3DDeviceInfo* pBestDeviceInfo = NULL;
    D3DDeviceCombo* pBestDeviceCombo = NULL;

    for( UINT iai = 0; iai < m_d3dEnumeration.m_pAdapterInfoList->Count(); iai++ )
    {
        D3DAdapterInfo* pAdapterInfo = (D3DAdapterInfo*)m_d3dEnumeration.m_pAdapterInfoList->GetPtr(iai);
        m_pD3D->GetAdapterDisplayMode( pAdapterInfo->AdapterOrdinal, &adapterDesktopDisplayMode );
        for( UINT idi = 0; idi < pAdapterInfo->pDeviceInfoList->Count(); idi++ )
        {
            D3DDeviceInfo* pDeviceInfo = (D3DDeviceInfo*)pAdapterInfo->pDeviceInfoList->GetPtr(idi);
            if (bRequireHAL && pDeviceInfo->DevType != D3DDEVTYPE_HAL)
                continue;
            if (bRequireREF && pDeviceInfo->DevType != D3DDEVTYPE_REF)

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人夜色高潮福利影视| 国v精品久久久网| 欧美日韩视频不卡| 精品亚洲欧美一区| 国产精品日韩成人| 欧美区一区二区三区| 懂色av一区二区三区蜜臀| 国产尤物一区二区| 日韩高清欧美激情| 亚洲日本电影在线| 欧美精品一区二区三区久久久| av网站一区二区三区| 国内外成人在线| 午夜激情久久久| 悠悠色在线精品| 国产精品无遮挡| 亚洲色图.com| 亚洲国产一区二区视频| 亚洲国产精品成人综合 | 精品国产青草久久久久福利| 精品捆绑美女sm三区| 欧美三级视频在线观看| 欧美日本在线播放| 久久久久久久综合狠狠综合| 91精品国产免费| 欧美日韩在线播放三区四区| 日韩亚洲欧美高清| 欧美人与禽zozo性伦| 久久这里都是精品| 日韩精品一区二区三区三区免费 | 国产一区二区在线观看免费 | 亚洲精品成人少妇| 久久aⅴ国产欧美74aaa| 视频在线观看一区| 午夜精品久久久久久| 国产一区二区精品久久| 色乱码一区二区三区88| 99国内精品久久| 成人a免费在线看| caoporen国产精品视频| 91精品国产综合久久精品app | 国产精品拍天天在线| 亚洲自拍偷拍图区| 亚洲一区二区高清| 国产一区二区0| 欧美色视频在线观看| 国产色综合久久| 国产精品久久久久三级| 中文字幕在线播放不卡一区| 亚洲免费资源在线播放| 一区二区三区蜜桃网| 一区二区久久久久| 国产丶欧美丶日本不卡视频| 欧美剧在线免费观看网站| 91.com视频| 亚洲欧美激情插| 成人高清视频在线观看| 日韩亚洲欧美成人一区| 亚洲成人激情社区| 精品一区二区综合| 欧美日韩一区 二区 三区 久久精品| 国产日产欧美一区二区视频| 亚洲欧美在线视频观看| 极品少妇xxxx精品少妇偷拍| 欧美精品黑人性xxxx| 亚洲成人免费电影| 欧美最猛黑人xxxxx猛交| 日韩欧美的一区二区| 一区二区三区精品视频在线| 99国产精品久久久| 国产精品久久久久7777按摩| 国产寡妇亲子伦一区二区| www日韩大片| 国产精品性做久久久久久| 日本韩国欧美国产| 一区二区三区中文在线| 色老头久久综合| 一区二区三区在线不卡| 在线免费观看日韩欧美| 一区二区三区波多野结衣在线观看| www.视频一区| 亚洲色图20p| 欧美四级电影网| 亚洲色图欧洲色图| 91在线精品秘密一区二区| 国产精品青草久久| 色综合久久中文字幕综合网| 久久久.com| 国产99精品国产| 一区二区三区在线视频免费| 欧美日韩mp4| 免费看黄色91| 欧美日韩国产美| 免费成人av在线| 久久精品视频免费观看| 北岛玲一区二区三区四区| 亚洲三级在线看| 在线成人免费视频| 国产麻豆欧美日韩一区| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 椎名由奈av一区二区三区| 欧美性受极品xxxx喷水| 日本麻豆一区二区三区视频| 欧美精品一区二区三区蜜臀| 丁香五精品蜜臀久久久久99网站| 中文字幕一区二区三| 欧美日韩一区精品| 国产一区二区三区黄视频| 亚洲人成网站色在线观看| 欧美日韩精品欧美日韩精品一| 国产一区二区福利视频| 亚洲欧美视频在线观看视频| 欧美一区二区三区精品| 国产高清在线精品| 首页综合国产亚洲丝袜| 国产精品电影一区二区| 51午夜精品国产| 97久久精品人人爽人人爽蜜臀 | 懂色av一区二区三区免费观看| 亚洲影院久久精品| 国产日产欧产精品推荐色| 欧美日本在线视频| 91年精品国产| 一区二区三区电影在线播| 久久久99久久精品欧美| 欧美日韩一区二区三区四区五区| 国产成人综合亚洲网站| 午夜欧美2019年伦理| 国产精品美女久久久久久久网站| 欧美成人女星排名| 欧美日韩大陆一区二区| 成人短视频下载| 国产成人精品影院| 美女脱光内衣内裤视频久久影院| 精品乱码亚洲一区二区不卡| 欧美日韩视频不卡| 972aa.com艺术欧美| 国产伦精品一区二区三区免费| 丝袜a∨在线一区二区三区不卡 | 夜夜精品浪潮av一区二区三区| 国产偷v国产偷v亚洲高清| 欧美一区二区成人| 91麻豆精品国产91久久久久久| 在线免费观看日本欧美| 96av麻豆蜜桃一区二区| av电影天堂一区二区在线观看| 国产成人av一区| 国产精品一区二区久激情瑜伽 | 亚洲不卡一区二区三区| 一区二区三区欧美视频| 亚洲男人的天堂在线观看| 最新国产成人在线观看| 国产精品美女视频| 国产精品每日更新在线播放网址| 国产清纯美女被跳蛋高潮一区二区久久w| 日韩欧美一区二区免费| 欧美一区二区三区免费大片 | 99re热视频精品| 一本色道a无线码一区v| 91免费国产视频网站| 91视频精品在这里| 在线观看网站黄不卡| 欧美日韩国产精品成人| 日韩天堂在线观看| 精品国产91亚洲一区二区三区婷婷| 日韩视频永久免费| 精品成人私密视频| 国产欧美日韩综合| 中文字幕一区av| 亚洲国产视频a| 免费国产亚洲视频| 国产成人精品亚洲午夜麻豆| 99久久久免费精品国产一区二区| 91啪九色porn原创视频在线观看| 在线观看视频一区二区| 日韩欧美精品在线视频| 久久综合色天天久久综合图片| 中文av一区二区| 亚洲午夜免费视频| 久久99国产精品久久99果冻传媒| 国产精品一区三区| 在线观看一区二区精品视频| 欧美xxxxx牲另类人与| 成人欧美一区二区三区视频网页| 亚瑟在线精品视频| 国产精品99久久久久久有的能看| 色偷偷一区二区三区| 日韩一级黄色大片| 中文字幕一区免费在线观看| 爽好久久久欧美精品| 大美女一区二区三区| 狠狠色综合日日| 91一区在线观看| 久久先锋影音av鲁色资源网| 亚洲欧美日韩综合aⅴ视频| 极品少妇一区二区| 欧美精品aⅴ在线视频| 国产精品麻豆视频| 精品一区免费av| 3d动漫精品啪啪1区2区免费|