Вреден ли отбрасывание для производительности программы в OpenGL?

Я читал эту статью, и автор пишет:

Вот как писать высокопроизводительные приложения на каждой платформе в два простых шага:
[...]
Следуйте лучшим практикам. В случае Android и OpenGL это включает такие вещи, как "пакетные вызовы рисования", "не использовать отбрасывание во фрагментных шейдерах" и т. д.

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

Не мог бы кто-нибудь объяснить, почему и когда использование discard может считаться плохой практикой, и как discard + depthtest сравнивается с alpha + blend?

Edit: После получения ответа на этот вопрос я провел некоторые испытания, рендерингом фонового градиента с текстурированным квадом поверх него.

  • Используя GL_DEPTH_TEST и фрагментный шейдер, заканчивающийся строкой "if( gl_FragColor.a " дало около 32 fps.
  • Удаление оператора if/discard из фрагментного шейдера увеличило скорость рендеринга примерно до 44 fps.
  • Использование GL_BLEND с функцией смешивания "(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)" вместо GL_DEPTH_TEST также дало около 44 fps.

22
задан Jave 17 December 2011 в 20:37
поделиться