Ejemplo n.º 1
0
        public async Task Render_SimpleObject_D2D_Texture()
        {
            await TestUtilities.InitializeWithGraphicsAsync();

            using (var solidBrush = new SolidBrushResource(Color4.Gray))
                using (var textFormat = new TextFormatResource("Arial", 36))
                    using (var textBrush = new SolidBrushResource(Color4.RedColor))
                        using (var memRenderTarget = new MemoryRenderTarget(1024, 1024))
                        {
                            memRenderTarget.ClearColor = Color4.CornflowerBlue;

                            // Get and configure the camera
                            var camera = (PerspectiveCamera3D)memRenderTarget.Camera;
                            camera.Position = new Vector3(0f, 5f, -7f);
                            camera.Target   = new Vector3(0f, 0f, 0f);
                            camera.UpdateCamera();

                            // 2D rendering is made here
                            var d2dDrawingLayer = new Custom2DDrawingLayer(graphics =>
                            {
                                var d2dRectangle = new RectangleF(10, 10, 236, 236);
                                graphics.Clear(Color4.LightBlue);
                                graphics.FillRoundedRectangle(
                                    d2dRectangle, 30, 30,
                                    solidBrush);

                                d2dRectangle.Inflate(-10, -10);
                                graphics.DrawText("Hello Direct2D!", textFormat, d2dRectangle, textBrush);
                            });

                            // Define scene
                            await memRenderTarget.Scene.ManipulateSceneAsync(manipulator =>
                            {
                                var resD2DTexture = manipulator.AddResource(
                                    _ => new Direct2DTextureResource(d2dDrawingLayer, 256, 256));
                                var resD2DMaterial = manipulator.AddStandardMaterialResource(resD2DTexture);
                                var geoResource    = manipulator.AddResource(
                                    _ => new GeometryResource(new CubeGeometryFactory()));

                                var newMesh           = manipulator.AddMeshObject(geoResource, resD2DMaterial);
                                newMesh.RotationEuler = new Vector3(0f, EngineMath.RAD_90DEG / 2f, 0f);
                                newMesh.Scaling       = new Vector3(2f, 2f, 2f);
                            });

                            await memRenderTarget.AwaitRenderAsync();

                            // Take screenshot
                            var screenshot = await memRenderTarget.RenderLoop.GetScreenshotGdiAsync();

                            //TestUtilities.DumpToDesktop(screenshot, "Blub.png");

                            // Calculate and check difference
                            var isNearEqual = BitmapComparison.IsNearEqual(
                                screenshot, TestUtilities.LoadBitmapFromResource("Drawing2D", "SimpleObject_D2DTexture.png"));
                            Assert.IsTrue(isNearEqual, "Difference to reference image is to big!");
                        }

            // Finishing checks
            Assert.IsTrue(GraphicsCore.Current.MainLoop !.RegisteredRenderLoopCount == 0, "RenderLoops where not disposed correctly!");
        }
        public async Task Postprocessing_Focus()
        {
            await TestUtilities.InitializeWithGraphicsAsync();

            using (var memRenderTarget = new MemoryRenderTarget(1024, 1024))
            {
                memRenderTarget.ClearColor = Color4.CornflowerBlue;

                // Get and configure the camera
                var camera = (PerspectiveCamera3D)memRenderTarget.Camera;
                camera.Position = new Vector3(0f, 5f, -7f);
                camera.Target   = new Vector3(0f, 0f, 0f);
                camera.UpdateCamera();

                // Define scene
                await memRenderTarget.Scene.ManipulateSceneAsync(manipulator =>
                {
                    var keyPostprocess = manipulator.AddResource(
                        _ => new FocusPostprocessEffectResource(false, 0f));

                    var defaultLayer = manipulator.GetLayer(Scene.DEFAULT_LAYER_NAME);
                    var focusLayer   = manipulator.AddLayer("Focus");
                    focusLayer.PostprocessEffectKey = keyPostprocess;

                    var resGeometry = manipulator.AddResource(
                        _ => new GeometryResource(new CubeGeometryFactory()));
                    var resMaterial = manipulator.AddStandardMaterialResource();

                    var frontMesh      = manipulator.AddMeshObject(resGeometry, defaultLayer.Name, resMaterial);
                    frontMesh.Color    = Color4.BlueColor;
                    frontMesh.Scaling  = new Vector3(1f, 0.5f, 0.5f);
                    frontMesh.Position = new Vector3(0.5f, 2f, -3f);

                    var backMesh           = manipulator.AddMeshObject(resGeometry, defaultLayer.Name, resMaterial);
                    backMesh.RotationEuler = new Vector3(0f, EngineMath.RAD_90DEG / 3f, 0f);
                    backMesh.Scaling       = new Vector3(2f, 2f, 2f);
                    backMesh.Color         = Color4.RedColor;

                    var focusMesh = manipulator.AddMeshObject(resGeometry, focusLayer.Name, resMaterial);
                    focusMesh.TransformSourceObject = backMesh;
                    focusMesh.TransformationType    = SpacialTransformationType.TakeFromOtherObject;
                    focusMesh.Color = Color4.RedColor;
                });

                await memRenderTarget.AwaitRenderAsync();

                // Take screenshot
                var screenshot = await memRenderTarget.RenderLoop.GetScreenshotGdiAsync();

                // TestUtilities.DumpToDesktop(screenshot, "Blub.png");

                // Calculate and check difference
                var isNearEqual = BitmapComparison.IsNearEqual(
                    screenshot, TestUtilities.LoadBitmapFromResource("Postprocessing", "PostProcess_Focus.png"));
                Assert.IsTrue(isNearEqual, "Difference to reference image is to big!");
            }

            // Finishing checks
            Assert.IsTrue(GraphicsCore.Current.MainLoop !.RegisteredRenderLoopCount == 0, "RenderLoops where not disposed correctly!");
        }
Ejemplo n.º 3
0
        public async Task Render_SimpleLine()
        {
            await TestUtilities.InitializeWithGraphicsAsync();

            using (var memRenderTarget = new MemoryRenderTarget(1024, 1024))
            {
                memRenderTarget.ClearColor = Color4.CornflowerBlue;

                // Get and configure the camera
                var camera = (PerspectiveCamera3D)memRenderTarget.Camera;
                camera.Position = new Vector3(0f, 5f, -7f);
                camera.Target   = new Vector3(0f, 0f, 0f);
                camera.UpdateCamera();

                // Define scene
                await memRenderTarget.Scene.ManipulateSceneAsync(manipulator =>
                {
                    var wireObject = new WireObject
                    {
                        LineData = new[]
                        {
                            new Line(
                                new Vector3(-0.5f, 0f, -0.5f),
                                new Vector3(0.5f, 0f, -0.5f)),
                            new Line(
                                new Vector3(0.5f, 0f, -0.5f),
                                new Vector3(0.5f, 0f, 0.5f)),
                            new Line(
                                new Vector3(0.5f, 0f, 0.5f),
                                new Vector3(-0.5f, 0f, 0.5f)),
                            new Line(
                                new Vector3(-0.5f, 0f, 0.5f),
                                new Vector3(-0.5f, 0f, -0.5f))
                        },
                        Color = Color4.RedColor
                    };


                    manipulator.AddObject(wireObject);
                });

                await memRenderTarget.AwaitRenderAsync();

                // Take screenshot
                var screenshot = await memRenderTarget.RenderLoop.GetScreenshotGdiAsync();

                // TestUtilities.DumpToDesktop(screenshot, "Blub.png");

                // Calculate and check difference
                var isNearEqual = BitmapComparison.IsNearEqual(
                    screenshot, TestUtilities.LoadBitmapFromResource("Drawing3D", "SimpleLine.png"));
                Assert.IsTrue(isNearEqual, "Difference to reference image is to big!");
            }
        }
Ejemplo n.º 4
0
        public async Task QueryInfo_FromSimpleMesh()
        {
            await TestUtilities.InitializeWithGraphicsAsync();

            using (var memRenderTarget = new MemoryRenderTarget(1024, 1024))
            {
                memRenderTarget.ClearColor = Color4.CornflowerBlue;

                // Get and configure the camera
                var camera = (PerspectiveCamera3D)memRenderTarget.Camera;
                camera.Position = new Vector3(0f, 5f, -7f);
                camera.Target   = new Vector3(0f, 0f, 0f);
                camera.UpdateCamera();

                // Define scene
                Mesh?newMesh = null;
                await memRenderTarget.Scene.ManipulateSceneAsync(manipulator =>
                {
                    var resGeometry = manipulator.AddResource(
                        _ => new GeometryResource(new CubeGeometryFactory()));
                    var resMaterial = manipulator.AddStandardMaterialResource();

                    newMesh = manipulator.AddMeshObject(resGeometry, resMaterial);
                    newMesh.RotationEuler = new Vector3(0f, EngineMath.RAD_90DEG / 2f, 0f);
                    newMesh.Scaling       = new Vector3(2f, 2f, 2f);
                    newMesh.Color         = Color4.RedColor;
                    newMesh.TrySetInitialVisibility(memRenderTarget.RenderLoop.ViewInformation, true);
                });

                await memRenderTarget.AwaitRenderAsync();

                // Query some information from the mesh
                var renderingChunkCount = newMesh !.TryGetRenderingChunkCount(memRenderTarget.Device !);
                var geoResource         = newMesh.TryGetGeometryResource(memRenderTarget.Device !);
                var materialResources   = newMesh.TryGetMaterialResources(memRenderTarget.Device !);

                // Take screenshot
                var screenshot = await memRenderTarget.RenderLoop.GetScreenshotGdiAsync();

                // TestUtilities.DumpToDesktop(screenshot, "Blub.png");

                // Calculate and check difference
                var isNearEqual = BitmapComparison.IsNearEqual(
                    screenshot, TestUtilities.LoadBitmapFromResource("Drawing3D", "SimpleObject.png"));
                Assert.IsTrue(isNearEqual, "Difference to reference image is to big!");

                // Check info from mesh
                Assert.IsTrue(renderingChunkCount == 1, "Invalid count of rendering chunks");
                Assert.IsTrue(geoResource != null, "Can not query GeometryResource");
                Assert.IsTrue(materialResources is { Length: 1 }, "Can not query MaterialResource");
Ejemplo n.º 5
0
        public async Task Render_SimpleObject()
        {
            await TestUtilities.InitializeWithGraphicsAsync();

            using (var memRenderTarget = new MemoryRenderTarget(1024, 1024))
            {
                memRenderTarget.ClearColor = Color4.CornflowerBlue;

                // Get and configure the camera
                var camera = (PerspectiveCamera3D)memRenderTarget.Camera;
                camera.Position = new Vector3(0f, 5f, -7f);
                camera.Target   = new Vector3(0f, 0f, 0f);
                camera.UpdateCamera();

                // Define scene
                await memRenderTarget.Scene.ManipulateSceneAsync(manipulator =>
                {
                    var resGeometry = manipulator.AddResource(
                        _ => new GeometryResource(new CubeGeometryFactory()));
                    var resMaterial = manipulator.AddStandardMaterialResource();

                    var newMesh           = manipulator.AddMeshObject(resGeometry, resMaterial);
                    newMesh.RotationEuler = new Vector3(0f, EngineMath.RAD_90DEG / 2f, 0f);
                    newMesh.Scaling       = new Vector3(2f, 2f, 2f);
                    newMesh.Color         = Color4.RedColor;
                    newMesh.TrySetInitialVisibility(memRenderTarget.RenderLoop.ViewInformation, true);
                });

                await memRenderTarget.AwaitRenderAsync();

                // Take screenshot
                var screenshot = await memRenderTarget.RenderLoop.GetScreenshotGdiAsync();

                // TestUtilities.DumpToDesktop(screenshot, "Blub.png");

                // Calculate and check difference
                var isNearEqual = BitmapComparison.IsNearEqual(
                    screenshot, TestUtilities.LoadBitmapFromResource("Drawing3D", "SimpleObject.png"));
                Assert.IsTrue(isNearEqual, "Difference to reference image is to big!");
            }

            // Finishing checks
            Assert.IsTrue(GraphicsCore.Current.MainLoop !.RegisteredRenderLoopCount == 0, "RenderLoops where not disposed correctly!");
        }
        public async Task LoadAndRender_ACShadedObject()
        {
            await TestUtilities.InitializeWithGraphicsAsync();

            using (var memRenderTarget = new MemoryRenderTarget(1024, 1024))
            {
                memRenderTarget.ClearColor = Color4.CornflowerBlue;

                // Get and configure the camera
                var camera = (PerspectiveCamera3D)memRenderTarget.Camera;
                camera.Position = new Vector3(-1.5f, 3f, -1.5f);
                camera.Target   = new Vector3(1f, -1f, 1f);
                camera.UpdateCamera();

                // Define scene
                SceneSpacialObject?newMesh = null;
                await memRenderTarget.Scene.ManipulateSceneAsync(manipulator =>
                {
                    var resGeometry = manipulator.AddResource(
                        _ => new GeometryResource(ACFileLoader.ImportGeometry(
                                                      TestUtilities.CreateResourceLink("Models", "ModelShaded.ac"))));
                    var resMaterial = manipulator.AddStandardMaterialResource();

                    newMesh         = manipulator.AddMeshObject(resGeometry, resMaterial);
                    newMesh.Scaling = new Vector3(0.5f, 0.5f, 0.5f);
                });

                await memRenderTarget.Scene.WaitUntilVisibleAsync(newMesh !, memRenderTarget.RenderLoop);

                // Take screenshot
                var screenshot = await memRenderTarget.RenderLoop.GetScreenshotGdiAsync();

                //TestUtilities.DumpToDesktop(screenshot, "Blub.png");

                // Calculate and check difference
                var isNearEqual = BitmapComparison.IsNearEqual(
                    screenshot, TestUtilities.LoadBitmapFromResource("GeometryLoadingAndRendering", "ShadedObject.png"));
                Assert.IsTrue(isNearEqual, "Difference to reference image is to big!");
            }

            // Finishing checks
            Assert.IsTrue(GraphicsCore.Current.MainLoop !.RegisteredRenderLoopCount == 0, "RenderLoops where not disposed correctly!");
        }
        public async Task LoadAndRender_StlFile()
        {
            await TestUtilities.InitializeWithGraphicsAsync();

            using (var memRenderTarget = new MemoryRenderTarget(1024, 1024))
            {
                memRenderTarget.ClearColor = Color4.CornflowerBlue;

                // Get and configure the camera
                var camera = (PerspectiveCamera3D)memRenderTarget.Camera;
                camera.Position = new Vector3(-4f, 4f, -4f);
                camera.Target   = new Vector3(2f, 0f, 2f);
                camera.UpdateCamera();

                // Import Fox model
                var importOptions = new StlImportOptions
                {
                    ResourceCoordinateSystem = CoordinateSystem.LeftHanded_UpZ,
                    FitToCube = false
                };

                var loadedObjects = await memRenderTarget.Scene.ImportAsync(
                    TestUtilities.CreateResourceLink("Models", "Fox.stl"),
                    importOptions);

                // Wait for it to be visible
                await memRenderTarget.Scene.WaitUntilVisibleAsync(loadedObjects, memRenderTarget.RenderLoop);

                // Take screenshot
                var screenshot = await memRenderTarget.RenderLoop.GetScreenshotGdiAsync();

                //TestUtilities.DumpToDesktop(screenshot, "Blub.png");

                // Calculate and check difference
                var isNearEqual = BitmapComparison.IsNearEqual(
                    screenshot, TestUtilities.LoadBitmapFromResource("ModelLoadingAndRendering", "ModelStl.png"));
                Assert.IsTrue(isNearEqual, "Difference to reference image is to big!");
            }

            // Finishing checks
            Assert.IsTrue(GraphicsCore.Current.MainLoop !.RegisteredRenderLoopCount == 0, "RenderLoops where not disposed correctly!");
        }
Ejemplo n.º 8
0
        public async Task Render_ClearedScreen()
        {
            await TestUtilities.InitializeWithGraphicsAsync();

            using (var memRenderTarget = new MemoryRenderTarget(1024, 1024))
            {
                // Perform rendering
                memRenderTarget.ClearColor = Color4.CornflowerBlue;
                await memRenderTarget.AwaitRenderAsync();

                // Take screenshot
                var screenshot = await memRenderTarget.RenderLoop.GetScreenshotGdiAsync();

                //TestUtilities.DumpToDesktop(screenshot, "Blub.png");

                // Calculate and check difference
                var isNearEqual = BitmapComparison.IsNearEqual(
                    screenshot, TestUtilities.LoadBitmapFromResource("Drawing3D", "ClearedScreen.png"));
                Assert.IsTrue(isNearEqual, "Difference to reference image is to big!");
            }

            // Finishing checks
            Assert.IsTrue(GraphicsCore.Current.MainLoop !.RegisteredRenderLoopCount == 0, "RenderLoops where not disposed correctly!");
        }
Ejemplo n.º 9
0
        public async Task MemoryRenderTarget_2DInitError()
        {
            await TestUtilities.InitializeWithGraphicsAsync();

            // Ensure that any async disposal is  done before we create a new GraphicsCore
            await GraphicsCore.Current.MainLoop !.WaitForNextPassedLoopAsync();
            await GraphicsCore.Current.MainLoop !.WaitForNextPassedLoopAsync();

            GDI.Bitmap?screenshot = null;
            using (TestUtilities.FailTestOnInternalExceptions())
                using (GraphicsCore.AutomatedTest_NewTestEnvironment())
                {
                    await GraphicsCore.Loader
                    .ConfigureLoading(settings => settings.ThrowD2DInitDeviceError = true)
                    .LoadAsync();

                    Assert.IsTrue(GraphicsCore.IsLoaded);
                    Assert.IsFalse(GraphicsCore.Current.DefaultDevice !.Supports2D);

                    using (var solidBrush = new SolidBrushResource(Color4.Gray))
                        using (var textFormat = new TextFormatResource("Arial", 36))
                            using (var textBrush = new SolidBrushResource(Color4.RedColor))

                                using (var memRenderTarget = new MemoryRenderTarget(1024, 1024))
                                {
                                    memRenderTarget.ClearColor = Color4.CornflowerBlue;

                                    // Get and configure the camera
                                    var camera = (PerspectiveCamera3D)memRenderTarget.Camera;
                                    camera.Position = new Vector3(0f, 5f, -7f);
                                    camera.Target   = new Vector3(0f, 0f, 0f);
                                    camera.UpdateCamera();

                                    // 2D rendering is made here
                                    var d2dDrawingLayer = new Custom2DDrawingLayer(graphics =>
                                    {
                                        var d2dRectangle = new GDI.RectangleF(10, 10, 236, 236);
                                        graphics.Clear(Color4.LightBlue);
                                        graphics.FillRoundedRectangle(
                                            d2dRectangle, 30, 30,
                                            solidBrush);

                                        d2dRectangle.Inflate(-10, -10);
                                        graphics.DrawText("Hello Direct2D!", textFormat, d2dRectangle, textBrush);
                                    });

                                    // Define scene
                                    await memRenderTarget.Scene.ManipulateSceneAsync(manipulator =>
                                    {
                                        var resD2DTexture = manipulator.AddResource(
                                            _ => new Direct2DTextureResource(d2dDrawingLayer, 256, 256));
                                        var resD2DMaterial = manipulator.AddStandardMaterialResource(resD2DTexture);
                                        var resGeometry    = manipulator.AddResource(
                                            _ => new GeometryResource(new CubeGeometryFactory()));

                                        var newMesh           = manipulator.AddMeshObject(resGeometry, resD2DMaterial);
                                        newMesh.RotationEuler = new Vector3(0f, EngineMath.RAD_90DEG / 2f, 0f);
                                        newMesh.Scaling       = new Vector3(2f, 2f, 2f);
                                    });

                                    // Take screenshot
                                    await memRenderTarget.AwaitRenderAsync();

                                    screenshot = await memRenderTarget.RenderLoop.GetScreenshotGdiAsync();

                                    // TestUtilities.DumpToDesktop(screenshot, "Blub.png");
                                }
                }

            // Calculate and check difference
            Assert.IsNotNull(screenshot);
            var isNearEqual = BitmapComparison.IsNearEqual(
                screenshot, TestUtilities.LoadBitmapFromResource("ErrorHandling", "SimpleObject.png"));

            Assert.IsTrue(isNearEqual, "Difference to reference image is to big!");
        }