附录A:WebGL中无需交换缓冲区
交换缓冲区
交换缓冲区是什么?
OpenGL中实际有两个颜色缓冲区:
- 后台颜色缓冲区
- 实际绘制对象
- 前台颜色缓冲区
- 后台绘制完后,会将内容复制到前台
- 因为直接在前台绘制会导致屏幕上出现一些视觉假象
后台绘制完后,将内容复制到前台,就叫做 交换缓冲区,
实质上是 交换指针
双缓冲区方法的调用机制
双缓冲区方法主要就是用来 切换前台与后台缓冲区的,
不同的系统有不同的调用机制:
自动调用
显式调用
- 调用时机:在后台缓冲区绘制完一帧后
- 如glutSwapBuffers()或eglSwapBuffers()
1
2
3
4
5void display(void){
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
draw();
glutSwapBuffers(); //显示交换颜色缓冲区
}
WebGL为什么不用交换缓冲区?
因为WebGL只有一个颜色缓冲区
也就是所谓的 单缓冲区,
单缓冲区之所以可用
对于浏览器来说,JavaScript编写的WebGL程序只是 一次更底层方法的调用经典不用考虑底层调用,浏览器,我的超人
浏览器单缓冲区绘制流程
Step1
JavaScript执行结束并退出
Step2
浏览器检查颜色缓冲区是否被修改
Step3
如果颜色缓冲区被修改过了,将其显示到屏幕上
方法优势
浏览器可以同时控制
- 颜色缓冲区
- 网页上的其他内容