public async Task Render_SimpleBitmap_WithTransparency() { await TestUtilities.InitializeWithGraphicsAsync(); using (var solidBrush = new SolidBrushResource(Color4.LightGray)) using (var bitmap = new StandardBitmapResource(new AssemblyResourceLink(this.GetType(), "Resources.Bitmaps.Logo.png"))) using (var memRenderTarget = new MemoryRenderTarget(1024, 1024)) { // Perform rendering memRenderTarget.ClearColor = Color4.CornflowerBlue; await memRenderTarget.RenderLoop.Register2DDrawingLayerAsync(graphics => { // 2D rendering is made here graphics.FillRectangle(graphics.ScreenBounds, solidBrush); graphics.DrawBitmap(bitmap, new Vector2(100f, 100f)); }); await memRenderTarget.AwaitRenderAsync(); // Take screenshot var screenshot = await memRenderTarget.RenderLoop.GetScreenshotGdiAsync(); // TestUtilities.DumpToDesktop(screenshot, "Blub.png"); // Calculate and check difference var diff = BitmapComparison.CalculatePercentageDifference( screenshot, TestUtilities.LoadBitmapFromResource("Drawing2D", "SimpleBitmap_Transparency.png")); Assert.IsTrue(diff < 0.02, "Difference to reference image is to big!"); } }
public async Task Render_SimpleBitmap_WithTransparency() { await UnitTestHelper.InitializeWithGrahicsAsync(); using (SolidBrushResource solidBrush = new SolidBrushResource(Color4.LightGray)) using (StandardBitmapResource bitmap = new StandardBitmapResource(new AssemblyResourceLink(this.GetType(), "Ressources.Bitmaps.Logo.png"))) using (MemoryRenderTarget memRenderTarget = new MemoryRenderTarget(1024, 1024)) { // Perform rendering memRenderTarget.ClearColor = Color4.CornflowerBlue; await memRenderTarget.RenderLoop.Register2DDrawingLayerAsync((graphics) => { // 2D rendering is made here graphics.FillRectangle(graphics.ScreenBounds, solidBrush); graphics.DrawBitmap(bitmap, new Vector2(100f, 100f)); }); //await AsyncResourceLoader.Current.WaitForAllFinishedAsync(); await memRenderTarget.AwaitRenderAsync(); // Take screenshot GDI.Bitmap screenshot = await memRenderTarget.RenderLoop.GetScreenshotGdiAsync(); //screenshot.DumpToDesktop("Blub.png"); // Calculate and check difference float diff = BitmapComparison.CalculatePercentageDifference( screenshot, Properties.Resources.ReferenceImage_SimpleBitmap_Transparency); Assert.True(diff < 0.02, "Difference to reference image is to big!"); } }
public async Task Render_SimpleBitmap_Animated() { await TestUtilities.InitializeWithGraphicsAsync(); using (var bitmap = new StandardBitmapResource( new AssemblyResourceLink(this.GetType(), "Resources.Bitmaps.Boom.png"), 8, 8)) using (var memRenderTarget = new MemoryRenderTarget(1024, 1024)) { // Perform rendering memRenderTarget.ClearColor = Color4.CornflowerBlue; await memRenderTarget.RenderLoop.Register2DDrawingLayerAsync(graphics => { // 2D rendering is made here for (var loop = 0; loop < 8; loop++) { graphics.DrawBitmap(bitmap, new Vector2(100f * loop, 10f), frameIndex: 7); graphics.DrawBitmap(bitmap, new Vector2(100f * loop, 100f), frameIndex: 15); graphics.DrawBitmap(bitmap, new Vector2(100f * loop, 200f), frameIndex: 23); graphics.DrawBitmap(bitmap, new Vector2(100f * loop, 300f), frameIndex: 31); graphics.DrawBitmap(bitmap, new Vector2(100f * loop, 400f), frameIndex: 39); graphics.DrawBitmap(bitmap, new Vector2(100f * loop, 500f), frameIndex: 47); graphics.DrawBitmap(bitmap, new Vector2(100f * loop, 600f), frameIndex: 55); graphics.DrawBitmap(bitmap, new Vector2(100f * loop, 700f), frameIndex: 63); } }); //await AsyncResourceLoader.Current.WaitForAllFinishedAsync(); await memRenderTarget.AwaitRenderAsync(); // Take screenshot var screenshot = await memRenderTarget.RenderLoop.GetScreenshotGdiAsync(); // TestUtilities.DumpToDesktop(screenshot, "Blub.png"); // Calculate and check difference var diff = BitmapComparison.CalculatePercentageDifference( screenshot, TestUtilities.LoadBitmapFromResource("Drawing2D", "SimpleBitmap_Animated.png")); Assert.IsTrue(diff < 0.02, "Difference to reference image is to big!"); } }
/// <summary> /// Called when the sample has to startup. /// </summary> /// <param name="targetRenderLoop">The target render loop.</param> public override async Task OnStartupAsync(RenderLoop targetRenderLoop) { targetRenderLoop.EnsureNotNull(nameof(targetRenderLoop)); // Build dummy scene Scene scene = targetRenderLoop.Scene; Camera3DBase camera = targetRenderLoop.Camera as Camera3DBase; // Define resources m_starBitmap = new StandardBitmapResource( new AssemblyResourceLink( typeof(SeeingSharpSampleResources), "Bitmaps.StarColored_128x128.png")); m_startBitmapShaded = new GaussianBlurEffectResource(m_starBitmap); m_startBitmapShaded.StandardDeviation = 4f; // Define 2D overlay Action <Graphics2D> draw2DAction = (graphics) => { graphics.DrawBitmap( m_starBitmap, new Vector2(10f, 10f), 1f, BitmapInterpolationMode.Linear); graphics.DrawImage( m_startBitmapShaded, new Vector2(150f, 10f)); }; await targetRenderLoop.Scene.ManipulateSceneAsync((manipulator) => { // Add the 2D layer to the scene manipulator.AddDrawingLayer(draw2DAction); // Create floor SampleSceneBuilder.BuildStandardFloor( manipulator, Scene.DEFAULT_LAYER_NAME); // Create pallet geometry resource PalletType pType = new PalletType(); pType.ContentColor = Color4.Transparent; var resPalletGeometry = manipulator.AddResource <GeometryResource>( () => new GeometryResource(pType)); // Create pallet object GenericObject palletObject = manipulator.AddGeneric(resPalletGeometry); palletObject.Color = Color4.GreenColor; palletObject.EnableShaderGeneratedBorder(); palletObject.BuildAnimationSequence() .RotateEulerAnglesTo(new Vector3(0f, EngineMath.RAD_180DEG, 0f), TimeSpan.FromSeconds(2.0)) .WaitFinished() .RotateEulerAnglesTo(new Vector3(0f, EngineMath.RAD_360DEG, 0f), TimeSpan.FromSeconds(2.0)) .WaitFinished() .CallAction(() => palletObject.RotationEuler = Vector3.Zero) .ApplyAndRewind(); }); // Configure camera camera.Position = new Vector3(2f, 2f, 2f); camera.Target = new Vector3(0f, 0.5f, 0f); camera.UpdateCamera(); }
/// <summary> /// Called when the sample has to startup. /// </summary> /// <param name="targetRenderLoop">The target render loop.</param> public override async Task OnStartupAsync(RenderLoop targetRenderLoop) { targetRenderLoop.EnsureNotNull(nameof(targetRenderLoop)); // Build dummy scene Scene scene = targetRenderLoop.Scene; Camera3DBase camera = targetRenderLoop.Camera as Camera3DBase; // Create all objects for animation List <Vector2> starLocations = new List <Vector2>(); m_starBitmap = new StandardBitmapResource( new AssemblyResourceLink( typeof(SeeingSharpSampleResources), "Bitmaps.StarColored_128x128.png")); m_borderBrush = new SolidBrushResource(Color4.SteelBlue); Random starCreateRandomizer = new Random(); // 2D rendering is made here Custom2DDrawingLayer d2dDrawingLayer = new Custom2DDrawingLayer((graphics) => { // Draw background RectangleF d2dRectangle = new RectangleF(10, 10, 236, 236); graphics.Clear(Color4.LightBlue); // Dynamically create new stars if ((starLocations.Count < 50) && (starCreateRandomizer.Next(0, 100) <= 70)) { starLocations.Add(new Vector2( (float)starCreateRandomizer.Next(0, 256), -32f)); } // Update and draw all stars for (int loopStar = 0; loopStar < starLocations.Count; loopStar++) { Vector2 actLocation = starLocations[loopStar]; if (actLocation.Y > 270f) { starLocations.RemoveAt(loopStar); loopStar--; continue; } actLocation.Y = actLocation.Y + 4f; starLocations[loopStar] = actLocation; graphics.DrawBitmap( m_starBitmap, new RectangleF( actLocation.X - 16f, actLocation.Y - 16f, 32f, 32f), 0.6f, BitmapInterpolationMode.Linear); } // Draw a simple border graphics.DrawRectangle(graphics.ScreenBounds, m_borderBrush, 2f); }); // Build 3D scene await targetRenderLoop.Scene.ManipulateSceneAsync((manipulator) => { // Create floor SampleSceneBuilder.BuildStandardFloor( manipulator, Scene.DEFAULT_LAYER_NAME); // Define Direct2D texture resource var resD2DTexture = manipulator.AddResource <Direct2DTextureResource>( () => new Direct2DTextureResource(d2dDrawingLayer, 256, 256)); var resD2DMaterial = manipulator.AddSimpleColoredMaterial(resD2DTexture); // Create pallet geometry resource PalletType pType = new PalletType(); pType.PalletMaterial = NamedOrGenericKey.Empty; pType.ContentMaterial = resD2DMaterial; var resPalletGeometry = manipulator.AddResource <GeometryResource>( () => new GeometryResource(pType)); // Create pallet object GenericObject palletObject = manipulator.AddGeneric(resPalletGeometry); palletObject.Color = Color4.GreenColor; palletObject.EnableShaderGeneratedBorder(); palletObject.BuildAnimationSequence() .RotateEulerAnglesTo(new Vector3(0f, EngineMath.RAD_180DEG, 0f), TimeSpan.FromSeconds(2.0)) .WaitFinished() .RotateEulerAnglesTo(new Vector3(0f, EngineMath.RAD_360DEG, 0f), TimeSpan.FromSeconds(2.0)) .WaitFinished() .CallAction(() => palletObject.RotationEuler = Vector3.Zero) .ApplyAndRewind(); }); // Configure camera camera.Position = new Vector3(2f, 2f, 2f); camera.Target = new Vector3(0f, 0.5f, 0f); camera.UpdateCamera(); }