当前位置:首页 » 软件开发
开发技术指南» 文章正文
    引言: 目 录 General Direct3D DirectSound DirectPlay 本文对与Microsoft DirectX 8.0版有关的常见开发问题进行解答,其中包括有关Direct3D、DirectSound及DirectPlay的章节。
 

 

    摘要: 语言基础   现在你已经对什么是hlsl顶点和像素着色器以及他们如何与低层汇编着色器相互作用有了了解,我们将讨论一些语言本身的细节。 关键字   关键字是hlsl语言保留的预定义标识符,不能在你的程序中作为标识符使用。标有*的关键字不区分大小写。 表2. hlsl语言所保留的关键字 asm*......
    摘要: 强制类型转换   为了有助于着色器的编写和所产生代码的效率,最好熟悉一下hlsl的强制类型转换机制。强制类型转换常用于扩展或缩减选定的变量以匹配要赋值的变量。例如,在下列例子中,初始化vresult时把float型常量0.0f强制转换为float4型{0.0f , 0.0f , 0.0f , 0.0f }。float4 vresult = 0.0f;   当把一个高维数据类型如向量或矩阵......


DirectX 8开发人员常见问题
目 录 general direct3d directsound directplay

本文对与microsoft directx 8.0版有关的常见开发问题进行解答,其中包括有关direct3d.directsound及directplay的章节.

1.一般性directx开发事宜 【程序编程相关:动态链接库-原理

【推荐阅读:第二章 接口

答:您可能没有将 include 路径设置正确.许多编译器(microsoft visual c++)包含 sdk 的一个较早版本,因此如果您的 include 路径首先搜索标准的编译器 include 目录,则您会得到不正确版本的头文件.为解决这一问题,请确保 include 路径与库路径被设为搜索 directx include 与库路径.另请参见 sdk 中的dxreadme.txt 文件.如果您安装 directx sdk 而您又在使用 visual c++,则可以选择让安装程序为您设置各个 include 路径. 【扩展信息:如何用CRegKey类来操作注册表

问:我在试图编译示例时,为何得到那么多错误消息?

问:我得到关于全局唯一标识符(guid)符号重复或缺失的连接器错误,怎么办?

答:您使用的各种 guid 应该得到一次性定义,且只能定义一次.如果您在插入 directx 头文件之前用 #define 定义 initguid 符号,则会插入 guid 的定义.因此,你应确保只对一个编译单元进行此类操作.这一方法的一个替代方案就是用 dxguid.lib 库进行连接,其中包含所有 directx guid 的定义.如果您使用这一方法(建议),则您永远不要通过 #define 定义 initguid 符号.

问:我能否将指针指向一个到较低版本号的 directx 接口?

答:不能.directx 接口属于 com 接口 .这意味着不要求将较高版本号的接口从相应的低版本号导出.因此, 获得到 directx 对象的一个不同接口的唯一安全方法就是使用接口的 queryinterface 方法.该方法是标准的 iunknown 接口的一部分,所有 com 接口必须从其导出.

问:我能在同一应用程序中将 directx 8 组件与directx 7 或更早的组件混用吗?

答:您可以随意混用不同版本的“不同组件”;例如,您可以在将 directplay 8 与 directdraw 7 用在同一应用程序中.但是,您通常不可以将“同一组件”的不同版本混用在同一应用程序中;例如,您不能混用 directdraw 7 与 direct3d 8 (鉴于这些实际上是同一组件,因为 directdraw 已被含入 directx 8 的 direct3d).

问:release 或 addref 方法的返回值有何含义?

答:返回值将是对象的当前参照计数.但是,com 规范声明,您不应依赖该返回值;该值通常仅供用于调试目的.您观察到的值可能并非所期待的,因为各种其它系统对象可能保持着对你所创建的 directx 对象的参照.因此,您不应编写反复调用 release 的代码,一直到参照计数为零,因为此时可以将对象释放,即使另一组件可能仍旧在对其进行参照.

问:我释放 directx 接口的次序很重要吗?

答:应当没有问题,因为 com 接口是参照计数的.但是,在某些 directx 版本中,接口的释放次序有一些已知的缺陷.安全起见,在可能的情况下,建议您以与创建时相反的次序释放接口.

问:智能指针是什么,我要用它们吗?

答:智能指针是一个 c++ 模板类,旨在封装指针功能.尤其有一些标准智能指针类,用于封装 com 接口指针.这些指针自动进行 queryinterface,而不是进行造型,并替您处理 addref 与 release.
...   下一页

    摘要: 引言   高层着色语言(hlsl)是directx® 9最为强力的新组件之一。使用这种标准的高级语言, 在进行着色时编写者可以专注于算法而不用再去理会诸如寄存器的分配,寄存器读端口限制, 并行处理指令等等硬件细节. 除了把开发者从硬件细节中解放出来之外,hlsl 也具有高级语言所有的全部优势,诸如:代码重用容易, 可读性增强以及存在一个优化过的编译器。本书和 shaderx2 - s......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE