我正在为OpenGL应用程序编写文本渲染器。在运行时可以调整大小、颜色、字体和抗锯齿,因此多种字体可以同时出现在屏幕上。但是,对于每个字符串和属性的组合,分配一个纹理显得过于繁琐。然而,任何给定时间屏幕上显示的字符串只是整个数据库的一小部分。
这给了我机会创建一个缓存,用于缓存逐帧打印的字符串。我们规定只使用一个纹理来完成整个操作,因为创建多个纹理的缓存将导致每次从缓存中打印不同的字符串都要进行纹理交换,这会产生额外的开销。
因此,我有一个2048x2048的纹理,我可以在其中放置任何我能适合的字符串,因为它们被应用程序请求进行缓存。我很快意识到,在二维空间中跟踪可用空间并不容易。
我一直在研究最佳适合和下一步适合等算法,但这些似乎仅适用于1D空间。
那么我该如何在OpenGL中管理这个缓存纹理呢?
编辑:我后来了解到这是“2D装箱问题”的实例。
这给了我机会创建一个缓存,用于缓存逐帧打印的字符串。我们规定只使用一个纹理来完成整个操作,因为创建多个纹理的缓存将导致每次从缓存中打印不同的字符串都要进行纹理交换,这会产生额外的开销。
因此,我有一个2048x2048的纹理,我可以在其中放置任何我能适合的字符串,因为它们被应用程序请求进行缓存。我很快意识到,在二维空间中跟踪可用空间并不容易。
我一直在研究最佳适合和下一步适合等算法,但这些似乎仅适用于1D空间。
那么我该如何在OpenGL中管理这个缓存纹理呢?
编辑:我后来了解到这是“2D装箱问题”的实例。