简单的理解 SetPassCall :调用DrawCall之前,在绘制此 Pass 前,需要设置的所有渲染状态配置、或是BUFFER设置,都算是 SetPassCall 的内容。或是叫:SetGPUDataBeforeDraw 会更适合理解(在绘制前设置GPU数据,这些数据包括渲染系统,如:DX 或是 OpenGL 的状态值,或是 Buffer 数据)
VBO即Vertex Buffer Object(顶点缓冲对象),顶点数据块,在显存中,可被GPU直接访问。
IBO即Index Buffer Object(索引缓冲对象),又称EBO(Element Buffer Object,元素缓冲对象)。索引数据块,在显存中,可被GPU直接访问。
VAO即Vertex Array Object(顶点数组对象),在显存中,用来记录顶点属性(Vertex Attribute)和IBO的上下文信息。创建并绑定VAO后,后续的顶点属性调用都会储存在这个VAO中。
一般 OpenGL 中,绘制一个对象,就是提供,VBO,IBO(IBO还不一定需要提供,可以使用 DrawArray 直接通过VBO来绘制,如果通过DrawArrayIndex 之类的就需要 IBO 了,前面的 VBO,IBO 也可以通过 VAO 统一绑定后设置),然后指定 shader(VS(顶点着色器),FS(片元着色器),其他的按需提供),就可以调用 DC(DrawCall) API 来绘制就可以了
而 Unity 的 ShaderLab 中可以看到有 Pass 块的代码
其实每个 Pass 块的代码都是一个可以用于完整的 SetDrawState, DrawCall 的过程
因为 ShaderLab 中指定了一部分 DrawCall 前的绘制状态的设置配置,如:ZTest,ZWrite,Cull,Blend,ColorMask,Stencil 等,而 Pass 中的 #param vert XXX, #param frag XXX 就是我们的 VS,FS