Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
1,154 changes: 74 additions & 1,080 deletions Samples/Islands/DrawingIsland/DrawingCsTestApp/DuckScenario.cs

Large diffs are not rendered by default.

69 changes: 10 additions & 59 deletions Samples/Islands/DrawingIsland/DrawingCsTestApp/HelmetScenario.cs
Original file line number Diff line number Diff line change
Expand Up @@ -101,11 +101,11 @@ private static Visual LoadScene_DamagedHelmet(Compositor compositor)

// Generate mipmaps from the bitmaps, which are needed for 3D rendering.

var materialInput0 = LoadMipmapFromBitmap(graphicsDevice, canvasBitmap0.Result);
var materialInput1 = LoadMipmapFromBitmap(graphicsDevice, canvasBitmap1.Result);
var materialInput2 = LoadMipmapFromBitmap(graphicsDevice, canvasBitmap2.Result);
var materialInput3 = LoadMipmapFromBitmap(graphicsDevice, canvasBitmap3.Result);
var materialInput4 = LoadMipmapFromBitmap(graphicsDevice, canvasBitmap4.Result);
var materialInput0 = SceneNodeCommon.LoadMipmapFromBitmap(graphicsDevice, canvasBitmap0.Result);
var materialInput1 = SceneNodeCommon.LoadMipmapFromBitmap(graphicsDevice, canvasBitmap1.Result);
var materialInput2 = SceneNodeCommon.LoadMipmapFromBitmap(graphicsDevice, canvasBitmap2.Result);
var materialInput3 = SceneNodeCommon.LoadMipmapFromBitmap(graphicsDevice, canvasBitmap3.Result);
var materialInput4 = SceneNodeCommon.LoadMipmapFromBitmap(graphicsDevice, canvasBitmap4.Result);


// Copy loaded binary data into mesh: verticies, normals, ...
Expand All @@ -128,77 +128,28 @@ private static Visual LoadScene_DamagedHelmet(Compositor compositor)
sceneNodeForTheGLTFMesh0.Components.Add(renderComponent0);

sceneMaterial0.BaseColorFactor = new Vector4(1.0f, 1.0f, 1.0f, 1.0f);
sceneMaterial0.BaseColorInput = CreateMaterial(
sceneMaterial0.BaseColorInput = SceneNodeCommon.CreateMaterial(
compositor, materialInput0, renderComponent0, "BaseColorInput"); ;

sceneMaterial0.RoughnessFactor = 1.0f;
sceneMaterial0.MetallicFactor = 1.0f;
sceneMaterial0.MetallicRoughnessInput = CreateMaterial(
sceneMaterial0.MetallicRoughnessInput = SceneNodeCommon.CreateMaterial(
compositor, materialInput1, renderComponent0, "MetallicRoughnessInput");

sceneMaterial0.NormalScale = 1.0f;
sceneMaterial0.NormalInput = CreateMaterial(
sceneMaterial0.NormalInput = SceneNodeCommon.CreateMaterial(
compositor, materialInput2, renderComponent0, "NormalInput");

sceneMaterial0.OcclusionStrength = 1.0f;
sceneMaterial0.OcclusionInput = CreateMaterial(
sceneMaterial0.OcclusionInput = SceneNodeCommon.CreateMaterial(
compositor, materialInput3, renderComponent0, "OcclusionInput");

sceneMaterial0.AlphaMode = SceneAlphaMode.Opaque;
sceneMaterial0.IsDoubleSided = false;
sceneMaterial0.EmissiveFactor = new Vector3(1.0f, 1.0f, 1.0f);
sceneMaterial0.EmissiveInput = CreateMaterial(
sceneMaterial0.EmissiveInput = SceneNodeCommon.CreateMaterial(
compositor, materialInput4, renderComponent0, "EmissiveInput");

return sceneVisual;
}


public static CompositionMipmapSurface LoadMipmapFromBitmap(
CompositionGraphicsDevice graphicsDevice, CanvasBitmap canvasBitmap)
{
var size = new SizeInt32(2048, 2048);
var mipmapSurface = graphicsDevice.CreateMipmapSurface(
size,
DirectXPixelFormat.B8G8R8A8UIntNormalized,
DirectXAlphaMode.Premultiplied);

var drawDestRect = new Rect(0, 0, size.Width, size.Height);
var drawSourceRect = new Rect(0, 0, size.Width, size.Height);
for (uint level = 0; level < mipmapSurface.LevelCount; ++level)
{
// Draw the image to the surface
var drawingSurface = mipmapSurface.GetDrawingSurfaceForLevel(level);

using (var session = CanvasComposition.CreateDrawingSession(drawingSurface))
{
session.Clear(Windows.UI.Color.FromArgb(0, 0, 0, 0));
session.DrawImage(canvasBitmap, drawDestRect, drawSourceRect);
}

drawDestRect = new Rect(0, 0, drawDestRect.Width / 2, drawDestRect.Height / 2);
}

return mipmapSurface;
}


private static SceneSurfaceMaterialInput CreateMaterial(
Compositor compositor,
CompositionMipmapSurface mipmap,
SceneMeshRendererComponent rendererComponent,
string mapping)
{
var materialInput = SceneSurfaceMaterialInput.Create(compositor);
materialInput.Surface = mipmap;
materialInput.BitmapInterpolationMode =
CompositionBitmapInterpolationMode.MagLinearMinLinearMipLinear;

materialInput.WrappingUMode = SceneWrappingMode.Repeat;
materialInput.WrappingVMode = SceneWrappingMode.Repeat;

rendererComponent.UVMappings[mapping] = SceneAttributeSemantic.TexCoord0;

return materialInput;
}
}
53 changes: 53 additions & 0 deletions Samples/Islands/DrawingIsland/DrawingCsTestApp/SceneNodeCommon.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,62 @@
using Windows.Storage.Streams;
using Windows.Storage;
using WinRT;
using Microsoft.Graphics.Canvas.UI.Composition;
using Microsoft.Graphics.Canvas;
using Microsoft.Graphics.DirectX;
using Microsoft.UI.Composition;
using Microsoft.UI.Composition.Scenes;
using Windows.Graphics;

class SceneNodeCommon
{
public static CompositionMipmapSurface LoadMipmapFromBitmap(
CompositionGraphicsDevice graphicsDevice, CanvasBitmap canvasBitmap)
{
var size = new SizeInt32(2048, 2048);
var mipmapSurface = graphicsDevice.CreateMipmapSurface(
size,
DirectXPixelFormat.B8G8R8A8UIntNormalized,
DirectXAlphaMode.Premultiplied);

var drawDestRect = new Rect(0, 0, size.Width, size.Height);
var drawSourceRect = new Rect(0, 0, size.Width, size.Height);
for (uint level = 0; level < mipmapSurface.LevelCount; ++level)
{
// Draw the image to the surface
var drawingSurface = mipmapSurface.GetDrawingSurfaceForLevel(level);

using (var session = CanvasComposition.CreateDrawingSession(drawingSurface))
{
session.Clear(Windows.UI.Color.FromArgb(0, 0, 0, 0));
session.DrawImage(canvasBitmap, drawDestRect, drawSourceRect);
}

drawDestRect = new Rect(0, 0, drawDestRect.Width / 2, drawDestRect.Height / 2);
}

return mipmapSurface;
}

public static SceneSurfaceMaterialInput CreateMaterial(
Compositor compositor,
CompositionMipmapSurface mipmap,
SceneMeshRendererComponent rendererComponent,
string mapping)
{
var materialInput = SceneSurfaceMaterialInput.Create(compositor);
materialInput.Surface = mipmap;
materialInput.BitmapInterpolationMode =
CompositionBitmapInterpolationMode.MagLinearMinLinearMipLinear;

materialInput.WrappingUMode = SceneWrappingMode.Repeat;
materialInput.WrappingVMode = SceneWrappingMode.Repeat;

rendererComponent.UVMappings[mapping] = SceneAttributeSemantic.TexCoord0;

return materialInput;
}

public static async Task<MemoryBuffer> LoadMemoryBufferFromUriAsync(Uri uri)
{
var file = await StorageFile.GetFileFromApplicationUriAsync(uri);
Expand Down