OpenGL_ES 理解状态机

OpenGL ES的学习,很多人,或者说大多数人,先了解到的是,它是一个状态机。


直到现在,我才明白状态机的真正含义,原来以为就是简单的上下文记录着所有状态,其实这是不全面的理解,更重要的上一个上下文的概念。
尤其像渲染缓冲区、纹理单元、顶点缓存对象等,相关的API操作并未提供明了的参数,指定是针对谁操作的,其实是根据状态记录来选择的。
这可能也是为什么OpenGL ES学起来要难的原因吧。

打个比方,一个屠夫,卖猪肉、牛肉、羊肉,也或者挂着羊头卖狗肉?这个不行,状态机对不上啊,哈哈哈!
当有人要买猪肉时,那么屠夫就在猪肉案板上,把一片子猪肉摆上来,开始按猪的身体结构开剔,开剁;
又来人要买另一片子猪肉,那么这个屠夫只好把前一块猪肉剩下的从案板上挪下去,再把这片子新的猪肉挪上来。
有可能有的人要的少,那么再把前一片肉卖剩下的拿上来,继续操作。

等到有买猪肉和羊肉时,猪肉得用猪肉的案板,羊肉有可能有牛肉的案板,这两个肉都有山味儿,应该问题不大,就像颜色缓存和深度缓冲一样。

好了,以上的描述太清楚不过了,无论你屠夫怎么动家伙,砍、剁、剔、割、片这些刀法,都是针对案板上的肉进行的,那么具体操作的是哪块儿肉,那就得看客人要的哪块肉,就把它拿到案板上来。

好了,到此为止,这个案板就是状态机,屠夫永远是针对案板上的肉操作,案板记录着要切的肉,这就是状态机的另一种理解。

也就是这个状态机的道理理解浅了,致使一直没有明白很多操作是干什么的只能先死记硬背,而终了还是没掌握。



一个shader只是渲染管线功能的一部分,可以有很多shader。
通过api,可以让shader跟C/C++代码交互。
而且以我的学习经验,一点要区分,CPU内存(客户端)和GPU内存(服务端)。
shader是完全在GPU内存运行的


一次完整的渲染管线里面也是分多个不同的阶段,shader也是分不同的种类的,某一种shader就对应某一个阶段。比如vertex shader就对应渲染管线中的顶点处理阶段。如果你写了使用了vertexshader,那么他就会调用你写的这个shader来处理,否则就直接调用固定管线来处理

你可能感兴趣的:(OpenGL_ES 理解状态机)