Show More
Commit Description:
Add missing component and message.
Commit Description:
Add missing component and message.
File last commit:
Show/Diff file:
Action:
FNA/src/FNAPlatform/FNAPlatform.cs
383 lines | 13.1 KiB | text/x-csharp | CSharpLexer
#region License
/* FNA - XNA4 Reimplementation for Desktop Platforms
* Copyright 2009-2022 Ethan Lee and the MonoGame Team
*
* Released under the Microsoft Public License.
* See LICENSE for details.
*/
#endregion
#region Using Statements
using System;
using System.IO;
using System.Collections.Generic;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Input.Touch;
#endregion
namespace Microsoft.Xna.Framework
{
internal static class FNAPlatform
{
#region Static Constructor
static FNAPlatform()
{
/* I suspect you may have an urge to put an #if in here for new
* FNAPlatform implementations.
*
* DON'T.
*
* Determine this at runtime, or load dynamically.
* No amount of whining will get me to budge on this.
* -flibit
*/
// Environment.GetEnvironmentVariable("FNA_PLATFORM_BACKEND");
// Built-in command line arguments
LaunchParameters args = new LaunchParameters();
string arg;
if (args.TryGetValue("enablehighdpi", out arg) && arg == "1")
{
Environment.SetEnvironmentVariable(
"FNA_GRAPHICS_ENABLE_HIGHDPI",
"1"
);
}
if (args.TryGetValue("gldevice", out arg))
{
Environment.SetEnvironmentVariable(
"FNA3D_FORCE_DRIVER",
arg
);
}
if (args.TryGetValue("enablelateswaptear", out arg) && arg == "1")
{
Environment.SetEnvironmentVariable(
"FNA3D_ENABLE_LATESWAPTEAR",
"1"
);
}
if (args.TryGetValue("mojoshaderprofile", out arg))
{
Environment.SetEnvironmentVariable(
"FNA3D_MOJOSHADER_PROFILE",
arg
);
}
if (args.TryGetValue("backbufferscalenearest", out arg) && arg == "1")
{
Environment.SetEnvironmentVariable(
"FNA3D_BACKBUFFER_SCALE_NEAREST",
"1"
);
}
if (args.TryGetValue("usescancodes", out arg) && arg == "1")
{
Environment.SetEnvironmentVariable(
"FNA_KEYBOARD_USE_SCANCODES",
"1"
);
}
if (args.TryGetValue("nukesteaminput", out arg) && arg == "1")
{
Environment.SetEnvironmentVariable(
"FNA_NUKE_STEAM_INPUT",
"1"
);
}
CreateWindow = SDL2_FNAPlatform.CreateWindow;
DisposeWindow = SDL2_FNAPlatform.DisposeWindow;
ApplyWindowChanges = SDL2_FNAPlatform.ApplyWindowChanges;
ScaleForWindow = SDL2_FNAPlatform.ScaleForWindow;
GetWindowBounds = SDL2_FNAPlatform.GetWindowBounds;
GetWindowResizable = SDL2_FNAPlatform.GetWindowResizable;
SetWindowResizable = SDL2_FNAPlatform.SetWindowResizable;
GetWindowBorderless = SDL2_FNAPlatform.GetWindowBorderless;
SetWindowBorderless = SDL2_FNAPlatform.SetWindowBorderless;
SetWindowTitle = SDL2_FNAPlatform.SetWindowTitle;
IsScreenKeyboardShown = SDL2_FNAPlatform.IsScreenKeyboardShown;
RegisterGame = SDL2_FNAPlatform.RegisterGame;
UnregisterGame = SDL2_FNAPlatform.UnregisterGame;
PollEvents = SDL2_FNAPlatform.PollEvents;
GetGraphicsAdapters = SDL2_FNAPlatform.GetGraphicsAdapters;
GetCurrentDisplayMode = SDL2_FNAPlatform.GetCurrentDisplayMode;
GetKeyFromScancode = SDL2_FNAPlatform.GetKeyFromScancode;
IsTextInputActive = SDL2_FNAPlatform.IsTextInputActive;
StartTextInput = SDL2.SDL.SDL_StartTextInput;
StopTextInput = SDL2.SDL.SDL_StopTextInput;
SetTextInputRectangle = SDL2_FNAPlatform.SetTextInputRectangle;
GetMouseState = SDL2_FNAPlatform.GetMouseState;
SetMousePosition = SDL2.SDL.SDL_WarpMouseInWindow;
OnIsMouseVisibleChanged = SDL2_FNAPlatform.OnIsMouseVisibleChanged;
GetRelativeMouseMode = SDL2_FNAPlatform.GetRelativeMouseMode;
SetRelativeMouseMode = SDL2_FNAPlatform.SetRelativeMouseMode;
GetGamePadCapabilities = SDL2_FNAPlatform.GetGamePadCapabilities;
GetGamePadState = SDL2_FNAPlatform.GetGamePadState;
SetGamePadVibration = SDL2_FNAPlatform.SetGamePadVibration;
SetGamePadTriggerVibration = SDL2_FNAPlatform.SetGamePadTriggerVibration;
GetGamePadGUID = SDL2_FNAPlatform.GetGamePadGUID;
SetGamePadLightBar = SDL2_FNAPlatform.SetGamePadLightBar;
GetGamePadGyro = SDL2_FNAPlatform.GetGamePadGyro;
GetGamePadAccelerometer = SDL2_FNAPlatform.GetGamePadAccelerometer;
GetStorageRoot = SDL2_FNAPlatform.GetStorageRoot;
GetDriveInfo = SDL2_FNAPlatform.GetDriveInfo;
ReadFileToPointer = SDL2_FNAPlatform.ReadToPointer;
FreeFilePointer = SDL2_FNAPlatform.FreeFilePointer;
ShowRuntimeError = SDL2_FNAPlatform.ShowRuntimeError;
GetMicrophones = SDL2_FNAPlatform.GetMicrophones;
GetMicrophoneSamples = SDL2_FNAPlatform.GetMicrophoneSamples;
GetMicrophoneQueuedBytes = SDL2_FNAPlatform.GetMicrophoneQueuedBytes;
StartMicrophone = SDL2_FNAPlatform.StartMicrophone;
StopMicrophone = SDL2_FNAPlatform.StopMicrophone;
GetTouchCapabilities = SDL2_FNAPlatform.GetTouchCapabilities;
UpdateTouchPanelState = SDL2_FNAPlatform.UpdateTouchPanelState;
GetNumTouchFingers = SDL2_FNAPlatform.GetNumTouchFingers;
SupportsOrientationChanges = SDL2_FNAPlatform.SupportsOrientationChanges;
NeedsPlatformMainLoop = SDL2_FNAPlatform.NeedsPlatformMainLoop;
RunPlatformMainLoop = SDL2_FNAPlatform.RunPlatformMainLoop;
FNALoggerEXT.Initialize();
AppDomain.CurrentDomain.ProcessExit += SDL2_FNAPlatform.ProgramExit;
TitleLocation = SDL2_FNAPlatform.ProgramInit(args);
/* Do this AFTER ProgramInit so the platform library
* has a chance to load first!
*/
FNALoggerEXT.HookFNA3D();
}
#endregion
#region Public Static Variables
public static readonly string TitleLocation;
/* Setup Text Input Control Character Arrays
* (Only 7 control keys supported at this time)
*/
public static readonly char[] TextInputCharacters = new char[]
{
(char) 2, // Home
(char) 3, // End
(char) 8, // Backspace
(char) 9, // Tab
(char) 13, // Enter
(char) 127, // Delete
(char) 22 // Ctrl+V (Paste)
};
public static readonly Dictionary<Keys, int> TextInputBindings = new Dictionary<Keys, int>()
{
{ Keys.Home, 0 },
{ Keys.End, 1 },
{ Keys.Back, 2 },
{ Keys.Tab, 3 },
{ Keys.Enter, 4 },
{ Keys.Delete, 5 }
// Ctrl+V is special!
};
#endregion
#region Public Static Methods
public delegate GameWindow CreateWindowFunc();
public static readonly CreateWindowFunc CreateWindow;
public delegate void DisposeWindowFunc(GameWindow window);
public static readonly DisposeWindowFunc DisposeWindow;
public delegate void ApplyWindowChangesFunc(
IntPtr window,
int clientWidth,
int clientHeight,
bool wantsFullscreen,
string screenDeviceName,
ref string resultDeviceName
);
public static readonly ApplyWindowChangesFunc ApplyWindowChanges;
public delegate void ScaleForWindowFunc(IntPtr window, bool invert, ref int w, ref int h);
public static readonly ScaleForWindowFunc ScaleForWindow;
public delegate Rectangle GetWindowBoundsFunc(IntPtr window);
public static readonly GetWindowBoundsFunc GetWindowBounds;
public delegate bool GetWindowResizableFunc(IntPtr window);
public static readonly GetWindowResizableFunc GetWindowResizable;
public delegate void SetWindowResizableFunc(IntPtr window, bool resizable);
public static readonly SetWindowResizableFunc SetWindowResizable;
public delegate bool GetWindowBorderlessFunc(IntPtr window);
public static readonly GetWindowBorderlessFunc GetWindowBorderless;
public delegate void SetWindowBorderlessFunc(IntPtr window, bool borderless);
public static readonly SetWindowBorderlessFunc SetWindowBorderless;
public delegate void SetWindowTitleFunc(IntPtr window, string title);
public static readonly SetWindowTitleFunc SetWindowTitle;
public delegate bool IsScreenKeyboardShownFunc(IntPtr window);
public static readonly IsScreenKeyboardShownFunc IsScreenKeyboardShown;
public delegate GraphicsAdapter RegisterGameFunc(Game game);
public static readonly RegisterGameFunc RegisterGame;
public delegate void UnregisterGameFunc(Game game);
public static readonly UnregisterGameFunc UnregisterGame;
public delegate void PollEventsFunc(
Game game,
ref GraphicsAdapter currentAdapter,
bool[] textInputControlDown,
ref bool textInputSuppress
);
public static readonly PollEventsFunc PollEvents;
public delegate GraphicsAdapter[] GetGraphicsAdaptersFunc();
public static readonly GetGraphicsAdaptersFunc GetGraphicsAdapters;
public delegate DisplayMode GetCurrentDisplayModeFunc(int adapterIndex);
public static readonly GetCurrentDisplayModeFunc GetCurrentDisplayMode;
public delegate Keys GetKeyFromScancodeFunc(Keys scancode);
public static readonly GetKeyFromScancodeFunc GetKeyFromScancode;
public delegate bool IsTextInputActiveFunc();
public static readonly IsTextInputActiveFunc IsTextInputActive;
public delegate void StartTextInputFunc();
public static readonly StartTextInputFunc StartTextInput;
public delegate void StopTextInputFunc();
public static readonly StopTextInputFunc StopTextInput;
public delegate void SetTextInputRectangleFunc(Rectangle rectangle);
public static readonly SetTextInputRectangleFunc SetTextInputRectangle;
public delegate void GetMouseStateFunc(
IntPtr window,
out int x,
out int y,
out ButtonState left,
out ButtonState middle,
out ButtonState right,
out ButtonState x1,
out ButtonState x2
);
public static readonly GetMouseStateFunc GetMouseState;
public delegate void SetMousePositionFunc(
IntPtr window,
int x,
int y
);
public static readonly SetMousePositionFunc SetMousePosition;
public delegate void OnIsMouseVisibleChangedFunc(bool visible);
public static readonly OnIsMouseVisibleChangedFunc OnIsMouseVisibleChanged;
public delegate bool GetRelativeMouseModeFunc();
public static readonly GetRelativeMouseModeFunc GetRelativeMouseMode;
public delegate void SetRelativeMouseModeFunc(bool enable);
public static readonly SetRelativeMouseModeFunc SetRelativeMouseMode;
public delegate GamePadCapabilities GetGamePadCapabilitiesFunc(int index);
public static readonly GetGamePadCapabilitiesFunc GetGamePadCapabilities;
public delegate GamePadState GetGamePadStateFunc(
int index,
GamePadDeadZone deadZoneMode
);
public static readonly GetGamePadStateFunc GetGamePadState;
public delegate bool SetGamePadVibrationFunc(
int index,
float leftMotor,
float rightMotor
);
public static readonly SetGamePadVibrationFunc SetGamePadVibration;
public delegate bool SetGamePadTriggerVibrationFunc(
int index,
float leftTrigger,
float rightTrigger
);
public static readonly SetGamePadTriggerVibrationFunc SetGamePadTriggerVibration;
public delegate string GetGamePadGUIDFunc(int index);
public static readonly GetGamePadGUIDFunc GetGamePadGUID;
public delegate void SetGamePadLightBarFunc(int index, Color color);
public static readonly SetGamePadLightBarFunc SetGamePadLightBar;
public delegate bool GetGamePadGyroFunc(int index, out Vector3 gyro);
public static readonly GetGamePadGyroFunc GetGamePadGyro;
public delegate bool GetGamePadAccelerometerFunc(int index, out Vector3 accel);
public static readonly GetGamePadAccelerometerFunc GetGamePadAccelerometer;
public delegate string GetStorageRootFunc();
public static readonly GetStorageRootFunc GetStorageRoot;
public delegate DriveInfo GetDriveInfoFunc(string storageRoot);
public static readonly GetDriveInfoFunc GetDriveInfo;
public delegate IntPtr ReadFileToPointerFunc(string path, out IntPtr size);
public static readonly ReadFileToPointerFunc ReadFileToPointer;
public delegate void FreeFilePointerFunc(IntPtr file);
public static readonly FreeFilePointerFunc FreeFilePointer;
public delegate void ShowRuntimeErrorFunc(string title, string message);
public static readonly ShowRuntimeErrorFunc ShowRuntimeError;
public delegate Microphone[] GetMicrophonesFunc();
public static readonly GetMicrophonesFunc GetMicrophones;
public delegate int GetMicrophoneSamplesFunc(
uint handle,
byte[] buffer,
int offset,
int count
);
public static readonly GetMicrophoneSamplesFunc GetMicrophoneSamples;
public delegate int GetMicrophoneQueuedBytesFunc(uint handle);
public static readonly GetMicrophoneQueuedBytesFunc GetMicrophoneQueuedBytes;
public delegate void StartMicrophoneFunc(uint handle);
public static readonly StartMicrophoneFunc StartMicrophone;
public delegate void StopMicrophoneFunc(uint handle);
public static readonly StopMicrophoneFunc StopMicrophone;
public delegate TouchPanelCapabilities GetTouchCapabilitiesFunc();
public static readonly GetTouchCapabilitiesFunc GetTouchCapabilities;
public delegate void UpdateTouchPanelStateFunc();
public static readonly UpdateTouchPanelStateFunc UpdateTouchPanelState;
public delegate int GetNumTouchFingersFunc();
public static readonly GetNumTouchFingersFunc GetNumTouchFingers;
public delegate bool SupportsOrientationChangesFunc();
public static readonly SupportsOrientationChangesFunc SupportsOrientationChanges;
public delegate bool NeedsPlatformMainLoopFunc();
public static readonly NeedsPlatformMainLoopFunc NeedsPlatformMainLoop;
public delegate void RunPlatformMainLoopFunc(Game game);
public static readonly RunPlatformMainLoopFunc RunPlatformMainLoop;
#endregion
}
}