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

文章介绍了如何使用C++/C#创建基于DX的窗口,并通过Device类实现统一管理DX资源,简化窗口创建和管理流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

下面先介绍如何制作个基于“框架”的窗口用法(包扩C++/C#)

 初始化DX设备需要个基本的hanlle(HWND)当然也可以没有,这种情况发生在DX11平台上同时使用DX10和DX9的资源(这个在以后有说明),DX11没有2D文字和绘图的部件需要同步共享DX10的一些东西。

#include "DXView.h"

#define NAME  "form"
#define TITLE "GAME_DX11" 

在C++中几乎总是重复使用同一段代码来创建窗口:

Device device;DXView gdevice;

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;
}

这里比普通代码多了个 Device的类的引用:Device我把它作为显示设备的统一管理的特殊的类,它没有规定必须用什么来显DX11、DX10、DX9、OGL、由它的派生的类来决定用由谁来提供显示。但使用的handle和resource和代码都是统一的。把Device分离管理的另一个好处是可以无限制的生成N个窗口来同时显示不同的内容而不用从新设定Device的资源。DXView是我专门为DX11提供显示的基础类;它调用Device里的资源。在后面的游戏介绍中DXView 会被简单的更名为GameView 它的内容就是个完全的游戏平台了,你不用更改任何其他代码的名称和用法。

C#:

1、先建立个空白项目;2、添加个基本的Form窗口;

3;创建个普通的Class;class 的内容如下:

using System;
using DX;

namespace Game
{
   public class DXView:SpliteDevice
    {
        public override void Initialize()
       { 用于初始化DX资源         }

       public override void OnFrameChanging()
       {    用于更新游戏的时间事件 (1 / FrameRate);       }

       public override void HandleInput()
       {
           用于使用输入事件
       }

       public override void Draw()
       {       
           Clear(Vector4.Sky);
            device.Sprite.GetSize(chain.Viewport);
         }
       public override void OnDisposing()
       {
         用于程序退出卸载无用的资源。
           base.OnDisposing();
       }

    }
}

把这个控件托到先前定义的form中就有了你的第一个DX窗口了。

在C#中为了灵活的管理,我把Device的HWND捆绑在个基本的Control类中,你可以象控制其他任何form的部件一样去添加和调整它的窗口形式。

下面就是使用gameView的DXView的内容。

 注意上面的Sprite是我专门为显示2D内容而定制的类,它没有使用DX内置的sprtieBatch 它的定制矩阵用法十分混乱,也很难在SHader中正常使用,CPU的运算更是无聊的多。虽然它是Surface层面的东西,包装的太重了。我的这个轻巧的Sprite类可以胜任任何2D显示和2D游戏的要求,即时用CPU渲染也仍然很快。

后面的章节是详细解释Device的工作原理。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值