HL2源码分析(Render主线)
fohoo 2003-12-15 04:05:42 from: http://www.gameres.com/bbs/showthread.asp?threadid=3150 (还有点图)
希望可以让在看HL2的同志们省点时间
Author:fohoo
-------------------------------------------------------------------------------------------------
//render call back procedure:
CHost_RunFrame (engine.dll)
Host_RunFrame
_Host_Run_Frame
_Host_RunFrame_Render
Host_UpdateScreen
SCR_UpdateScreen
V_RenderView
g_clientDll->View_Render (engine.dll)
CHLClient::View_Render (client.dll)
CViewRender::Render
CViewRender::RenderView
ViewDrawScene
WaterDrawWorldAndEntities
CViewRender::ViewDrawScene_NoWater
(ViewDrawScene_AboveWater , ViewDrawScene_EyeUnderWater)
CViewRender::WaterDrawHelper
{
CViewRender::BuildWorldRenderLists (client.dll)
{
CVRenderView::BuildWorldLists (engine.dll)
{
CRender::BuildWorldLists
{
R_BuildWorldLists //Main entry points for starting + ending rendering the world
{
Shader_WorldSurface
}
}
}
CVRenderView::DrawIdentityBrushModel (engine.dll)
{
R_DrawIdentityBrushModel
{
Shader_WorldSurface
}
}
}
CViewRender::DrawWorld
{
CVRenderView::DrawWorldLists
{
CRender::DrawWorldLists
{
R_DrawWorldLists //Draws the list of surfaces build in the BuildWorldLists phase
{
Shader_WorldEnd
{
//some action as mesh.build, mesh.draw
}
}
}
}
}
DrawOpaqueRenderablesInWater
DrawOpaqueRenderable
CModelRender::RenderModel (engine.dll)
CStudioRender::DrawModel (studiorender.dll)
CStudioRender::R_StudioRenderModel
CStudioRender::R_StudioRenderFinal
{
IMesh.Draw
CShaderAPIDX8.DrawMesh
CMaterial.DrawMesh
IShader.DrawElement
...
{
IShaderAPI->BeginPass
IMesh->BeginPass
IShaderAPI->RenderPass
IMesh->RenderPass
D3D->DrawPrimitive()
}
}
}