Show More
Commit Description:
Add timers for Simulation and various engines...
Commit Description:
Add timers for Simulation and various engines Starting to add additional timers for different stages of the process of updating in order to get more insight into what is slowing it down. The update takes 9ms, which is much longer than it used to. Engine-specific timers are coming later.
File last commit:
Show/Diff file:
Action:
FNA/src/FNAPlatform/FNAWindow.cs
183 lines | 3.5 KiB | text/x-csharp | CSharpLexer
Early working version (including all dependencies, lol).
r0 #region License
/* FNA - XNA4 Reimplementation for Desktop Platforms
* Copyright 2009-2020 Ethan Lee and the MonoGame Team
*
* Released under the Microsoft Public License.
* See LICENSE for details.
*/
#endregion
#region Using Statements
using System;
using System.ComponentModel;
#endregion
namespace Microsoft.Xna.Framework
{
/* This class exists because the XNA window handle is an abstract class.
*
* The idea is that each platform would host its own GameWindow type,
* but a lot of this can be handled with static functions and a native
* window pointer, rather than messy things like a C# Form.
*
* So, when implementing new FNAPlatforms, just use this to store your
* window pointer and the functions will allow you to do your work.
*
* -flibit
*/
internal class FNAWindow : GameWindow
{
#region Public GameWindow Properties
[DefaultValue(false)]
public override bool AllowUserResizing
{
get
{
return FNAPlatform.GetWindowResizable(window);
}
set
{
FNAPlatform.SetWindowResizable(window, value);
}
}
public override Rectangle ClientBounds
{
get
{
return FNAPlatform.GetWindowBounds(window);
}
}
public override DisplayOrientation CurrentOrientation
{
get;
internal set;
}
public override IntPtr Handle
{
get
{
return window;
}
}
public override bool IsBorderlessEXT
{
get
{
return FNAPlatform.GetWindowBorderless(window);
}
set
{
FNAPlatform.SetWindowBorderless(window, value);
}
}
public override string ScreenDeviceName
{
get
{
return deviceName;
}
}
#endregion
#region Private Variables
private IntPtr window;
private string deviceName;
private bool wantsFullscreen;
#endregion
#region Internal Constructor
internal FNAWindow(IntPtr nativeWindow, string display)
{
window = nativeWindow;
deviceName = display;
wantsFullscreen = false;
}
#endregion
#region Public GameWindow Methods
public override void BeginScreenDeviceChange(bool willBeFullScreen)
{
wantsFullscreen = willBeFullScreen;
}
public override void EndScreenDeviceChange(
string screenDeviceName,
int clientWidth,
int clientHeight
) {
string prevName = deviceName;
FNAPlatform.ApplyWindowChanges(
window,
clientWidth,
clientHeight,
wantsFullscreen,
screenDeviceName,
ref deviceName
);
if (deviceName != prevName)
{
OnScreenDeviceNameChanged();
}
}
#endregion
#region Internal Methods
internal void INTERNAL_ClientSizeChanged()
{
OnClientSizeChanged();
}
internal void INTERNAL_ScreenDeviceNameChanged()
{
OnScreenDeviceNameChanged();
}
internal void INTERNAL_OnOrientationChanged()
{
OnOrientationChanged();
}
#endregion
#region Protected GameWindow Methods
protected internal override void SetSupportedOrientations(DisplayOrientation orientations)
{
/* XNA on Windows Phone had the ability to change
* the list of supported device orientations at runtime.
* Unfortunately, we can't support that reliably across
* multiple mobile platforms. Therefore this method is
* essentially a no-op.
*
* Instead, you should set your supported orientations
* in Info.plist (iOS) or AndroidManifest.xml (Android).
*
* -caleb
*/
FNALoggerEXT.LogWarn("Setting SupportedOrientations has no effect!");
}
protected override void SetTitle(string title)
{
FNAPlatform.SetWindowTitle(window, title);
}
#endregion
}
}