Я новичок в этом мире slimDX (и пишу в стеке), и столкнулся с вашим вопросом, основанным на той же проблеме. Я знаю, что это VB, а вы используете C #, но у меня все получилось, заметьте, вам понадобится оригинальное описание оконного режима:
Private Sub Form_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
If e.Alt And e.KeyCode = Keys.Enter Then
Dim isFull As Boolean
swapChain.GetFullScreenState(isFull, Nothing)
swapChain.SetFullScreenState(Not isFull, Nothing)
swapChain.ResizeTarget(swapChainDescription.ModeDescription)
End If
End Sub
Я не программист на C #, но вот мое мнение:
form.KeyDown += (o, e) =>
{
bool Full;
swapChain.GetFullScreenState(out Full, Null);
swapChain.SetFullScreenState(!Full, Null);
swapChain.ResizeTarget(swapChainDescription.ModeDescription);
}
Надеюсь, кто-нибудь придет и поправит меня, если я ошибаюсь или вы можете помочь.
В принципе, если я правильно понимаю, он не ищет описание режима, в котором он уже находится, что вы и сделали. Вы получили ThisOut и передали ThisOut, а ThisOut содержит полноэкранный флаг, основанный на природе метода SetFullScreenState. Хотя это SlimDX, все это действительно MS DX, так что вот ссылка:
http://msdn.microsoft.com/en-us/library/bb174579%28v=vs.85%29.aspx
Перейдите по ссылкам внутри статьи, чтобы узнать больше.
Обратите внимание, что вы должны передать значение Null, если вы не используете полноэкранный режим. Вы передали что-то отличное от Null ... если быть точным, существующая цель рендеринга. Существующая цель рендеринга теперь установлена в полноэкранный режим. Передача Null (или Nothing, потому что это VB) в качестве предназначенной функции работает просто отлично. Принимая мое оригинальное, оконное, описание и повторно передавая режим, который является оконным и не полноэкранным, все работает как надо.