Skia:循环文字渲染变成一个块

时间:2019-05-21 13:30:52

标签: real-time text-rendering skia

我正在运行一个使用Skia在每一帧上呈现文本的程序,并且该文本显示为块而不是字母。

auto text_color = SkColor4f::FromColor(SkColorSetARGB(255, 0, 0, 255));
SkPaint paint2(text_color);
canvas->clear(SkColorSetARGB(255,0,255,0));
auto text_blob = SkTextBlob::MakeFromString("Hello, World", SkFont(nullptr, 22));
canvas->drawTextBlob(text_blob.get(), 100, 50, paint2);

Blocks instead of letters

在现实生活中,随着文本的变化,块会闪烁,但始终是块状的。图片是使用以下代码保存的:

auto snapI = surface->makeImageSnapshot();
auto pngImage = snapI->encodeToData();
SkFILEWStream out("foo.png");
(void)out.write(pngImage->data(), pngImage->size());

但是,很奇怪的是,如果我不拍摄每一帧图像而只拍摄一次然后退出,则文本看起来正确。

enter image description here

由于我要清除每个帧上的画布,所以我没想到从单个帧到多个帧会有任何变化。为什么这样渲染文本?

万一重要的话,这是在OpenGL画布上发生的,因此初始化如下:

auto context = GrContext::MakeGL();
auto info = SkImageInfo::MakeN32Premul(width, height);
auto surface = sk_sp(SkSurface::MakeRenderTarget(context.get(), SkBudgeted::kNo, info));
auto canvas = surface->getCanvas();

0 个答案:

没有答案