opengles 2D渲染性能

2D中最基本的是渲染一个图片,OpenGL接口中想到的有以下几种方式:

1. glDrawPixels

直接将图像数据写到颜色缓冲区中,不够灵活,而且移动设备端不支持。

2. draw_texture_quad

opengles1.0标准支持,

1)将图像数据上传到OpenGL服务器显存,创建纹理对象;

2)将顶点数据上传到OpenGL服务器显存,然后走OpenGL固定流水线最终显示到屏幕。
这种传统做法缺点每次绘制都需要将顶点上传到opengl显存,顶点上传需要CPU的参与,会导致GPU阻塞等待。。。纹理对象只需一次即可缓存在显存中。

3. glDrawTexiOES

opengles1.1 标准支持,具体参见 android sdk :ApiDemos\src\com\example\android\apis\graphics\spritetext\LabelMarker.java中使用了该函数。

该方法既然opengles1.1专门增加的,性能肯定优于draw_texture_quad,个人理解:直接把顶点写入高速显存,顶点上传不需要CPU参与。

4. vertex buffer object 方式渲染

需要opengles1.1支持,相比draw_texture_quad,VBO方式顶点只需要上传一次,在OpenGL显存中建立顶点缓冲区对象

性能是最佳的,尤其是顶点的模型视图变换较复杂。具体vbo参见:http://blog.csdn.net/dizuo/article/details/8364003

结论

4 > 3 > 2 > 1





你可能感兴趣的:(OpenGL,OpenGL技术专栏)