Я не уверен, должен ли я выполнять побитовые операции и деление внутри шейдера фрагментов OpenGL или перед запуском шейдера (вычислять на C++ и передавать как единое целое). То, что я на самом деле делаю, - это преобразование шестнадцатеричного int, представляющего значение RGB, в цвет, который можно использовать для рисования в OpenGL. Что обычно будет быстрее [в большинстве систем]?Быстрее ли делать побитовые внутри шейдера OpenGL или предварительно на C++?
ответ
Если это одно значение, рассчитанное для вызова ничьей, то сделайте это на C++.
Графические процессоры безумно быстрые, но нет смысла подсчитывать одинаковое значение для миллионов вершин или фрагментов.
Однако есть вопрос, как данные передаются. Если вы подозреваете, что есть разница, попробуйте оба подхода и прокомментируйте их.
Как профиль GLSL? – Accumulator
Я просто думал о частоте кадров, хотя это подход к санному молоту. – geofftnz
@geofftnz: Помните, что компилятор GLSL также может выполнять оптимизацию. Если вы выполняете одну операцию много раз, она может быть переписана в другую операцию полностью в некоторых случаях. Кроме того, для очень дешевых инструкций шум в частоте кадров от других факторов, таких как система окон, может быть более значительным, чем влияние производительности на шейдер. – Bartvbl
Является ли цвет атрибутом per-vertex, или вы проходите в текстуре? – Nonanon