Я делаю игру OpenGL для Android. До сих пор я использовал только фиксированный конвейер функций, но я рендерил простые вещи.
Фиксированный конвейер функций включает в себя множество вещей, которые мне не нужны Поэтому я думаю о реализации шейдеров в моей игре, чтобы упростить конвейер OpenGL, если он может повысить производительность.
Лучшая производительность = лучшее время автономной работы, если fps не ограничен программным пределом, а не аппаратной мощностью.
opengl
android
shaders
performance
kravemir
источник
источник
Ответы:
На самом деле здесь нет вопроса, за исключением темы, но повышение производительности и времени автономной работы могут быть совершенно разными вещами. Кроме того, улучшилось по сравнению с чем? По сравнению с фиксированной функцией конвейера? По сравнению со сложными шейдерами?
Простые шейдеры должны давать более высокую частоту кадров (при условии, что ваша частота кадров ограничена пропускной способностью графического процессора, а не частотой обновления экрана) по сравнению со сложными шейдерами, что может показаться более высокой производительностью. Это не обязательно увеличит время автономной работы, хотя вы все равно могли бы использовать 100% -ную мощность графического процессора / процессора, но вы будете иметь более высокую частоту кадров, потому что меньше каждого кадра.
По сравнению с фиксированной функцией конвейера ... кто знает? В настоящее время многие производители оборудования реализуют конвейер фиксированных функций в терминах шейдеров, поэтому вы просто снова сравниваете простые и сложные шейдеры.
источник
У меня нет современных данных о потреблении энергии смартфоном, но я думаю, что CPU и GPU должны быть где-то на одном уровне. Поправь меня, если я ошибаюсь.
Как правило, попытка оптимизировать части вашего кода, которые зависят от производительности, - это всегда хорошо, не только потому, что вы экономите время работы от батареи, но и потому, что вы можете использовать устройства с менее мощным оборудованием. Я также всегда призываю людей использовать OpenGL ES 2.0 / OpenGL 3.0 для игр, потому что, как вы сказали, мощь шейдеров сводит усилия к минимуму и обеспечивает гораздо большую гибкость.
Но, исходя из предположения, что вы визуализируете некоторые 2D-спрайты, я бы сказал, что графический процессор в основном находится в состоянии ожидания. Это означает, что процессор может оказать большее влияние на время автономной работы, чем графический процессор, поэтому здесь не следует ожидать слишком положительных результатов. Я бы порекомендовал вам попробовать улучшить ваши алгоритмы, работающие на ЦП, прежде чем оптимизировать алгоритмы на GPU, но я бы также использовал шейдеры для большей гибкости. По крайней мере, если вы можете игнорировать устройства без поддержки OpenGL ES 2.0 (опять же, у меня нет цифр ^^).
источник