Geometry Shader
要点
- 作用于每个片元(primitive)
- each_outPrimitiveList = GeometryShader(each_primitive.vertexList)
- 不论三角形带还是三角形列表,输入都是一个完整三角形顶点列表
- 离开GS的顶点坐标必须是齐次裁剪空间
- 输出必须预先定义最大顶点数N([maxvertexcount(N)]),且越小越好
- 可以使用GS来制作billboard效果,可以节省四分之三的顶点吞吐
- SV_PrimitiveID:面元索引。可以直接在PS里边加入该输入;如果有GS的话,一定要出现在GS的signature中才能使用它。
- SV_VertexID:顶点索引。VS中即可使用。
用法
- 输出流 SteamOutputObject
- 类型:PointStream/LineStream/TriangleStream
- 总是strip的形式
- 可以选择不输出
- 如果一个strip中的顶点数不能够成一个primitive,那么那个strip将被舍去
- 函数
- 追加顶点:void SteamOutputObject::Append(OutputVertexType v)
- 开始新的三角形带:void SteamOutputObject::RestartStrip()
- 其他同vs和ps
Texture Array
要点
- 在PS中进行Sample的时候,对于Texture2D列表的索引必须是const,所以无法临时更改Sample对象
- 但是使用TextureArray,就可以通过制定z值来索引到
用法
- 制作TextureArray的SRV
- 创建每个Texture:
- 填充 D3DX11_IMAGE_LOAD_INFO
- 从File中读取ID3D11Resource:D3DX11CreateTextureFromFile
- 获取 D3D11_TEXTURE2D_DESC
- 创建TextureArray:
- 根据texture的desc填充desc,ArraySize为所需个数
- 创建ID3D11Texture2D:CreateTexture2D
- 拷贝Texture进入TextureArray:
- 遍历每个texture的每个mip level
- 锁定:context->Map
- 拷贝:context->UpdateSubresource
- 解锁:context->Unmap
- 创建TextureArrayView:
- 填充 D3D11_SHADER_RESOURCE_VIEW_DESC
- dev
- 创建每个Texture: