我注意到Sublime Text对于某些字体和大小的渲染要比基于Scintilla的编辑器好得多。这是如何实现的?下面是否有一些着名的文字渲染器,或者他们自己开发了吗?
答案 0 :(得分:3)
Sublime Text使用针对特定平台的库进行高度调整的设置来呈现文本。它实际上多年来使用了几个不同的库。我无法找到OSX的任何细节,但在论坛和发行说明中有一些关于Windows / Linux的细节。
在ST3 build 3034中,图形渲染引擎从开罗移植到Skia是noted"。但是,目前尚不清楚是否有自定义文本渲染,或者它是否仅适用于UI元素。
我无法找到版本1的良好参考,但通过论坛对话的点点滴滴,看起来它可能是一个在OpenGL之上编写的自定义渲染引擎。其他论坛帖子指出,所有未来的渲染都是纯软件,因为GPU渲染会导致很多跨平台问题。
我能找到的最佳报价was this:
Sublime Text 2仅使用软件渲染。最终,它在1.x中引起了太多的兼容性问题,并且随着版本2的跨平台问题,这只会增加。尽管如此,我还是会谈谈Sublime Text 1.x。
基本的文本渲染本身是相当标准的:纹理四边形被绘制到屏幕上,每个角色一个。但是,有一些值得注意的细节:
*字符被缓冲,并按颜色排序,以减少状态变化 *大多数OpenGL应用程序将为角色提供单一通道纹理,并在顶部混合所需的颜色。 Sublime Text使用RGB纹理,文本预先组成正确的前景色和背景色。这需要更多内存,但允许使用ClearType,这对于文本编辑器很重要。
Windows使用GDI,在构建2081中添加了一个选项以改为使用DirectWrite。
在构建2170中,Pango被添加为Linux上的渲染,以改进对cjk text的支持。
DirectWrite在构建3127中将GDI替换为Windows上的默认渲染器,除非您使用的是Consolas或Courier New字体。 GDI保持为a rendering option in the settings。