private static void OnClose() { // Detach from Application events if (!isRunning) { return; } isRunning = false; app.Close -= OnClose; app.Tick -= OnTick; app.PreRender -= OnPreRender; app.PostRender -= OnPostRender; app.Resize -= OnResize; app.MouseMove -= OnMouseMove; app.MouseDown -= OnMouseDown; app.MouseUp -= OnMouseUp; renderer?.Shutdown(); view = null; try { GUI.Shutdown(); } catch (Exception e) { LogError(e.Message); } }
private RenderTexture RenderPreview(Noesis.View view, int width, int height) { try { if (CanRender() && view != null && view.Content != null) { NoesisRenderer.SetRenderSettings(); view.SetSize(width, height); view.Update(0.0f); FlushMetalEncoder(_commands); NoesisRenderer.RenderOffscreen(view, _commands); RenderTexture rt = RenderTexture.GetTemporary(width, height, 24, RenderTextureFormat.Default, RenderTextureReadWrite.Default, 8); _commands.SetRenderTarget(rt); _commands.ClearRenderTarget(true, true, UnityEngine.Color.clear, 0.0f); NoesisRenderer.RenderOnscreen(view, false, _commands); Graphics.ExecuteCommandBuffer(_commands); _commands.Clear(); GL.InvalidateState(); RenderTexture.ReleaseTemporary(rt); return(rt); } } catch (System.Exception e) { UnityEngine.Debug.LogException(e); } return(null); }
/// <summary> /// Sends render commands to native code /// </summary> public static void RenderOnscreen(Noesis.View view, bool flipY, UnityEngine.Rendering.CommandBuffer commands) { // This is a workaround for a bug in Unity. When rendering nothing Unity sends us an empty MTLRenderCommandEncoder if (UnityEngine.SystemInfo.graphicsDeviceType == UnityEngine.Rendering.GraphicsDeviceType.Metal) { if (_dummyMesh == null) { _dummyMesh = new UnityEngine.Mesh(); _dummyMesh.vertices = new UnityEngine.Vector3[3]; _dummyMesh.vertices[0] = new UnityEngine.Vector3(0, 0, 0); _dummyMesh.vertices[1] = new UnityEngine.Vector3(0, 0, 0); _dummyMesh.vertices[2] = new UnityEngine.Vector3(0, 0, 0); _dummyMesh.triangles = new int[3] { 0, 2, 1 }; } if (_dummyMaterial == null) { _dummyMaterial = new UnityEngine.Material(UnityEngine.Shader.Find("UI/Default")); } commands.DrawMesh(_dummyMesh, new UnityEngine.Matrix4x4(), _dummyMaterial); } commands.IssuePluginEventAndData(_renderOnscreenCallback, flipY ? 1 : 0, view.CPtr.Handle); }
private void CreateView(FrameworkElement content) { if (_uiView == null) { // Send settings for the internal device, created by the first view SetRenderSettings(); _uiView = new Noesis.View(content); NoesisRenderer.RegisterView(_uiView); } }
private void CreateView(FrameworkElement content) { if (_uiView == null) { // Send settings for the internal device, created by the first view SetRenderSettings(); _uiView = new Noesis.View(content); _commands.Clear(); NoesisRenderer.RegisterView(_uiView, _commands); Graphics.ExecuteCommandBuffer(_commands); } }
private static void OnContentLoaded() { Log.LogCallback += (level, channel, message) => { if (channel == "") { // [TRACE] [DEBUG] [INFO] [WARNING] [ERROR] string[] prefixes = new string[] { "T", "D", "I", "W", "E" }; string prefix = (int)level < prefixes.Length ? prefixes[(int)level] : " "; Console.WriteLine("[NOESIS/" + prefix + "] " + message); } }; GUI.Init(); // Setup embedded resource providers EmbeddedXaml[] xamls = new EmbeddedXaml[] { new EmbeddedXaml { filename = "Reflections.xaml", resource = "Reflections" } }; GUI.SetXamlProvider(new EmbeddedXamlProvider(xamls, Properties.Resources.ResourceManager)); // Data loading { var content = (Noesis.Grid)Noesis.GUI.LoadXaml("Reflections.xaml"); view = Noesis.GUI.CreateView(content); IntPtr deviceContext = app.Device.ImmediateContext.NativePointer; RenderDevice device = new RenderDeviceD3D11(deviceContext); renderer = view.Renderer; renderer.Init(device); } // Attach to Application events app.Close += OnClose; app.Tick += OnTick; app.PreRender += OnPreRender; app.PostRender += OnPostRender; app.Resize += OnResize; app.MouseMove += OnMouseMove; app.MouseDown += OnMouseDown; app.MouseUp += OnMouseUp; OnResize(app.Size.Width, app.Size.Height); isRunning = true; }
private static void Run() { // Prepare and run D3D11 wrapper var configuration = new DemoConfiguration("NoesisGUI Integration Sample", 800, 600); dxWrapper = new D3D11AppWrapper(); dxWrapper.Run( configuration, contentLoadCallback: () => { // Callback for initialization GUI.Init(); GUI.SetResourceProvider("Data"); // Global theme { var theme = (Noesis.ResourceDictionary)Noesis.GUI.LoadXaml("NoesisStyle.xaml"); Noesis.GUI.SetTheme(theme); } // Data loading { var content = (Noesis.Grid)Noesis.GUI.LoadXaml("TextBox.xaml"); view = Noesis.GUI.CreateView(content); var immediateContext = dxWrapper.Device.ImmediateContext; renderer = view.Renderer; renderer.InitD3D11(immediateContext.NativePointer, new Noesis.VGOptions()); } // Attach to Application events dxWrapper.Close += OnClose; dxWrapper.Tick += OnTick; dxWrapper.PreRender += OnPreRender; dxWrapper.PostRender += OnPostRender; dxWrapper.Resize += OnResize; dxWrapper.MouseMove += OnMouseMove; dxWrapper.MouseDown += OnMouseDown; dxWrapper.MouseUp += OnMouseUp; dxWrapper.KeyDownEvent += OnKeyDown; dxWrapper.KeyUpEvent += OnKeyUp; dxWrapper.KeyPressEvent += OnKeyPress; OnResize(dxWrapper.Size.Width, dxWrapper.Size.Height); isRunning = true; }); }
private void CreateViewIcon() { try { FrameworkElement root = GetRootIcon(); _viewIcon = Noesis.GUI.CreateView(root); _viewIcon.SetFlags(IsGL() ? 0 : RenderFlags.FlipY); _commands.Clear(); NoesisRenderer.RegisterView(_viewIcon, _commands); Graphics.ExecuteCommandBuffer(_commands); } catch (System.Exception e) { UnityEngine.Debug.LogException(e); } }
public void OnDisable() { if (_viewPreview != null) { NoesisRenderer.UnregisterView(_viewPreview, _commands); Graphics.ExecuteCommandBuffer(_commands); _commands.Clear(); _viewPreview = null; } if (_viewPreviewGUI != null) { NoesisRenderer.UnregisterView(_viewPreviewGUI, _commands); Graphics.ExecuteCommandBuffer(_commands); _commands.Clear(); _viewPreviewGUI = null; } }
private void CreatePreviewView() { try { NoesisXaml xaml = (NoesisXaml)target; FrameworkElement root = xaml.Load() as FrameworkElement; _viewPreview = Noesis.GUI.CreateView(root); _viewPreview.SetFlags(IsGL() ? 0 : RenderFlags.FlipY); NoesisRenderer.RegisterView(_viewPreview, _commands); Graphics.ExecuteCommandBuffer(_commands); _commands.Clear(); } catch (System.Exception e) { UnityEngine.Debug.LogException(e); } }
private void CreatePreviewGUIView() { try { NoesisXaml xaml = (NoesisXaml)target; FrameworkElement root = xaml.Load() as FrameworkElement; View.RenderFlags flags = DeviceIsD3D() ? View.RenderFlags.FlipY : 0; if (root != null) { _viewPreviewGUI = Noesis.GUI.CreateView(root); _viewPreviewGUI.SetFlags(flags); NoesisRenderer.RegisterView(_viewPreviewGUI); } } catch (System.Exception e) { UnityEngine.Debug.LogException(e); } }
private void CreateView(FrameworkElement content) { if (_uiView == null) { // Send settings for the internal device, created by the first view NoesisRenderer.SetRenderSettings(); _uiView = new Noesis.View(content); _uiView.SetTessellationMaxPixelError(_tessellationMaxPixelError); _uiView.SetFlags(_renderFlags); _commands.name = ""; NoesisRenderer.RegisterView(_uiView, _commands); Graphics.ExecuteCommandBuffer(_commands); _commands.Clear(); #if UNITY_EDITOR UnityEditor.AssemblyReloadEvents.beforeAssemblyReload += DestroyView; #endif } }
static public void Update(Noesis.View view) { if (focused != null) { if (focused.View == view) { if (compositionString != Input.compositionString) { if (Input.compositionString == "") { UpdateCursor(); } else { focused.SelectedText = Input.compositionString; } compositionString = Input.compositionString; } } } }
private void CreatePreviewGUIView() { // Avoid logging parse errors twice by muting them when generating thumbnails NoesisUnity.MuteLog(); try { NoesisXaml xaml = (NoesisXaml)target; FrameworkElement root = xaml.Load() as FrameworkElement; _viewPreviewGUI = Noesis.GUI.CreateView(root); _viewPreviewGUI.SetFlags(IsGL() ? 0 : RenderFlags.FlipY); NoesisRenderer.RegisterView(_viewPreviewGUI, _commands); Graphics.ExecuteCommandBuffer(_commands); _commands.Clear(); } catch (System.Exception e) { UnityEngine.Debug.LogException(e); } NoesisUnity.UnmuteLog(); }
public void OnDisable() { if (_view != null) { NoesisRenderer.UnregisterView(_view, _commands); Graphics.ExecuteCommandBuffer(_commands); _commands.Clear(); _view = null; } if (_viewIcon != null) { NoesisRenderer.UnregisterView(_viewIcon, _commands); Graphics.ExecuteCommandBuffer(_commands); _commands.Clear(); _viewIcon = null; } if (NoesisSettings.IsNoesisEnabled()) { UnregisterFont(); } }
/// <summary> /// Unregister given renderer /// </summary> public static void Shutdown(Noesis.View view, UnityEngine.Rendering.CommandBuffer commands) { commands.IssuePluginEvent(_renderShutdownCallback, view.GetHashCode()); }
/// <summary> /// Unregister given renderer /// </summary> public static void UnregisterView(Noesis.View view, UnityEngine.Rendering.CommandBuffer commands) { commands.IssuePluginEventAndData(_renderUnregisterCallback, 0, view.CPtr.Handle); }
/// <summary> /// Sends render commands to native code /// </summary> public static void RenderOnscreen(Noesis.View view, bool flipY, UnityEngine.Rendering.CommandBuffer commands) { commands.IssuePluginEventAndData(_renderOnscreenCallback, flipY ? 1 : 0, view.CPtr.Handle); }
/// <summary> /// Registers a view in the render thread /// </summary> public static void RegisterView(Noesis.View view) { Noesis_RegisterView(view.CPtr, view.GetHashCode()); }
/// <summary> /// Unregister given renderer /// </summary> public static void Shutdown(Noesis.View view) { UnityEngine.GL.IssuePluginEvent(_renderShutdownCallback, view.GetHashCode()); }
/// <summary> /// Sends offscreen render commands to native code /// </summary> public static void RenderOffscreen(Noesis.View view) { UnityEngine.GL.IssuePluginEvent(_renderOffscreenCallback, view.GetHashCode()); }
/// <summary> /// Sends render commands to native code /// </summary> public static void RenderOnscreen(Noesis.View view, bool flipY) { UnityEngine.GL.IssuePluginEvent(flipY ? _renderOnscreenFlipYCallback : _renderOnscreenCallback, view.GetHashCode()); }
/// <summary> /// Sends render commands to native code /// </summary> public static void RenderOnscreen(Noesis.View view, bool flipY, UnityEngine.Rendering.CommandBuffer commands) { commands.IssuePluginEvent(flipY ? _renderOnscreenFlipYCallback : _renderOnscreenCallback, view.GetHashCode()); }