更新于 

附录A:WebGL中无需交换缓冲区

交换缓冲区

交换缓冲区是什么?

OpenGL中实际有两个颜色缓冲区:

  • 后台颜色缓冲区
    • 实际绘制对象
  • 前台颜色缓冲区
    • 后台绘制完后,会将内容复制到前台
    • 因为直接在前台绘制会导致屏幕上出现一些视觉假象

后台绘制完后,将内容复制到前台,就叫做 交换缓冲区
实质上是 交换指针

双缓冲区方法的调用机制

双缓冲区方法主要就是用来 切换前台与后台缓冲区的
不同的系统有不同的调用机制:

  • 自动调用

  • 显式调用

    • 调用时机:在后台缓冲区绘制完一帧后
    • glutSwapBuffers()eglSwapBuffers()
    1
    2
    3
    4
    5
    void display(void){
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    draw();
    glutSwapBuffers(); //显示交换颜色缓冲区
    }

WebGL为什么不用交换缓冲区?

因为WebGL只有一个颜色缓冲区

也就是所谓的 单缓冲区

单缓冲区之所以可用

对于浏览器来说,JavaScript编写的WebGL程序只是 一次更底层方法的调用
经典不用考虑底层调用,浏览器,我的超人

浏览器单缓冲区绘制流程

Step1

JavaScript执行结束并退出

Step2

浏览器检查颜色缓冲区是否被修改

Step3

如果颜色缓冲区被修改过了,将其显示到屏幕上

方法优势

浏览器可以同时控制

  • 颜色缓冲区
  • 网页上的其他内容