我对DX11的理解和简化框架与快速游戏制作(续5)

来源:互联网 发布:什么是一级域名 编辑:程序博客网 时间:2024/06/02 13:04

先来测试下是否成功建立了DX11的设备和显示缓冲。

先创建个新的项目。把项目的目录选项的包含目录添加上面提到的一些文件的位置。

添加个“main.ccp”文件到当前项目。

#pragma once
#include "DX.h"
#include "DXView.h"

Device device;DXView gdevice;

long WINAPI WndProc( HWND hWnd, UINT uMsg, WPARAM wParam,LPARAM lParam) 

   gdevice.HandleMsg(uMsg,wParam,lParam); 

  if(uMsg== WM_CREATE)
   {
  device.Create();
       gdevice.Create(device,hWnd,4);
       gdevice.frameRate=60;
        return 0;
   }
    if(uMsg== WM_CLOSE)
    {  
     device.Dispose(); 
           PostQuitMessage(0);
     return 0;
    } 
 return DefWindowProc(hWnd,uMsg,wParam,lParam);
}

int WINAPI WinMain( HINSTANCE hInstance,     HINSTANCE hPrevInstance,   LPSTR  lpCmdLine,      int   nCmdShow)  {
  HWND                hwnd;
  WNDCLASS wc= {
  CS_HREDRAW | CS_VREDRAW,WndProc,0,0, hInstance,0,LoadCursor(0, IDC_ARROW ),0,0,NAME};
  RegisterClass( &wc );
  hwnd = CreateWindowEx(0,NAME,TITLE,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, CW_USEDEFAULT, 880, 600, NULL, NULL, hInstance, NULL );
   ShowWindow( hwnd, nCmdShow );
   UpdateWindow( hwnd ); 
   MSG msg = {0};
   while( WM_QUIT != msg.message )
    {
        if( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ) )
        {
            TranslateMessage( &msg );
            DispatchMessage( &msg );
        }
  else  gdevice.Render();    
    } 
   return msg.wParam;
}

 添加个“DXView.h”文件到当前项目。

struct DXView:SpliteDevice
{

 DXView(){}

 void Draw() {   Clear(Red); }

运行后你会得到个红色的背景,3D的元素后面会提到。并逐渐丰富DXView的内容。

可以看到,把大量重复输入和内容的动作完全压缩在预置类中,每个分类又和轻巧和高效。可以极大的提高程序的可读性和稳定性,任何一个部件出问题 VC会把指针自动跳转到出错的类中,避免了在一堆相近的指针中反复翻查出错的部分。

}

原创粉丝点击