несколько графических форм реального времени в собственных потоках, глобальное ограничение 60 кадров в секунду? - PullRequest
2 голосов
/ 20 августа 2010

Я использую XNA и создаю кучу форм, которые запускают свой собственный «игровой цикл» для обработки рисунков и тому подобного.Каждая новая форма открывается в своем собственном потоке с последующей Application.Run (формой), чтобы заставить поток обрабатывать сообщения для этой формы.

Когда я начинал, я заметил, что, несмотря на то, что я не использовал какой-либо режим ограничения кадров, окно отображало скорость 60 кадров в секунду.Это был номер, к которому я в любом случае стремился, поэтому я оставил его там.

Однако теперь я обнаружил, что при открытии нескольких окон исходные 60 кадров в секунду распределяются между ними равномерно: 2 окна 30 каждое, 3 20каждый и т. д.

Я также пробовал цикл с Application.DoEvents вместо Application.Run, но с теми же результатами.

Кто-нибудь знает, откуда взялся этот предел 60fps, как его преодолеть

Ответы [ 4 ]

0 голосов
/ 21 августа 2010

Вы не сможете воспользоваться многопоточными вызовами отрисовки в GPU. Графический процессор, хотя сам по себе очень хорошо справляется с параллельной обработкой, взаимодействует с процессором только по одной за раз, и все блокируется до тех пор, пока он не завершит поставленную задачу. Два вызова Draw в одном потоке займут столько же времени, сколько два вызова Draw в отдельных потоках. На самом деле медленнее из-за многопоточности.

0 голосов
/ 20 августа 2010

Перейдите в окно настроек графического драйвера.Выключите VSYNC.

0 голосов
/ 20 августа 2010

Вы говорите «формы», что заставляет меня думать, что вы работаете в Windows на рабочем столе и не используете выделенный полноэкранный режим?

Я полагаю, что в Vista и Windows 7 настольный композитор ("dwm") обрабатывает весь фактический рисунок. Вероятно, он работает на скорости 60 кадров в секунду (или меньше, когда на батарее). Я не уверен, почему он разделяет FPS между двумя окнами, но это может быть некоторое взаимодействие блокировки графических вызовов.

0 голосов
/ 20 августа 2010

Я не эксперт по XNA, но звучит так, что вас ограничивает vsync, вы это проверяли?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...