一、问题描述
在OpenGL中,绘制字体通过纹理贴图的方式。一个场景中有200个单词,按照正常做法:一个单词生成一个贴图,指定Quad四个顶点纹理坐标,最后把数据传给OpenGL,进行绘制。
OpenGL顶点数组是客户端-服务器模式:客户端是当前应用程序;服务器端包含三部分:链接到应用程序中的OpenGL库、在操作系统内核中的OpenGL驱动、以及GPU。
绘制200个单词中,每个单词都需要进行两次数据传输:
- 将保存在内存中的顶点数据,通过CPU 上传给 服务器端缓存中。
- 将保存爱内存中的纹理数据,通过CPU 上传给 服务器端缓存中。
二、解决方案
三、实例
google code上开源项目freetype进行了不错的尝试。http://code.google.com/p/freetype-gl/
freetype-gl :A quick OpenGL/Freetype example for displaying a unicode text using a (single) vertex buffer. The idea is simply to tightly pack every necessary glyphs into a single texture and to generate a single vertex buffer to draw the text.
参考文献:
1. Batch, Batch, Batch:” What Does It Really Mean
2. OpenGL Vertex Buffer Object :http://www.songho.ca/opengl/gl_vbo.html