• Tag Archives MagicEngine компоненты
  • Реализация системы сигнал-слот

    Posted on by admin

    MagicEngine использует сигналы для реализации событий.

    Сигнал генерируется в ответ на некоторое событие, он несет в себе информацию об этом событии. Слот  это функция, которая вызывается в ответ на определнный сигнал.

    Для сигналов и слотов в движке MagicEngine были выставлены следующие требования:

    1. Сигналы ничего не знают о слотах в которые они отправляются
    2. Сигналы несут в себе некоторые обобщенные данные
    3. Слот знает какие данные он хочет получить от сигнала
    4. Слот незнает кто отправил сигнал
    5. Допускаются множественные соединения (сигнал может быть присоединен к разным слотам, и к 1 слоту может быть прикреплено несколько сигналов)
    6. Сигналы и слоты имеют имена.

    Continue reading  Post ID 68


  • Perfomance Counters

    Posted on by admin

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

    Но сейчас пойдет речь не об общем варианте счетчика, а об одном специализированном: счетчик  FPS.

    К любому PerfomanceCounter, который планируется оставить в релизной версии, всегда следует применять требование быстродействия, тобишь он не должен работать медленно. Но вот критерий медленно слегка условен)

    На данный момент думаю реализовать так: считать время за которое отрисуется  150 кадров. При скорости в 30 фпс это дает обновление  раз в 5 секунд.

    Еще была идея считать время отрисовки 1 кадра, но по моему тут будет слишком большой оверхед,  хотя такой счетчик былбы удобен, если вести статистику по последним N кадрам — для определения моментов, в которые произошло «замирание».

    Итак счетчик FPS:

    Будет содержать 1 параметр: кол-во кадров для которых надо рассчитать время и 1 слот — новый кадр. Строить его надо явно на основе уже имеющегося scorefield, который переименовать в counter )