Выполнение функции рисования - PullRequest
1 голос
/ 22 июля 2011

Я создаю небольшой движок / фреймворк для создания игр. Это довольно простой вопрос, но я не нашел ответа, поэтому я бы хотел посоветоваться с вами.

Есть некоторые class es, полученные из Graphic с функцией Draw(...). Draw() будет называться десятки или даже сотни раз (если есть много спрайтов для рендеринга). Draw() слишком велик, чтобы быть встроенным (10-20 строк).

  1. Мне бы хотелось, чтобы это было virtual (иногда, но довольно редко, я буду использовать полиморфизм *). Я думаю, что это не должно сильно повлиять на производительность, но вы думаете, это должно быть virtual?
  2. Должен ли он иметь некоторые аргументы (2-6), описывающие позицию для рендеринга (и т. Д.)? У меня нет идеи, если передача множества аргументов сделает это медленнее. Может быть, у каждого нарисованного объекта должны быть свои данные о положении / площади?

Самый важный вопрос - 2.

* ех. с анимацией

Ответы [ 2 ]

2 голосов
/ 23 июля 2011

Любой объект, который нужно нарисовать, будет влиять на большое количество пикселей; вполне вероятно, что рисование само по себе займет намного больше времени, чем вызов функции рисования, поэтому издержки на вызов будут незначительными. Не беспокойтесь об этом, пока профилирование не покажет, что это узкое место.

0 голосов
/ 23 июля 2011

Сначала вы должны выбрать в буфере двойной буфер рисования с использованием функций BitBlt, StretchBlt.

  • Если базовый класс объявляет виртуальный как чисто виртуальный, это вовсе не проблема производительности.
  • Да, передача нескольких аргументов может замедлить процесс - поместить их в структуру и передать ссылку / указатель на эту структуру; или используйте общую область (частные переменные в классе).
  • Да, для перерисовки (перерисовки) понадобятся все данные, связанные с объектом - это очевидно!
...