diff --git a/InputSystems/ANX.InputDevices.Windows.ModernUI/Keyboard.cs b/InputSystems/ANX.InputDevices.Windows.ModernUI/Keyboard.cs old mode 100755 new mode 100644 diff --git a/InputSystems/ANX.InputSystem.Recording/RecordingGamePad.cs b/InputSystems/ANX.InputSystem.Recording/RecordingGamePad.cs index da8c9d07..f462c34d 100644 --- a/InputSystems/ANX.InputSystem.Recording/RecordingGamePad.cs +++ b/InputSystems/ANX.InputSystem.Recording/RecordingGamePad.cs @@ -64,7 +64,19 @@ namespace ANX.InputSystem.Recording public GamePadState GetState(PlayerIndex playerIndex) { - throw new NotImplementedException(); + switch (RecordingState) + { + case Recording.RecordingState.None: + return realGamePad.GetState(playerIndex); + case Recording.RecordingState.Playback: + return ReadGamePadState(playerIndex); + case Recording.RecordingState.Recording: + var state = realGamePad.GetState(playerIndex); + WriteGamePadState(state, playerIndex); + return state; + default: + throw new InvalidOperationException("The recordingState is invalid!"); + } } public GamePadState GetState(PlayerIndex playerIndex, GamePadDeadZone deadZoneMode) @@ -122,5 +134,15 @@ namespace ANX.InputSystem.Recording { throw new NotImplementedException(); } + + private GamePadState ReadGamePadState(PlayerIndex playerIndex) + { + throw new NotImplementedException(); + } + + private void WriteGamePadState(GamePadState state, PlayerIndex playerIndex) + { + throw new NotImplementedException(); + } } } diff --git a/RenderSystems/ANX.Framework.GL3/EffectGL3.cs b/RenderSystems/ANX.Framework.GL3/EffectGL3.cs index 5fbf5e38..73fa51f6 100644 --- a/RenderSystems/ANX.Framework.GL3/EffectGL3.cs +++ b/RenderSystems/ANX.Framework.GL3/EffectGL3.cs @@ -13,280 +13,292 @@ using ANX.Framework.Content.Pipeline.Helpers.GL3; namespace ANX.RenderSystem.GL3 { - /// - /// Native OpenGL Effect implementation. - /// http://wiki.delphigl.com/index.php/Tutorial_glsl - /// - public class EffectGL3 : INativeEffect - { - #region Private - private Effect managedEffect; - private ShaderData shaderData; - private List parameters; - private List techniques; - internal bool IsDisposed; + /// + /// Native OpenGL Effect implementation. + /// http://wiki.delphigl.com/index.php/Tutorial_glsl + /// + public class EffectGL3 : INativeEffect + { + #region Private + private Effect managedEffect; + private ShaderData shaderData; + private List parameters; + private List techniques; + internal bool IsDisposed; - internal EffectTechniqueGL3 CurrentTechnique - { - get - { - if (managedEffect.CurrentTechnique == null) - return null; + internal EffectTechniqueGL3 CurrentTechnique + { + get + { + if (managedEffect.CurrentTechnique == null) + return null; - return managedEffect.CurrentTechnique.NativeTechnique as EffectTechniqueGL3; - } - } - #endregion + return managedEffect.CurrentTechnique.NativeTechnique as EffectTechniqueGL3; + } + } + #endregion - #region Public - #region Techniques - public IEnumerable Techniques - { - get - { - if (techniques.Count == 0) - { - Compile(); - } + #region Public + #region Techniques + public IEnumerable Techniques + { + get + { + if (techniques.Count == 0) + { + Compile(); + } - return techniques; - } - } - #endregion + return techniques; + } + } + #endregion - #region Parameters - public IEnumerable Parameters - { - get - { - if (techniques.Count == 0) - { - Compile(); - } + #region Parameters + public IEnumerable Parameters + { + get + { + if (techniques.Count == 0) + { + Compile(); + } - return parameters; - } - } - #endregion - #endregion + return parameters; + } + } + #endregion + #endregion - #region Constructor - /// - /// Private helper constructor for the basic initialization. - /// - private EffectGL3(Effect setManagedEffect) - { - GraphicsResourceManager.UpdateResource(this, true); + #region Constructor + /// + /// Private helper constructor for the basic initialization. + /// + private EffectGL3(Effect setManagedEffect) + { + GraphicsResourceManager.UpdateResource(this, true); - parameters = new List(); - techniques = new List(); - managedEffect = setManagedEffect; - } + parameters = new List(); + techniques = new List(); + managedEffect = setManagedEffect; + } - ~EffectGL3() - { - GraphicsResourceManager.UpdateResource(this, false); - } + ~EffectGL3() + { + GraphicsResourceManager.UpdateResource(this, false); + } - /// - /// Create a new effect instance of separate streams. - /// - /// The vertex shader code. - /// The fragment shader code. - public EffectGL3(Effect setManagedEffect, Stream vertexShaderByteCode, Stream pixelShaderByteCode) - : this(setManagedEffect) - { + /// + /// Create a new effect instance of separate streams. + /// + /// The vertex shader code. + /// The fragment shader code. + public EffectGL3(Effect setManagedEffect, Stream vertexShaderByteCode, Stream pixelShaderByteCode) + : this(setManagedEffect) + { // TODO: this is probably not right! - throw new NotImplementedException("TODO: implement effect constructor with vertex and fragment streams, check HOWTO..."); - //CreateShader(ShaderHelper.LoadShaderCode(vertexShaderByteCode), - // ShaderHelper.LoadShaderCode(pixelShaderByteCode)); - } + throw new NotImplementedException("TODO: implement effect constructor with vertex and fragment streams, check HOWTO..."); + //CreateShader(ShaderHelper.LoadShaderCode(vertexShaderByteCode), + // ShaderHelper.LoadShaderCode(pixelShaderByteCode)); + } - /// - /// Create a new effect instance of one streams. - /// - /// The byte code of the shader. - public EffectGL3(Effect setManagedEffect, Stream byteCode) - : this(setManagedEffect) - { - string source = ShaderHelper.LoadShaderCode(byteCode); - shaderData = ShaderHelper.ParseShaderCode(source); - } - #endregion + /// + /// Create a new effect instance of one streams. + /// + /// The byte code of the shader. + public EffectGL3(Effect setManagedEffect, Stream byteCode) + : this(setManagedEffect) + { + string source = ShaderHelper.LoadShaderCode(byteCode); + shaderData = ShaderHelper.ParseShaderCode(source); + } + #endregion - #region RecreateData - internal void RecreateData() - { - Compile(); - } - #endregion + #region RecreateData + internal void RecreateData() + { + Compile(); + } + #endregion - #region Compile - private void Compile() - { - parameters.Clear(); - techniques.Clear(); - Dictionary vertexShaders = new Dictionary(); - Dictionary fragmentShaders = new Dictionary(); - List parameterNames = new List(); + #region Compile + private void Compile() + { + parameters.Clear(); + techniques.Clear(); + Dictionary vertexShaders = new Dictionary(); + Dictionary fragmentShaders = new Dictionary(); + List parameterNames = new List(); - #region Compile vertex shaders - foreach (string vertexName in shaderData.VertexShaderCodes.Keys) - { - string vertexSource = shaderData.VertexGlobalCode + shaderData.VertexShaderCodes[vertexName]; + #region Compile vertex shaders + foreach (string vertexName in shaderData.VertexShaderCodes.Keys) + { + string vertexSource = shaderData.VertexGlobalCode + shaderData.VertexShaderCodes[vertexName]; - int vertexShader = GL.CreateShader(ShaderType.VertexShader); - string vertexError = CompileShader(vertexShader, vertexSource); - if (String.IsNullOrEmpty(vertexError) == false) - throw new InvalidDataException("Failed to compile the vertex shader '" + vertexName + "' cause of: " + - vertexError); + int vertexShader = GL.CreateShader(ShaderType.VertexShader); + string vertexError = CompileShader(vertexShader, vertexSource); + if (String.IsNullOrEmpty(vertexError) == false) + throw new InvalidDataException("Failed to compile the vertex shader '" + vertexName + "' cause of: " + + vertexError); - vertexShaders.Add(vertexName, vertexShader); - } - #endregion + vertexShaders.Add(vertexName, vertexShader); + } + #endregion - #region Compile fragment shaders - foreach (string fragmentName in shaderData.FragmentShaderCodes.Keys) - { - string fragmentSource = shaderData.FragmentGlobalCode + shaderData.FragmentShaderCodes[fragmentName]; + #region Compile fragment shaders + foreach (string fragmentName in shaderData.FragmentShaderCodes.Keys) + { + string fragmentSource = shaderData.FragmentGlobalCode + shaderData.FragmentShaderCodes[fragmentName]; - int fragmentShader = GL.CreateShader(ShaderType.FragmentShader); - string fragmentError = CompileShader(fragmentShader, fragmentSource); - if (String.IsNullOrEmpty(fragmentError) == false) - throw new InvalidDataException("Failed to compile the fragment shader '" + fragmentName + "' cause of: " + - fragmentError); + int fragmentShader = GL.CreateShader(ShaderType.FragmentShader); + string fragmentError = CompileShader(fragmentShader, fragmentSource); + if (String.IsNullOrEmpty(fragmentError) == false) + throw new InvalidDataException("Failed to compile the fragment shader '" + fragmentName + "' cause of: " + + fragmentError); - fragmentShaders.Add(fragmentName, fragmentShader); - } - #endregion + fragmentShaders.Add(fragmentName, fragmentShader); + } + #endregion - #region Compile programs - foreach (string programName in shaderData.Techniques.Keys) - { - string vertexName = shaderData.Techniques[programName].Key; - string fragmentName = shaderData.Techniques[programName].Value; + #region Compile programs + foreach (string programName in shaderData.Techniques.Keys) + { + string vertexName = shaderData.Techniques[programName].Key; + string fragmentName = shaderData.Techniques[programName].Value; - int programHandle = GL.CreateProgram(); - ErrorHelper.Check("CreateProgram"); - GL.AttachShader(programHandle, vertexShaders[vertexName]); - ErrorHelper.Check("AttachShader vertexShader"); - GL.AttachShader(programHandle, fragmentShaders[fragmentName]); - ErrorHelper.Check("AttachShader fragmentShader"); - GL.LinkProgram(programHandle); + int vertexShaderHandle = vertexShaders[vertexName]; + int fragmentShaderHandle = fragmentShaders[fragmentName]; - int result; - GL.GetProgram(programHandle, ProgramParameter.LinkStatus, out result); - if (result == 0) - { - string programError; - GL.GetProgramInfoLog(programHandle, out programError); - throw new InvalidDataException("Failed to link the shader program '" + - programName + "' because of: " + programError); - } + int programHandle = GL.CreateProgram(); + ErrorHelper.Check("CreateProgram"); + GL.AttachShader(programHandle, vertexShaderHandle); + ErrorHelper.Check("AttachShader vertexShader"); + GL.AttachShader(programHandle, fragmentShaderHandle); + ErrorHelper.Check("AttachShader fragmentShader"); + GL.LinkProgram(programHandle); - EffectTechniqueGL3 technique = new EffectTechniqueGL3(managedEffect, programName, programHandle); - techniques.Add(new EffectTechnique(managedEffect, technique)); - AddParametersFrom(programHandle, parameterNames, technique); - } - #endregion - } - #endregion + int result; + GL.GetProgram(programHandle, GetProgramParameterName.LinkStatus, out result); + if (result == 0) + { + string programError; + GL.GetProgramInfoLog(programHandle, out programError); + throw new InvalidDataException("Failed to link the shader program '" + + programName + "' because of: " + programError); + } + + //After the program has been linked, the shaders don't have to be attached anymore as they won't do anything. + //We also save some memory because the shader source code gets freed by this. + GL.DetachShader(programHandle, vertexShaderHandle); + GL.DetachShader(programHandle, fragmentShaderHandle); - #region CompileShader - private string CompileShader(int shader, string source) - { - GL.ShaderSource(shader, source); - GL.CompileShader(shader); + GL.DeleteShader(vertexShaderHandle); + GL.DeleteShader(fragmentShaderHandle); - int result; - GL.GetShader(shader, ShaderParameter.CompileStatus, out result); - if (result == 0) - { - string error = ""; - GL.GetShaderInfoLog(shader, out error); + EffectTechniqueGL3 technique = new EffectTechniqueGL3(managedEffect, programName, programHandle); + techniques.Add(new EffectTechnique(managedEffect, technique)); + AddParametersFrom(programHandle, parameterNames, technique); + } + #endregion + } + #endregion - GL.DeleteShader(shader); + #region CompileShader + private string CompileShader(int shader, string source) + { + GL.ShaderSource(shader, source); + GL.CompileShader(shader); - return error; - } + int result; + GL.GetShader(shader, ShaderParameter.CompileStatus, out result); + if (result == 0) + { + string error = ""; + GL.GetShaderInfoLog(shader, out error); - return null; - } - #endregion + GL.DeleteShader(shader); - #region AddParametersFrom - private void AddParametersFrom(int programHandle, List parameterNames, EffectTechniqueGL3 technique) - { - int uniformCount; - GL.GetProgram(programHandle, ProgramParameter.ActiveUniforms, out uniformCount); - ErrorHelper.Check("GetProgram ActiveUniforms"); + return error; + } - for (int index = 0; index < uniformCount; index++) - { - string name = GL.GetActiveUniformName(programHandle, index); - ErrorHelper.Check("GetActiveUniformName name=" + name); + return null; + } + #endregion - if (parameterNames.Contains(name) == false) - { - parameterNames.Add(name); - int uniformIndex = GL.GetUniformLocation(programHandle, name); - ErrorHelper.Check("GetUniformLocation name=" + name + " uniformIndex=" + uniformIndex); - parameters.Add(new EffectParameter(new EffectParameterGL3(technique, name, uniformIndex))); - } - } - } - #endregion + #region AddParametersFrom + private void AddParametersFrom(int programHandle, List parameterNames, EffectTechniqueGL3 technique) + { + int uniformCount; + GL.GetProgram(programHandle, GetProgramParameterName.ActiveUniforms, out uniformCount); + ErrorHelper.Check("GetProgram ActiveUniforms"); - #region Apply - public void Apply(GraphicsDevice graphicsDevice) - { - GL.UseProgram(CurrentTechnique.programHandle); - GraphicsDeviceWindowsGL3.activeEffect = this; - ErrorHelper.Check("UseProgram"); - } - #endregion + for (int index = 0; index < uniformCount; index++) + { + string name = GL.GetActiveUniformName(programHandle, index); + ErrorHelper.Check("GetActiveUniformName name=" + name); - #region Dispose - /// - /// Dispose the native shader data. - /// - public void Dispose() - { - if (IsDisposed == false) - { - IsDisposed = true; - DisposeResource(); - } - } + if (parameterNames.Contains(name) == false) + { + parameterNames.Add(name); + int uniformIndex = GL.GetUniformLocation(programHandle, name); + ErrorHelper.Check("GetUniformLocation name=" + name + " uniformIndex=" + uniformIndex); + parameters.Add(new EffectParameter(new EffectParameterGL3(technique, name, uniformIndex))); + } + } + } + #endregion - internal void DisposeResource() - { - if (GraphicsDeviceWindowsGL3.IsContextCurrent == false) - { - return; - } + #region Apply + public void Apply(GraphicsDevice graphicsDevice) + { + GL.UseProgram(CurrentTechnique.programHandle); + GraphicsDeviceWindowsGL3.activeEffect = this; + ErrorHelper.Check("UseProgram"); + } + #endregion - foreach (EffectTechnique technique in techniques) - { - int programHandle = - (technique.NativeTechnique as EffectTechniqueGL3).programHandle; + #region Dispose + /// + /// Dispose the native shader data. + /// + public void Dispose() + { + if (IsDisposed == false) + { + IsDisposed = true; + DisposeResource(); + } + } - GL.DeleteProgram(programHandle); - ErrorHelper.Check("DeleteProgram"); + internal void DisposeResource() + { + if (GraphicsDeviceWindowsGL3.IsContextCurrent == false) + { + return; + } - int result; - GL.GetProgram(programHandle, ProgramParameter.DeleteStatus, out result); - if (result == 0) - { - string deleteError; - GL.GetProgramInfoLog(programHandle, out deleteError); - throw new Exception("Failed to delete the shader program '" + - technique.Name + "' because of: " + deleteError); - } - } - techniques.Clear(); - parameters.Clear(); - } - #endregion - } + foreach (EffectTechnique technique in techniques) + { + int programHandle = + (technique.NativeTechnique as EffectTechniqueGL3).programHandle; + + GL.DeleteProgram(programHandle); + ErrorHelper.Check("DeleteProgram"); + + int result; + GL.GetProgram(programHandle, GetProgramParameterName.DeleteStatus, out result); + //If it isn't deleted, it means it's somehow still in use. + if (result == 1) + { + string deleteError; + GL.GetProgramInfoLog(programHandle, out deleteError); + throw new Exception("Failed to delete the shader program '" + + technique.Name + "' because of: " + deleteError); + } + } + techniques.Clear(); + parameters.Clear(); + } + #endregion + } } diff --git a/RenderSystems/ANX.Framework.GL3/EffectTechniqueGL3.cs b/RenderSystems/ANX.Framework.GL3/EffectTechniqueGL3.cs index e945b7e2..10817bb8 100644 --- a/RenderSystems/ANX.Framework.GL3/EffectTechniqueGL3.cs +++ b/RenderSystems/ANX.Framework.GL3/EffectTechniqueGL3.cs @@ -74,7 +74,7 @@ namespace ANX.RenderSystem.GL3 private void GetAttributes() { int attributeCount; - GL.GetProgram(programHandle, ProgramParameter.ActiveAttributes, + GL.GetProgram(programHandle, GetProgramParameterName.ActiveAttributes, out attributeCount); activeAttributes = new ShaderAttributeGL3[attributeCount]; for (int index = 0; index < attributeCount; index++) diff --git a/RenderSystems/ANX.Framework.GL3/GraphicsDeviceWindowsGL3.cs b/RenderSystems/ANX.Framework.GL3/GraphicsDeviceWindowsGL3.cs index e040c345..dc2ff753 100644 --- a/RenderSystems/ANX.Framework.GL3/GraphicsDeviceWindowsGL3.cs +++ b/RenderSystems/ANX.Framework.GL3/GraphicsDeviceWindowsGL3.cs @@ -113,7 +113,7 @@ namespace ANX.RenderSystem.GL3 var colorFormat = DatatypesMapping.SurfaceToColorFormat(presentationParameters.BackBufferFormat); graphicsMode = new GraphicsMode(colorFormat, depth, stencil, presentationParameters.MultiSampleCount); - CreateWindowInfo(presentationParameters.DeviceWindowHandle, graphicsMode.Index.Value); + CreateWindowInfo(presentationParameters.DeviceWindowHandle, graphicsMode.Index); nativeContext = new GraphicsContext(graphicsMode, nativeWindowInfo); nativeContext.MakeCurrent(nativeWindowInfo); @@ -143,12 +143,12 @@ namespace ANX.RenderSystem.GL3 #endregion #region CreateWindowInfo - private void CreateWindowInfo(IntPtr windowHandle, IntPtr graphicsModeHandle) + private void CreateWindowInfo(IntPtr windowHandle, IntPtr? graphicsModeHandle) { if (OpenTK.Configuration.RunningOnWindows) nativeWindowInfo = Utilities.CreateWindowsWindowInfo(windowHandle); else if (OpenTK.Configuration.RunningOnX11) - nativeWindowInfo = LinuxInterop.CreateX11WindowInfo(windowHandle, graphicsModeHandle); + nativeWindowInfo = LinuxInterop.CreateX11WindowInfo(windowHandle, graphicsModeHandle.Value); else if (OpenTK.Configuration.RunningOnMacOS) nativeWindowInfo = Utilities.CreateMacOSCarbonWindowInfo(windowHandle, false, true); else diff --git a/RenderSystems/ANX.RenderSystem.Windows.DX11/ANX.RenderSystem.Windows.DX11.csproj b/RenderSystems/ANX.RenderSystem.Windows.DX11/ANX.RenderSystem.Windows.DX11.csproj index a7a00b36..3a0120ae 100644 --- a/RenderSystems/ANX.RenderSystem.Windows.DX11/ANX.RenderSystem.Windows.DX11.csproj +++ b/RenderSystems/ANX.RenderSystem.Windows.DX11/ANX.RenderSystem.Windows.DX11.csproj @@ -45,25 +45,25 @@ - + False - ..\..\packages\SharpDX.2.4.2\lib\net40\SharpDX.dll + $(SharpDXPackageBinDir)\SharpDX.dll - + False - ..\..\packages\SharpDX.D3DCompiler.2.4.2\lib\net40\SharpDX.D3DCompiler.dll + $(SharpDXPackageBinDir)\SharpDX.D3DCompiler.dll - + False - ..\..\packages\SharpDX.Direct3D11.2.4.2\lib\net40\SharpDX.Direct3D11.dll + $(SharpDXPackageBinDir)\SharpDX.Direct3D11.dll - + False - ..\..\packages\SharpDX.Direct3D11.Effects.2.4.2\lib\net40\SharpDX.Direct3D11.Effects.dll + $(SharpDXPackageBinDir)\SharpDX.Direct3D11.Effects.dll - + False - ..\..\packages\SharpDX.DXGI.2.4.2\lib\net40\SharpDX.DXGI.dll + $(SharpDXPackageBinDir)\SharpDX.DXGI.dll @@ -97,7 +97,6 @@ - @@ -105,10 +104,23 @@ - - + + sharpdx_direct3d11_effects_x64.dll + PreserveNewest + + + sharpdx_direct3d11_effects_x86.dll + PreserveNewest + + + + + Dieses Projekt verweist auf mindestens ein NuGet-Paket, das auf diesem Computer fehlt. Aktivieren Sie die Wiederherstellung von NuGet-Paketen, um die fehlende Datei herunterzuladen. Weitere Informationen finden Sie unter "http://go.microsoft.com/fwlink/?LinkID=322105". Die fehlende Datei ist "{0}". + + +