2D中最基本的是渲染一个图片,OpenGL接口中想到的有以下几种方式:
1. glDrawPixels直接将图像数据写到颜色缓冲区中,不够灵活,而且移动设备端不支持。
2. draw_texture_quadopengles1.0标准支持,
1)将图像数据上传到OpenGL服务器显存,创建纹理对象;
2)将顶点数据上传到OpenGL服务器显存,然后走OpenGL固定流水线最终显示到屏幕。
这种传统做法缺点:每次绘制都需要将顶点上传到opengl显存,顶点上传需要CPU的参与,会导致GPU阻塞等待。。。纹理对象只需一次即可缓存在显存中。
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参见:
结论4 > 3 > 2 > 1
相关阅读:
Ubuntu 13.04 安装 OpenGL
如何在Ubuntu使用eclipse for c++配置OpenGL