Half Life2 引擎渲染系统浅析(1)

一、 绘制 Mesh 流程:
涉及类及接口:
1. CMeshDX8:
继承关系:CMeshDX8->CBaseMeshDX8->IMeshDX8->Imesh
所在工程:\materialsystem\shaderdx8\shaderdx8.dsp
说明:Imesh 存在于 MaterialSystem 工程中
IMesh 中有两个 Draw 方法:
virtual void Draw( int firstIndex = -1, int numIndices = 0 ) = 0; 用于一般绘制
 virtual void Draw( CPrimList *pLists, int nLists ) = 0; 用于批量绘制的(只适用于静态Mesh)
2. CShaderAPIDX8
继承关系:CShaderAPIDX8-> IShaderAPIDX8-> IShaderAPI-> IShaderDynamicAPI
所在工程:\materialsystem\shaderdx8\shaderdx8.dsp
说明:顾名思义这是 d3dapi的封装,需要说明一点的是 hl2 使用宏来决定使用的是 d3d9 还是 d3d8 api,尽管这个工程名为 dx8, 这里使用的是dx9,.
3. CMaterial
继承关系:CMaterial -> IMaterialInternal -> IMaterial
所在工程:\materialsystem\ materialsystem.dsp
说明:绘制物体的属性的容器,包括渲染状态、使用纹理、着色器。
4. CShaderSystem
继承关系:CShaderSystem-> IShaderSystemInternal-> IShaderInit, IShaderSystem
所在工程:\materialsystem\ materialsystem.dsp
说明:负责引擎的着色控制,管理着色动态链接库,管理渲染状态设置等。
5.各种着色器实现类
继承关系:着色器实现类-> CBaseShader-> IShader
所在工程:\materialsystem\stdshaders\stdshader_*.dsp
说明:实现不同的物体着色方式。
具体流程:
 CmeshDX8::Draw()
->CbaseMeshDX8::DrawMesh()
->IShaderAPI::DrawMesh()
->Imaterial::DrawMesh()
->IshaderSystem::DrawElements()
->Ishader::DrawElements()
->着色器实现类::OnDrawElements()
-> CBaseShader::Draw( )
->IshaderSystem::DrawSnapshot()
    ->IshaderAPI::RenderPass()
    ->ImeshDX8::RenderPass()
    ->调用 DIP
如有纰漏,恳请赐教。
Advertisements
此条目发表在Uncategorized分类目录。将固定链接加入收藏夹。

发表评论

Fill in your details below or click an icon to log in:

WordPress.com 徽标

You are commenting using your WordPress.com account. Log Out /  更改 )

Google+ photo

You are commenting using your Google+ account. Log Out /  更改 )

Twitter picture

You are commenting using your Twitter account. Log Out /  更改 )

Facebook photo

You are commenting using your Facebook account. Log Out /  更改 )

Connecting to %s