技术采用opengl es3.2

首先不是修改旧有的QWidget，而是兼容旧有的机制，弄新的。


新的机制使用QPainter和QWidget混用，有两种方式，
一是继续使用QWidget，使用opengl是opengl渲染完了之后，读取像素，最后还是通过QWidget的QPainter去绘制，
这个Qt有现成的实现，甚至opengl的代码都不用写，绘图设备换成opengl的绘图设备，参考QCustomplot的实现，
二是直接绘制在QWidget上，把QPainter的渲染结果给opengl,
所有图层给opengl去渲染

一的话Qt有现成的实现，二性能会更高，所以采用方式二


那样渲染的流程就变成了，首先cpu传用户数据给显卡，让显卡渲染数据，然后QPainter渲染数据，传输给GPU。这些操作全异步，
这些操作全部完成后，存在于GPU的各个纹理中，然后然后按照既定顺序，绘制到QWindow上，QWindow包上一层QWidget去给外部使用

同步问题

先把GPU图层需要的数据都传给GPU，使用glFlush异步GPU渲染，使用同步对象，紧接着CPU渲染完，传入给纹理 glFlush使用同步对象，然后两个同步对象都返回
就执行合并opengl指令glFlush

先把GPU图层需要的数据都传给GPU，使用glFlush异步GPU渲染，使用同步对象，紧接着CPU渲染完，Pixel Buffer Objects (PBOs) 用于异步传输像素数据
传入给纹理 glFlush使用同步对象，然后两个同步对象都返回 就执行合并opengl指令glFlush



一个图分为不同的图层，有两种，一种是GPU根据CPU传来的数据做渲染的叫GPU图层，一种是CPU渲染的通过纹理传进来的CPU图层
图层在混合时以纹理的形式混合。
我的方案是，CPU传纹理都是异步传输使用Pixel Buffer Objects (PBOs)，传入给GPU端，这部分采用双缓冲，GPU渲染时把传来的纹理复制
到新的纹理上，这部分加锁（GPU层面上的），然后渲染自己所有的GPU图层，然后混合图层


延迟帧技术





工作流程 先写架构  整体采用纯函数的形式

void createTexture(int& textureId);
void giveToTexture(int textureId, int syncId, void* data, int w, int h);
RenderAble.draw(int textureId);
void wait(int syncId);





// 采用这种方案

先把GPU图层需要的数据都传给GPU，使用glFlush异步GPU渲染，使用同步对象，紧接着CPU渲染完，传入给纹理 glFlush使用同步对象，然后两个同步对象都返回
就执行合并opengl指令glFlush






