Эффективность Renderer - PullRequest
       6

Эффективность Renderer

2 голосов
/ 15 ноября 2010

Хорошо, у меня есть класс рендерера, который имеет все виды специальных функций, вызываемых остальной частью программы:

  • DrawBoxFilled
  • DrawText
  • DrawLine
  • Еще около 30 ...

Каждая из этих функций вызывает glBegin / glEnd по отдельности, что, как я знаю, может быть очень неэффективно (даже не рекомендуется). Так или иначе, я планирую полное переписывание рендерера, и мне нужно знать наиболее эффективные способы настройки функций так, чтобы, когда что-то вызывает это, оно рисовало все сразу, или все остальное, что ему нужно было сделать, так оно и будет выполнить большинство эффективно. Заранее спасибо :)

Ответы [ 2 ]

6 голосов
/ 15 ноября 2010

Эффективный способ рендеринга, как правило, заключается в использовании VBO (объектов буфера вершин) для хранения ваших данных вершин, но это действительно имеет смысл, если вы визуализируете (в основном) статические данные.

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

4 голосов
/ 15 ноября 2010

Самый эффективный способ - вообще не выставлять такие низкоуровневые методы.Вместо этого вам нужно построить граф сцены , представляющий собой структуру данных, которая содержит представление всей сцены.Вы обновляете граф сцены в своем методе «update», а затем визуализируете все это за один раз в своем методе «render».

Другой, немного другой подход - перестроить весь граф сцены в каждом кадре.Это имеет то преимущество, что после составления графа сцены он не меняется.Таким образом, вы можете вызывать ваш метод "рендеринга" в другом потоке, пока ваш метод "обновления" проходит и одновременно создает сцену для следующего кадра .

Многие израсширенные эффекты просто невозможны без полного графа сцены.Вы не можете сделать отображение теней, например (которое требует, чтобы вы визуализировали сцену несколько раз под другим углом), вы не можете сделать отложенный рендеринг, оно также делает все, что зависит от отсортированного порядка рисования (например, альфа-смешение)очень сложно.

Судя по именам методов, похоже, что вы работаете в 2D, поэтому, хотя отображение теней, вероятно, не слишком высоко в вашем списке объектов, отложенный рендеринг с альфа-смешиванием может быть.

...