我正在为 OpenGL 应用程序编写文本渲染器。大小、颜色、字体和抗锯齿可以在运行时调整(因此多个字体可以同时出现在屏幕上)。组合太多,无法为字符串和属性的每个组合分配一个纹理。但是,在任何给定时间,整个字符串数据库中只有一小部分会出现在屏幕上。
这使我有机会为逐帧打印的字符串创建缓存。强制要求我在整个操作中只使用一个纹理,因为创建许多纹理的缓存会导致从缓存中打印的每个不同字符串的纹理交换惩罚。
所以我面前有一个 2048x2048 的纹理,我可以在其中放置我可以容纳的任何字符串,因为应用程序出于缓存目的请求它们。我很快意识到跟踪二维空间中的可用空间并非易事。
我一直在研究诸如 Best Fit 和 Next fit 之类的东西,但它们似乎适合一维空间。
如何在 OpenGL 中管理这个缓存纹理?
编辑:从那以后,我了解到这是“2d 打包问题”的一个实例。