交换链,在Opengles就是简单的一句话就能完成前后台显示的刷新和交换,并不需要特定的创建容器,很多细节,并不需要我们进行管理,当然定制性少自由度自然也就不高了。但对于我们真正去了解渲染流程,了解Vulkan交换链上的操作很是必要。
Opengles 交换链
Opengles的交换链的使用是要基于EGL环境上的。通过eglSwapBuffers来实现的。
以下是对egl上交换链上的解析, swapBuffers是要基于EGLDisplay和EGLSurface。
/**
* 现在只使用单缓冲绘制
*/
void EGLCore::swapBuffer() {
//双缓冲绘图,原来是检测出前台display和后台缓冲的差别的dirty区域,然后再区域替换buffer
//1)首先计算非dirty区域,然后将非dirty区域数据从上一个buffer拷贝到当前buffer;
//2)完成buffer内容的填充,然后将previousBuffer指向buffer,同时queue buffer。
//3)Dequeue一块新的buffer,并等待fence。如果等待超时,就将buffer cancel掉。
//4)按需重新计算buffer
//5)Lock buffer,这样就实现page flip,也就是swapbuffer
if (mDisplay != nullptr && mSurface != nullptr) {
eglSwapBuffers(mDisplay, mSurface);
}
}
Vulkan 交换链
Vulkan的