首页>
知识库>
详情

DirectX学习笔记(1)

2020-08-07 来源:CloudBest 阅读量: 0
关键词:

    通过几天的学习,现在我终于能配置好DX的开发环境,和创建一个比较简单的DX窗口,下面是我的代码:
    1.创建一个简单的DirectX3D窗口
    //Add More H File …
    #include
    //Add More Lib
    #pragma comment(lib,"d3d9.lib")
    #pragma comment(lib,"d3dx9.lib")
    //Add More Global Variable …
    #define Window_Class "Blank DirectX Window"
    #define Window_Name "blank directx window"
    //Add More DirectCreate Object And Direct3DDevice …
    LPDIRECT3D9 g_D3D = NULL;
    LPDIRECT3DDEVICE9 g_D3DDevice = NULL;
    //Add More Function Prototypes …
    bool InitailzeD3D(HWND hWnd,bool FullScreen);
    void RenderScene();
    void Shutdown();
    LRESULT WINAPI MsgProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)
    {
    switch(msg)
    {
    case WM_DESTROY:
    PostQuitMessage(0);
    return 0;
    break;
    case WM_KEYUP:
    if(wParam == VK_ESCAPE)PostQuitMessage(0);
    break;
    }
    return DefWindowProc(hWnd,msg,wParam,lParam);
    }
    //Add The Window Main
    int WINAPI WinMain(HINSTANCE hInst,HINSTANCE prevhInst,LPSTR cmdLine,int show)
    {
    WNDCLASSEX wc = {sizeof(WNDCLASSEX),CS_CLASSDC,MsgProc,0L,0L,GetModuleHandle(NULL),NULL,NULL,NULL,NULL,Window_Class,NULL};
    RegisterClassEx(&wc);
    HWND hWnd = CreateWindow(Window_Class,Window_Name,WS_OVERLAPPEDWINDOW,100,100,640,480,GetDesktopWindow(),NULL,wc.hInstance,NULL);
    if(InitailzeD3D(hWnd,false))
    {
    ShowWindow(hWnd,SW_SHOWDEFAULT);
    UpdateWindow(hWnd);
    MSG msg;
    ZeroMemory(&msg,sizeof(msg));
    while(msg.message != WM_QUIT)
    {
    if(PeekMessage(&msg,NULL,0U,0U,PM_REMOVE))
    {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
    }
    else
    {
    RenderScene();
    }
    }
    }
    Shutdown();
    UnregisterClass(Window_Class,wc.hInstance);
    return 0;
    }
    //Add The Load Direct3DDevice
    bool InitailzeD3D(HWND hWnd,bool FullScreen)
    {
    D3DDISPLAYMODE displayMode;
    g_D3D = Direct3DCreate9(D3D_SDK_VERSION);
    if(g_D3D == NULL) return false;
    if(FAILED(g_D3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT,&displayMode))) return false;
    D3DPRESENT_PARAMETERS d3dpp;
    ZeroMemory(&d3dpp,sizeof(d3dpp));
    if(FullScreen)
    {
    d3dpp.Windowed = FALSE;
    d3dpp.BackBufferWidth = 640;
    d3dpp.BackBufferHeight = 480;
    }
    else
    {
    d3dpp.Windowed = TRUE;
    }
    d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
    d3dpp.BackBufferFormat = displayMode.Format;
    if(FAILED(g_D3D->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,hWnd,D3DCREATE_SOFTWARE_VERTEXPROCESSING,&d3dpp,&g_D3DDevice)))return false;
    return true;
    }
    //Add The RenderScreen
    void RenderScene()
    {
    g_D3DDevice->Clear(0,NULL,D3DCLEAR_TARGET,D3DCOLOR_XRGB(0,0,0),1.0f,0);
    g_D3DDevice->BeginScene();
    g_D3DDevice->EndScene();
    g_D3DDevice->Present(NULL,NULL,NULL,NULL);
    }
    //Add The Release
    void Shutdown()
    {
    if(g_D3DDevice != NULL)
    {
    g_D3DDevice->Release();
    g_D3DDevice = NULL;
    }