DXUT编程指南(一):DXUT概览

DXUT编程指南 (译自DirectX SDK Document)
                  DXUT是一个建立在Direct3D API之上的层,它在大多数的Direct3D指南和实例中被使用。它的目标是让Direct3D示例,样本,工具,乃至专业游戏更加健壮且更容易建立。它简化了Windows和Direct3D API的典型的用法。


DXUT概览
初始化DXUT
通过DXUT使用程序窗口

通过DXUT使用设备
通过DXUT使用主循环
通过DXUT处理错误
通过DXUT作更高级的设备选择
另外一些DXUT的函数 

DXUT概览
本主题提供了对DXUT概览的一个高层次的介绍
概览
特征
局限性
开始一个新的项目
DirectX April 2005 SDK中DXUT的改进
来自DirectX Summer 2003 SDK中DXUT的变化

概览
设计这个框架结构是为了帮助程序员花更少的时间去操心怎样创建窗口,怎样创建设备,怎样处理窗口消息以及什么时候处理设备事件。
这儿是一个使用该框架的示例程序的main函数
INT WINAPI WinMain( HINSTANCE, HINSTANCE, LPSTR, INT )
{
    // 设置回调函数。这些函数允许DXUT通知应用程序关于设备改变,用户输入,和窗口消息 。
    //这些回调函数是可选的, 所以你只需要为你感兴趣的事件设置他们即可(函数的名字已经很好理解)
    DXUTSetCallbackDeviceCreated( OnCreateDevice );
    DXUTSetCallbackDeviceReset( OnResetDevice );
    DXUTSetCallbackDeviceLost( OnLostDevice );
    DXUTSetCallbackDeviceDestroyed( OnDestroyDevice );

    DXUTSetCallbackFrameRender( OnFrameRender );
    DXUTSetCallbackFrameMove( OnFrameMove );

    // 初始化DXUT,为你的应用程序创建你所期望Win32窗口和D3D设备
    // 调用这些函数也是可选的,但是它们允许你设置几个参数来控制框架的行为
    DXUTInit( TRUE, TRUE, TRUE );
    DXUTCreateWindow( L"BasicHLSL" );
    DXUTCreateDevice( D3DADAPTER_DEFAULT, TRUE, 640, 480 );

    // 控制DXUT处理消息循环和分派渲染调用。如果在处理窗口消息之间有空闲时间的话,
    //框架会调用你的OnFrameMove 和 OnFrameRender 回调函数。
    DXUTMainLoop();

    return DXUTGetExitCode();
}

在上面的例子中框架做了大多数的工作,它创建窗口,创建设备,处理主循环,并且当事件发生时使用应用程序提供的回调函数,比如设备重置,和帧渲染。框架是模块化的,应用程序可以使用框架所有的特征,或者也可以只使用想要的一部分。
该编程指南的剩余部分包含了对这几步中每一步的细节讲解,以及看看应用程序可以控制的选择和可以替换的步骤。
更深入的细节关于语法,函数的使用,回调函数,结构体,枚举,常量可以在DXUTReference中找到。

特征
框架提供了以下的服务帮助你创建应用程序:

简化窗口与设备的创建。
通知设备事件(创建,重置,丢失,销毁)和窗口事件(消息,键盘,鼠标)
在窗口与全屏之间切换,在HAL和REF设备之间切换
高分辨率的计时器
为自动测试提供命令行支持
通过对话框或者API选择设备
一套带纹理的控件,包括支持输入法的编辑框
额外的一些类,比如简单的摄像机类型

局限性
为了使用简便,框架仅支持一个单一的窗口关联到一个单一的设备。一些高级的应用程序需要同时使用多个设备或者需要显示多个D3D窗口将不被框架支持。然而,大多数典型的程序都可以使用框架。

开始一个新的项目
通过DXUT开始一个新的VS.NET项目最简单的方式如下:


1.启动Sample Browser,它位于(SDK root)/Samples/SampleBrowser/
2.在Browser中选择一个已存在的示例项目作为起始点。
3.点击"Install Project"链接将项目文件拷贝到一个新的文件夹位置。
4.你也可以随意的重命名该项目,Sample Browser会改变项目中适当的文件和源码以重命名。

DirectX April 2005 SDK中DXUT的改进
基于客户的反馈,框架在DirectX April 2005 SDK Update中得到了改进。下面列出主要的不同与改进:


         现在通过DXUTSetCallBack*传入一个void* pUserContext参数个给回调函数。这允许回调函数从应用程序接受上下文比如类指针。
        框架的GUI已经从框架的核心中分离出来,并且是可选的。如果你的应用程序想要使用框架的GUI,那你必须负责CDXUTDialogResourceManager的创建与接口连接。
       现在框架允许应用程序拒绝通过LPDXUTCALLBACKMODIFYDEVICESETTINGS函数(它返回一个bool值)的设备改变。从这个回调函数返回false会通知框架保持使用当前的设备而不是改变到新的设备。例如,缺省情况下, 在多监视器配置中在两个监视器之间拖动窗口会导致框架改变设备。然而,如果应用程序不能使用其它设备,它必须能够拒绝这种改变而继续使用当前的设备。通过使用DXUTSetCallbackDeviceChanging,CreateDevice的回调可以分别的设置(This callback can now be set separate of the CreateDevice function by using DXUTSetCallbackDeviceChanging.)
     向DXUTCreateDevice函数传递0作为Width与Height会创建一个与客户窗口区相同大小的后备缓冲区。
     现在DXUTGetExitCode函数将返回11,如果最后一个设备的设备类型是D3DDEVTYPE_REF的话。

来自DirectX Summer 2003 SDK中DXUT的变化
新的框架是从DirectX Summer 2003 SDK Update中的DXUT重新设计而来。下面列出了主要的不同与改进:


        API设计。新的框架是一系列全局函数,更清晰的定义了应用程序怎样和框架交互。
       更清楚的命名。设备,框架,和消息事件已经重新命名更容易理解。
       模块。应用程序可以只使用框架的一部分。应用程序可以使用框架创建他自己的窗口和设备,或者他可以使用自己的主循环。
       更好的设备选择。创建设备之前应用程序可以完全的定制presentation parameters 或者behavior flags 。新的框架拥有更先进的算法找到有效的设备设置。
       在HAL与REF设备之间切换。内建的切换支持,为了简化调试,切换可以被绑定到一个按键上。
      更好的错误处理。一旦API被错误的调用应用程序可以使用错误处理和宏来显示错误消息框。
      更好的多监视器支持。如果这个特征被启用,当窗口移动到不同的监视器的时候新框架会自动的改变设备。
      GUI控件。一套带纹理的控件包扩可支持输入法的编辑框,可以在示例,样本,专业游戏中使用。
      没有对话框依赖于GDI。不像先前的框架,新的框架不再需要任何GDI的对话框资源。
      与DirectX的迟绑定(Late binging with DirectX).迟绑定检查系统中是否安装了必须的DirectX版本。
      Unicode支持。新的框架支持Unicode。基于NT的windows操作系统天生支持Unicode。这意味着ANSI调用需要转化成Unicode。为了国际化的支持,Unicode是更好的选择因为它将在这些操作系统上得到更好的表现。至于Win98和WinMe可以使用Microsoft Layer for Unicode(MSLU).
      文档。Dxut.h中的框架库函数被文档化(documented);请看DXUT Reference

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值