DirectX9 渲染设置

固定管线中:

  1.为设备创建一个顶点和索引缓存

  HRESULT IDirect3DDevice9::CreateVertexBuffer(
    UINT Length,
    DWORD Usage,
    DWORD FVF,
    D3DPOOL Pool
    IDirect3DVertexBuffer9** ppVertexBuffer,
    HANDLE* pSharedHandle
  );
  ppVertexBuffer:缓存
  FVF:缓存的定点格式

2.读写缓存:
  HRESULT IDirect3DVertexBuffer9::Lock(
      UINT OffsetToLock,
      UINT SizeToLock,
      BYTE** ppbData,
      DWORD Flags
      );

步骤:
  锁缓存
  读写缓存
  解锁缓存

3.设置资源流(指定某某缓存为流入该设备渲染的缓存)
HRESULT IDirect3DDevice9::SetStreamSource(
UINT StreamNumber,
IDirect3DVertexBuffer9* pStreamData,//渲染这个缓存
UINT OffsetInBytes,
UINT Stride
);

4.设置顶点格式(在这里我们指定后面用来绘图调用的顶点的顶点格式。)
_device->SetFVF( D3DFVF_XYZ | D3DFVF_DIFFUSE | D3DFVF_TEX1 );
它也是后面顶点声明用的格式。告诉GPU,顶点结构中每个数据是什么意思,以后传进shader也用这个意思来传

5.设置索引缓存
_device->SetIndices( _ib ); // 传递一个索引缓存指针的拷贝

6.用指定的这些缓存绘制
IDirect3DDevice9::DrawPrimitive
这个方法不使用索引信息绘制图元。
IDirect3DDevice9::DrawIndexedPrimitive
这个方法使用索引信息来绘制图元。
GPU会用设置好的它的资源绘制出指定的东西来

可编程管线:
1.顶点着色器(vertex shader)
是一个在图形卡的GPU 上执行的程序,
它替换了固定功能管线(fixed function pipeline)中的变换(transformation)和光照(lighting)阶段。

2.顶点声明:同fvf

3.描述顶点声明 :D3DVERTEXELEMENT9
typedef struct _D3DVERTEXELEMENT9 {
BYTE Stream;
BYTE Offset; // Offset——偏移,按字节,相对于顶点结构成员的顶点分量的开始
BYTE Type;
BYTE Method;
BYTE Usage;
BYTE UsageIndex;
} D3DVERTEXELEMENT9;

为 D3DVERTEXELEMENT9 数组

4.创建顶点声明:IDirect3DVertexDeclaration9

HRESULT IDirect3DDevice9::CreateVertexDeclaration(
CONST D3DVERTEXELEMENT9* pVertexElements,
IDirect3DVertexDeclaration9** ppDecl
);

IDirect3DVertexDeclaration9 返回的顶点声明


5.设置顶点声明
Device->SetVertexDeclaration( _decl );

6.语义:
作用是,用来定义一个顶点声明的元素到顶点着色器的Input 结构的数据成员的映射

7.编译着色器:D3DXBuffer
D3DXCompileShaderFromFile
返回返回一个 D3DXBuffer 指针表示着色器代码二进制

8.创建顶点着色器: IDirect3DVertexShader9
HRESULT IDirect3DDevice9::CreateVertexShader(
const DWORD *pFunction,
IDirect3DVertexShader9** ppShader
);
pFunction ——已编译着色器代码的指针
ppShader ——返回一个IDirect3DVertexShader9 接口的指针

9.设置顶点着色器:
为该设备渲染时用的顶点着色器
HRESULT IDirect3DDevice9::SetVertexShader(
IDirect3DVertexShader9* pShader
);
10.销毁顶点着色器

posted @ 2016-05-08 14:54  shinymood  阅读(809)  评论(0编辑  收藏  举报