网上关于DX11的文章很多,tut也很容易google到,可有用的就只是些基本的功能性的介绍。其实DX11是紧跟NV的硬件而变的,微软做的就是DEBUG而已(用DX指令或称为语言来和硬件通讯)。至于OGL也做的是同样的工作。微软的范例是基本的功能语言过多的钻研或可能就是浪费生命了,你是跟不上DX的更新节奏的。我做的是打好个基本框架来适应DX、OGL的各种版本的测试包括发布应用,其中也涉及到一个用于的测试游戏范例和一个关卡编辑器。
先来看DX都干什么使的。显卡主要的工作就是显示2D图片和3D内容。它接受的数据类型只有一个“字节”或称为buffer或byte.很多人被包装后的程序弄的无所侍从,去讨论DX和OGL的性能比较之类的。还学习一些很快过时的语法。通过整理可以发现DX数据主要有几大类,1、Buffer类DX9 叫vertex/index;后来又DX10的 constant / struct buffer其实都一个意思buffer等于byte。2、resource类 texture2D/3D/Cube 一样=byte.3、变量类 指的是用户输入的浮点数据也是BYTE。4、运算指令 通过文本形式再经过编译变成机器语言来告诉显卡如何处理这些输入的数据。GSSL、openCL,HLSL和NV的编译器都是干同样的事编译出的机器语言的字节应该是完全相等的,编译后的字节排列标准由硬件厂商制定。
微软的DX输入字节的标准通过打包后的BUffer一次性传入显卡,效能在早期比OGL用CPU逐个输入要高效很多。
所以在我设计程序时就考虑到要做到程序的类型无关性,比如Texture类的制定就只是字节,无论是DX9或DX11都可以读写,存储也是一样,控制大小也很重要,尽量都转化为DDS来存储jpg就直接存了。
Mesh类比较复杂&#