2017-02-08 5 views
1

В настоящее время я реализую алгоритм рендеринга строк, который в основном отображает тексели из атласа текстуры с квадами в качестве основной геометрии. Я должен выбрать один из двух подходов:Меньше вершин против меньше fragmens

  • Оформить каждый глиф строки как отдельный квадрат. Каждая вершина имеет положение и координату текстуры шрифта шрифта. Фрагментный шейдер отображает атлас и в остальном тривиальным.

  • Оформить всю строку как ОДИН квадрат. Вершинный формат должен быть расширен за счет небольшой информации о бухгалтерии (2 поплавка), а фрагментарный шейдер получает пару дополнительных умножений. Накладные расходы на фрагмент ок. 10%.

Что потенциально более результативно?

+0

Почему бы не попробовать бенчмаркинг обоих? Я мог подумать, что вы можете потерять некоторую производительность со вторым подходом, потому что квадратики нельзя рисовать параллельно. – Steeve

+0

Мое предположение заключалось в том, что: а) количество вершинных данных, отправленных в gpu (что должно выполняться в каждом кадре), ниже (хотя я не знаю, учитывается ли это для gles и разделяемых архитектур памяти) и b) Фрагменты могут все еще обрабатываться параллельно, не так ли? – user5024425

+0

Со вторым вариантом, как вы просматриваете правильные тексели в шейдере фрагмента? Если он вводит зависимую текстуру, то это может быть большим штрафом за производительность на многих старых устройствах OpenGLES. Как правило, сокращение работы фрагментарного шейдера обычно является способом, но измерение - единственный способ убедиться. – Columbo

ответ

0

Для большинства графических материалов на экране относительно мало текста, поэтому, если вы не визуализируете тысячи символов в каждом кадре, я бы не стал слишком беспокоиться об этом.

Единственное, что вам нужно сделать, это пакетный рендеринг глифов в небольшое количество вызовов glDraw*() на стороне процессора; Я видел много контента, чтобы сделать один глиф за ничью, который безумно дорог - не делайте этого!

+0

У меня уже есть все в одном призыве. Я смотрю на перспективу рендеринга сотен строк с десятью тысячами глифов. – user5024425

+0

Я подозреваю, что единственный разумный ответ - «проверить его» на платформах, которые вам интересны. 10s из К-глифов, составляет 40 с K вершин, которые начнут становиться значительным куском производительности на некоторых мобильных платформах нижнего уровня. – solidpixel