예제 #1
0
        private void Init()
        {
            // Safely dispose any previous instance
            // Creates a new DeviceManager (Direct3D, Direct2D, DirectWrite, WIC)
            deviceManager = new DeviceManager();

            // New CubeRenderer
            cubeRenderer              = new CubeRenderer();
            cubeRenderer.ShowCube     = true;
            shapeRenderer             = new ShapeRenderer();
            shapeRenderer.Show        = false;
            shapeRenderer.EnableClear = false;


            // Use CoreWindowTarget as the rendering target (Initialize SwapChain, RenderTargetView, DepthStencilView, BitmapTarget)
            target = new SwapChainPanelTarget(scpMain);

            // Add Initializer to device manager
            deviceManager.OnInitialize += target.Initialize;
            deviceManager.OnInitialize += cubeRenderer.Initialize;
            deviceManager.OnInitialize += shapeRenderer.Initialize;

            // Render the cube within the CoreWindow
            target.OnRender += cubeRenderer.Render;
            target.OnRender += shapeRenderer.Render;

            // Initialize the device manager and all registered deviceManager.OnInitialize
            deviceManager.Initialize(DisplayProperties.LogicalDpi);

            // Setup rendering callback
            CompositionTarget.Rendering += CompositionTarget_Rendering;

            // Callback on DpiChanged
            DisplayProperties.LogicalDpiChanged += DisplayProperties_LogicalDpiChanged;
        }
예제 #2
0
        /// <summary>
        /// Invoked when this page is about to be displayed in a Frame.
        /// </summary>
        /// <param name="e">Event data that describes how this page was reached.  The Parameter
        /// property is typically used to configure the page.</param>
        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            d3dDragHandler = new DragHandler(d3dCanvas)
            {
                CursorOver = new Windows.UI.Core.CoreCursor(Windows.UI.Core.CoreCursorType.SizeAll, 1)
            };
            d2dDragHandler = new DragHandler(d2dCanvas)
            {
                CursorOver = new Windows.UI.Core.CoreCursor(Windows.UI.Core.CoreCursorType.SizeAll, 1)
            };

            d3dBrush          = new ImageBrush();
            d3dRectangle.Fill = d3dBrush;

            d2dBrush          = new ImageBrush();
            d2dRectangle.Fill = d2dBrush;

            // Safely dispose any previous instance
            // Creates a new DeviceManager (Direct3D, Direct2D, DirectWrite, WIC)
            deviceManager = new DeviceManager();

            // New CubeRenderer
            cubeRenderer  = new CubeRenderer();
            shapeRenderer = new ShapeRenderer();

            int pixelWidth  = (int)(d3dRectangle.Width * DisplayProperties.LogicalDpi / 96.0);
            int pixelHeight = (int)(d3dRectangle.Height * DisplayProperties.LogicalDpi / 96.0);

            // Use CoreWindowTarget as the rendering target (Initialize SwapChain, RenderTargetView, DepthStencilView, BitmapTarget)
            d3dTarget            = new SurfaceImageSourceTarget(pixelWidth, pixelHeight);
            d3dBrush.ImageSource = d3dTarget.ImageSource;

            d2dTarget            = new SurfaceImageSourceTarget(pixelWidth, pixelHeight);
            d2dBrush.ImageSource = d2dTarget.ImageSource;

            // Add Initializer to device manager
            deviceManager.OnInitialize += d3dTarget.Initialize;
            deviceManager.OnInitialize += d2dTarget.Initialize;
            deviceManager.OnInitialize += cubeRenderer.Initialize;
            deviceManager.OnInitialize += shapeRenderer.Initialize;

            // Render the cube within the CoreWindow
            d3dTarget.OnRender += cubeRenderer.Render;
            d2dTarget.OnRender += shapeRenderer.Render;

            // Initialize the device manager and all registered deviceManager.OnInitialize
            deviceManager.Initialize(DisplayProperties.LogicalDpi);

            CoreWindow.GetForCurrentThread().VisibilityChanged += (_, args) =>
            {
                if (args.Visible)
                {
                    BindRenderingEvents();
                }
                else
                {
                    UnbindRenderingEvents();
                }
            };
        }
예제 #3
0
 public void Connect(
     SceneManager sceneManager,
     CubeRenderer cubeRenderer
     )
 {
     this.sceneManager = sceneManager;
     this.cubeRenderer = cubeRenderer;
 }
예제 #4
0
 public void Connect(
     SceneManager sceneManager,
     CubeRenderer aoHemicubeRenderer
     )
 {
     this.sceneManager       = sceneManager;
     this.aoHemicubeRenderer = aoHemicubeRenderer;
 }
예제 #5
0
        public void SetCube(CubeResource cube)
        {
            SetModel(null);

            if (CubeRenderer != null)
            {
                CubeRenderer.PrepareCubeRendering(cube);
                SelectedCube = cube;
            }
        }
        private IActionResult Render(int x, int y, int z)
        {
            Cube cube = new Cube(Point.Zero, x, y, z);

            Canvas canvas = new Canvas(x + z * 2, y + z * 2);
            CubeRenderer.Render(canvas, cube);

            RenderResult renderResult = new RenderResult(canvas.Render(), canvas.Width, canvas.Height);

            return Ok(renderResult);
        }
        private void canvas_CreateResources(CanvasAnimatedControl sender, CanvasCreateResourcesEventArgs args)
        {
            // Create the Direct3D teapot model.
            Cube = new CubeRenderer(sender);

            TextRenderTarget = new CanvasRenderTarget(sender, TextRenderTargetSize, TextRenderTargetSize);

            // Set the scrolling text rendertarget (a Win2D object) as
            // source texture for our 3D teapot model (which uses Direct3D).
            Cube.SetTexture(TextRenderTarget);
        }
        private void DrawCube(GLContext context, Vector3 position)
        {
            var shader = GlobalShaders.GetShader("BASIC");

            context.CurrentShader = shader;

            var transform = Matrix4.CreateTranslation(position);

            shader.SetMatrix4x4("mtxMdl", ref transform);
            shader.SetVector4("color", new Vector4(1));

            CubeRenderer.Draw(context, 0.5f);

            context.CurrentShader = null;
        }
예제 #9
0
        /// <summary>
        /// Invoked when the application is launched normally by the end user.  Other entry points
        /// will be used when the application is launched to open a specific file, to display
        /// search results, and so forth.
        /// </summary>
        /// <param name="args">Details about the launch request and process.</param>
        protected override void OnLaunched(LaunchActivatedEventArgs args)
        {
            if (args.PreviousExecutionState == ApplicationExecutionState.Terminated)
            {
                //TODO: Load state from previously suspended application
            }

            // Safely dispose any previous instance
            // Creates a new DeviceManager (Direct3D, Direct2D, DirectWrite, WIC)
            deviceManager = new DeviceManager();

            // New CubeRenderer
            cubeRenderer              = new CubeRenderer();
            cubeRenderer.ShowCube     = true;
            shapeRenderer             = new ShapeRenderer();
            shapeRenderer.Show        = false;
            shapeRenderer.EnableClear = false;

            // Place the frame in the current Window and ensure that it is active
            var swapchainPanel = new DirectXPanelXaml(cubeRenderer, shapeRenderer);

            Window.Current.Content = swapchainPanel;
            Window.Current.Activate();

            // Use CoreWindowTarget as the rendering target (Initialize SwapChain, RenderTargetView, DepthStencilView, BitmapTarget)
            target = new SwapChainBackgroundPanelTarget(swapchainPanel);

            // Add Initializer to device manager
            deviceManager.OnInitialize += target.Initialize;
            deviceManager.OnInitialize += cubeRenderer.Initialize;
            deviceManager.OnInitialize += shapeRenderer.Initialize;

            // Render the cube within the CoreWindow
            target.OnRender += cubeRenderer.Render;
            target.OnRender += shapeRenderer.Render;

            // Initialize the device manager and all registered deviceManager.OnInitialize
            deviceManager.Initialize(DisplayProperties.LogicalDpi);

            // Setup rendering callback
            CompositionTarget.Rendering += CompositionTarget_Rendering;

            // Callback on DpiChanged
            DisplayProperties.LogicalDpiChanged += DisplayProperties_LogicalDpiChanged;
        }
예제 #10
0
        void Direct3DUserControl_Loaded(object sender, RoutedEventArgs e)
        {
            // Do not initialize D3D in design mode as default, since it may cause designer crashes
            if (Windows.ApplicationModel.DesignMode.DesignModeEnabled && !DesignModeD3DRendering)
            {
                return;
            }

            // Safely dispose any previous instance
            // Creates a new DeviceManager (Direct3D, Direct2D, DirectWrite, WIC)
            deviceManager = new DeviceManager();

            // Use current control as the rendering target (Initialize SwapChain, RenderTargetView, DepthStencilView, BitmapTarget)
            target = new SwapChainPanelTarget(this);

            // Add Initializer to device manager
            deviceManager.OnInitialize += target.Initialize;

            // New CubeRenderer
            cubeRenderer                = new CubeRenderer();
            cubeRenderer.ShowCube       = true;
            deviceManager.OnInitialize += cubeRenderer.Initialize;
            target.OnRender            += cubeRenderer.Render;

            // New ShapeRenderer
            shapeRenderer               = new ShapeRenderer();
            shapeRenderer.Show          = true;
            shapeRenderer.EnableClear   = false;
            deviceManager.OnInitialize += shapeRenderer.Initialize;
            target.OnRender            += shapeRenderer.Render;

            // Initialize the device manager and all registered deviceManager.OnInitialize
            try
            {
                deviceManager.Initialize(DisplayInformation.GetForCurrentView().LogicalDpi);
                DisplayInformation.GetForCurrentView().DpiChanged += DisplayInformation_LogicalDpiChanged;
            } catch (Exception ex) {
                //DisplayInformation.GetForCurrentView() will throw exception in designer
                deviceManager.Initialize(96.0f);
            }

            // Setup rendering callback
            CompositionTargetEx.Rendering += CompositionTarget_Rendering;
        }
예제 #11
0
        public InventoryComponent(
            D3DEngine engine,
            InputsManager inputManager,
            GuiManager guiManager,
            IconFactory iconFactory,
            VisualWorldParameters worldParameters)
        {
            IsDefferedLoadContent = true;

            _engine       = engine;
            _inputManager = inputManager;
            _guiManager   = guiManager;
            _iconFactory  = iconFactory;

            _guiManager.Screen.Desktop.Clicked += DesktopClicked;

            _cubeRenderer = new CubeRenderer(engine, worldParameters);

            _dragOffset = new Point(InventoryWindow.CellSize / 2, InventoryWindow.CellSize / 2);
        }
예제 #12
0
        public Direct3DUserControl()
        {
            this.InitializeComponent();

            // Safely dispose any previous instance
            // Creates a new DeviceManager (Direct3D, Direct2D, DirectWrite, WIC)
            deviceManager = new DeviceManager();

            // Use current control as the rendering target (Initialize SwapChain, RenderTargetView, DepthStencilView, BitmapTarget)
            target = new SwapChainPanelTarget(this);

            // Add Initializer to device manager
            deviceManager.OnInitialize += target.Initialize;

            // New CubeRenderer
            cubeRenderer                = new CubeRenderer();
            cubeRenderer.ShowCube       = true;
            deviceManager.OnInitialize += cubeRenderer.Initialize;
            target.OnRender            += cubeRenderer.Render;

            // New ShapeRenderer
            shapeRenderer               = new ShapeRenderer();
            shapeRenderer.Show          = true;
            shapeRenderer.EnableClear   = false;
            deviceManager.OnInitialize += shapeRenderer.Initialize;
            target.OnRender            += shapeRenderer.Render;

            // Initialize the device manager and all registered deviceManager.OnInitialize
            try {
                deviceManager.Initialize(DisplayInformation.GetForCurrentView().LogicalDpi);
                DisplayInformation.GetForCurrentView().DpiChanged += DisplayProperties_LogicalDpiChanged;
            } catch (Exception ex) {
                //DisplayInformation.GetForCurrentView() will throw exception in designer
                deviceManager.Initialize(96.0f);
            }

            // Setup rendering callback
            CompositionTargetEx.Rendering += CompositionTarget_Rendering;

            this.LayoutUpdated += Direct3DUserControl_LayoutUpdated;
        }
예제 #13
0
        public void Initialize(Application application)
        {
            loading = application.Loader;

            //  Essential services
#if ASSET_MONITOR
            var assetMonitor = new AssetMonitor();
#endif
            var depthStencilVisualizer = new DepthStencilVisualizer();
            var game = new Game();
            var highLevelRenderer  = new HighLevelRenderer();
            var idRenderer         = Configuration.idBuffer ? new IDRenderer() : null;
            var lineRenderer       = new LineRenderer();
            var manipulatorManager = new ManipulatorManager();
            var map         = Configuration.voxelTest ? new Map() : null;
            var voxelEditor = Configuration.voxelTest ? new VoxelEditor() : null;
#if false
            var openRLRenderer = RenderStack.Graphics.Configuration.useOpenRL ? new OpenRLRenderer() : null;
#endif
            var mainSceneRenderer    = new MainSceneRenderer();
            var materialManager      = new MaterialManager();           //  Cannot start without
            var renderer             = RendererFactory.Create();        //  Cannot start without
            var sceneManager         = new SceneManager();              //  Cannot start without
            var selectionManager     = Configuration.selection ? new SelectionManager() : null;
            var shadowRenderer       = (RenderStack.Graphics.Configuration.useGl1 == false) ? new ShadowRenderer() : null;
            var sounds               = new Sounds();     //  Cannot start without - always created, even if disabled
            var statistics           = new Statistics();
            var stereoscopicRenderer = Configuration.stereo ? new StereoscopicRenderer() : null;
            var styleManager         = Configuration.graphicalUserInterface ? new StyleManager() : null;

            var textRenderer         = new TextRenderer();
            var timerRenderer        = new TimerRenderer();
            var userInterfaceManager = new UserInterfaceManager();
            var updateManager        = new UpdateManager();

            var curveTool = new CurveTool.CurveTool();
#if false
            aoHemicubeRenderer        = new HemicubeRenderer(32, PixelFormat.Red, PixelInternalFormat.R8);
            cubeRenderer              = new CubeRenderer(512);
            hemisphericalRenderer     = new HemisphericalRenderer(256);
            pointViewHemicubeRenderer = new HemicubeRenderer(512, PixelFormat.Rgba, PixelInternalFormat.Rgba8);
#endif
            var aoManager      = new AmbientOcclusionManager();
            var brushManager   = Configuration.brushes ? new BrushManager() : null;
            var operations     = new Operations();
            var operationStack = new OperationStack();

            var physicsDrag = Configuration.physics ? new PhysicsDrag() : null;

            //  Sometimes objective C would be useful..
            //if(aoHemicubeRenderer != null)          aoHemicubeRenderer.Connect(renderer);
            if (aoManager != null)
            {
                aoManager.Connect(null, renderer, sceneManager);
            }
            if (brushManager != null)
            {
                brushManager.Connect(materialManager, textRenderer);
            }
            //if(cubeRenderer != null)                cubeRenderer.Connect(renderer);
            if (curveTool != null)
            {
                curveTool.Connect(materialManager, renderer, sceneManager);
            }
            if (depthStencilVisualizer != null)
            {
                depthStencilVisualizer.Connect(materialManager, renderer);
            }
            if (game != null)
            {
                game.Connect(highLevelRenderer, materialManager, renderer, sceneManager);
            }
            if (highLevelRenderer != null)
            {
                highLevelRenderer.Connect(
                    curveTool,
                    idRenderer,
                    lineRenderer,
                    mainSceneRenderer,
                    manipulatorManager,
                    map,
                    materialManager,
                    renderer,
                    sceneManager,
                    selectionManager,
                    shadowRenderer,
                    stereoscopicRenderer,
                    userInterfaceManager,
                    voxelEditor,
                    application as OpenTK.GameWindow
                    );
            }
            if (idRenderer != null)
            {
                idRenderer.Connect(application, materialManager, renderer, sceneManager, textRenderer, userInterfaceManager);
            }
            if (lineRenderer != null)
            {
                lineRenderer.Connect(renderer);
            }
            if (mainSceneRenderer != null)
            {
                mainSceneRenderer.Connect(lineRenderer, manipulatorManager, renderer, sceneManager, selectionManager);
            }
            if (manipulatorManager != null)
            {
                manipulatorManager.Connect(lineRenderer, materialManager, renderer, sceneManager, selectionManager);
            }
            if (map != null)
            {
                map.Connect(materialManager, renderer);
            }
            if (materialManager != null)
            {
                materialManager.Connect(renderer);
            }
#if false
            if (openRLRenderer != null)
            {
                openRLRenderer.Connect(materialManager, renderer, sceneManager);
            }
#endif
            if (operations != null)
            {
                operations.Connect(brushManager, materialManager, operationStack, sceneManager, selectionManager, sounds, userInterfaceManager);
            }
            if (operationStack != null)
            {
                operationStack.Connect(application);
            }
            if (physicsDrag != null)
            {
                physicsDrag.Connect(lineRenderer, selectionManager, sceneManager, application);
            }
            //if(pointViewHemicubeRenderer != null)   pointViewHemicubeRenderer.Connect(renderer);
            if (renderer != null)
            {
                renderer.Connect(application as OpenTK.GameWindow);
            }
            if (sceneManager != null)
            {
                sceneManager.Connect(brushManager, materialManager, renderer, selectionManager, sounds, textRenderer, userInterfaceManager, application as OpenTK.GameWindow);
            }
            if (shadowRenderer != null)
            {
                shadowRenderer.Connect(materialManager, renderer, sceneManager);
            }
            if (selectionManager != null)
            {
                selectionManager.Connect(curveTool, idRenderer, lineRenderer, manipulatorManager, operations, physicsDrag, renderer, sceneManager, sounds, userInterfaceManager, application);
            }
            if (stereoscopicRenderer != null)
            {
                stereoscopicRenderer.Connect(highLevelRenderer, mainSceneRenderer, materialManager, renderer, sceneManager, application as OpenTK.GameWindow);
            }
            if (styleManager != null)
            {
                styleManager.Connect(materialManager, renderer, textRenderer);
            }
            if (textRenderer != null)
            {
                textRenderer.Connect(application, renderer);
            }
            if (timerRenderer != null)
            {
                timerRenderer.Connect(renderer, textRenderer, application as OpenTK.GameWindow);
            }
            if (updateManager != null)
            {
                updateManager.Connect(sceneManager, sounds, userInterfaceManager);
            }
            if (userInterfaceManager != null)
            {
                userInterfaceManager.Connect(aoManager, brushManager, curveTool, highLevelRenderer, materialManager, operations, operationStack, renderer, sceneManager, selectionManager, shadowRenderer, sounds, statistics, textRenderer, application);
            }
            if (voxelEditor != null)
            {
                voxelEditor.Connect(renderer, map);
            }

            //  This helps us get text rendering capability earlier and thus we can
            //  display loading progress
            //if(framebufferManager != null)          framebufferManager.InitializationDependsOn(textRenderer);
            if (lineRenderer != null)
            {
                lineRenderer.InitializationDependsOn(textRenderer);
            }
            if (operationStack != null)
            {
                operationStack.InitializationDependsOn(textRenderer);
            }
            if (selectionManager != null)
            {
                selectionManager.InitializationDependsOn(textRenderer);
            }
            if (sounds != null)
            {
                sounds.InitializationDependsOn(textRenderer);
            }

#if ASSET_MONITOR
            if (renderer != null)
            {
                renderer.InitializationDependsOn(assetMonitor);
            }
#endif

            Action <object>    initializeService = new Action <object>(InitializeService);
            HashSet <IService> uninitialized     = new HashSet <IService>(ServicesSet);
            HashSet <IService> removeSet         = new HashSet <IService>();
            int count     = uninitialized.Count;
            var stopwatch = new Stopwatch();
            while (uninitialized.Count > 0)
            {
                Trace.TraceInformation("====== Service initialization pass");
                removeSet.Clear();
                foreach (var service in uninitialized)
                {
                    if (service.Dependencies.Count == 0)
                    {
                        string message = "Initializing " + service.Name + " (" + count + " left)";
                        Trace.TraceInformation(message);
                        if (
                            (Configuration.loadingWindow == false) &&
                            (textRenderer != null) &&
                            textRenderer.IsInitialized
                            )
                        {
                            // \todo this is broken, there is no camera
                            //textRenderer.Message(message);
                        }
                        if (loading != null)
                        {
                            loading.Message(message);
                        }
                        if (service.InitializeInMainThread || true)
                        {
                            service.Initialize();
                            if (loading != null)
                            {
                                loading.Step();
                            }

                            System.GC.Collect();
                            System.GC.WaitForPendingFinalizers();
                        }
                        else
                        {
                            ThreadManager2.Instance.AddTask(initializeService, service);
                        }
                        removeSet.Add(service);
                        --count;
                    }
                }
                ThreadManager2.Instance.Execute();
                if (removeSet.Count == 0)
                {
                    Trace.TraceError("Circular Service Dependencies Detected");
                    foreach (var service in uninitialized)
                    {
                        Trace.TraceInformation(service.ToString());
                    }
                    Debugger.Break();
                }
                uninitialized.ExceptWith(removeSet);
                foreach (var other in uninitialized)
                {
                    other.Dependencies.ExceptWith(removeSet);
                }
            }
        }
예제 #14
0
 public DirectXPanelXaml(CubeRenderer cubeRenderer, ShapeRenderer shapeRenderer)
 {
     this.cubeRenderer  = cubeRenderer;
     this.shapeRenderer = shapeRenderer;
     this.InitializeComponent();
 }