Esempio n. 1
0
        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);
            }
        }
Esempio n. 2
0
    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);
    }
Esempio n. 3
0
    /// <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);
    }
Esempio n. 4
0
    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);
        }
    }
Esempio n. 6
0
        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;
        }
Esempio n. 7
0
        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);
        }
    }
Esempio n. 9
0
    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;
        }
    }
Esempio n. 10
0
    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);
        }
    }
Esempio n. 12
0
    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
        }
    }
Esempio n. 13
0
        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;
                    }
                }
            }
        }
Esempio n. 14
0
    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();
    }
Esempio n. 15
0
    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());
 }
Esempio n. 17
0
 /// <summary>
 /// Unregister given renderer
 /// </summary>
 public static void UnregisterView(Noesis.View view, UnityEngine.Rendering.CommandBuffer commands)
 {
     commands.IssuePluginEventAndData(_renderUnregisterCallback, 0, view.CPtr.Handle);
 }
Esempio n. 18
0
 /// <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());
 }