现代opengl的绘制方式
在opengl1.5以前,用ogl画图经常是glBegin,glClolor glVertex glEnd这些个api,现在ogl4.x以上,基本上都是讲
vbo tbo vao glsl 这些陌生东西了,往往书上说GPU编程,可编程管线。应该说现在ogl是有个计算机绘图的硬件模型的
,gpu模型对应的是opengl流水线,顶点几何片元处理器,cpu总线gpu一起构成了服务器客户端架构的绘图主从计算结构
,所以一般ogl书上讲ogl的绘制api是在和gpu远程通信,发指令,要gpu发挥水平,就要想办法减少ogl api 的调用次数,
绘制的同样式的图元要合在一起尽量放到vbo中。当然vbo合在一起也要花时间的,就要有个折中的最小vbo大小,即能保证
发送到gpu的ogl少,又能满足fps,修改延迟的要求,这就是个绘图几何数据的组织策略性的问题了,像opengl. org的wiki有讲batch的例子,u3d有自动批节点,还有3ds max很多画图软件都是这样的,即图元中同样显示样式是少数的,可以采用上述策略,当vbo中的图元变多了,glDrawArray Elements api调用倍数减少,然后通过glsl来修改每个图元,gpu这时可以发挥它的一刀切计算特性了。当然gpu可绘制的图元个数也是有上限的,如果每个图元都不一样也只能每个发给gpu一次,只能说这时gpu也很无可奈何。