В настоящее время я реализую алгоритм рендеринга строк, который в основном отображает тексели из атласа текстуры с квадами в качестве основной геометрии. Я должен выбрать один из двух подходов:Меньше вершин против меньше fragmens
Оформить каждый глиф строки как отдельный квадрат. Каждая вершина имеет положение и координату текстуры шрифта шрифта. Фрагментный шейдер отображает атлас и в остальном тривиальным.
Оформить всю строку как ОДИН квадрат. Вершинный формат должен быть расширен за счет небольшой информации о бухгалтерии (2 поплавка), а фрагментарный шейдер получает пару дополнительных умножений. Накладные расходы на фрагмент ок. 10%.
Что потенциально более результативно?
Почему бы не попробовать бенчмаркинг обоих? Я мог подумать, что вы можете потерять некоторую производительность со вторым подходом, потому что квадратики нельзя рисовать параллельно. – Steeve
Мое предположение заключалось в том, что: а) количество вершинных данных, отправленных в gpu (что должно выполняться в каждом кадре), ниже (хотя я не знаю, учитывается ли это для gles и разделяемых архитектур памяти) и b) Фрагменты могут все еще обрабатываться параллельно, не так ли? – user5024425
Со вторым вариантом, как вы просматриваете правильные тексели в шейдере фрагмента? Если он вводит зависимую текстуру, то это может быть большим штрафом за производительность на многих старых устройствах OpenGLES. Как правило, сокращение работы фрагментарного шейдера обычно является способом, но измерение - единственный способ убедиться. – Columbo