Skia: повторяющийся текстовый рендеринг превращается в блок - PullRequest
0 голосов
/ 21 мая 2019

Я запускаю программу рендеринга текста с использованием 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();
...