изменчивая графика при рисовании xna на элементе управления winforms - PullRequest
2 голосов
/ 31 августа 2009

Я рисую проект xna на элементе управления winforms, используя следующий код:

this.GraphicsDevice.Present(MainForm.GamePanelHandle);

Этот элемент управления winforms помещается в развернутую форму, скрывая панель задач с помощью следующего кода:

this.FormBorderStyle = FormBorderStyle.None;
this.WindowState = FormWindowState.Maximized;

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

Есть ли какие-нибудь приемы, которые я мог бы использовать для ускорения работы xna при встраивании в полноэкранную форму winforms?

Ответы [ 2 ]

1 голос
/ 31 августа 2009

Вы пробовали установить:

DoubleBuffered = true;

в обработчике загрузки вашей формы?

Это, по крайней мере, поможет с рисованием формы. Я не уверен, повлияет ли это на материал XNA, но стоит попробовать.

0 голосов
/ 17 сентября 2009

Если вы отображаете развернутую форму и даже скрываете панель задач, почему бы не перейти в настоящий полноэкранный режим? Что вы получаете, используя оконный режим, который выглядит как полноэкранный? Делая это, вы, безусловно, уменьшаете частоту кадров.

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

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

Кроме того, если вы используете встроенную видеокарту (т.е. менее мощную), вам понадобится каждый цикл обработки GPU и ЦП, который вы можете получить.

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

Вы можете также рассмотреть возможность установки приоритета процесса вашего приложения на AboveNormal или, возможно, даже High. Помните, что при этом другие приложения будут реагировать медленнее, пока ваше приложение работает. Во избежание нестабильности системы также рекомендуется избегать использования RealTime.

В .NET это можно сделать с помощью свойства Process.PriorityClass процесса:

// Set the current application (process) priority to high.
Process.GetCurrentProcess().PriorityClass = ProcessPriorityClass.High;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...