我正在编写一个OpenGL程序,使用freetype2作为文本渲染引擎。使用其LCD亚像素渲染时,我发现渲染结果总是有一些噪点像素,这是为什么?此外,尽管它的手册说LCD模式将生成宽度为3的倍数的缓冲区,但我经常发现宽度为3n+1或3n+2,并且与face->glyph->bitmap->width不一致。
实际上,在尝试和测试了数小时后,我意识到光栅化的字形数据中有一些无关的字节称为“填充”。举个例子,下面的图像是缓冲区中的一个字形数据:(o
/x
是有意义的数据,而.
是无关的)
0 1 2 3 4 5 6 7
0 o x o x o x . .
1 x o x o x o . .
2 o x o x o x . .
3 x o x o x o . .
4 o x o x o x . .
这个缓冲区有三个数字描述其大小,前两个数字很显然:
rows = 5 //since there are 5 rows
width = 6 //since each row has 6 bytes of data
pitch = 8 //the actual width of rows, including "padding"
width
就是实际宽度,那么你就会呈现出扭曲或翻译过的字形。longint
而不是byte
中。R..
的深刻见解仍然给我留下了深刻印象。我想你们可能无法想象我会犯如此基本的错误。我从未使用过FreeType库,所以无法通过个人经验谈论,但也许“噪音”是因为您的文本宽度或左上角文本坐标的计算有误导致的?