aboutsummaryrefslogtreecommitdiffstatsci
diff options
context:
space:
mode:
authorJean-Philippe Bruyère <jp_bruyere@hotmail.com>2019-05-04 03:09:35 +0200
committerJean-Philippe Bruyère <jp_bruyere@hotmail.com>2019-05-04 03:09:35 +0200
commit3b913249486fd098f802112e836e0c1fe189b47e (patch)
treed72b9cb26e2f9e2200a6d3a2765eacff46746775
parent19c65bd91b942b3991ca41b44f1706c7a2f3826b (diff)
net.sdk project files
-rw-r--r--VK/vulkan.csproj (renamed from VK/VK.csproj)36
m---------crow0
-rw-r--r--netfx.props27
-rw-r--r--samples/Textured/Textured.csproj66
-rw-r--r--samples/Textured/main.cs6
-rw-r--r--samples/Textured/packages.config4
-rw-r--r--samples/TexturedCube/TexturedCube.csproj67
-rw-r--r--samples/TexturedCube/data/Box.gltf3
-rw-r--r--samples/TexturedCube/data/papermill.ktx3
-rw-r--r--samples/TexturedCube/main.cs10
-rw-r--r--samples/TexturedCube/models/DamagedHelmet/glTF-Embedded/DamagedHelmet.gltf3
-rw-r--r--samples/TexturedCube/models/DamagedHelmet/glTF/DamagedHelmet.binbin558504 -> 0 bytes
-rw-r--r--samples/TexturedCube/models/DamagedHelmet/glTF/DamagedHelmet.gltf3
-rw-r--r--samples/TexturedCube/models/Untitled.pngbin6630 -> 0 bytes
-rw-r--r--samples/TexturedCube/models/untitled.binbin26168 -> 0 bytes
-rw-r--r--samples/TexturedCube/models/untitled.gltf3
-rw-r--r--samples/TexturedCube/packages.config4
-rw-r--r--samples/TexturedCube/textures/empty.ktx3
-rw-r--r--samples/TexturedCube/textures/papermill.ktx3
-rw-r--r--samples/Triangle/Triangle.csproj78
-rw-r--r--samples/Triangle/packages.config8
-rw-r--r--samples/VkvgCrowTest/EnvironmentPipeline.cs354
-rw-r--r--samples/VkvgCrowTest/PbrPipeline.cs391
-rw-r--r--samples/VkvgCrowTest/VkvgCrowTest.csproj91
-rw-r--r--samples/VkvgCrowTest/main.cs564
-rw-r--r--samples/VkvgCrowTest/packages.config10
-rw-r--r--samples/VkvgCrowTest/shaders/FullScreenQuad.vert10
-rw-r--r--samples/VkvgCrowTest/shaders/filtercube.vert20
-rw-r--r--samples/VkvgCrowTest/shaders/genbrdflut.frag90
-rw-r--r--samples/VkvgCrowTest/shaders/genbrdflut.vert9
-rw-r--r--samples/VkvgCrowTest/shaders/irradiancecube.frag37
-rw-r--r--samples/VkvgCrowTest/shaders/pbr.vert44
-rw-r--r--samples/VkvgCrowTest/shaders/pbr_khr.frag460
-rw-r--r--samples/VkvgCrowTest/shaders/pbrtest.frag208
-rw-r--r--samples/VkvgCrowTest/shaders/pbrtest.vert49
-rw-r--r--samples/VkvgCrowTest/shaders/prefilterenvmap.frag105
-rw-r--r--samples/VkvgCrowTest/shaders/simpletexture.frag15
-rw-r--r--samples/VkvgCrowTest/shaders/skybox.frag60
-rw-r--r--samples/VkvgCrowTest/shaders/skybox.vert27
-rw-r--r--samples/VkvgCrowTest/shaders/skybox_sw.frag55
-rw-r--r--samples/VkvgCrowTest/shaders/skybox_sw.vert28
-rw-r--r--samples/VkvgCrowTest/shaders/ui.frag13
-rw-r--r--samples/VkvgCrowTest/shaders/ui.vert25
-rwxr-xr-xsamples/VkvgCrowTest/ui/fps.crow31
-rw-r--r--samples/VkvgCrowTest/ui/perfMeasures.crow5
-rwxr-xr-xsamples/VkvgCrowTest/ui/perfMsr.crow36
-rw-r--r--samples/compute/compute.csproj85
-rw-r--r--samples/compute/packages.config8
-rw-r--r--samples/deferred/EnvironmentPipeline.cs10
-rw-r--r--samples/deferred/deferred.csproj96
-rw-r--r--samples/deferred/deferredPbrRenderer.cs2
-rw-r--r--samples/deferred/main.cs306
-rw-r--r--samples/deferred/packages.config1
-rw-r--r--samples/deferred/shaders/tone_mapping.frag2
-rw-r--r--samples/deferred/ui/debug.crow13
-rw-r--r--samples/deferred/ui/deferred.style61
-rw-r--r--samples/deferred/ui/images/crow.svg30
-rw-r--r--samples/deferred/ui/main.crow37
-rw-r--r--samples/deferred/ui/materials.crow30
-rw-r--r--samples/deferred/ui/menu.crow9
-rw-r--r--samples/deferred/ui/mono_crash.12991d684.0.json7534
-rw-r--r--samples/deferred/ui/mono_crash.12991d684.1.json245
-rw-r--r--samples/deferred/ui/sceneItem.crow18
-rw-r--r--samples/deferred/ui/scenes.crow41
-rw-r--r--samples/deferred/ui/testImage.crow3
-rw-r--r--samples/pbrSashaWillem/EnvironmentPipeline.cs10
-rw-r--r--samples/pbrSashaWillem/PbrPipeline.cs2
-rw-r--r--samples/pbrSashaWillem/SachaWillemPbr.csproj105
-rw-r--r--samples/pbrSashaWillem/packages.config11
-rw-r--r--samples/vkvg_tests/main.cs39
-rw-r--r--samples/vkvg_tests/packages.config11
-rw-r--r--samples/vkvg_tests/vkvg_tests.csproj98
-rw-r--r--vk.generator/Properties/AssemblyInfo.cs51
-rw-r--r--vk.generator/vk.generator.csproj50
-rw-r--r--vk.net.sln100
-rw-r--r--vk.rewrite/Properties/AssemblyInfo.cs51
-rw-r--r--vk.rewrite/packages.config4
-rw-r--r--vk.rewrite/vk.rewrite.csproj73
-rw-r--r--vke/CVKL-dotnet.csproj38
-rw-r--r--vke/CVKL.csproj74
-rw-r--r--vke/packages.config8
-rw-r--r--vke/src/Model.cs1
-rw-r--r--vke/src/PbrModel.cs6
-rw-r--r--vke/src/VkWindow.cs27
84 files changed, 8721 insertions, 3633 deletions
diff --git a/VK/VK.csproj b/VK/vulkan.csproj
index 1efc000..02618d4 100644
--- a/VK/VK.csproj
+++ b/VK/vulkan.csproj
@@ -1,15 +1,18 @@
<Project Sdk="Microsoft.NET.Sdk">
+ <Import Project="$(SolutionDir)netfx.props" />
<PropertyGroup>
- <TargetFramework>netstandard2.0</TargetFramework>
+ <TargetFrameworks>net471;netstandard2.0</TargetFrameworks>
<Copyright></Copyright>
- <AssemblyVersion>0.1.2.7</AssemblyVersion>
+ <AssemblyVersion>0.1.2.8</AssemblyVersion>
+ <AssemblyName>VK</AssemblyName>
<Description>C# vulkan binding</Description>
<Company></Company>
<Product>VK</Product>
+
<PackageId>Vulkan</PackageId>
<PackageTags>C# vulkan net binding</PackageTags>
- <PackageVersion>$(AssemblyVersion)-beta</PackageVersion>
+ <PackageVersion>$(AssemblyVersion)-beta</PackageVersion>
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
<PackageRequireLicenseAcceptance>false</PackageRequireLicenseAcceptance>
<PackageProjectUrl>https://github.com/jpbruyere/vk.net/blob/master/README.md</PackageProjectUrl>
@@ -20,23 +23,40 @@
<Authors>Jean-Philippe Bruyère</Authors>
<SynchReleaseVersion>false</SynchReleaseVersion>
+ <OutputPath>$(SolutionDir)build\$(TargetFramework)\$(Configuration)\</OutputPath>
</PropertyGroup>
-
+ <ItemGroup Condition="$(TargetFramework.StartsWith('net4'))">
+ <Reference Include="System" />
+ </ItemGroup>
+
+ <ItemGroup>
+ <ProjectReference Include="..\vk.generator\vk.generator.csproj" />
+ <ProjectReference Include="..\vk.rewrite\vk.rewrite.csproj" />
+ </ItemGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <DefineConstants>VK_VERSION_1_0;VK_VERSION_1_1;TRACE;DEBUG;NETSTANDARD;NETSTANDARD2_0</DefineConstants>
+ <DefineConstants>TRACE;DEBUG;NETSTANDARD;NETSTANDARD2_0</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>
+
<ItemGroup>
- <Compile Include="..\vk.generator\bin\**\*.cs">
+ <Compile Include="$(SolutionDir)vk.generator\bin\**\*.cs">
<Link>generated\%(Filename)%(Extension)</Link>
</Compile>
- </ItemGroup>
+ </ItemGroup>
+
+ <Target Name="generate" BeforeTargets="BeforeBuild">
+ <Exec Condition="$(OS) == 'Windows_NT'" Command="$(SolutionDir)build/$(TargetFramework)rewrite/vk.rewrite.exe $(OutputPath)VK.dll" />
+ <Exec Condition="$(OS) != 'Windows_NT'" Command="mono $(SolutionDir)vk.generator/bin/$(Configuration)/$(TargetFramework)/vk.generator.exe" WorkingDirectory="$(SolutionDir)vk.generator/bin/$(Configuration)/$(TargetFramework)/" ConsoleToMSBuild="true" EchoOff="true">
+ <Output TaskParameter="ConsoleOutput" PropertyName="OutputOfExec" />
+ </Exec>
+ </Target>
+
<Target Name="rewrite" AfterTargets="CoreBuild">
<Exec Condition="$(OS) == 'Windows_NT'" Command="$(SolutionDir)build/$(TargetFramework)rewrite/vk.rewrite.exe $(OutputPath)VK.dll" />
- <Exec Condition="$(OS) != 'Windows_NT'" Command="mono ../vk.rewrite/bin/Release/vk.rewrite.exe $(OutputPath)VK.dll" ConsoleToMSBuild="true" EchoOff="true">
+ <Exec Condition="$(OS) != 'Windows_NT'" Command="mono $(SolutionDir)vk.rewrite/bin/$(Configuration)/$(TargetFramework)/vk.rewrite.exe $(OutputPath)VK.dll" ConsoleToMSBuild="true" EchoOff="true">
<Output TaskParameter="ConsoleOutput" PropertyName="OutputOfExec" />
</Exec>
</Target>
diff --git a/crow b/crow
-Subproject 152bc103da8a40d737ecf4e9a824ab5d5dde97c
+Subproject 39285d843f891208a62e389d364f2b31a4ee0f7
diff --git a/netfx.props b/netfx.props
new file mode 100644
index 0000000..25fdbe0
--- /dev/null
+++ b/netfx.props
@@ -0,0 +1,27 @@
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup>
+ <!-- When compiling .NET SDK 2.0 projects targeting .NET 4.x on Mono using 'dotnet build' you -->
+ <!-- have to teach MSBuild where the Mono copy of the reference asssemblies is -->
+ <TargetIsMono Condition="$(TargetFramework.StartsWith('net4')) and '$(OS)' == 'Unix'">true</TargetIsMono>
+
+ <!-- Look in the standard install locations -->
+ <BaseFrameworkPathOverrideForMono Condition="'$(BaseFrameworkPathOverrideForMono)' == '' AND '$(TargetIsMono)' == 'true' AND EXISTS('/Library/Frameworks/Mono.framework/Versions/Current/lib/mono')">/Library/Frameworks/Mono.framework/Versions/Current/lib/mono</BaseFrameworkPathOverrideForMono>
+ <BaseFrameworkPathOverrideForMono Condition="'$(BaseFrameworkPathOverrideForMono)' == '' AND '$(TargetIsMono)' == 'true' AND EXISTS('/usr/lib/mono')">/usr/lib/mono</BaseFrameworkPathOverrideForMono>
+ <BaseFrameworkPathOverrideForMono Condition="'$(BaseFrameworkPathOverrideForMono)' == '' AND '$(TargetIsMono)' == 'true' AND EXISTS('/usr/local/lib/mono')">/usr/local/lib/mono</BaseFrameworkPathOverrideForMono>
+
+ <!-- If we found Mono reference assemblies, then use them -->
+ <FrameworkPathOverride Condition="'$(BaseFrameworkPathOverrideForMono)' != '' AND '$(TargetFramework)' == 'net45'">$(BaseFrameworkPathOverrideForMono)/4.5-api</FrameworkPathOverride>
+ <FrameworkPathOverride Condition="'$(BaseFrameworkPathOverrideForMono)' != '' AND '$(TargetFramework)' == 'net451'">$(BaseFrameworkPathOverrideForMono)/4.5.1-api</FrameworkPathOverride>
+ <FrameworkPathOverride Condition="'$(BaseFrameworkPathOverrideForMono)' != '' AND '$(TargetFramework)' == 'net452'">$(BaseFrameworkPathOverrideForMono)/4.5.2-api</FrameworkPathOverride>
+ <FrameworkPathOverride Condition="'$(BaseFrameworkPathOverrideForMono)' != '' AND '$(TargetFramework)' == 'net46'">$(BaseFrameworkPathOverrideForMono)/4.6-api</FrameworkPathOverride>
+ <FrameworkPathOverride Condition="'$(BaseFrameworkPathOverrideForMono)' != '' AND '$(TargetFramework)' == 'net461'">$(BaseFrameworkPathOverrideForMono)/4.6.1-api</FrameworkPathOverride>
+ <FrameworkPathOverride Condition="'$(BaseFrameworkPathOverrideForMono)' != '' AND '$(TargetFramework)' == 'net462'">$(BaseFrameworkPathOverrideForMono)/4.6.2-api</FrameworkPathOverride>
+ <FrameworkPathOverride Condition="'$(BaseFrameworkPathOverrideForMono)' != '' AND '$(TargetFramework)' == 'net47'">$(BaseFrameworkPathOverrideForMono)/4.7-api</FrameworkPathOverride>
+ <FrameworkPathOverride Condition="'$(BaseFrameworkPathOverrideForMono)' != '' AND '$(TargetFramework)' == 'net471'">$(BaseFrameworkPathOverrideForMono)/4.7.1-api</FrameworkPathOverride>
+ <EnableFrameworkPathOverride Condition="'$(BaseFrameworkPathOverrideForMono)' != ''">true</EnableFrameworkPathOverride>
+
+ <!-- Add the Facades directory. Not sure how else to do this. Necessary at least for .NET 4.5 -->
+ <AssemblySearchPaths Condition="'$(BaseFrameworkPathOverrideForMono)' != ''">$(FrameworkPathOverride)/Facades;$(AssemblySearchPaths)</AssemblySearchPaths>
+ </PropertyGroup>
+</Project>
+
diff --git a/samples/Textured/Textured.csproj b/samples/Textured/Textured.csproj
index 350058d..33a90c4 100644
--- a/samples/Textured/Textured.csproj
+++ b/samples/Textured/Textured.csproj
@@ -1,45 +1,41 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project Sdk="Microsoft.NET.Sdk">
+ <Import Project="$(SolutionDir)netfx.props" />
<PropertyGroup>
- <ProjectGuid>{96A2E0B8-91AE-4EB9-A435-185D01E24067}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AssemblyName>textured</AssemblyName>
- <TargetFrameworkVersion>v4.7.1</TargetFrameworkVersion>
- <OutputPath>$(SolutionDir)build\$(Configuration)\samples\textured</OutputPath>
- <IntermediateOutputPath>$(SolutionDir)build\obj\$(Configuration)</IntermediateOutputPath>
+ <TargetFrameworks>net471;netstandard2.0</TargetFrameworks>
+ <OutputPath>$(SolutionDir)build\$(Configuration)\</OutputPath>
+ <OutputType>Exe</OutputType>
+ <RepositoryUrl>https://github.com/jpbruyere/vk.net</RepositoryUrl>
+ <License>https://opensource.org/licenses/MIT</License>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- <DebugType>full</DebugType>
- <Optimize>false</Optimize>
- <DefineConstants>DEBUG;</DefineConstants>
- <WarningLevel>4</WarningLevel>
+
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <DefineConstants>TRACE;DEBUG;NETSTANDARD;NETSTANDARD2_0</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- <Optimize>true</Optimize>
- <WarningLevel>4</WarningLevel>
</PropertyGroup>
+
+ <ItemGroup Condition="$(TargetFramework.StartsWith('net4'))">
+ <Reference Include="System" />
+ </ItemGroup>
+
<ItemGroup>
- <Compile Include="*.cs" />
- <Datas Include="..\data\**\*.*">
- <Link>data\%(RecursiveDir)%(Filename)%(Extension)</Link>
- </Datas>
- <GLSLShader Include="shaders\**\*.frag;shaders\**\*.vert" />
- </ItemGroup>
- <ItemGroup>
- <Reference Include="System.Numerics" />
- <Reference Include="VK">
- <HintPath>..\..\packages\Vulkan.0.1.2.6\lib\netstandard2.0\VK.dll</HintPath>
- </Reference>
- </ItemGroup>
+ <PackageReference Include="glTF2Loader" Version="1.1.3-alpha" />
+ <PackageReference Include="Vulkan" Version="0.1.2.8-beta" />
+ </ItemGroup>
+
<ItemGroup>
<ProjectReference Include="..\..\vke\CVKL.csproj">
- <Project>{32B7E80D-BEA7-4811-B82D-CC2533069F0A}</Project>
- <Name>CVKL</Name>
</ProjectReference>
- </ItemGroup>
- <ItemGroup>
- <None Include="packages.config" />
- </ItemGroup>
- <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
- <Import Project="$(SolutionDir)spirv.targets" />
+ </ItemGroup>
+
+ <ItemGroup>
+ <GLSLShader Include="shaders\**\*.frag;shaders\**\*.vert" />
+ <None Remove="shaders\**\*.frag;shaders\**\*.vert" />
+ <Datas Include="..\data\**\*.*">
+ <Link>data\%(RecursiveDir)%(Filename)%(Extension)</Link>
+ </Datas>
+ </ItemGroup>
+
+ <Import Project="$(SolutionDir)spirv.targets" />
</Project>
diff --git a/samples/Textured/main.cs b/samples/Textured/main.cs
index d0c3edb..666a46f 100644
--- a/samples/Textured/main.cs
+++ b/samples/Textured/main.cs
@@ -52,9 +52,9 @@ namespace TextureSample {
ushort[] indices = { 0, 1, 2, 2, 0, 3 };
int currentImgIndex = 0;
string[] imgPathes = {
- "../data/textures/texture.jpg",
- "../data/textures/rgba-reference.ktx",
- "../data/textures/texturearray_rocks_bc3_unorm.ktx",
+ "../../../samples/data/textures/texture.jpg",
+ "../../../samples/data/textures/rgba-reference.ktx",
+ "../../../samples/data/textures/texturearray_rocks_bc3_unorm.ktx",
};
Program () : base () {
diff --git a/samples/Textured/packages.config b/samples/Textured/packages.config
deleted file mode 100644
index 4953cd2..0000000
--- a/samples/Textured/packages.config
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<packages>
- <package id="Vulkan" version="0.1.2.6" targetFramework="net471" />
-</packages> \ No newline at end of file
diff --git a/samples/TexturedCube/TexturedCube.csproj b/samples/TexturedCube/TexturedCube.csproj
index 2274e52..6ee1a94 100644
--- a/samples/TexturedCube/TexturedCube.csproj
+++ b/samples/TexturedCube/TexturedCube.csproj
@@ -1,46 +1,41 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project Sdk="Microsoft.NET.Sdk">
+ <Import Project="$(SolutionDir)netfx.props" />
<PropertyGroup>
- <ProjectGuid>{96A2A7896-91AE-4EB9-A435-185D01E24067}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <TargetFrameworkVersion>v4.7.1</TargetFrameworkVersion>
- <RootNamespace>Texcube</RootNamespace>
- <OutputPath>$(SolutionDir)build\$(Configuration)\samples\Texcube</OutputPath>
- <IntermediateOutputPath>$(SolutionDir)build\obj\$(Configuration)</IntermediateOutputPath>
+ <TargetFrameworks>net471;netstandard2.0</TargetFrameworks>
+ <OutputPath>$(SolutionDir)build\$(Configuration)\</OutputPath>
+ <OutputType>Exe</OutputType>
+ <RepositoryUrl>https://github.com/jpbruyere/vk.net</RepositoryUrl>
+ <License>https://opensource.org/licenses/MIT</License>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- <DebugType>full</DebugType>
- <Optimize>false</Optimize>
- <DefineConstants>DEBUG;</DefineConstants>
- <WarningLevel>4</WarningLevel>
+
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <DefineConstants>TRACE;DEBUG;NETSTANDARD;NETSTANDARD2_0</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- <Optimize>true</Optimize>
- <WarningLevel>4</WarningLevel>
</PropertyGroup>
+
+ <ItemGroup Condition="$(TargetFramework.StartsWith('net4'))">
+ <Reference Include="System" />
+ </ItemGroup>
+
<ItemGroup>
- <Compile Include="*.cs" />
- <Datas Include="..\data\**\*.*">
- <Link>data\%(RecursiveDir)%(Filename)%(Extension)</Link>
- </Datas>
- <GLSLShader Include="shaders\**\*.frag;shaders\**\*.vert" />
- </ItemGroup>
-
- <ItemGroup>
- <Reference Include="System.Numerics" />
- <Reference Include="VK">
- <HintPath>..\..\packages\Vulkan.0.1.2.6\lib\netstandard2.0\VK.dll</HintPath>
- </Reference>
- </ItemGroup>
- <ItemGroup>
- <None Include="packages.config" />
- </ItemGroup>
+ <PackageReference Include="Vulkan" Version="0.1.2.8-beta" />
+ </ItemGroup>
+
<ItemGroup>
<ProjectReference Include="..\..\vke\CVKL.csproj">
- <Project>{32B7E80D-BEA7-4811-B82D-CC2533069F0A}</Project>
- <Name>CVKL</Name>
</ProjectReference>
- </ItemGroup>
- <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
- <Import Project="$(SolutionDir)spirv.targets" />
+ </ItemGroup>
+
+ <ItemGroup>
+ <GLSLShader Include="shaders\**\*.frag;shaders\**\*.vert" />
+ <None Remove="shaders\**\*.frag;shaders\**\*.vert" />
+ <Datas Include="..\data\**\*.*">
+ <Link>data\%(RecursiveDir)%(Filename)%(Extension)</Link>
+ </Datas>
+ </ItemGroup>
+
+ <Import Project="$(SolutionDir)spirv.targets" />
</Project>
+
diff --git a/samples/TexturedCube/data/Box.gltf b/samples/TexturedCube/data/Box.gltf
deleted file mode 100644
index 8f9e0d3..0000000
--- a/samples/TexturedCube/data/Box.gltf
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:f98a369e29ffc754cc897f78d695754ac6812ba7ddcd23705dd8d4e258f5f13b
-size 3791
diff --git a/samples/TexturedCube/data/papermill.ktx b/samples/TexturedCube/data/papermill.ktx
deleted file mode 100644
index 24589f3..0000000
--- a/samples/TexturedCube/data/papermill.ktx
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:2ad269b9e81e8cb9489dba6a2c61f2063b46b450146e2344e6d6e1da2ce60626
-size 16777304
diff --git a/samples/TexturedCube/main.cs b/samples/TexturedCube/main.cs
index 4961395..df3114c 100644
--- a/samples/TexturedCube/main.cs
+++ b/samples/TexturedCube/main.cs
@@ -80,11 +80,11 @@ namespace TextureCube {
};
int currentImgIndex = 0;
string[] imgPathes = {
- "../data/textures/papermill.ktx",
- "../data/textures/cubemap_yokohama_bc3_unorm.ktx",
- "../data/textures/gcanyon_cube.ktx",
- "../data/textures/pisa_cube.ktx",
- "../data/textures/uffizi_cube.ktx",
+ "../../../samples/data/textures/papermill.ktx",
+ "../../../data/textures/cubemap_yokohama_bc3_unorm.ktx",
+ "../../../data/textures/gcanyon_cube.ktx",
+ "../../../data/textures/pisa_cube.ktx",
+ "../../../data/textures/uffizi_cube.ktx",
};
diff --git a/samples/TexturedCube/models/DamagedHelmet/glTF-Embedded/DamagedHelmet.gltf b/samples/TexturedCube/models/DamagedHelmet/glTF-Embedded/DamagedHelmet.gltf
deleted file mode 100644
index 0f51039..0000000
--- a/samples/TexturedCube/models/DamagedHelmet/glTF-Embedded/DamagedHelmet.gltf
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:c0fa7be52a4c63e96af2be05735caba968b04a633a9c5eaf1b4c95fb25588003
-size 5033556
diff --git a/samples/TexturedCube/models/DamagedHelmet/glTF/DamagedHelmet.bin b/samples/TexturedCube/models/DamagedHelmet/glTF/DamagedHelmet.bin
deleted file mode 100644
index 662eacc..0000000
--- a/samples/TexturedCube/models/DamagedHelmet/glTF/DamagedHelmet.bin
+++ /dev/null
Binary files differ
diff --git a/samples/TexturedCube/models/DamagedHelmet/glTF/DamagedHelmet.gltf b/samples/TexturedCube/models/DamagedHelmet/glTF/DamagedHelmet.gltf
deleted file mode 100644
index d685d77..0000000
--- a/samples/TexturedCube/models/DamagedHelmet/glTF/DamagedHelmet.gltf
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:efe99dfac198094a30c71dc02a4d3421f0eef6bf335aeb695daa4d62134cd93f
-size 4537
diff --git a/samples/TexturedCube/models/Untitled.png b/samples/TexturedCube/models/Untitled.png
deleted file mode 100644
index 8b6ada9..0000000
--- a/samples/TexturedCube/models/Untitled.png
+++ /dev/null
Binary files differ
diff --git a/samples/TexturedCube/models/untitled.bin b/samples/TexturedCube/models/untitled.bin
deleted file mode 100644
index 621d5e6..0000000
--- a/samples/TexturedCube/models/untitled.bin
+++ /dev/null
Binary files differ
diff --git a/samples/TexturedCube/models/untitled.gltf b/samples/TexturedCube/models/untitled.gltf
deleted file mode 100644
index 31670a5..0000000
--- a/samples/TexturedCube/models/untitled.gltf
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:ac5f07807d147c9adee8898cac57b977c5130df73847b0fc0adafbb8d495e505
-size 9717
diff --git a/samples/TexturedCube/packages.config b/samples/TexturedCube/packages.config
deleted file mode 100644
index 4953cd2..0000000
--- a/samples/TexturedCube/packages.config
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<packages>
- <package id="Vulkan" version="0.1.2.6" targetFramework="net471" />
-</packages> \ No newline at end of file
diff --git a/samples/TexturedCube/textures/empty.ktx b/samples/TexturedCube/textures/empty.ktx
deleted file mode 100644
index b21a8ed..0000000
--- a/samples/TexturedCube/textures/empty.ktx
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:05242a012e514766da53a265d378545b7b24cea9cd6bdc0616d1e79de5112379
-size 104
diff --git a/samples/TexturedCube/textures/papermill.ktx b/samples/TexturedCube/textures/papermill.ktx
deleted file mode 100644
index 24589f3..0000000
--- a/samples/TexturedCube/textures/papermill.ktx
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:2ad269b9e81e8cb9489dba6a2c61f2063b46b450146e2344e6d6e1da2ce60626
-size 16777304
diff --git a/samples/Triangle/Triangle.csproj b/samples/Triangle/Triangle.csproj
index eeba0b2..f97079c 100644
--- a/samples/Triangle/Triangle.csproj
+++ b/samples/Triangle/Triangle.csproj
@@ -1,57 +1,37 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project Sdk="Microsoft.NET.Sdk">
+ <Import Project="$(SolutionDir)netfx.props" />
<PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <ProjectGuid>{96A2E0B9-91AE-4EB9-A435-185D01E24067}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <TargetFrameworkVersion>v4.7.1</TargetFrameworkVersion>
- <RootNamespace>Triangle</RootNamespace>
- <OutputPath>$(SolutionDir)build\$(Configuration)\samples\Triangle</OutputPath>
- <IntermediateOutputPath>$(SolutionDir)build\obj\$(Configuration)</IntermediateOutputPath>
+ <TargetFrameworks>net471;netstandard2.0</TargetFrameworks>
+ <OutputPath>$(SolutionDir)build\$(Configuration)\</OutputPath>
+ <OutputType>Exe</OutputType>
+ <RepositoryUrl>https://github.com/jpbruyere/vk.net</RepositoryUrl>
+ <License>https://opensource.org/licenses/MIT</License>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- <Optimize>false</Optimize>
- <DefineConstants>DEBUG;</DefineConstants>
- <WarningLevel>4</WarningLevel>
+
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <DefineConstants>TRACE;DEBUG;NETSTANDARD;NETSTANDARD2_0</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- <Optimize>true</Optimize>
- <WarningLevel>4</WarningLevel>
</PropertyGroup>
- <ItemGroup>
- <Compile Include="*.cs" />
- <GLSLShader Include="shaders\**\*.frag;shaders\**\*.vert" />
- </ItemGroup>
- <ItemGroup>
- <Reference Include="System.Numerics" />
+
+ <ItemGroup Condition="$(TargetFramework.StartsWith('net4'))">
<Reference Include="System" />
- <Reference Include="Newtonsoft.Json">
- <HintPath>..\..\packages\Newtonsoft.Json.12.0.2\lib\net45\Newtonsoft.Json.dll</HintPath>
- </Reference>
- <Reference Include="glTFLoader">
- <HintPath>..\..\packages\glTF2Loader.1.1.3-alpha\lib\net35\glTFLoader.dll</HintPath>
- </Reference>
- <Reference Include="System.Numerics.Vectors">
- <HintPath>..\..\packages\System.Numerics.Vectors.4.6.0-preview4.19212.13\lib\net46\System.Numerics.Vectors.dll</HintPath>
- </Reference>
- <Reference Include="mscorlib" />
- <Reference Include="System.Runtime.CompilerServices.Unsafe">
- <HintPath>..\..\packages\System.Runtime.CompilerServices.Unsafe.4.6.0-preview4.19212.13\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
- </Reference>
- <Reference Include="VK">
- <HintPath>..\..\packages\Vulkan.0.1.2.6\lib\netstandard2.0\VK.dll</HintPath>
- </Reference>
- </ItemGroup>
+ </ItemGroup>
+
<ItemGroup>
- <None Include="packages.config" />
- </ItemGroup>
+ <PackageReference Include="glTF2Loader" Version="1.1.3-alpha" />
+ <PackageReference Include="Vulkan" Version="0.1.2.8-beta" />
+ </ItemGroup>
+
<ItemGroup>
- <ProjectReference Include="..\..\vke\CVKL.csproj">
- <Project>{32B7E80D-BEA7-4811-B82D-CC2533069F0A}</Project>
- <Name>CVKL</Name>
- </ProjectReference>
- </ItemGroup>
- <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
- <Import Project="$(SolutionDir)spirv.targets" />
-</Project>
+ <ProjectReference Include="..\..\vke\CVKL.csproj" />
+ </ItemGroup>
+
+ <ItemGroup>
+ <GLSLShader Include="shaders\**\*.frag;shaders\**\*.vert" />
+ <None Remove="shaders\**\*.frag;shaders\**\*.vert" />
+ </ItemGroup>
+
+ <Import Project="$(SolutionDir)spirv.targets" />
+</Project> \ No newline at end of file
diff --git a/samples/Triangle/packages.config b/samples/Triangle/packages.config
deleted file mode 100644
index 1af220a..0000000
--- a/samples/Triangle/packages.config
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<packages>
- <package id="glTF2Loader" version="1.1.3-alpha" targetFramework="net471" />
- <package id="Newtonsoft.Json" version="12.0.2" targetFramework="net471" />
- <package id="System.Numerics.Vectors" version="4.6.0-preview4.19212.13" targetFramework="net471" />
- <package id="System.Runtime.CompilerServices.Unsafe" version="4.6.0-preview4.19212.13" targetFramework="net471" />
- <package id="Vulkan" version="0.1.2.6" targetFramework="net471" />
-</packages> \ No newline at end of file
diff --git a/samples/VkvgCrowTest/EnvironmentPipeline.cs b/samples/VkvgCrowTest/EnvironmentPipeline.cs
deleted file mode 100644
index 03b70c7..0000000
--- a/samples/VkvgCrowTest/EnvironmentPipeline.cs
+++ /dev/null
@@ -1,354 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Numerics;
-using System.Runtime.InteropServices;
-using VK;
-
-namespace CVKL {
- class EnvironmentCube : GraphicPipeline {
-
- GPUBuffer vboSkybox;
-
- public Image cubemap { get; private set; }
- public Image lutBrdf { get; private set; }
- public Image irradianceCube { get; private set; }
- public Image prefilterCube { get; set; }
-
- public Image debugImg;
- public int debugMip = -1;
- public int debugFace = 0;
-
- public EnvironmentCube (DescriptorSet dsSkybox, PipelineLayout plLayout, Queue staggingQ, RenderPass renderPass, PipelineCache pipelineCache = null)
- : base (renderPass, pipelineCache, "EnvCube pipeline") {
-
- using (CommandPool cmdPool = new CommandPool (staggingQ.Dev, staggingQ.index)) {
-
- vboSkybox = new GPUBuffer<float> (staggingQ, cmdPool, VkBufferUsageFlags.VertexBuffer, box_vertices);
-
- cubemap = KTX.KTX.Load (staggingQ, cmdPool, cubemapPathes[2],
- VkImageUsageFlags.Sampled, VkMemoryPropertyFlags.DeviceLocal, true);
- cubemap.CreateView (VkImageViewType.Cube, VkImageAspectFlags.Color, 6, 0, cubemap.CreateInfo.mipLevels);
- cubemap.CreateSampler (VkSamplerAddressMode.ClampToEdge);
- cubemap.SetName ("skybox Texture");
- cubemap.Descriptor.imageLayout = VkImageLayout.ShaderReadOnlyOptimal;
-
- GraphicPipelineConfig cfg = GraphicPipelineConfig.CreateDefault (VkPrimitiveTopology.TriangleList, renderPass.Samples, false);
- cfg.RenderPass = renderPass;
- cfg.Layout = plLayout;
- cfg.AddVertexBinding (0, 3 * sizeof (float));
- cfg.SetVertexAttributes (0, VkFormat.R32g32b32Sfloat);
- cfg.AddShader (VkShaderStageFlags.Vertex, "shaders/skybox.vert.spv");
- cfg.AddShader (VkShaderStageFlags.Fragment, "shaders/skybox.frag.spv");
- cfg.multisampleState.rasterizationSamples = Samples;
-
- layout = cfg.Layout;
-
- init (cfg);
-
- generateBRDFLUT (staggingQ, cmdPool);
- generateCubemaps (staggingQ, cmdPool);
- }
-
- }
-
- //public void WriteDesc (VkDescriptorBufferInfo matrixDesc) {
- // DescriptorSetWrites uboUpdate = new DescriptorSetWrites (descLayoutMain);
- // uboUpdate.Write (Dev, dsSkybox, matrixDesc, cubemap.Descriptor);
- //}
-
- public void RecordDraw (CommandBuffer cmd) {
- Bind (cmd);
- cmd.BindVertexBuffer (vboSkybox);
- cmd.Draw (36);
- }
-
- #region skybox
- public List<string> cubemapPathes = new List<string> () {
- "../data/textures/papermill.ktx",
- "../data/textures/cubemap_yokohama_bc3_unorm.ktx",
- "../data/textures/gcanyon_cube.ktx",
- "../data/textures/pisa_cube.ktx",
- "../data/textures/uffizi_cube.ktx",
- };
- static float[] box_vertices = {
- 1.0f, 1.0f,-1.0f, // +X side
- 1.0f, 1.0f, 1.0f,
- 1.0f,-1.0f, 1.0f,
- 1.0f,-1.0f, 1.0f,
- 1.0f,-1.0f,-1.0f,
- 1.0f, 1.0f,-1.0f,
-
- -1.0f,-1.0f,-1.0f, // +X side
- -1.0f,-1.0f, 1.0f,
- -1.0f, 1.0f, 1.0f,
- -1.0f, 1.0f, 1.0f,
- -1.0f, 1.0f,-1.0f,
- -1.0f,-1.0f,-1.0f,
-
- -1.0f, 1.0f,-1.0f, // +Y side
- -1.0f, 1.0f, 1.0f,
- 1.0f, 1.0f, 1.0f,
- -1.0f, 1.0f,-1.0f,
- 1.0f, 1.0f, 1.0f,
- 1.0f, 1.0f,-1.0f,
-
- -1.0f,-1.0f,-1.0f, // -Y side
- 1.0f,-1.0f,-1.0f,
- 1.0f,-1.0f, 1.0f,
- -1.0f,-1.0f,-1.0f,
- 1.0f,-1.0f, 1.0f,
- -1.0f,-1.0f, 1.0f,
-
- -1.0f, 1.0f, 1.0f, // +Z side
- -1.0f,-1.0f, 1.0f,
- 1.0f, 1.0f, 1.0f,
- -1.0f,-1.0f, 1.0f,
- 1.0f,-1.0f, 1.0f,
- 1.0f, 1.0f, 1.0f,
-
- -1.0f,-1.0f,-1.0f, // -Z side
- 1.0f, 1.0f,-1.0f,
- 1.0f,-1.0f,-1.0f,
- -1.0f,-1.0f,-1.0f,
- -1.0f, 1.0f,-1.0f,
- 1.0f, 1.0f,-1.0f,
-
- };
- #endregion
-
- void generateBRDFLUT (Queue staggingQ, CommandPool cmdPool) {
- const VkFormat format = VkFormat.R16g16Sfloat;
- const int dim = 512;
-
- lutBrdf = new Image (Dev, format, VkImageUsageFlags.ColorAttachment | VkImageUsageFlags.Sampled,
- VkMemoryPropertyFlags.DeviceLocal, dim, dim);
- lutBrdf.SetName ("lutBrdf");
-
- lutBrdf.CreateView ();
- lutBrdf.CreateSampler (VkSamplerAddressMode.ClampToEdge);
-
- GraphicPipelineConfig cfg = GraphicPipelineConfig.CreateDefault (VkPrimitiveTopology.TriangleList, VkSampleCountFlags.SampleCount1, false);
-
- cfg.Layout = new PipelineLayout (Dev, new DescriptorSetLayout (Dev));
- cfg.RenderPass = new RenderPass (Dev);
- cfg.RenderPass.AddAttachment (format, VkImageLayout.ShaderReadOnlyOptimal);
- cfg.RenderPass.ClearValues.Add (new VkClearValue { color = new VkClearColorValue (0, 0, 0) });
- cfg.RenderPass.AddSubpass (new SubPass (VkImageLayout.ColorAttachmentOptimal));
- cfg.AddShader (VkShaderStageFlags.Vertex, "shaders/genbrdflut.vert.spv");
- cfg.AddShader (VkShaderStageFlags.Fragment, "shaders/genbrdflut.frag.spv");
-
- using (GraphicPipeline pl = new GraphicPipeline (cfg)) {
- using (Framebuffer fb = new Framebuffer (cfg.RenderPass, dim, dim, lutBrdf)) {
- CommandBuffer cmd = cmdPool.AllocateCommandBuffer ();
- cmd.Start (VkCommandBufferUsageFlags.OneTimeSubmit);
- pl.RenderPass.Begin (cmd, fb);
- cmd.SetViewport (dim, dim);
- cmd.SetScissor (dim, dim);
- pl.Bind (cmd);
- cmd.Draw (3, 1, 0, 0);
- pl.RenderPass.End (cmd);
- cmd.End ();
-
- staggingQ.Submit (cmd);
- staggingQ.WaitIdle ();
-
- cmd.Free ();
- }
- }
- lutBrdf.Descriptor.imageLayout = VkImageLayout.ShaderReadOnlyOptimal;
- }
-
- public enum CBTarget { IRRADIANCE = 0, PREFILTEREDENV = 1 };
-
- public Image generateCubeMap (Queue staggingQ, CommandPool cmdPool, CBTarget target) {
- const float deltaPhi = (2.0f * (float)Math.PI) / 180.0f;
- const float deltaTheta = (0.5f * (float)Math.PI) / 64.0f;
-
- VkFormat format = VkFormat.R32g32b32a32Sfloat;
- uint dim = 64;
-
- if (target == CBTarget.PREFILTEREDENV) {
- format = VkFormat.R16g16b16a16Sfloat;
- dim = 512;
- }
-
- uint numMips = (uint)Math.Floor (Math.Log (dim, 2)) + 1;
-
- Image imgFbOffscreen = new Image (Dev, format, VkImageUsageFlags.TransferSrc | VkImageUsageFlags.ColorAttachment,
- VkMemoryPropertyFlags.DeviceLocal, dim, dim);
- imgFbOffscreen.SetName ("offscreenfb");
- imgFbOffscreen.CreateView ();
-
- Image cmap = new Image (Dev, format, VkImageUsageFlags.TransferDst | VkImageUsageFlags.Sampled,
- VkMemoryPropertyFlags.DeviceLocal, dim, dim, VkImageType.Image2D, VkSampleCountFlags.SampleCount1, VkImageTiling.Optimal,
- numMips, 6, 1, VkImageCreateFlags.CubeCompatible);
- if (target == CBTarget.PREFILTEREDENV)
- cmap.SetName ("prefilterenvmap");
- else
- cmap.SetName ("irradianceCube");
- cmap.CreateView (VkImageViewType.Cube, VkImageAspectFlags.Color, 6, 0, numMips);
- cmap.CreateSampler (VkSamplerAddressMode.ClampToEdge);
-
- DescriptorPool dsPool = new DescriptorPool (Dev, 2, new VkDescriptorPoolSize (VkDescriptorType.CombinedImageSampler));
-
- DescriptorSetLayout dsLayout = new DescriptorSetLayout (Dev,
- new VkDescriptorSetLayoutBinding (0, VkShaderStageFlags.Fragment, VkDescriptorType.CombinedImageSampler));
-
- GraphicPipelineConfig cfg = GraphicPipelineConfig.CreateDefault (VkPrimitiveTopology.TriangleList, VkSampleCountFlags.SampleCount1, false);
-
-
- cfg.Layout = new PipelineLayout (Dev, dsLayout);
- cfg.Layout.AddPushConstants (
- new VkPushConstantRange (VkShaderStageFlags.Vertex | VkShaderStageFlags.Fragment, (uint)Marshal.SizeOf<Matrix4x4> () + 8));
-
- cfg.RenderPass = new RenderPass (Dev);
- cfg.RenderPass.AddAttachment (format, VkImageLayout.ColorAttachmentOptimal);
- cfg.RenderPass.ClearValues.Add (new VkClearValue { color = new VkClearColorValue (0, 0, 0) });
- cfg.RenderPass.AddSubpass (new SubPass (VkImageLayout.ColorAttachmentOptimal));
-
- cfg.AddVertexBinding (0, 3 * sizeof (float));
- cfg.SetVertexAttributes (0, VkFormat.R32g32b32Sfloat);
-
- cfg.AddShader (VkShaderStageFlags.Vertex, "shaders/filtercube.vert.spv");
- if (target == CBTarget.PREFILTEREDENV)
- cfg.AddShader (VkShaderStageFlags.Fragment, "shaders/prefilterenvmap.frag.spv");
- else
- cfg.AddShader (VkShaderStageFlags.Fragment, "shaders/irradiancecube.frag.spv");
-
- Matrix4x4[] matrices = {
- // POSITIVE_X
- Matrix4x4.CreateRotationX(Utils.DegreesToRadians(180)) * Matrix4x4.CreateRotationY(Utils.DegreesToRadians(90)),
- // NEGATIVE_X
- Matrix4x4.CreateRotationX(Utils.DegreesToRadians(180)) * Matrix4x4.CreateRotationY(Utils.DegreesToRadians(-90)),
- // POSITIVE_Y
- Matrix4x4.CreateRotationX(Utils.DegreesToRadians(-90)),
- // NEGATIVE_Y
- Matrix4x4.CreateRotationX(Utils.DegreesToRadians(90)),
- // POSITIVE_Z
- Matrix4x4.CreateRotationX(Utils.DegreesToRadians(180)),
- // NEGATIVE_Z
- Matrix4x4.CreateRotationZ(Utils.DegreesToRadians(180))
- };
-
- VkImageSubresourceRange subRes = new VkImageSubresourceRange (VkImageAspectFlags.Color, 0, numMips, 0, 6);
-
- using (GraphicPipeline pl = new GraphicPipeline (cfg)) {
- DescriptorSet dset = dsPool.Allocate (dsLayout);
- DescriptorSetWrites dsUpdate = new DescriptorSetWrites (dsLayout);
- dsUpdate.Write (Dev, dset, cubemap.Descriptor);
-
- using (Framebuffer fb = new Framebuffer (pl.RenderPass, dim, dim, imgFbOffscreen)) {
- CommandBuffer cmd = cmdPool.AllocateCommandBuffer ();
- cmd.Start (VkCommandBufferUsageFlags.OneTimeSubmit);
-
- cmap.SetLayout (cmd, VkImageLayout.Undefined, VkImageLayout.TransferDstOptimal, subRes);
-
- float roughness = 0;
-
- cmd.SetScissor (dim, dim);
- cmd.SetViewport ((float)(dim), (float)dim);
-
- for (int m = 0; m < numMips; m++) {
- roughness = (float)m / ((float)numMips - 1f);
-
- for (int f = 0; f < 6; f++) {
- pl.RenderPass.Begin (cmd, fb);
-
- pl.Bind (cmd);
-
- float viewPortSize = (float)Math.Pow (0.5, m) * dim;
- cmd.SetViewport (viewPortSize, viewPortSize);
- cmd.PushConstant (pl.Layout, VkShaderStageFlags.Vertex | VkShaderStageFlags.Fragment,
- matrices[f] * Matrix4x4.CreatePerspectiveFieldOfView (Utils.DegreesToRadians (90), 1f, 0.1f, 512f));
- if (target == CBTarget.IRRADIANCE) {
- cmd.PushConstant (pl.Layout, VkShaderStageFlags.Vertex | VkShaderStageFlags.Fragment, deltaPhi, (uint)Marshal.SizeOf<Matrix4x4> ());
- cmd.PushConstant (pl.Layout, VkShaderStageFlags.Vertex | VkShaderStageFlags.Fragment, deltaTheta, (uint)Marshal.SizeOf<Matrix4x4> () + 4);
- } else {
- cmd.PushConstant (pl.Layout, VkShaderStageFlags.Vertex | VkShaderStageFlags.Fragment, roughness, (uint)Marshal.SizeOf<Matrix4x4> ());
- cmd.PushConstant (pl.Layout, VkShaderStageFlags.Vertex | VkShaderStageFlags.Fragment, 32u, (uint)Marshal.SizeOf<Matrix4x4> () + 4);
- }
-
- cmd.BindDescriptorSet (pl.Layout, dset);
- cmd.BindVertexBuffer (vboSkybox);
- cmd.Draw (36);
-
- pl.RenderPass.End (cmd);
-
- imgFbOffscreen.SetLayout (cmd, VkImageAspectFlags.Color,
- VkImageLayout.ColorAttachmentOptimal, VkImageLayout.TransferSrcOptimal);
-
- VkImageCopy region = new VkImageCopy ();
- region.srcSubresource = new VkImageSubresourceLayers (VkImageAspectFlags.Color, 1);
- region.dstSubresource = new VkImageSubresourceLayers (VkImageAspectFlags.Color, 1, (uint)m, (uint)f);
- region.extent = new VkExtent3D { width = (uint)viewPortSize, height = (uint)viewPortSize, depth = 1 };
-
- Vk.vkCmdCopyImage (cmd.Handle,
- imgFbOffscreen.Handle, VkImageLayout.TransferSrcOptimal,
- cmap.Handle, VkImageLayout.TransferDstOptimal,
- 1, region.Pin ());
- region.Unpin ();
-
- //debug img
- if (target == CBTarget.PREFILTEREDENV && m == debugMip && f == debugFace) {
- debugImg?.Dispose ();
- debugImg = new Image (Dev, VkFormat.R16g16b16a16Sfloat, VkImageUsageFlags.Sampled | VkImageUsageFlags.TransferDst, VkMemoryPropertyFlags.DeviceLocal,
- (uint)viewPortSize, (uint)viewPortSize);
- debugImg.CreateView ();
- debugImg.CreateSampler ();
- region.dstSubresource.baseArrayLayer = 0;
- region.dstSubresource.mipLevel = 0;
- debugImg.SetLayout (cmd, VkImageAspectFlags.Color,
- VkImageLayout.Undefined, VkImageLayout.TransferDstOptimal);
- Vk.vkCmdCopyImage (cmd.Handle,
- imgFbOffscreen.Handle, VkImageLayout.TransferSrcOptimal,
- debugImg.Handle, VkImageLayout.TransferDstOptimal,
- 1, region.Pin ());
- debugImg.SetLayout (cmd, VkImageAspectFlags.Color,
- VkImageLayout.TransferDstOptimal, VkImageLayout.ShaderReadOnlyOptimal);
- region.Unpin ();
- }
-
- imgFbOffscreen.SetLayout (cmd, VkImageAspectFlags.Color,
- VkImageLayout.TransferSrcOptimal, VkImageLayout.ColorAttachmentOptimal);
-
- }
- }
-
- cmap.SetLayout (cmd, VkImageLayout.TransferDstOptimal, VkImageLayout.ShaderReadOnlyOptimal, subRes);
-
- cmd.End ();
-
- staggingQ.Submit (cmd);
- staggingQ.WaitIdle ();
-
- cmd.Free ();
- }
- }
- cmap.Descriptor.imageLayout = VkImageLayout.ShaderReadOnlyOptimal;
-
- dsLayout.Dispose ();
- imgFbOffscreen.Dispose ();
- dsPool.Dispose ();
-
- return cmap;
- }
-
- void generateCubemaps (Queue staggingQ, CommandPool cmdPool) {
- irradianceCube = generateCubeMap (staggingQ, cmdPool, CBTarget.IRRADIANCE);
- prefilterCube = generateCubeMap (staggingQ, cmdPool, CBTarget.PREFILTEREDENV);
- }
-
- protected override void Dispose (bool disposing) {
- vboSkybox.Dispose ();
- cubemap.Dispose ();
- lutBrdf.Dispose ();
- irradianceCube.Dispose ();
- prefilterCube.Dispose ();
-
- debugImg?.Dispose ();
-
- base.Dispose (disposing);
- }
- }
-
-}
diff --git a/samples/VkvgCrowTest/PbrPipeline.cs b/samples/VkvgCrowTest/PbrPipeline.cs
deleted file mode 100644
index ea93163..0000000
--- a/samples/VkvgCrowTest/PbrPipeline.cs
+++ /dev/null
@@ -1,391 +0,0 @@
-using System;
-using System.Numerics;
-using System.Runtime.InteropServices;
-using VK;
-using System.Diagnostics;
-using System.Collections.Generic;
-
-namespace CVKL {
- using static VK.Utils;
-
-
- //TODO:stride in buffer views?
- public class PbrModel2 : Model {
- public struct Vertex {
- [VertexAttribute (VertexAttributeType.Position, VkFormat.R32g32b32Sfloat)]
- public Vector3 pos;
- [VertexAttribute (VertexAttributeType.Normal, VkFormat.R32g32b32Sfloat)]
- public Vector3 normal;
- [VertexAttribute (VertexAttributeType.UVs, VkFormat.R32g32Sfloat)]
- public Vector2 uv0;
- [VertexAttribute (VertexAttributeType.UVs, VkFormat.R32g32Sfloat)]
- public Vector2 uv1;
- public override string ToString () {
- return pos.ToString () + ";" + normal.ToString () + ";" + uv0.ToString () + ";" + uv1.ToString ();
- }
- };
- /// <summary>
- /// Pbr data structure suitable for push constant or ubo, containing
- /// availablility of attached textures and the coef of pbr inputs
- /// </summary>
- public struct PbrMaterial {
- public Vector4 baseColorFactor;
- public Vector4 emissiveFactor;
- public Vector4 diffuseFactor;
- public Vector4 specularFactor;
- public float workflow;
- public AttachmentType TexCoord0;
- public AttachmentType TexCoord1;
- public float metallicFactor;
- public float roughnessFactor;
- public float alphaMask;
- public float alphaMaskCutoff;
- int pad0;//see std420
- }
-
- Image[] textures;
- PbrMaterial[] materials;
- DescriptorSet[] descriptorSets;
-
- DescriptorPool descriptorPool;
- public GPUBuffer vbo;
- public GPUBuffer ibo;
- public GPUBuffer<PbrMaterial> materialUBO;
-
- public PbrModel2 (Queue transferQ, string path) {
- dev = transferQ.Dev;
- using (CommandPool cmdPool = new CommandPool (dev, transferQ.index)) {
- using (glTFLoader ctx = new glTFLoader (path, transferQ, cmdPool)) {
- ulong vertexCount, indexCount;
-
- ctx.GetVertexCount (out vertexCount, out indexCount, out IndexBufferType);
-
- ulong vertSize = vertexCount * (ulong)Marshal.SizeOf<Vertex> ();
- ulong idxSize = indexCount * (IndexBufferType == VkIndexType.Uint16 ? 2ul : 4ul);
- ulong size = vertSize + idxSize;
-
- vbo = new GPUBuffer (dev, VkBufferUsageFlags.VertexBuffer | VkBufferUsageFlags.TransferDst, vertSize);
- ibo = new GPUBuffer (dev, VkBufferUsageFlags.IndexBuffer | VkBufferUsageFlags.TransferDst, idxSize);
-
- vbo.SetName ("vbo gltf");
- ibo.SetName ("ibo gltf");
-
- Meshes = new List<Mesh> (ctx.LoadMeshes<Vertex> (IndexBufferType, vbo, 0, ibo, 0));
- Scenes = new List<Scene> (ctx.LoadScenes (out defaultSceneIndex));
- }
- }
- }
- public PbrModel2 (Queue transferQ, string path, DescriptorSetLayout layout, params AttachmentType[] attachments) {
- dev = transferQ.Dev;
- using (CommandPool cmdPool = new CommandPool (dev, transferQ.index)) {
- using (glTFLoader ctx = new glTFLoader (path, transferQ, cmdPool)) {
- ulong vertexCount, indexCount;
-
- ctx.GetVertexCount (out vertexCount, out indexCount, out IndexBufferType);
- ulong vertSize = vertexCount * (ulong)Marshal.SizeOf<Vertex> ();
- ulong idxSize = indexCount * (IndexBufferType == VkIndexType.Uint16 ? 2ul : 4ul);
- ulong size = vertSize + idxSize;
-
- vbo = new GPUBuffer (dev, VkBufferUsageFlags.VertexBuffer | VkBufferUsageFlags.TransferDst, vertSize);
- ibo = new GPUBuffer (dev, VkBufferUsageFlags.IndexBuffer | VkBufferUsageFlags.TransferDst, idxSize);
-
- vbo.SetName ("vbo gltf");
- ibo.SetName ("ibo gltf");
-
- Meshes = new List<Mesh> (ctx.LoadMeshes<Vertex> (IndexBufferType, vbo, 0, ibo, 0));
- textures = ctx.LoadImages ();
-
- loadMaterials (ctx, layout, attachments);
-
- materialUBO = new GPUBuffer<PbrMaterial> (transferQ, cmdPool, VkBufferUsageFlags.UniformBuffer, materials);
-
- Scenes = new List<Scene> (ctx.LoadScenes (out defaultSceneIndex));
- }
- }
- }
-
- void loadMaterials (glTFLoader ctx, DescriptorSetLayout layout, params AttachmentType[] attachments) {
- Model.Material[] mats = ctx.LoadMaterial ();
- materials = new PbrMaterial[mats.Length];
- descriptorSets = new DescriptorSet[mats.Length];
-
- if (attachments.Length == 0)
- throw new InvalidOperationException ("At least one attachment is required for Model.WriteMaterialDescriptor");
-
- descriptorPool = new DescriptorPool (dev, (uint)materials.Length,
- new VkDescriptorPoolSize (VkDescriptorType.CombinedImageSampler, (uint)(attachments.Length * materials.Length))
- );
- descriptorPool.SetName ("descPool gltfTextures");
-
- for (int i = 0; i < mats.Length; i++) {
- materials[i] = new PbrMaterial {
- workflow = (float)mats[i].workflow,
- baseColorFactor = mats[i].baseColorFactor,
- emissiveFactor = mats[i].emissiveFactor,
- metallicFactor = mats[i].metallicFactor,
- roughnessFactor = mats[i].roughnessFactor,
- TexCoord0 = mats[i].availableAttachments,
- TexCoord1 = mats[i].availableAttachments1,
- alphaMask = 0f,
- alphaMaskCutoff = 0.0f,
- diffuseFactor = new Vector4 (0),
- specularFactor = new Vector4 (0)
- };
-
- descriptorSets[i] = descriptorPool.Allocate (layout);
- descriptorSets[i].Handle.SetDebugMarkerName (dev, "descSet " + mats[i].Name);
-
- VkDescriptorSetLayoutBinding dslb =
- new VkDescriptorSetLayoutBinding (0, VkShaderStageFlags.Fragment, VkDescriptorType.CombinedImageSampler);
-
- using (DescriptorSetWrites2 uboUpdate = new DescriptorSetWrites2 (dev)) {
- for (uint a = 0; a < attachments.Length; a++) {
- dslb.binding = a;
- switch (attachments[a]) {
- case AttachmentType.None:
- break;
- case AttachmentType.Color:
- if (mats[i].availableAttachments.HasFlag (AttachmentType.Color))
- uboUpdate.AddWriteInfo (descriptorSets[i], dslb, textures[(int)mats[i].baseColorTexture].Descriptor);
- break;
- case AttachmentType.Normal:
- if (mats[i].availableAttachments.HasFlag (AttachmentType.Normal))
- uboUpdate.AddWriteInfo (descriptorSets[i], dslb, textures[(int)mats[i].normalTexture].Descriptor);
- break;
- case AttachmentType.AmbientOcclusion:
- if (mats[i].availableAttachments.HasFlag (AttachmentType.AmbientOcclusion))
- uboUpdate.AddWriteInfo (descriptorSets[i], dslb, textures[(int)mats[i].occlusionTexture].Descriptor);
- break;
- case AttachmentType.PhysicalProps:
- if (mats[i].availableAttachments.HasFlag (AttachmentType.PhysicalProps))
- uboUpdate.AddWriteInfo (descriptorSets[i], dslb, textures[(int)mats[i].metallicRoughnessTexture].Descriptor);
- break;
- case AttachmentType.Metal:
- break;
- case AttachmentType.Roughness:
- break;
- case AttachmentType.Emissive:
- if (mats[i].availableAttachments.HasFlag (AttachmentType.Emissive))
- uboUpdate.AddWriteInfo (descriptorSets[i], dslb, textures[(int)mats[i].emissiveTexture].Descriptor);
- break;
- }
- }
- uboUpdate.Update ();
- }
- }
- }
-
-
- /// <summary> bind vertex and index buffers </summary>
- public void Bind (CommandBuffer cmd) {
- cmd.BindVertexBuffer (vbo);
- cmd.BindIndexBuffer (ibo, IndexBufferType);
- }
-
- //TODO:destset for binding must be variable
- //TODO: ADD REFAULT MAT IF NO MAT DEFINED
- public void RenderNode (CommandBuffer cmd, PipelineLayout pipelineLayout, Node node, Matrix4x4 currentTransform) {
- Matrix4x4 localMat = node.localMatrix * currentTransform;
-
- cmd.PushConstant (pipelineLayout, VkShaderStageFlags.Vertex, localMat);
-
- if (node.Mesh != null) {
- foreach (Primitive p in node.Mesh.Primitives) {
- cmd.PushConstant (pipelineLayout, VkShaderStageFlags.Fragment, (int)p.material, (uint)Marshal.SizeOf<Matrix4x4> ());
- if (descriptorSets[p.material] != null)
- cmd.BindDescriptorSet (pipelineLayout, descriptorSets[p.material], 1);
- cmd.DrawIndexed (p.indexCount, 1, p.indexBase, p.vertexBase, 0);
- }
- }
- if (node.Children == null)
- return;
- foreach (Node child in node.Children)
- RenderNode (cmd, pipelineLayout, child, localMat);
- }
-
- public void DrawAll (CommandBuffer cmd, PipelineLayout pipelineLayout) {
- foreach (Scene sc in Scenes) {
- foreach (Node node in sc.Root.Children) {
- RenderNode (cmd, pipelineLayout, node, sc.Root.localMatrix);
- }
- }
- }
-
- #region IDisposable Support
- private bool isDisposed = false; // Pour détecter les appels redondants
-
- protected virtual void Dispose (bool disposing) {
- if (!isDisposed) {
- if (disposing) {
- ibo?.Dispose ();
- vbo?.Dispose ();
- materialUBO?.Dispose ();
- descriptorPool?.Dispose ();
- foreach (Image txt in textures) {
- txt.Dispose ();
- }
- } else
- Debug.WriteLine ("model was not disposed");
- isDisposed = true;
- }
- }
- public void Dispose () {
- Dispose (true);
- }
- #endregion
- }
-}
-
-namespace CVKL {
-
- class PBRPipeline : GraphicPipeline {
-
- public struct Matrices {
- public Matrix4x4 projection;
- public Matrix4x4 model;
- public Matrix4x4 view;
- public Vector4 camPos;
- public Vector4 lightDir;
- public float exposure;
- public float gamma;
- public float prefilteredCubeMipLevels;
- public float scaleIBLAmbient;
- public float debugViewInputs;
- public float debugViewEquation;
- }
-
- public Matrices matrices = new Matrices {
- lightDir = Vector4.Normalize (new Vector4 (0.7f, 0.6f, 0.2f, 0.0f)),
- gamma = 2.2f,
- exposure = 4.5f,
- scaleIBLAmbient = 1f,
- debugViewInputs = 0,
- debugViewEquation = 0
- };
-
- public HostBuffer uboMats;
-
- DescriptorPool descriptorPool;
-
- DescriptorSetLayout descLayoutMain;
- DescriptorSetLayout descLayoutTextures;
- public DescriptorSet dsMain;
-
- public PbrModel2 model;
- public EnvironmentCube envCube;
-
- public PBRPipeline (Queue staggingQ, RenderPass renderPass, Image uiImage, PipelineCache pipelineCache = null) :
- base (renderPass, pipelineCache, "pbr pipeline") {
-
- descriptorPool = new DescriptorPool (Dev, 2,
- new VkDescriptorPoolSize (VkDescriptorType.UniformBuffer, 2),
- new VkDescriptorPoolSize (VkDescriptorType.CombinedImageSampler, 9)
- );
-
- descLayoutMain = new DescriptorSetLayout (Dev,
- new VkDescriptorSetLayoutBinding (0, VkShaderStageFlags.Vertex | VkShaderStageFlags.Fragment, VkDescriptorType.UniformBuffer),
- new VkDescriptorSetLayoutBinding (1, VkShaderStageFlags.Fragment, VkDescriptorType.CombinedImageSampler),
- new VkDescriptorSetLayoutBinding (2, VkShaderStageFlags.Fragment, VkDescriptorType.CombinedImageSampler),
- new VkDescriptorSetLayoutBinding (3, VkShaderStageFlags.Fragment, VkDescriptorType.CombinedImageSampler),
- new VkDescriptorSetLayoutBinding (4, VkShaderStageFlags.Fragment, VkDescriptorType.UniformBuffer),
- new VkDescriptorSetLayoutBinding (5, VkShaderStageFlags.Fragment, VkDescriptorType.CombinedImageSampler));//ui image
-
- descLayoutTextures = new DescriptorSetLayout (Dev,
- new VkDescriptorSetLayoutBinding (0, VkShaderStageFlags.Fragment, VkDescriptorType.CombinedImageSampler),
- new VkDescriptorSetLayoutBinding (1, VkShaderStageFlags.Fragment, VkDescriptorType.CombinedImageSampler),
- new VkDescriptorSetLayoutBinding (2, VkShaderStageFlags.Fragment, VkDescriptorType.CombinedImageSampler),
- new VkDescriptorSetLayoutBinding (3, VkShaderStageFlags.Fragment, VkDescriptorType.CombinedImageSampler),
- new VkDescriptorSetLayoutBinding (4, VkShaderStageFlags.Fragment, VkDescriptorType.CombinedImageSampler)
- );
-
-
- GraphicPipelineConfig cfg = GraphicPipelineConfig.CreateDefault (VkPrimitiveTopology.TriangleList, renderPass.Samples);
- cfg.Layout = new PipelineLayout (Dev, descLayoutMain, descLayoutTextures);
- cfg.Layout.AddPushConstants (
- new VkPushConstantRange (VkShaderStageFlags.Vertex, (uint)Marshal.SizeOf<Matrix4x4> ()),
- new VkPushConstantRange (VkShaderStageFlags.Fragment, sizeof (int), 64)
- );
- cfg.RenderPass = renderPass;
- cfg.AddVertexBinding<PbrModel2.Vertex> (0);
- cfg.SetVertexAttributes (0, VkFormat.R32g32b32Sfloat, VkFormat.R32g32b32Sfloat, VkFormat.R32g32Sfloat, VkFormat.R32g32Sfloat);
-
- cfg.AddShader (VkShaderStageFlags.Vertex, "shaders/pbr.vert.spv");
- cfg.AddShader (VkShaderStageFlags.Fragment, "shaders/pbr_khr.frag.spv");
-
- layout = cfg.Layout;
-
- init (cfg);
-
- dsMain = descriptorPool.Allocate (descLayoutMain);
-
- envCube = new EnvironmentCube (dsMain, layout, staggingQ, RenderPass);
-
- matrices.prefilteredCubeMipLevels = envCube.prefilterCube.CreateInfo.mipLevels;
- uboMats = new HostBuffer (Dev, VkBufferUsageFlags.UniformBuffer, matrices, true);
-
- string[] modelPathes = {
- "../data/models/DamagedHelmet/glTF/DamagedHelmet.gltf",
- "/mnt/devel/vulkan/glTF-Sample-Models-master/2.0/Avocado/glTF/Avocado.gltf",
- "/mnt/devel/vulkan/glTF-Sample-Models-master/2.0/BarramundiFish/glTF/BarramundiFish.gltf",
- "/mnt/devel/vulkan/glTF-Sample-Models-master/2.0/BoomBoxWithAxes/glTF/BoomBoxWithAxes.gltf",
- "/mnt/devel/vulkan/glTF-Sample-Models-master/2.0/Box/glTF/Box.gltf",
- "/mnt/devel/vulkan/glTF-Sample-Models-master/2.0/EnvironmentTest/glTF/EnvironmentTest.gltf",
- "/mnt/devel/vulkan/glTF-Sample-Models-master/2.0/MetalRoughSpheres/glTF/MetalRoughSpheres.gltf",
- "/mnt/devel/vulkan/glTF-Sample-Models-master/2.0/OrientationTest/glTF/OrientationTest.gltf",
- "/mnt/devel/vulkan/glTF-Sample-Models-master/2.0/Buggy/glTF/Buggy.gltf",
- "/mnt/devel/vulkan/glTF-Sample-Models-master/2.0/2CylinderEngine/glTF-Embedded/2CylinderEngine.gltf",
- "/mnt/devel/vulkan/glTF-Sample-Models-master/2.0/FlightHelmet/glTF/FlightHelmet.gltf",
- "/mnt/devel/vulkan/glTF-Sample-Models-master/2.0/GearboxAssy/glTF/GearboxAssy.gltf",
- "/mnt/devel/vulkan/glTF-Sample-Models-master/2.0/Lantern/glTF/Lantern.gltf",
- "/mnt/devel/vulkan/glTF-Sample-Models-master/2.0/SciFiHelmet/glTF/SciFiHelmet.gltf",
- "/mnt/devel/vulkan/glTF-Sample-Models-master/2.0/Sponza/glTF/Sponza.gltf",
- "/mnt/devel/vkChess/data/chess.gltf"
- };
-
-
- model = new PbrModel2 (staggingQ, modelPathes[0], descLayoutTextures,
- AttachmentType.Color,
- AttachmentType.PhysicalProps,
- AttachmentType.Normal,
- AttachmentType.AmbientOcclusion,
- AttachmentType.Emissive);
- //model = new Model (Dev, presentQueue, "../data/models/icosphere.gltf");
- //model = new Model (Dev, presentQueue, cmdPool, "../data/models/cube.gltf");
- DescriptorSetWrites uboUpdate = new DescriptorSetWrites (descLayoutMain);
- uboUpdate.Write (Dev, dsMain,
- uboMats.Descriptor,
- envCube.irradianceCube.Descriptor,
- envCube.prefilterCube.Descriptor,
- envCube.lutBrdf.Descriptor,
- model.materialUBO.Descriptor,
- uiImage.Descriptor);
-
- }
-
- public void RecordDraw (CommandBuffer cmd) {
- cmd.BindDescriptorSet (Layout, dsMain);
- envCube.RecordDraw (cmd);
- drawModel (cmd);
- }
- void drawModel (CommandBuffer cmd) {
- Bind (cmd);
- model.Bind (cmd);
- model.DrawAll (cmd, Layout);
-
- }
-
- protected override void Dispose (bool disposing) {
- model.Dispose ();
- envCube.Dispose ();
-
- descLayoutMain.Dispose ();
- descLayoutTextures.Dispose ();
- descriptorPool.Dispose ();
-
- uboMats.Dispose ();
-
- base.Dispose (disposing);
- }
- }
-
-}
diff --git a/samples/VkvgCrowTest/VkvgCrowTest.csproj b/samples/VkvgCrowTest/VkvgCrowTest.csproj
deleted file mode 100644
index b60384e..0000000
--- a/samples/VkvgCrowTest/VkvgCrowTest.csproj
+++ /dev/null
@@ -1,91 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <PropertyGroup>
- <ProjectGuid>{1F18E74F-BCC9-481C-8888-89D81CBB30BE}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AssemblyName>vkvgCrowTest</AssemblyName>
- <TargetFrameworkVersion>v4.7.1</TargetFrameworkVersion>
- <OutputPath>$(SolutionDir)build\$(Configuration)\samples\vkvgCrowTest</OutputPath>
- <IntermediateOutputPath>$(SolutionDir)build\obj\$(Configuration)</IntermediateOutputPath>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- <DebugSymbols>true</DebugSymbols>
- <DebugType>full</DebugType>
- <Optimize>false</Optimize>
- <DefineConstants>DEBUG;DEBUG_MARKER</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- <Optimize>true</Optimize>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- </PropertyGroup>
- <ItemGroup>
- <Compile Include="*.cs" />
- <GLSLShader Include="shaders\**\*.frag;shaders\**\*.vert" />
- <Datas Include="..\data\**\*.*">
- <Link>data\%(RecursiveDir)%(Filename)%(Extension)</Link>
- </Datas>
- </ItemGroup>
- <ItemGroup>
- <Reference Include="System.Numerics" />
- <Reference Include="System" />
- <Reference Include="System.Numerics.Vectors">
- <HintPath>..\..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll</HintPath>
- </Reference>
- <Reference Include="mscorlib" />
- <Reference Include="Newtonsoft.Json">
- <HintPath>..\..\packages\Newtonsoft.Json.12.0.2\lib\net45\Newtonsoft.Json.dll</HintPath>
- </Reference>
- <Reference Include="glTFLoader">
- <HintPath>..\..\packages\glTF2Loader.1.1.3-alpha\lib\net35\glTFLoader.dll</HintPath>
- </Reference>
- <Reference Include="System.Buffers">
- <HintPath>..\..\packages\System.Buffers.4.5.0\lib\netstandard2.0\System.Buffers.dll</HintPath>
- </Reference>
- <Reference Include="System.Runtime.CompilerServices.Unsafe">
- <HintPath>..\..\packages\System.Runtime.CompilerServices.Unsafe.4.5.2\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
- </Reference>
- <Reference Include="System.Memory">
- <HintPath>..\..\packages\System.Memory.4.5.2\lib\netstandard2.0\System.Memory.dll</HintPath>
- </Reference>
- <Reference Include="VK">
- <HintPath>..\..\packages\Vulkan.0.1.2.6\lib\netstandard2.0\VK.dll</HintPath>
- </Reference>
- </ItemGroup>
- <ItemGroup>
- <None Include="packages.config" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\..\crow\Crow\Crow.csproj">
- <Project>{C2980F9B-4798-4C05-99E2-E174810F7C7B}</Project>
- <Name>Crow</Name>
- </ProjectReference>
- <ProjectReference Include="..\..\vke\CVKL.csproj">
- <Project>{32B7E80D-BEA7-4811-B82D-CC2533069F0A}</Project>
- <Name>CVKL</Name>
- </ProjectReference>
- </ItemGroup>
- <ItemGroup>
- <Folder Include="ui\" />
- </ItemGroup>
- <ItemGroup>
- <EmbeddedResource Include="ui\fps.crow">
- <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
- <LogicalName>vkvgCrowTest.fps.crow</LogicalName>
- </EmbeddedResource>
- <EmbeddedResource Include="ui\perfMsr.crow">
- <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
- <LogicalName>vkvgCrowTest.perfMsr.crow</LogicalName>
- </EmbeddedResource>
- <EmbeddedResource Include="ui\perfMeasures.crow">
- <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
- <LogicalName>vkvgCrowTest.perfMeasures.crow</LogicalName>
- </EmbeddedResource>
- </ItemGroup>
- <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
- <Import Project="$(SolutionDir)spirv.targets" />
-</Project>
diff --git a/samples/VkvgCrowTest/main.cs b/samples/VkvgCrowTest/main.cs
deleted file mode 100644
index 46a8903..0000000
--- a/samples/VkvgCrowTest/main.cs
+++ /dev/null
@@ -1,564 +0,0 @@
-using System;
-using System.Numerics;
-using System.Runtime.InteropServices;
-using Glfw;
-using VK;
-using CVKL;
-using System.Threading;
-
-namespace pbrSachaWillem {
- class Program : VkWindow, Crow.IValueChange {
- static void Main (string[] args) {
- using (Program vke = new Program ()) {
- vke.Run ();
- }
- }
- bool isRunning;
-
- protected override void render () {
- int idx = swapChain.GetNextImage ();
-
- lock (crow.RenderMutex) {
- if (idx < 0) {
- OnResize ();
- return;
- }
-
- presentQueue.Submit (cmds[idx], swapChain.presentComplete, drawComplete[idx]);
- presentQueue.Present (swapChain, drawComplete[idx]);
- presentQueue.WaitIdle ();
- }
- }
-
- #region crow
-
- void crow_thread_func () {
- vkvgDev = new vkvg.Device (instance.Handle, phy.Handle, dev.VkDev.Handle, presentQueue.qFamIndex,
- vkvg.SampleCount.Sample_4, presentQueue.index);
-
- crow = new Crow.Interface (vkvgDev, 800, 600);
-
- isRunning = true;
- //int frameCount = 0;
-
- while (isRunning) {
- crow.Update ();
-
- /*if (frameCount++ > 100) {
- for (int i = 0; i < crow.PerfMeasures.Count; i++)
- crow.PerfMeasures[i].NotifyChanges ();
- frameCount = 0;
- }*/
-
- Thread.Sleep (2);
- }
- dev.WaitIdle ();
- crow.Dispose ();
- vkvgDev.Dispose ();
- }
-
- #region IValueChange implementation
- public event EventHandler<Crow.ValueChangeEventArgs> ValueChanged;
- public virtual void NotifyValueChanged(string MemberName, object _value)
- {
- if (ValueChanged != null)
- ValueChanged.Invoke(this, new Crow.ValueChangeEventArgs(MemberName, _value));
- }
- #endregion
-
- public float Gamma {
- get { return pbrPipeline.matrices.gamma; }
- set {
- if (value == pbrPipeline.matrices.gamma)
- return;
- pbrPipeline.matrices.gamma = value;
- NotifyValueChanged ("Gamma", value);
- updateViewRequested = true;
- }
- }
- public float Exposure {
- get { return pbrPipeline.matrices.exposure; }
- set {
- if (value == pbrPipeline.matrices.exposure)
- return;
- pbrPipeline.matrices.exposure = value;
- NotifyValueChanged ("Exposure", value);
- updateViewRequested = true;
- }
- }
- Crow.Interface crow;
- #endregion
-
- protected override void configureEnabledFeatures (VkPhysicalDeviceFeatures available_features, ref VkPhysicalDeviceFeatures features) {
- base.configureEnabledFeatures (available_features, ref features);
-#if PIPELINE_STATS
- features.pipelineStatisticsQuery = true;
-#endif
- features.samplerAnisotropy = true;
- }
-
- VkSampleCountFlags samples = VkSampleCountFlags.SampleCount4;
-
- Framebuffer[] frameBuffers;
- PBRPipeline pbrPipeline;
-
- enum DebugView {
- none,
- color,
- normal,
- occlusion,
- emissive,
- metallic,
- roughness
- }
-
- DebugView currentDebugView = DebugView.none;
-
-#if PIPELINE_STATS
- PipelineStatisticsQueryPool statPool;
- TimestampQueryPool timestampQPool;
- ulong[] results;
-#endif
-
-
- bool queryUpdatePrefilCube, showDebugImg, showUI = true;
-
-
- Image uiImage;
-
- #region ui
- //DescriptorSet dsDebugImg;
- //void initDebugImg () {
- // dsDebugImg = descriptorPool.Allocate (descLayoutMain);
- // pbrPipeline.envCube.debugImg.Descriptor.imageLayout = VkImageLayout.ShaderReadOnlyOptimal;
- // DescriptorSetWrites uboUpdate = new DescriptorSetWrites (dsDebugImg, descLayoutMain);
- // uboUpdate.Write (dev, pbrPipeline.envCube.debugImg.Descriptor);
- //}
-
- vkvg.Device vkvgDev;
-
- Pipeline uiPipeline;
-
- void initUIPipeline () {
- GraphicPipelineConfig cfg = GraphicPipelineConfig.CreateDefault (VkPrimitiveTopology.TriangleList, samples, false);
- cfg.RenderPass = pbrPipeline.RenderPass;
- cfg.Layout = pbrPipeline.Layout;
- cfg.AddShader (VkShaderStageFlags.Vertex, "shaders/FullScreenQuad.vert.spv");
- cfg.AddShader (VkShaderStageFlags.Fragment, "shaders/simpletexture.frag.spv");
- cfg.blendAttachments[0] = new VkPipelineColorBlendAttachmentState (true);
-
- uiPipeline = new GraphicPipeline (cfg);
-
- }
- void initUISurface () {
- lock (crow.UpdateMutex) {
- uiImage?.Dispose ();
- uiImage = new CVKL.Image (dev, new VkImage ((ulong)crow.surf.VkImage.ToInt64 ()), VkFormat.B8g8r8a8Unorm,
- VkImageUsageFlags.Sampled, swapChain.Width, swapChain.Height);
- uiImage.SetName ("uiImage");
- uiImage.CreateView (VkImageViewType.ImageView2D, VkImageAspectFlags.Color);
- uiImage.CreateSampler (VkFilter.Nearest, VkFilter.Nearest, VkSamplerMipmapMode.Nearest, VkSamplerAddressMode.ClampToBorder);
- uiImage.Descriptor.imageLayout = VkImageLayout.ShaderReadOnlyOptimal;
- }
- }
-
-
- void recordDrawOverlay (CommandBuffer cmd) {
- uiPipeline.Bind (cmd);
-
- uiImage.SetLayout (cmd, VkImageAspectFlags.Color, VkImageLayout.ColorAttachmentOptimal, VkImageLayout.ShaderReadOnlyOptimal,
- VkPipelineStageFlags.ColorAttachmentOutput, VkPipelineStageFlags.FragmentShader);
-
- cmd.Draw (3, 1, 0, 0);
-
- uiImage.SetLayout (cmd, VkImageAspectFlags.Color, VkImageLayout.ShaderReadOnlyOptimal, VkImageLayout.ColorAttachmentOptimal,
- VkPipelineStageFlags.FragmentShader, VkPipelineStageFlags.BottomOfPipe);
-
- //if (!showDebugImg)
- // return;
- //const uint debugImgSize = 256;
- //const uint debugImgMargin = 10;
-
- //cmd.BindDescriptorSet (uiPipeline.Layout, dsDebugImg);
-
- //cmd.SetViewport (debugImgSize, debugImgSize, debugImgMargin, swapChain.Height - debugImgSize - debugImgMargin);
- //cmd.SetScissor (debugImgSize, debugImgSize, (int)debugImgMargin, (int)(swapChain.Height - debugImgSize - debugImgMargin));
-
- //cmd.Draw (3, 1, 0, 0);
- }
- #endregion
-
-
- Vector4 lightPos = new Vector4 (1, 0, 0, 0);
- BoundingBox modelAABB;
-
- Program () {
- camera.SetPosition (0, 0, 5);
-
- Thread crowThread = new Thread (crow_thread_func);
- crowThread.IsBackground = true;
- crowThread.Start ();
-
- while (crow == null)
- Thread.Sleep (5);
-
- initUISurface ();
-
- pbrPipeline = new PBRPipeline (presentQueue,
- new RenderPass (dev, swapChain.ColorFormat, dev.GetSuitableDepthFormat (), samples), uiImage);
-
- initUIPipeline ();
-
- modelAABB = pbrPipeline.model.DefaultScene.AABB;
-
- crow.Load ("ui/fps.crow").DataSource = this;
- //crow.Load ("#vkvgCrowTest.perfMeasures.crow").DataSource = crow;
-
- //crow.LoadIMLFragment ("<Window Height='200' Width='200' CornerRadius='5'/>").DataSource=this;
- //crow.LoadIMLFragment ("<Window Height='200' Width='200'/>").DataSource = this;
- crow.LoadIMLFragment (@"<Image Margin='1' Path='/mnt/devel/gts/vk.net/crow/Images/crow.png' Width='100' Height='100' Background='White' MouseEnter='{Background=Blue}' MouseLeave='{Background=White}'/>");
- //crow.LoadIMLFragment ("<Window Height='200' Width='200'/>").DataSource = this;
- UpdateFrequency = 20;
- }
-
- void buildCommandBuffers () {
- for (int i = 0; i < swapChain.ImageCount; ++i) {
- cmds[i]?.Free ();
- cmds[i] = cmdPool.AllocateAndStart ();
-#if PIPELINE_STATS
- statPool.Begin (cmds[i]);
- recordDraw (cmds[i], frameBuffers[i]);
- statPool.End (cmds[i]);
-#else
- recordDraw (cmds[i], frameBuffers[i]);
-#endif
-
- cmds[i].End ();
- }
- }
- void recordDraw (CommandBuffer cmd, Framebuffer fb) {
- pbrPipeline.RenderPass.Begin (cmd, fb);
-
- cmd.SetViewport (fb.Width, fb.Height);
- cmd.SetScissor (fb.Width, fb.Height);
-
- pbrPipeline.RecordDraw (cmd);
-
- if (showUI)
- recordDrawOverlay (cmd);
-
- pbrPipeline.RenderPass.End (cmd);
- }
-
-
- #region update
- public override void UpdateView () {
- camera.AspectRatio = (float)swapChain.Width / swapChain.Height;
-
- pbrPipeline.matrices.lightDir = lightPos;
- pbrPipeline.matrices.projection = camera.Projection;
- pbrPipeline.matrices.view = camera.View;
- pbrPipeline.matrices.model = camera.Model;
-
-
- pbrPipeline.matrices.camPos = new Vector4 (
- -camera.Position.Z * (float)Math.Sin (camera.Rotation.Y) * (float)Math.Cos (camera.Rotation.X),
- camera.Position.Z * (float)Math.Sin (camera.Rotation.X),
- camera.Position.Z * (float)Math.Cos (camera.Rotation.Y) * (float)Math.Cos (camera.Rotation.X),
- 0
- );
- pbrPipeline.matrices.debugViewInputs = (float)currentDebugView;
-
- pbrPipeline.uboMats.Update (pbrPipeline.matrices, (uint)Marshal.SizeOf<PBRPipeline.Matrices> ());
-
- updateViewRequested = false;
- }
-
- int frameCount = 0;
-
- public override void Update () {
-#if PIPELINE_STATS
- results = statPool.GetResults ();
-#endif
- camera.Model *= Matrix4x4.CreateRotationY(0.05f);
- updateViewRequested = true;
-
- if (rebuildBuffers) {
- buildCommandBuffers ();
- rebuildBuffers = false;
- }
-
- if (++frameCount > 20) {
- NotifyValueChanged ("fps", fps);
- frameCount = 0;
- }
- }
- #endregion
-
-
- protected override void OnResize () {
- crow.ProcessResize (new Crow.Rectangle (0,0,(int)swapChain.Width, (int)swapChain.Height));
-
- initUISurface ();
-
- uiImage.Descriptor.imageLayout = VkImageLayout.ShaderReadOnlyOptimal;
- DescriptorSetWrites uboUpdate = new DescriptorSetWrites (pbrPipeline.dsMain, pbrPipeline.Layout.DescriptorSetLayouts[0].Bindings[5]);
- uboUpdate.Write (dev, uiImage.Descriptor);
-
- UpdateView ();
-
- if (frameBuffers != null)
- for (int i = 0; i < swapChain.ImageCount; ++i)
- frameBuffers[i]?.Dispose ();
-
- frameBuffers = new Framebuffer[swapChain.ImageCount];
-
- for (int i = 0; i < swapChain.ImageCount; ++i) {
- frameBuffers[i] = new Framebuffer (pbrPipeline.RenderPass, swapChain.Width, swapChain.Height,
- (pbrPipeline.RenderPass.Samples == VkSampleCountFlags.SampleCount1) ? new Image[] {
- swapChain.images[i],
- null
- } : new Image[] {
- null,
- null,
- swapChain.images[i]
- });
- }
-
- buildCommandBuffers ();
- }
-
- #region Mouse and keyboard
- protected override void onMouseMove (double xPos, double yPos) {
- if (crow.ProcessMouseMove ((int)xPos, (int)yPos))
- return;
-
- double diffX = lastMouseX - xPos;
- double diffY = lastMouseY - yPos;
- if (MouseButton[0]) {
- camera.Rotate ((float)-diffX, (float)-diffY);
- } else if (MouseButton[1]) {
- camera.SetZoom ((float)diffY);
- } else
- return;
-
- updateViewRequested = true;
- }
- protected override void onMouseButtonDown (Glfw.MouseButton button) {
- if (crow.ProcessMouseButtonDown ((Crow.MouseButton)button))
- return;
- base.onMouseButtonDown (button);
- }
- protected override void onMouseButtonUp (Glfw.MouseButton button) {
- if (crow.ProcessMouseButtonUp ((Crow.MouseButton)button))
- return;
- base.onMouseButtonUp (button);
- }
-
- protected override void onKeyDown (Key key, int scanCode, Modifier modifiers) {
- switch (key) {
- case Key.F:
- if (modifiers.HasFlag (Modifier.Shift)) {
- pbrPipeline.envCube.debugFace--;
- if (pbrPipeline.envCube.debugFace < 0)
- pbrPipeline.envCube.debugFace = 5;
- } else {
- pbrPipeline.envCube.debugFace++;
- if (pbrPipeline.envCube.debugFace > 5)
- pbrPipeline.envCube.debugFace = 0;
- }
- queryUpdatePrefilCube = updateViewRequested = true;
- break;
- case Key.M:
- if (modifiers.HasFlag (Modifier.Shift)) {
- pbrPipeline.envCube.debugMip--;
- if (pbrPipeline.envCube.debugMip < 0)
- pbrPipeline.envCube.debugMip = (int)pbrPipeline.envCube.prefilterCube.CreateInfo.mipLevels - 1;
- } else {
- pbrPipeline.envCube.debugMip++;
- if (pbrPipeline.envCube.debugMip > pbrPipeline.envCube.prefilterCube.CreateInfo.mipLevels)
- pbrPipeline.envCube.debugMip = 0;
- }
- queryUpdatePrefilCube = updateViewRequested = true;
- break;
- case Key.P:
- showDebugImg = !showDebugImg;
- queryUpdatePrefilCube = updateViewRequested = true;
- break;
- case Key.Keypad0:
- currentDebugView = DebugView.none;
- break;
- case Key.Keypad1:
- currentDebugView = DebugView.color;
- break;
- case Key.Keypad2:
- currentDebugView = DebugView.normal;
- break;
- case Key.Keypad3:
- currentDebugView = DebugView.occlusion;
- break;
- case Key.Keypad4:
- currentDebugView = DebugView.emissive;
- break;
- case Key.Keypad5:
- currentDebugView = DebugView.metallic;
- break;
- case Key.Keypad6:
- currentDebugView = DebugView.roughness;
- break;
- case Key.Up:
- if (modifiers.HasFlag (Modifier.Shift))
- lightPos -= Vector4.UnitZ;
- else
- camera.Move (0, 0, 1);
- break;
- case Key.Down:
- if (modifiers.HasFlag (Modifier.Shift))
- lightPos += Vector4.UnitZ;
- else
- camera.Move (0, 0, -1);
- break;
- case Key.Left:
- if (modifiers.HasFlag (Modifier.Shift))
- lightPos -= Vector4.UnitX;
- else
- camera.Move (1, 0, 0);
- break;
- case Key.Right:
- if (modifiers.HasFlag (Modifier.Shift))
- lightPos += Vector4.UnitX;
- else
- camera.Move (-1, 0, 0);
- break;
- case Key.PageUp:
- if (modifiers.HasFlag (Modifier.Shift))
- lightPos += Vector4.UnitY;
- else
- camera.Move (0, 1, 0);
- break;
- case Key.PageDown:
- if (modifiers.HasFlag (Modifier.Shift))
- lightPos -= Vector4.UnitY;
- else
- camera.Move (0, -1, 0);
- break;
- case Key.F1:
- showUI = !showUI;
- rebuildBuffers = true;
- break;
- case Key.F2:
- if (modifiers.HasFlag (Modifier.Shift))
- pbrPipeline.matrices.exposure -= 0.3f;
- else
- pbrPipeline.matrices.exposure += 0.3f;
- break;
- case Key.F3:
- if (modifiers.HasFlag (Modifier.Shift))
- pbrPipeline.matrices.gamma -= 0.1f;
- else
- pbrPipeline.matrices.gamma += 0.1f;
- break;
- case Key.F4:
- if (camera.Type == Camera.CamType.FirstPerson)
- camera.Type = Camera.CamType.LookAt;
- else
- camera.Type = Camera.CamType.FirstPerson;
- Console.WriteLine ($"camera type = {camera.Type}");
- break;
- default:
- base.onKeyDown (key, scanCode, modifiers);
- return;
- }
- updateViewRequested = true;
- }
- #endregion
-
- #region dispose
- protected override void Dispose (bool disposing) {
- if (disposing) {
- if (!isDisposed) {
- dev.WaitIdle ();
-
- isRunning = false;
-
- for (int i = 0; i < swapChain.ImageCount; ++i)
- frameBuffers[i]?.Dispose ();
-
- pbrPipeline.Dispose ();
-
- uiPipeline.Dispose ();
-
- uiImage?.Dispose ();
- }
- }
-
- base.Dispose (disposing);
- }
- #endregion
- }
-}
-
-
-
-
-
-
-
-// protected override void onKeyDown (Glfw.Key key, int scanCode, Modifier modifiers) {
-// switch (key) {
-// case Glfw.Key.F1:
-// if (modifiers.HasFlag (Modifier.Shift))
-// pbrPipeline.matrices.exposure -= 0.3f;
-// else
-// pbrPipeline.matrices.exposure += 0.3f;
-// break;
-// case Glfw.Key.F2:
-// if (modifiers.HasFlag (Modifier.Shift))
-// pbrPipeline.matrices.gamma -= 0.1f;
-// else
-// pbrPipeline.matrices.gamma += 0.1f;
-// break;
-// case Glfw.Key.F3:
-// if (camera.Type == Camera.CamType.FirstPerson)
-// camera.Type = Camera.CamType.LookAt;
-// else
-// camera.Type = Camera.CamType.FirstPerson;
-// Console.WriteLine ($"camera type = {camera.Type}");
-// break;
-// default:
-// base.onKeyDown (key, scanCode, modifiers);
-// return;
-// }
-// updateViewRequested = true;
-// }
-// #endregion
-
-// protected override void Dispose (bool disposing) {
-// if (disposing) {
-// if (!isDisposed) {
-// dev.WaitIdle ();
-// for (int i = 0; i < swapChain.ImageCount; ++i)
-// frameBuffers[i]?.Dispose ();
-
-// pbrPipeline.Dispose ();
-
-// uiPipeline.Dispose ();
-// descLayoutMain.Dispose ();
-// descriptorPool.Dispose ();
-
-// uiImage.Dispose ();
-
-// crow.Dispose ();
-
-// vkvgDev.Dispose ();
-
-
-// }
-// }
-
-// base.Dispose (disposing);
-// }
-
-
-// }
-//}
diff --git a/samples/VkvgCrowTest/packages.config b/samples/VkvgCrowTest/packages.config
deleted file mode 100644
index 0e162ba..0000000
--- a/samples/VkvgCrowTest/packages.config
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<packages>
- <package id="glTF2Loader" version="1.1.3-alpha" targetFramework="net471" />
- <package id="Newtonsoft.Json" version="12.0.2" targetFramework="net471" />
- <package id="System.Buffers" version="4.5.0" targetFramework="net471" />
- <package id="System.Memory" version="4.5.2" targetFramework="net471" />
- <package id="System.Numerics.Vectors" version="4.5.0" targetFramework="net471" />
- <package id="System.Runtime.CompilerServices.Unsafe" version="4.5.2" targetFramework="net471" />
- <package id="Vulkan" version="0.1.2.6" targetFramework="net471" />
-</packages> \ No newline at end of file
diff --git a/samples/VkvgCrowTest/shaders/FullScreenQuad.vert b/samples/VkvgCrowTest/shaders/FullScreenQuad.vert
deleted file mode 100644
index 826720b..0000000
--- a/samples/VkvgCrowTest/shaders/FullScreenQuad.vert
+++ /dev/null
@@ -1,10 +0,0 @@
-#version 450
-
-layout (location = 0) out vec2 outUV;
-
-void main()
-{
- outUV = vec2((gl_VertexIndex << 1) & 2, gl_VertexIndex & 2);
- gl_Position = vec4(outUV * 2.0f + -1.0f, 0.0f, 1.0f);
- //gl_Position = vec4(outUV -1.0f, 0.0f, 1.0f);
-}
diff --git a/samples/VkvgCrowTest/shaders/filtercube.vert b/samples/VkvgCrowTest/shaders/filtercube.vert
deleted file mode 100644
index 34adf73..0000000
--- a/samples/VkvgCrowTest/shaders/filtercube.vert
+++ /dev/null
@@ -1,20 +0,0 @@
-#version 450
-
-layout (location = 0) in vec3 inPos;
-
-layout(push_constant) uniform PushConsts {
- layout (offset = 0) mat4 mvp;
-} pushConsts;
-
-layout (location = 0) out vec3 outUVW;
-
-out gl_PerVertex {
- vec4 gl_Position;
-};
-
-void main()
-{
- outUVW = inPos;
- //outUVW.y = -outUVW.y;
- gl_Position = pushConsts.mvp * vec4(inPos.xyz, 1.0);
-}
diff --git a/samples/VkvgCrowTest/shaders/genbrdflut.frag b/samples/VkvgCrowTest/shaders/genbrdflut.frag
deleted file mode 100644
index b6290dd..0000000
--- a/samples/VkvgCrowTest/shaders/genbrdflut.frag
+++ /dev/null
@@ -1,90 +0,0 @@
-#version 450
-
-layout (location = 0) in vec2 inUV;
-layout (location = 0) out vec4 outColor;
-layout (constant_id = 0) const uint NUM_SAMPLES = 1024u;
-
-const float PI = 3.1415926536;
-
-// Based omn http://byteblacksmith.com/improvements-to-the-canonical-one-liner-glsl-rand-for-opengl-es-2-0/
-float random(vec2 co)
-{
- float a = 12.9898;
- float b = 78.233;
- float c = 43758.5453;
- float dt= dot(co.xy ,vec2(a,b));
- float sn= mod(dt,3.14);
- return fract(sin(sn) * c);
-}
-
-vec2 hammersley2d(uint i, uint N)
-{
- // Radical inverse based on http://holger.dammertz.org/stuff/notes_HammersleyOnHemisphere.html
- uint bits = (i << 16u) | (i >> 16u);
- bits = ((bits & 0x55555555u) << 1u) | ((bits & 0xAAAAAAAAu) >> 1u);
- bits = ((bits & 0x33333333u) << 2u) | ((bits & 0xCCCCCCCCu) >> 2u);
- bits = ((bits & 0x0F0F0F0Fu) << 4u) | ((bits & 0xF0F0F0F0u) >> 4u);
- bits = ((bits & 0x00FF00FFu) << 8u) | ((bits & 0xFF00FF00u) >> 8u);
- float rdi = float(bits) * 2.3283064365386963e-10;
- return vec2(float(i) /float(N), rdi);
-}
-
-// Based on http://blog.selfshadow.com/publications/s2013-shading-course/karis/s2013_pbs_epic_slides.pdf
-vec3 importanceSample_GGX(vec2 Xi, float roughness, vec3 normal)
-{
- // Maps a 2D point to a hemisphere with spread based on roughness
- float alpha = roughness * roughness;
- float phi = 2.0 * PI * Xi.x + random(normal.xz) * 0.1;
- float cosTheta = sqrt((1.0 - Xi.y) / (1.0 + (alpha*alpha - 1.0) * Xi.y));
- float sinTheta = sqrt(1.0 - cosTheta * cosTheta);
- vec3 H = vec3(sinTheta * cos(phi), sinTheta * sin(phi), cosTheta);
-
- // Tangent space
- vec3 up = abs(normal.z) < 0.999 ? vec3(0.0, 0.0, 1.0) : vec3(1.0, 0.0, 0.0);
- vec3 tangentX = normalize(cross(up, normal));
- vec3 tangentY = normalize(cross(normal, tangentX));
-
- // Convert to world Space
- return normalize(tangentX * H.x + tangentY * H.y + normal * H.z);
-}
-
-// Geometric Shadowing function
-float G_SchlicksmithGGX(float dotNL, float dotNV, float roughness)
-{
- float k = (roughness * roughness) / 2.0;
- float GL = dotNL / (dotNL * (1.0 - k) + k);
- float GV = dotNV / (dotNV * (1.0 - k) + k);
- return GL * GV;
-}
-
-vec2 BRDF(float NoV, float roughness)
-{
- // Normal always points along z-axis for the 2D lookup
- const vec3 N = vec3(0.0, 0.0, 1.0);
- vec3 V = vec3(sqrt(1.0 - NoV*NoV), 0.0, NoV);
-
- vec2 LUT = vec2(0.0);
- for(uint i = 0u; i < NUM_SAMPLES; i++) {
- vec2 Xi = hammersley2d(i, NUM_SAMPLES);
- vec3 H = importanceSample_GGX(Xi, roughness, N);
- vec3 L = 2.0 * dot(V, H) * H - V;
-
- float dotNL = max(dot(N, L), 0.0);
- float dotNV = max(dot(N, V), 0.0);
- float dotVH = max(dot(V, H), 0.0);
- float dotNH = max(dot(H, N), 0.0);
-
- if (dotNL > 0.0) {
- float G = G_SchlicksmithGGX(dotNL, dotNV, roughness);
- float G_Vis = (G * dotVH) / (dotNH * dotNV);
- float Fc = pow(1.0 - dotVH, 5.0);
- LUT += vec2((1.0 - Fc) * G_Vis, Fc * G_Vis);
- }
- }
- return LUT / float(NUM_SAMPLES);
-}
-
-void main()
-{
- outColor = vec4(BRDF(inUV.s, 1.0-inUV.t), 0.0, 1.0);
-} \ No newline at end of file
diff --git a/samples/VkvgCrowTest/shaders/genbrdflut.vert b/samples/VkvgCrowTest/shaders/genbrdflut.vert
deleted file mode 100644
index f3dd233..0000000
--- a/samples/VkvgCrowTest/shaders/genbrdflut.vert
+++ /dev/null
@@ -1,9 +0,0 @@
-#version 450
-
-layout (location = 0) out vec2 outUV;
-
-void main()
-{
- outUV = vec2((gl_VertexIndex << 1) & 2, gl_VertexIndex & 2);
- gl_Position = vec4(outUV * 2.0f - 1.0f, 0.0f, 1.0f);
-} \ No newline at end of file
diff --git a/samples/VkvgCrowTest/shaders/irradiancecube.frag b/samples/VkvgCrowTest/shaders/irradiancecube.frag
deleted file mode 100644
index 340d679..0000000
--- a/samples/VkvgCrowTest/shaders/irradiancecube.frag
+++ /dev/null
@@ -1,37 +0,0 @@
-// Generates an irradiance cube from an environment map using convolution
-
-#version 450
-
-layout (location = 0) in vec3 inPos;
-layout (location = 0) out vec4 outColor;
-layout (binding = 0) uniform samplerCube samplerEnv;
-
-layout(push_constant) uniform PushConsts {
- layout (offset = 64) float deltaPhi;
- layout (offset = 68) float deltaTheta;
-} consts;
-
-#define PI 3.1415926535897932384626433832795
-
-void main()
-{
- vec3 N = normalize(inPos);
- vec3 up = vec3(0.0, 1.0, 0.0);
- vec3 right = normalize(cross(up, N));
- up = cross(N, right);
-
- const float TWO_PI = PI * 2.0;
- const float HALF_PI = PI * 0.5;
-
- vec3 color = vec3(0.0);
- uint sampleCount = 0u;
- for (float phi = 0.0; phi < TWO_PI; phi += consts.deltaPhi) {
- for (float theta = 0.0; theta < HALF_PI; theta += consts.deltaTheta) {
- vec3 tempVec = cos(phi) * right + sin(phi) * up;
- vec3 sampleVector = cos(theta) * N + sin(theta) * tempVec;
- color += texture(samplerEnv, sampleVector).rgb * cos(theta) * sin(theta);
- sampleCount++;
- }
- }
- outColor = vec4(PI * color / float(sampleCount), 1.0);//texture(samplerEnv, inPos).rgba;
-}
diff --git a/samples/VkvgCrowTest/shaders/pbr.vert b/samples/VkvgCrowTest/shaders/pbr.vert
deleted file mode 100644
index 76ee24b..0000000
--- a/samples/VkvgCrowTest/shaders/pbr.vert
+++ /dev/null
@@ -1,44 +0,0 @@
-#version 450
-
-layout (location = 0) in vec3 inPos;
-layout (location = 1) in vec3 inNormal;
-layout (location = 2) in vec2 inUV0;
-layout (location = 3) in vec2 inUV1;
-
-layout (set = 0, binding = 0) uniform UBO {
- mat4 projection;
- mat4 model;
- mat4 view;
- vec4 camPos;
- vec4 lightDir;
- float exposure;
- float gamma;
- float prefilteredCubeMipLevels;
- float scaleIBLAmbient;
-} ubo;
-
-layout(push_constant) uniform PushConsts {
- mat4 model;
-} pc;
-
-layout (location = 0) out vec3 outWorldPos;
-layout (location = 1) out vec3 outNormal;
-layout (location = 2) out vec2 outUV0;
-layout (location = 3) out vec2 outUV1;
-
-out gl_PerVertex
-{
- vec4 gl_Position;
-};
-
-void main()
-{
- vec4 locPos = ubo.model * pc.model * vec4(inPos, 1.0);
- outNormal = normalize(transpose(inverse(mat3(ubo.model * pc.model))) * inNormal);
-
- //locPos.y = -locPos.y;
- outWorldPos = locPos.xyz;// / locPos.w;
- outUV0 = inUV0;
- outUV1 = inUV1;
- gl_Position = ubo.projection * ubo.view * vec4(outWorldPos, 1.0);
-}
diff --git a/samples/VkvgCrowTest/shaders/pbr_khr.frag b/samples/VkvgCrowTest/shaders/pbr_khr.frag
deleted file mode 100644
index 9564e00..0000000
--- a/samples/VkvgCrowTest/shaders/pbr_khr.frag
+++ /dev/null
@@ -1,460 +0,0 @@
-// PBR shader based on the Khronos WebGL PBR implementation
-// See https://github.com/KhronosGroup/glTF-WebGL-PBR
-// Supports both metallic roughness and specular glossiness inputs
-
-#version 450
-#extension GL_ARB_separate_shader_objects : enable
-#extension GL_ARB_shading_language_420pack : enable
-
-#define MANUAL_SRGB 0
-#define DEBUG 0
-
-struct Material {
- vec4 baseColorFactor;
- vec4 emissiveFactor;
- vec4 diffuseFactor;
- vec4 specularFactor;
- float workflow;
- uint tex0;
- uint tex1;
- float metallicFactor;
- float roughnessFactor;
- float alphaMask;
- float alphaMaskCutoff;
- int pad0;
-};
-
-const uint MAP_COLOR = 0x1;
-const uint MAP_NORMAL = 0x2;
-const uint MAP_AO = 0x4;
-const uint MAP_METAL = 0x8;
-const uint MAP_ROUGHNESS = 0x10;
-const uint MAP_METALROUGHNESS = 0x20;
-const uint MAP_EMISSIVE = 0x40;
-
-layout (location = 0) in vec3 inWorldPos;
-layout (location = 1) in vec3 inNormal;
-layout (location = 2) in vec2 inUV0;
-layout (location = 3) in vec2 inUV1;
-
-layout (set = 0, binding = 0) uniform UBO {
- mat4 projection;
- mat4 model;
- mat4 view;
- vec4 camPos;
- vec4 lightDir;
- float exposure;
- float gamma;
- float prefilteredCubeMipLevels;
- float scaleIBLAmbient;
-#if DEBUG
- float debugViewInputs;
- float debugViewEquation;
-#endif
-} ubo;
-
-layout (set = 0, binding = 4) uniform UBOMaterials {
- Material materials[16];
-};
-
-layout (set = 0, binding = 1) uniform samplerCube samplerIrradiance;
-layout (set = 0, binding = 2) uniform samplerCube prefilteredMap;
-layout (set = 0, binding = 3) uniform sampler2D samplerBRDFLUT;
-
-// Material bindings
-
-layout (set = 1, binding = 0) uniform sampler2D colorMap;
-layout (set = 1, binding = 1) uniform sampler2D physicalDescriptorMap;
-layout (set = 1, binding = 2) uniform sampler2D normalMap;
-layout (set = 1, binding = 3) uniform sampler2D aoMap;
-layout (set = 1, binding = 4) uniform sampler2D emissiveMap;
-
-
-layout (push_constant) uniform PushCsts {
- layout(offset = 64)
- int materialIdx;
-};
-
-layout (location = 0) out vec4 outColor;
-
-// Encapsulate the various inputs used by the various functions in the shading equation
-// We store values in this struct to simplify the integration of alternative implementations
-// of the shading terms, outlined in the Readme.MD Appendix.
-struct PBRInfo
-{
- float NdotL; // cos angle between normal and light direction
- float NdotV; // cos angle between normal and view direction
- float NdotH; // cos angle between normal and half vector
- float LdotH; // cos angle between light direction and half vector
- float VdotH; // cos angle between view direction and half vector
- float perceptualRoughness; // roughness value, as authored by the model creator (input to shader)
- float metalness; // metallic value at the surface
- vec3 reflectance0; // full reflectance color (normal incidence angle)
- vec3 reflectance90; // reflectance color at grazing angle
- float alphaRoughness; // roughness mapped to a more linear change in the roughness (proposed by [2])
- vec3 diffuseColor; // color contribution from diffuse lighting
- vec3 specularColor; // color contribution from specular lighting
-};
-
-const float M_PI = 3.141592653589793;
-const float c_MinRoughness = 0.04;
-
-const float PBR_WORKFLOW_METALLIC_ROUGHNESS = 1.0;
-const float PBR_WORKFLOW_SPECULAR_GLOSINESS = 2.0f;
-
-vec3 Uncharted2Tonemap(vec3 color)
-{
- float A = 0.15;
- float B = 0.50;
- float C = 0.10;
- float D = 0.20;
- float E = 0.02;
- float F = 0.30;
- float W = 11.2;
- return ((color*(A*color+C*B)+D*E)/(color*(A*color+B)+D*F))-E/F;
-}
-
-vec4 tonemap(vec4 color)
-{
- vec3 outcol = Uncharted2Tonemap(color.rgb * ubo.exposure);
- outcol = outcol * (1.0f / Uncharted2Tonemap(vec3(11.2f)));
- return vec4(pow(outcol, vec3(1.0f / ubo.gamma)), color.a);
-}
-
-vec4 SRGBtoLINEAR(vec4 srgbIn)
-{
- #ifdef MANUAL_SRGB
- #ifdef SRGB_FAST_APPROXIMATION
- vec3 linOut = pow(srgbIn.xyz,vec3(2.2));
- #else //SRGB_FAST_APPROXIMATION
- vec3 bLess = step(vec3(0.04045),srgbIn.xyz);
- vec3 linOut = mix( srgbIn.xyz/vec3(12.92), pow((srgbIn.xyz+vec3(0.055))/vec3(1.055),vec3(2.4)), bLess );
- #endif //SRGB_FAST_APPROXIMATION
- return vec4(linOut,srgbIn.w);;
- #else //MANUAL_SRGB
- return srgbIn;
- #endif //MANUAL_SRGB
-}
-
-// Find the normal for this fragment, pulling either from a predefined normal map
-// or from the interpolated mesh normal and tangent attributes.
-vec3 getNormal()
-{
- vec3 tangentNormal;
- // Perturb normal, see http://www.thetenthplanet.de/archives/1180
- if ((materials[materialIdx].tex0 & MAP_NORMAL) == MAP_NORMAL)
- tangentNormal = texture(normalMap, inUV0).xyz * 2.0 - 1.0;
- else if ((materials[materialIdx].tex1 & MAP_NORMAL) == MAP_NORMAL)
- tangentNormal = texture(normalMap, inUV1).xyz * 2.0 - 1.0;
- else
- return normalize(inNormal);
-
- vec3 q1 = dFdx(inWorldPos);
- vec3 q2 = dFdy(inWorldPos);
- vec2 st1 = dFdx(inUV0);
- vec2 st2 = dFdy(inUV0);
-
- vec3 N = normalize(inNormal);
- vec3 T = normalize(q1 * st2.t - q2 * st1.t);
- vec3 B = -normalize(cross(N, T));
- mat3 TBN = mat3(T, B, N);
-
- return normalize(TBN * tangentNormal);
-}
-
-// Calculation of the lighting contribution from an optional Image Based Light source.
-// Precomputed Environment Maps are required uniform inputs and are computed as outlined in [1].
-// See our README.md on Environment Maps [3] for additional discussion.
-vec3 getIBLContribution(PBRInfo pbrInputs, vec3 n, vec3 reflection)
-{
- float lod = (pbrInputs.perceptualRoughness * ubo.prefilteredCubeMipLevels);
- // retrieve a scale and bias to F0. See [1], Figure 3
- vec3 brdf = (texture(samplerBRDFLUT, vec2(pbrInputs.NdotV, 1.0 - pbrInputs.perceptualRoughness))).rgb;
- vec3 diffuseLight = SRGBtoLINEAR(tonemap(texture(samplerIrradiance, n))).rgb;
-
- vec3 specularLight = SRGBtoLINEAR(tonemap(textureLod(prefilteredMap, reflection, lod))).rgb;
-
- vec3 diffuse = diffuseLight * pbrInputs.diffuseColor;
- vec3 specular = specularLight * (pbrInputs.specularColor * brdf.x + brdf.y);
-
- // For presentation, this allows us to disable IBL terms
- // For presentation, this allows us to disable IBL terms
- diffuse *= ubo.scaleIBLAmbient;
- specular *= ubo.scaleIBLAmbient;
-
- return diffuse + specular;
-}
-
-// Basic Lambertian diffuse
-// Implementation from Lambert's Photometria https://archive.org/details/lambertsphotome00lambgoog
-// See also [1], Equation 1
-vec3 diffuse(PBRInfo pbrInputs)
-{
- return pbrInputs.diffuseColor / M_PI;
-}
-
-// The following equation models the Fresnel reflectance term of the spec equation (aka F())
-// Implementation of fresnel from [4], Equation 15
-vec3 specularReflection(PBRInfo pbrInputs)
-{
- return pbrInputs.reflectance0 + (pbrInputs.reflectance90 - pbrInputs.reflectance0) * pow(clamp(1.0 - pbrInputs.VdotH, 0.0, 1.0), 5.0);
-}
-
-// This calculates the specular geometric attenuation (aka G()),
-// where rougher material will reflect less light back to the viewer.
-// This implementation is based on [1] Equation 4, and we adopt their modifications to
-// alphaRoughness as input as originally proposed in [2].
-float geometricOcclusion(PBRInfo pbrInputs)
-{
- float NdotL = pbrInputs.NdotL;
- float NdotV = pbrInputs.NdotV;
- float r = pbrInputs.alphaRoughness;
-
- float attenuationL = 2.0 * NdotL / (NdotL + sqrt(r * r + (1.0 - r * r) * (NdotL * NdotL)));
- float attenuationV = 2.0 * NdotV / (NdotV + sqrt(r * r + (1.0 - r * r) * (NdotV * NdotV)));
- return attenuationL * attenuationV;
-}
-
-// The following equation(s) model the distribution of microfacet normals across the area being drawn (aka D())
-// Implementation from "Average Irregularity Representation of a Roughened Surface for Ray Reflection" by T. S. Trowbridge, and K. P. Reitz
-// Follows the distribution function recommended in the SIGGRAPH 2013 course notes from EPIC Games [1], Equation 3.
-float microfacetDistribution(PBRInfo pbrInputs)
-{
- float roughnessSq = pbrInputs.alphaRoughness * pbrInputs.alphaRoughness;
- float f = (pbrInputs.NdotH * roughnessSq - pbrInputs.NdotH) * pbrInputs.NdotH + 1.0;
- return roughnessSq / (M_PI * f * f);
-}
-
-// Gets metallic factor from specular glossiness workflow inputs
-float convertMetallic(vec3 diffuse, vec3 specular, float maxSpecular) {
- float perceivedDiffuse = sqrt(0.299 * diffuse.r * diffuse.r + 0.587 * diffuse.g * diffuse.g + 0.114 * diffuse.b * diffuse.b);
- float perceivedSpecular = sqrt(0.299 * specular.r * specular.r + 0.587 * specular.g * specular.g + 0.114 * specular.b * specular.b);
- if (perceivedSpecular < c_MinRoughness) {
- return 0.0;
- }
- float a = c_MinRoughness;
- float b = perceivedDiffuse * (1.0 - maxSpecular) / (1.0 - c_MinRoughness) + perceivedSpecular - 2.0 * c_MinRoughness;
- float c = c_MinRoughness - perceivedSpecular;
- float D = max(b * b - 4.0 * a * c, 0.0);
- return clamp((-b + sqrt(D)) / (2.0 * a), 0.0, 1.0);
-}
-
-void main()
-{
- float perceptualRoughness;
- float metallic;
- vec3 diffuseColor;
- vec4 baseColor;
-
- vec3 f0 = vec3(0.04);
-
- baseColor = materials[materialIdx].baseColorFactor;
-
- if (materials[materialIdx].workflow == PBR_WORKFLOW_METALLIC_ROUGHNESS) {
- perceptualRoughness = materials[materialIdx].roughnessFactor;
- metallic = materials[materialIdx].metallicFactor;
- // Roughness is stored in the 'g' channel, metallic is stored in the 'b' channel.
- // This layout intentionally reserves the 'r' channel for (optional) occlusion map data
- if ((materials[materialIdx].tex0 & MAP_METALROUGHNESS) == MAP_METALROUGHNESS){
- perceptualRoughness *= texture(physicalDescriptorMap, inUV0).g;
- metallic *= texture(physicalDescriptorMap, inUV0).b;
- }else if ((materials[materialIdx].tex1 & MAP_METALROUGHNESS) == MAP_METALROUGHNESS){
- perceptualRoughness *= texture(physicalDescriptorMap, inUV1).g;
- metallic *= texture(physicalDescriptorMap, inUV1).b;
- }
- perceptualRoughness = clamp(perceptualRoughness, c_MinRoughness, 1.0);
- metallic = clamp(metallic, 0.0, 1.0);
-
- // The albedo may be defined from a base texture or a flat color
- if ((materials[materialIdx].tex0 & MAP_COLOR) == MAP_COLOR)
- baseColor *= SRGBtoLINEAR(texture(colorMap, inUV0));
- else if ((materials[materialIdx].tex1 & MAP_COLOR) == MAP_COLOR)
- baseColor *= SRGBtoLINEAR(texture(colorMap, inUV1));
- }
-
- if (materials[materialIdx].alphaMask == 1.0f) {
- if (baseColor.a < materials[materialIdx].alphaMaskCutoff)
- discard;
- }
-
- if (materials[materialIdx].workflow == PBR_WORKFLOW_SPECULAR_GLOSINESS) {
- // Values from specular glossiness workflow are converted to metallic roughness
- if ((materials[materialIdx].tex0 & MAP_METALROUGHNESS) == MAP_METALROUGHNESS)
- perceptualRoughness = 1.0 - texture(physicalDescriptorMap, inUV0).a;
- else if ((materials[materialIdx].tex1 & MAP_METALROUGHNESS) == MAP_METALROUGHNESS)
- perceptualRoughness = 1.0 - texture(physicalDescriptorMap, inUV1).a;
- else
- perceptualRoughness = 0.0;
-
- const float epsilon = 1e-6;
-
- vec4 diffuse = SRGBtoLINEAR(texture(colorMap, inUV0));
- vec3 specular = SRGBtoLINEAR(texture(physicalDescriptorMap, inUV0)).rgb;
-
- float maxSpecular = max(max(specular.r, specular.g), specular.b);
-
- // Convert metallic value from specular glossiness inputs
- metallic = convertMetallic(diffuse.rgb, specular, maxSpecular);
-
- vec3 baseColorDiffusePart = diffuse.rgb * ((1.0 - maxSpecular) / (1 - c_MinRoughness) / max(1 - metallic, epsilon)) * materials[materialIdx].diffuseFactor.rgb;
- vec3 baseColorSpecularPart = specular - (vec3(c_MinRoughness) * (1 - metallic) * (1 / max(metallic, epsilon))) * materials[materialIdx].specularFactor.rgb;
- baseColor = vec4(mix(baseColorDiffusePart, baseColorSpecularPart, metallic * metallic), diffuse.a);
-
- }
-
- diffuseColor = baseColor.rgb * (vec3(1.0) - f0);
- diffuseColor *= 1.0 - metallic;
-
- float alphaRoughness = perceptualRoughness * perceptualRoughness;
-
- vec3 specularColor = mix(f0, baseColor.rgb, metallic);
-
- // Compute reflectance.
- float reflectance = max(max(specularColor.r, specularColor.g), specularColor.b);
-
- // For typical incident reflectance range (between 4% to 100%) set the grazing reflectance to 100% for typical fresnel effect.
- // For very low reflectance range on highly diffuse objects (below 4%), incrementally reduce grazing reflecance to 0%.
- float reflectance90 = clamp(reflectance * 25.0, 0.0, 1.0);
- vec3 specularEnvironmentR0 = specularColor.rgb;
- vec3 specularEnvironmentR90 = vec3(1.0) * reflectance90;
-
- vec3 n = getNormal();
- vec3 v = normalize(ubo.camPos.xyz - inWorldPos); // Vector from surface point to camera
- vec3 l = normalize(ubo.lightDir.xyz); // Vector from surface point to light
- vec3 h = normalize(l+v); // Half vector between both l and v
- vec3 reflection = -normalize(reflect(v, n));
- reflection.y *= -1.0f;
-
- float NdotL = clamp(dot(n, l), 0.001, 1.0);
- float NdotV = clamp(abs(dot(n, v)), 0.001, 1.0);
- float NdotH = clamp(dot(n, h), 0.0, 1.0);
- float LdotH = clamp(dot(l, h), 0.0, 1.0);
- float VdotH = clamp(dot(v, h), 0.0, 1.0);
-
- PBRInfo pbrInputs = PBRInfo(
- NdotL,
- NdotV,
- NdotH,
- LdotH,
- VdotH,
- perceptualRoughness,
- metallic,
- specularEnvironmentR0,
- specularEnvironmentR90,
- alphaRoughness,
- diffuseColor,
- specularColor
- );
-
- // Calculate the shading terms for the microfacet specular shading model
- vec3 F = specularReflection(pbrInputs);
- float G = geometricOcclusion(pbrInputs);
- float D = microfacetDistribution(pbrInputs);
-
- const vec3 u_LightColor = vec3(1.0);
-
- // Calculation of analytical lighting contribution
- vec3 diffuseContrib = (1.0 - F) * diffuse(pbrInputs);
- vec3 specContrib = F * G * D / (4.0 * NdotL * NdotV);
- // Obtain final intensity as reflectance (BRDF) scaled by the energy of the light (cosine law)
- vec3 color = NdotL * u_LightColor * (diffuseContrib + specContrib);
-
- // Calculate lighting contribution from image based lighting source (IBL)
- color += getIBLContribution(pbrInputs, n, reflection);
-
- const float u_OcclusionStrength = 1.0f;
- const float u_EmissiveFactor = 1.0f;
-
- // Apply optional PBR terms for additional (optional) shading
- if ((materials[materialIdx].tex0 & MAP_AO) == MAP_AO)
- color = mix(color, color * texture(aoMap, inUV0).r, u_OcclusionStrength);
- else if ((materials[materialIdx].tex1 & MAP_AO) == MAP_AO)
- color = mix(color, color * texture(aoMap, inUV1).r, u_OcclusionStrength);
-
- if ((materials[materialIdx].tex0 & MAP_EMISSIVE) == MAP_EMISSIVE)
- color += SRGBtoLINEAR(texture(emissiveMap, inUV0)).rgb * u_EmissiveFactor;
- else if ((materials[materialIdx].tex1 & MAP_EMISSIVE) == MAP_EMISSIVE)
- color += SRGBtoLINEAR(texture(emissiveMap, inUV1)).rgb * u_EmissiveFactor;
-
- outColor = vec4(color, baseColor.a);
-#if DEBUG
- // Shader inputs debug visualization
- if (ubo.debugViewInputs > 0.0) {
- int index = int(ubo.debugViewInputs);
- switch (index) {
- case 1:
- if ((materials[materialIdx].tex0 & MAP_COLOR) == MAP_COLOR)
- outColor.rgba = texture(colorMap, inUV0);
- else if ((materials[materialIdx].tex1 & MAP_COLOR) == MAP_COLOR)
- outColor.rgba = texture(colorMap, inUV1);
- else
- outColor.rgba = vec4(1.0f);
- break;
- case 2:
- if ((materials[materialIdx].tex0 & MAP_NORMAL) == MAP_NORMAL)
- outColor.rgb = texture(normalMap, inUV0).rgb;
- else if ((materials[materialIdx].tex1 & MAP_NORMAL) == MAP_NORMAL)
- outColor.rgb = texture(normalMap, inUV1).rgb;
- else
- outColor.rgb = normalize(inNormal);
- break;
- case 3:
- if ((materials[materialIdx].tex0 & MAP_AO) == MAP_AO)
- outColor.rgb = texture(aoMap, inUV0).rrr;
- else if ((materials[materialIdx].tex1 & MAP_AO) == MAP_AO)
- outColor.rgb = texture(aoMap, inUV1).rrr;
- else
- outColor.rgb = vec3(0);
- break;
- case 4:
- if ((materials[materialIdx].tex0 & MAP_EMISSIVE) == MAP_EMISSIVE)
- outColor.rgb = texture(emissiveMap, inUV0).rgb;
- else if ((materials[materialIdx].tex1 & MAP_EMISSIVE) == MAP_EMISSIVE)
- outColor.rgb = texture(emissiveMap, inUV1).rgb;
- else
- outColor.rgb = vec3(0);
- break;
- case 5:
- if ((materials[materialIdx].tex0 & MAP_METALROUGHNESS) == MAP_METALROUGHNESS)
- outColor.rgb = texture(physicalDescriptorMap, inUV0).bbb;
- else if ((materials[materialIdx].tex1 & MAP_METALROUGHNESS) == MAP_METALROUGHNESS)
- outColor.rgb = texture(physicalDescriptorMap, inUV1).bbb;
- else
- outColor.rgb = vec3(0);
- break;
- case 6:
- if ((materials[materialIdx].tex0 & MAP_METALROUGHNESS) == MAP_METALROUGHNESS)
- outColor.rgb = texture(physicalDescriptorMap, inUV0).ggg;
- else if ((materials[materialIdx].tex1 & MAP_METALROUGHNESS) == MAP_METALROUGHNESS)
- outColor.rgb = texture(physicalDescriptorMap, inUV1).ggg;
- else
- outColor.rgb = vec3(0);
- break;
- }
- outColor = SRGBtoLINEAR(outColor);
- }
-
- // PBR equation debug visualization
- // "none", "Diff (l,n)", "F (l,h)", "G (l,v,h)", "D (h)", "Specular"
- if (ubo.debugViewEquation > 0.0) {
- int index = int(ubo.debugViewEquation);
- switch (index) {
- case 1:
- outColor.rgb = diffuseContrib;
- break;
- case 2:
- outColor.rgb = F;
- break;
- case 3:
- outColor.rgb = vec3(G);
- break;
- case 4:
- outColor.rgb = vec3(D);
- break;
- case 5:
- outColor.rgb = specContrib;
- break;
- }
- }
-#endif
-}
diff --git a/samples/VkvgCrowTest/shaders/pbrtest.frag b/samples/VkvgCrowTest/shaders/pbrtest.frag
deleted file mode 100644
index be53b4c..0000000
--- a/samples/VkvgCrowTest/shaders/pbrtest.frag
+++ /dev/null
@@ -1,208 +0,0 @@
-#version 450
-
-#extension GL_ARB_separate_shader_objects : enable
-#extension GL_ARB_shading_language_420pack : enable
-
-layout (binding = 0) uniform UBO
-{
- mat4 projectionMatrix;
- mat4 viewMatrix;
- mat4 modelMatrix;
- vec4 lightPos;
- float gamma;
- float exposure;
-} ubo;
-
-layout (set = 0, binding = 1) uniform sampler2D samplerBRDFLUT;
-layout (set = 0, binding = 2) uniform samplerCube samplerIrradiance;
-layout (set = 0, binding = 3) uniform samplerCube prefilteredMap;
-
-layout (set = 1, binding = 0) uniform sampler2D samplerColor;
-layout (set = 1, binding = 1) uniform sampler2D samplerNormal;
-layout (set = 1, binding = 2) uniform sampler2D samplerOcclusion;
-layout (set = 1, binding = 3) uniform sampler2D samplerMetalRoughness;
-layout (set = 1, binding = 4) uniform sampler2D samplerEmissive;
-
-layout (location = 0) in vec2 inUV;
-layout (location = 1) in vec3 inN;
-layout (location = 2) in vec3 inV;
-layout (location = 3) in vec3 inWorldPos;
-
-layout (location = 0) out vec4 outFragColor;
-
-layout(push_constant) uniform PushConsts {
- layout(offset = 64)
- vec4 baseColorFactor;
- vec4 emissiveFactor;
- uint availableAttachments;
- uint alphaMode;
- float alphaCutoff;
- float metallicFactor;
- float roughnessFactor;
-} pc;
-
-const uint MAP_COLOR = 0x1;
-const uint MAP_NORMAL = 0x2;
-const uint MAP_AO = 0x4;
-const uint MAP_METAL = 0x8;
-const uint MAP_ROUGHNESS = 0x16;
-const uint MAP_METALROUGHNESS = 0x32;
-const uint MAP_EMISSIVE = 0x64;
-
-const float PI = 3.141592653589793;
-
-// From http://filmicgames.com/archives/75
-vec3 Uncharted2Tonemap(vec3 x)
-{
- float A = 0.15;
- float B = 0.50;
- float C = 0.10;
- float D = 0.20;
- float E = 0.02;
- float F = 0.30;
- return ((x*(A*x+C*B)+D*E)/(x*(A*x+B)+D*F))-E/F;
-}
-
-// Normal Distribution function --------------------------------------
-float D_GGX(float dotNH, float roughness)
-{
- float alpha = roughness * roughness;
- float alpha2 = alpha * alpha;
- float denom = dotNH * dotNH * (alpha2 - 1.0) + 1.0;
- return (alpha2)/(PI * denom*denom);
-}
-
-// Geometric Shadowing function --------------------------------------
-float G_SchlicksmithGGX(float dotNL, float dotNV, float roughness)
-{
- float r = (roughness + 1.0);
- float k = (r*r) / 8.0;
- float GL = dotNL / (dotNL * (1.0 - k) + k);
- float GV = dotNV / (dotNV * (1.0 - k) + k);
- return GL * GV;
-}
-
-// Fresnel function ----------------------------------------------------
-vec3 F_Schlick(float cosTheta, vec3 F0)
-{
- return F0 + (1.0 - F0) * pow(1.0 - cosTheta, 5.0);
-}
-vec3 F_SchlickR(float cosTheta, vec3 F0, float roughness)
-{
- return F0 + (max(vec3(1.0 - roughness), F0) - F0) * pow(1.0 - cosTheta, 5.0);
-}
-
-vec3 specularContribution(vec3 L, vec3 V, vec3 N, vec3 F0, float metallic, float roughness, vec3 albedo)
-{
- // Precalculate vectors and dot products
- vec3 H = normalize (V + L);
- float dotNH = clamp(dot(N, H), 0.0, 1.0);
- float dotNV = clamp(dot(N, V), 0.0, 1.0);
- float dotNL = clamp(dot(N, L), 0.0, 1.0);
-
- // Light color fixed
- vec3 lightColor = vec3(1.0);
-
- vec3 color = vec3(0.0);
-
- if (dotNL > 0.0) {
- // D = Normal distribution (Distribution of the microfacets)
- float D = D_GGX(dotNH, roughness);
- // G = Geometric shadowing term (Microfacets shadowing)
- float G = G_SchlicksmithGGX(dotNL, dotNV, roughness);
- // F = Fresnel factor (Reflectance depending on angle of incidence)
- vec3 F = F_Schlick(dotNV, F0);
- vec3 spec = D * F * G / (4.0 * dotNL * dotNV + 0.001);
- vec3 kD = (vec3(1.0) - F) * (1.0 - metallic);
- color += (kD * albedo / PI + spec) * dotNL;
- }
-
- return color;
-}
-
-// See http://www.thetenthplanet.de/archives/1180
-vec3 perturbNormal(vec3 inNormal, vec3 tangentNormal)
-{
-
-
- vec3 q1 = dFdx(inWorldPos);
- vec3 q2 = dFdy(inWorldPos);
- vec2 st1 = dFdx(inUV);
- vec2 st2 = dFdy(inUV);
-
- vec3 N = normalize(inNormal);
- vec3 T = normalize(q1 * st2.t - q2 * st1.t);
- vec3 B = -normalize(cross(N, T));
- mat3 TBN = mat3(T, B, N);
-
- return normalize(TBN * tangentNormal);
-}
-
-vec3 prefilteredReflection(vec3 R, float roughness)
-{
- const float MAX_REFLECTION_LOD = 9.0; // todo: param/const
- float lod = roughness * MAX_REFLECTION_LOD;
- float lodf = floor(lod);
- float lodc = ceil(lod);
- vec3 a = textureLod(prefilteredMap, R, lodf).rgb;
- vec3 b = textureLod(prefilteredMap, R, lodc).rgb;
- return mix(a, b, lod - lodf);
-}
-
-void main()
-{
- vec3 emit = vec3(0);
- vec4 base_color = pc.baseColorFactor;
- float rough = pc.roughnessFactor;
- float metallic = pc.metallicFactor;
-
- if ((pc.availableAttachments & MAP_COLOR) == MAP_COLOR)
- base_color *= texture(samplerColor, inUV);
- if ((pc.availableAttachments & MAP_METALROUGHNESS) == MAP_METALROUGHNESS) {
- rough *= clamp(texture(samplerMetalRoughness, inUV).g, 0.04, 1.0);
- metallic *= texture(samplerMetalRoughness, inUV).b;
- }
- if ((pc.availableAttachments & MAP_EMISSIVE) == MAP_EMISSIVE)
- emit = pc.emissiveFactor.rgb * texture(samplerEmissive, inUV).rgb;
-
-
- vec3 N = ((pc.availableAttachments & MAP_NORMAL) == MAP_NORMAL) ?
- perturbNormal(inN, texture(samplerNormal, inUV).xyz * 2.0 - 1.0) :
- normalize(inN);
- vec3 V = normalize(inV);
- vec3 R = -normalize(reflect(V, N));
-
- vec3 F0 = vec3(0.04);
- F0 = mix(F0, base_color.rgb, metallic);
- float alpha = pow(rough, 2.0);
-
- vec3 L = normalize(ubo.lightPos.xyz);
- vec3 Lo = specularContribution(L, V, N, F0, metallic, rough, base_color.rgb);
-
- vec2 brdf = texture(samplerBRDFLUT, vec2(max(dot(N, V), 0.0), rough)).rg;
- vec3 reflection = prefilteredReflection(R, rough).rgb;
- vec3 irradiance = texture(samplerIrradiance, N).rgb;
-
- // Diffuse based on irradiance
- vec3 diffuse = base_color.rgb;// * irradiance;
-
- vec3 F = F_SchlickR(max(dot(N, V), 0.0), F0, rough);
-
- vec3 specular = reflection * (F * brdf.x + brdf.y);
-
- // Ambient part
- vec3 kD = 1.0 - F;
- kD *= 1.0 - metallic;
-
- float ao = ((pc.availableAttachments & MAP_AO) == MAP_AO) ? texture(samplerOcclusion, inUV).r : 1.0f;
- vec3 ambient = (kD * diffuse + specular) * ao;
- vec3 color = ambient + Lo;
-
- // Tone mapping
- color = Uncharted2Tonemap(color * ubo.exposure);
- color = color * (1.0f / Uncharted2Tonemap(vec3(11.2f)));
- // Gamma correction
- color = pow(color, vec3(1.0f / ubo.gamma)) + emit;
-
- outFragColor = vec4(color, base_color.a);
-} \ No newline at end of file
diff --git a/samples/VkvgCrowTest/shaders/pbrtest.vert b/samples/VkvgCrowTest/shaders/pbrtest.vert
deleted file mode 100644
index 25907bb..0000000
--- a/samples/VkvgCrowTest/shaders/pbrtest.vert
+++ /dev/null
@@ -1,49 +0,0 @@
-#version 450
-
-#extension GL_ARB_separate_shader_objects : enable
-#extension GL_ARB_shading_language_420pack : enable
-
-layout (location = 0) in vec3 inPos;
-layout (location = 1) in vec3 inNormal;
-layout (location = 2) in vec2 inUV;
-
-layout (binding = 0) uniform UBO
-{
- mat4 projectionMatrix;
- mat4 viewMatrix;
- mat4 modelMatrix;
- vec4 lightPos;
- float gamma;
- float exposure;
-} ubo;
-
-layout (location = 0) out vec2 outUV;
-layout (location = 1) out vec3 outN;
-layout (location = 2) out vec3 outV;//ViewDir
-layout (location = 3) out vec3 outWorldPos;
-
-out gl_PerVertex
-{
- vec4 gl_Position;
-};
-
-layout(push_constant) uniform PushConsts {
- mat4 model;
-} pc;
-
-void main()
-{
- outUV = inUV;
-
- mat4 mod = ubo.modelMatrix * pc.model;
- vec4 pos = mod * vec4(inPos.xyz, 1.0);
-
- outN = normalize(transpose(inverse(mat3(mod))) * inNormal);
- //outN = normalize(mat3(mod)* inNormal);
-
- mat4 viewInv = inverse(ubo.viewMatrix);
- //outV = -(ubo.viewMatrix * pos).xyz;
- outV = normalize(vec3(viewInv * vec4(0.0, 0.0, 0.0, 1.0) - pos));
- outWorldPos = pos.xyz;
- gl_Position = ubo.projectionMatrix * ubo.viewMatrix * pos;
-}
diff --git a/samples/VkvgCrowTest/shaders/prefilterenvmap.frag b/samples/VkvgCrowTest/shaders/prefilterenvmap.frag
deleted file mode 100644
index ae1212e..0000000
--- a/samples/VkvgCrowTest/shaders/prefilterenvmap.frag
+++ /dev/null
@@ -1,105 +0,0 @@
-#version 450
-
-layout (location = 0) in vec3 inPos;
-layout (location = 0) out vec4 outColor;
-
-layout (binding = 0) uniform samplerCube samplerEnv;
-
-layout(push_constant) uniform PushConsts {
- layout (offset = 64) float roughness;
- layout (offset = 68) uint numSamples;
-} consts;
-
-const float PI = 3.1415926536;
-
-// Based omn http://byteblacksmith.com/improvements-to-the-canonical-one-liner-glsl-rand-for-opengl-es-2-0/
-float random(vec2 co)
-{
- float a = 12.9898;
- float b = 78.233;
- float c = 43758.5453;
- float dt= dot(co.xy ,vec2(a,b));
- float sn= mod(dt,3.14);
- return fract(sin(sn) * c);
-}
-
-vec2 hammersley2d(uint i, uint N)
-{
- // Radical inverse based on http://holger.dammertz.org/stuff/notes_HammersleyOnHemisphere.html
- uint bits = (i << 16u) | (i >> 16u);
- bits = ((bits & 0x55555555u) << 1u) | ((bits & 0xAAAAAAAAu) >> 1u);
- bits = ((bits & 0x33333333u) << 2u) | ((bits & 0xCCCCCCCCu) >> 2u);
- bits = ((bits & 0x0F0F0F0Fu) << 4u) | ((bits & 0xF0F0F0F0u) >> 4u);
- bits = ((bits & 0x00FF00FFu) << 8u) | ((bits & 0xFF00FF00u) >> 8u);
- float rdi = float(bits) * 2.3283064365386963e-10;
- return vec2(float(i) /float(N), rdi);
-}
-
-// Based on http://blog.selfshadow.com/publications/s2013-shading-course/karis/s2013_pbs_epic_slides.pdf
-vec3 importanceSample_GGX(vec2 Xi, float roughness, vec3 normal)
-{
- // Maps a 2D point to a hemisphere with spread based on roughness
- float alpha = roughness * roughness;
- float phi = 2.0 * PI * Xi.x + random(normal.xz) * 0.1;
- float cosTheta = sqrt((1.0 - Xi.y) / (1.0 + (alpha*alpha - 1.0) * Xi.y));
- float sinTheta = sqrt(1.0 - cosTheta * cosTheta);
- vec3 H = vec3(sinTheta * cos(phi), sinTheta * sin(phi), cosTheta);
-
- // Tangent space
- vec3 up = abs(normal.z) < 0.999 ? vec3(0.0, 0.0, 1.0) : vec3(1.0, 0.0, 0.0);
- vec3 tangentX = normalize(cross(up, normal));
- vec3 tangentY = normalize(cross(normal, tangentX));
-
- // Convert to world Space
- return normalize(tangentX * H.x + tangentY * H.y + normal * H.z);
-}
-
-// Normal Distribution function
-float D_GGX(float dotNH, float roughness)
-{
- float alpha = roughness * roughness;
- float alpha2 = alpha * alpha;
- float denom = dotNH * dotNH * (alpha2 - 1.0) + 1.0;
- return (alpha2)/(PI * denom*denom);
-}
-
-vec3 prefilterEnvMap(vec3 R, float roughness)
-{
- vec3 N = R;
- vec3 V = R;
- vec3 color = vec3(0.0);
- float totalWeight = 0.0;
- float envMapDim = float(textureSize(samplerEnv, 0).s);
- for(uint i = 0u; i < consts.numSamples; i++) {
- vec2 Xi = hammersley2d(i, consts.numSamples);
- vec3 H = importanceSample_GGX(Xi, roughness, N);
- vec3 L = 2.0 * dot(V, H) * H - V;
- float dotNL = clamp(dot(N, L), 0.0, 1.0);
- if(dotNL > 0.0) {
- // Filtering based on https://placeholderart.wordpress.com/2015/07/28/implementation-notes-runtime-environment-map-filtering-for-image-based-lighting/
-
- float dotNH = clamp(dot(N, H), 0.0, 1.0);
- float dotVH = clamp(dot(V, H), 0.0, 1.0);
-
- // Probability Distribution Function
- float pdf = D_GGX(dotNH, roughness) * dotNH / (4.0 * dotVH) + 0.0001;
- // Slid angle of current smple
- float omegaS = 1.0 / (float(consts.numSamples) * pdf);
- // Solid angle of 1 pixel across all cube faces
- float omegaP = 4.0 * PI / (6.0 * envMapDim * envMapDim);
- // Biased (+1.0) mip level for better result
- float mipLevel = roughness == 0.0 ? 0.0 : max(0.5 * log2(omegaS / omegaP) + 1.0, 0.0f);
- color += textureLod(samplerEnv, L, mipLevel).rgb * dotNL;
- totalWeight += dotNL;
-
- }
- }
- return (color / totalWeight);
-}
-
-
-void main()
-{
- vec3 N = normalize(inPos);
- outColor = vec4(prefilterEnvMap(N, consts.roughness), 1.0);
-}
diff --git a/samples/VkvgCrowTest/shaders/simpletexture.frag b/samples/VkvgCrowTest/shaders/simpletexture.frag
deleted file mode 100644
index d5bcf79..0000000
--- a/samples/VkvgCrowTest/shaders/simpletexture.frag
+++ /dev/null
@@ -1,15 +0,0 @@
-#version 450
-
-#extension GL_ARB_separate_shader_objects : enable
-#extension GL_ARB_shading_language_420pack : enable
-
-layout (set = 0, binding = 5) uniform sampler2D samplerColor;
-
-layout (location = 0) in vec2 inUV;
-
-layout (location = 0) out vec4 outFragColor;
-
-void main()
-{
- outFragColor = texture(samplerColor, inUV);
-}
diff --git a/samples/VkvgCrowTest/shaders/skybox.frag b/samples/VkvgCrowTest/shaders/skybox.frag
deleted file mode 100644
index 57a7dbe..0000000
--- a/samples/VkvgCrowTest/shaders/skybox.frag
+++ /dev/null
@@ -1,60 +0,0 @@
-#version 450
-
-layout (binding = 2) uniform samplerCube samplerEnv;
-
-layout (set = 0, location = 0) in vec3 inUVW;
-
-layout (set = 0, location = 0) out vec4 outColor;
-
-layout (set = 0, binding = 0) uniform UBO {
- mat4 projection;
- mat4 model;
- mat4 view;
- vec3 camPos;
- vec4 lightDir;
- float exposure;
- float gamma;
-} ubo;
-
-// From http://filmicworlds.com/blog/filmic-tonemapping-operators/
-vec3 Uncharted2Tonemap(vec3 color)
-{
- float A = 0.15;
- float B = 0.50;
- float C = 0.10;
- float D = 0.20;
- float E = 0.02;
- float F = 0.30;
- float W = 11.2;
- return ((color*(A*color+C*B)+D*E)/(color*(A*color+B)+D*F))-E/F;
-}
-
-vec4 tonemap(vec4 color)
-{
- vec3 outcol = Uncharted2Tonemap(color.rgb * ubo.exposure);
- outcol = outcol * (1.0f / Uncharted2Tonemap(vec3(11.2f)));
- return vec4(pow(outcol, vec3(1.0f / ubo.gamma)), color.a);
-}
-
-#define MANUAL_SRGB 1
-
-vec4 SRGBtoLINEAR(vec4 srgbIn)
-{
- #ifdef MANUAL_SRGB
- #ifdef SRGB_FAST_APPROXIMATION
- vec3 linOut = pow(srgbIn.xyz,vec3(2.2));
- #else //SRGB_FAST_APPROXIMATION
- vec3 bLess = step(vec3(0.04045),srgbIn.xyz);
- vec3 linOut = mix( srgbIn.xyz/vec3(12.92), pow((srgbIn.xyz+vec3(0.055))/vec3(1.055),vec3(2.4)), bLess );
- #endif //SRGB_FAST_APPROXIMATION
- return vec4(linOut,srgbIn.w);;
- #else //MANUAL_SRGB
- return srgbIn;
- #endif //MANUAL_SRGB
-}
-
-void main()
-{
- vec3 color = SRGBtoLINEAR(tonemap(textureLod(samplerEnv, inUVW, 1.5))).rgb;
- outColor = vec4(color * 1.0, 1.0);
-} \ No newline at end of file
diff --git a/samples/VkvgCrowTest/shaders/skybox.vert b/samples/VkvgCrowTest/shaders/skybox.vert
deleted file mode 100644
index 22e285e..0000000
--- a/samples/VkvgCrowTest/shaders/skybox.vert
+++ /dev/null
@@ -1,27 +0,0 @@
-#version 450
-
-#extension GL_ARB_separate_shader_objects : enable
-#extension GL_ARB_shading_language_420pack : enable
-
-layout (location = 0) in vec3 inPos;
-
-layout (binding = 0) uniform UBO
-{
- mat4 projection;
- mat4 model;
- mat4 view;
-} ubo;
-
-layout (location = 0) out vec3 outUVW;
-
-out gl_PerVertex
-{
- vec4 gl_Position;
-};
-
-void main()
-{
- outUVW = inPos;
- outUVW.y = -outUVW.y;
- gl_Position = ubo.projection * mat4(mat3(ubo.view)) * vec4(inPos, 1.0);
-}
diff --git a/samples/VkvgCrowTest/shaders/skybox_sw.frag b/samples/VkvgCrowTest/shaders/skybox_sw.frag
deleted file mode 100644
index a861ec4..0000000
--- a/samples/VkvgCrowTest/shaders/skybox_sw.frag
+++ /dev/null
@@ -1,55 +0,0 @@
-#version 450
-
-layout (binding = 2) uniform samplerCube samplerEnv;
-
-layout (location = 0) in vec3 inUVW;
-layout (location = 0) out vec4 outColor;
-
-layout (set = 0, binding = 1) uniform UBOParams {
- vec4 _pad0;
- float exposure;
- float gamma;
-} uboParams;
-
-// From http://filmicworlds.com/blog/filmic-tonemapping-operators/
-vec3 Uncharted2Tonemap(vec3 color)
-{
- float A = 0.15;
- float B = 0.50;
- float C = 0.10;
- float D = 0.20;
- float E = 0.02;
- float F = 0.30;
- float W = 11.2;
- return ((color*(A*color+C*B)+D*E)/(color*(A*color+B)+D*F))-E/F;
-}
-
-vec4 tonemap(vec4 color)
-{
- vec3 outcol = Uncharted2Tonemap(color.rgb * uboParams.exposure);
- outcol = outcol * (1.0f / Uncharted2Tonemap(vec3(11.2f)));
- return vec4(pow(outcol, vec3(1.0f / uboParams.gamma)), color.a);
-}
-
-#define MANUAL_SRGB 1
-
-vec4 SRGBtoLINEAR(vec4 srgbIn)
-{
- #ifdef MANUAL_SRGB
- #ifdef SRGB_FAST_APPROXIMATION
- vec3 linOut = pow(srgbIn.xyz,vec3(2.2));
- #else //SRGB_FAST_APPROXIMATION
- vec3 bLess = step(vec3(0.04045),srgbIn.xyz);
- vec3 linOut = mix( srgbIn.xyz/vec3(12.92), pow((srgbIn.xyz+vec3(0.055))/vec3(1.055),vec3(2.4)), bLess );
- #endif //SRGB_FAST_APPROXIMATION
- return vec4(linOut,srgbIn.w);;
- #else //MANUAL_SRGB
- return srgbIn;
- #endif //MANUAL_SRGB
-}
-
-void main()
-{
- vec3 color = SRGBtoLINEAR(tonemap(textureLod(samplerEnv, inUVW, 1.5))).rgb;
- outColor = vec4(color * 1.0, 1.0);
-} \ No newline at end of file
diff --git a/samples/VkvgCrowTest/shaders/skybox_sw.vert b/samples/VkvgCrowTest/shaders/skybox_sw.vert
deleted file mode 100644
index c51c4b5..0000000
--- a/samples/VkvgCrowTest/shaders/skybox_sw.vert
+++ /dev/null
@@ -1,28 +0,0 @@
-#version 450
-
-#extension GL_ARB_separate_shader_objects : enable
-#extension GL_ARB_shading_language_420pack : enable
-
-layout (location = 0) in vec3 inPos;
-layout (location = 1) in vec3 inNormal;
-layout (location = 2) in vec2 inUV;
-
-layout (binding = 0) uniform UBO
-{
- mat4 projection;
- mat4 pad;
- mat4 model;
-} ubo;
-
-layout (location = 0) out vec3 outUVW;
-
-out gl_PerVertex
-{
- vec4 gl_Position;
-};
-
-void main()
-{
- outUVW = inPos;
- gl_Position = ubo.projection * ubo.model * vec4(inPos.xyz, 1.0);
-}
diff --git a/samples/VkvgCrowTest/shaders/ui.frag b/samples/VkvgCrowTest/shaders/ui.frag
deleted file mode 100644
index e0d7995..0000000
--- a/samples/VkvgCrowTest/shaders/ui.frag
+++ /dev/null
@@ -1,13 +0,0 @@
-#version 450
-
-layout (binding = 0) uniform sampler2D fontSampler;
-
-layout (location = 0) in vec2 inUV;
-layout (location = 1) in vec4 inColor;
-
-layout (location = 0) out vec4 outColor;
-
-void main()
-{
- outColor = inColor * texture(fontSampler, inUV);
-} \ No newline at end of file
diff --git a/samples/VkvgCrowTest/shaders/ui.vert b/samples/VkvgCrowTest/shaders/ui.vert
deleted file mode 100644
index ddb63a4..0000000
--- a/samples/VkvgCrowTest/shaders/ui.vert
+++ /dev/null
@@ -1,25 +0,0 @@
-#version 450
-
-layout (location = 0) in vec2 inPos;
-layout (location = 1) in vec2 inUV;
-layout (location = 2) in vec4 inColor;
-
-layout (push_constant) uniform PushConstants {
- vec2 scale;
- vec2 translate;
-} pushConstants;
-
-layout (location = 0) out vec2 outUV;
-layout (location = 1) out vec4 outColor;
-
-out gl_PerVertex
-{
- vec4 gl_Position;
-};
-
-void main()
-{
- outUV = inUV;
- outColor = inColor;
- gl_Position = vec4(inPos * pushConstants.scale + pushConstants.translate, 0.0, 1.0);
-} \ No newline at end of file
diff --git a/samples/VkvgCrowTest/ui/fps.crow b/samples/VkvgCrowTest/ui/fps.crow
deleted file mode 100755
index bf73460..0000000
--- a/samples/VkvgCrowTest/ui/fps.crow
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0"?>
-<Window Left="10" Top="100" Width="40%" Height="80%" CornerRadius="10">
- <VerticalStack Spacing="1" Margin="10" CacheEnabled="true">
- <HorizontalStack Height="Fit">
- <Label Text="Fps:" Width="80"/>
- <Label Text="{fps}" Width="Stretched" TextAlignment="Center"/>
- </HorizontalStack>
- <HorizontalStack Height="Fit" >
- <Label Text="Exposure:" Width="80"/>
- <Slider Height="10" Value="{²Exposure}" Maximum="10.0" SmallIncrement="0.1" LargeIncrement="1.0"/>
- <Label Text="{Exposure}" Width="40" TextAlignment="Right" />
- </HorizontalStack>
- <HorizontalStack Height="Fit">
- <Label Text="Gamma:" Width="80" />
- <Slider Height="10" Value="{²Gamma}" Maximum="10.0" SmallIncrement="0.1" LargeIncrement="1.0"/>
- <Label Text="{Gamma}" Width="40" TextAlignment="Right" />
- </HorizontalStack>
- <Spinner Value="{²Gamma}" Maximum="10.0" SmallIncrement="0.1" LargeIncrement="1.0" Width="60"/>
- <Image Margin="1" Path="/mnt/devel/gts/vk.net/crow/Images/crow0.svg" Width="100" Height="100" Background="White" MouseEnter="{Background=Blue}" MouseLeave="{Background=White}"/>
- <Image Margin="1" Path="/mnt/devel/gts/vk.net/crow/Images/crow.png" Width="128" Height="128" Background="White" MouseEnter="{Background=Blue}" MouseLeave="{Background=White}"/>
- <Image Margin="1" Path="/mnt/devel/gts/vk.net/crow/Images/crow.png" Width="200" Height="200" Background="White" MouseEnter="{Background=Blue}" MouseLeave="{Background=White}"/>
- <Expandable>
- <Widget Height="100" Width="100" MouseEnter="{Background=Red}" MouseLeave="{Background=Transparent}"/>
- </Expandable>
- <Popper>
- <Image Margin="1" Path="/mnt/devel/gts/vk.net/crow/Images/crow.png" Width="64" Height="64" MouseEnter="{Background=Red}" MouseLeave="{Background=Transparent}"/>
- </Popper>
-<!-- <ColorPicker Width="300" Height="300"/>-->
- </VerticalStack>
-</Window>
-
diff --git a/samples/VkvgCrowTest/ui/perfMeasures.crow b/samples/VkvgCrowTest/ui/perfMeasures.crow
deleted file mode 100644
index 14295f0..0000000
--- a/samples/VkvgCrowTest/ui/perfMeasures.crow
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0"?>
-<Window Focusable="true" Caption="Measures" Width="30%" Height="300" MinimumSize="100,100">
- <ListBox Data="{PerfMeasures}"
- ItemTemplate="#vkvgCrowTest.perfMsr.crow"/>
-</Window>
diff --git a/samples/VkvgCrowTest/ui/perfMsr.crow b/samples/VkvgCrowTest/ui/perfMsr.crow
deleted file mode 100755
index c579c4e..0000000
--- a/samples/VkvgCrowTest/ui/perfMsr.crow
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0"?>
-
- <VerticalStack Spacing="1" Height="Fit" Width="Stretched">
- <HorizontalStack Background="DarkSlateGrey">
- <Label Text="{Name}" Width="Stretched" Font="doid bold, 10" Margin="2"/>
- <Button Caption="Reset" MouseClick="onResetClick" Height="Fit"/>
- </HorizontalStack>
- <HorizontalStack>
- <Label Text="Current:" Style="FpsLabel"/>
- <Label Text="{current}" Style="FpsDisp"/>
- </HorizontalStack>
- <HorizontalStack>
- <Label Text="Minimum:" Style="FpsLabel"/>
- <Label Text="{minimum}" Style="FpsDisp"/>
- </HorizontalStack>
- <HorizontalStack>
- <Label Text="Mean:" Style="FpsLabel"/>
- <Label Text="{mean}" Style="FpsDisp"/>
- </HorizontalStack>
- <HorizontalStack>
- <Label Text="Maximum:" Style="FpsLabel"/>
- <Label Text="{maximum}" Style="FpsDisp"/>
- </HorizontalStack>
-<!-- <Border Foreground="White" Width="Stretched" Height="60">
- <Trend Background="Black" NewValue="{current}" Minimum="0" Maximum="10"/>
- </Border>
- <HorizontalStack>
- <Label Text="Total:" Style="FpsLabel"/>
- <Label Text="{total}" Style="FpsDisp"/>
- </HorizontalStack>
- <HorizontalStack>
- <Label Text="Cpt:" Style="FpsLabel"/>
- <Label Text="{cptMeasures}" Style="FpsDisp"/>
- </HorizontalStack>-->
- </VerticalStack>
-
diff --git a/samples/compute/compute.csproj b/samples/compute/compute.csproj
index 59a4e1b..e8f1276 100644
--- a/samples/compute/compute.csproj
+++ b/samples/compute/compute.csproj
@@ -1,65 +1,42 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project Sdk="Microsoft.NET.Sdk">
+ <Import Project="$(SolutionDir)netfx.props" />
<PropertyGroup>
- <ProjectGuid>{1F05E74F-AEE8-481C-8FDF-4566654897BE}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AssemblyName>compute</AssemblyName>
- <TargetFrameworkVersion>v4.7.1</TargetFrameworkVersion>
- <OutputPath>$(SolutionDir)build\$(Configuration)\samples\compute</OutputPath>
- <IntermediateOutputPath>$(SolutionDir)build\obj\$(Configuration)</IntermediateOutputPath>
- <StartupObject>delaunay.Program</StartupObject>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- <DebugSymbols>true</DebugSymbols>
- <DebugType>full</DebugType>
- <Optimize>false</Optimize>
- <DefineConstants>DEBUG;</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
+ <TargetFrameworks>net471;netstandard2.0</TargetFrameworks>
+ <OutputPath>$(SolutionDir)build\$(Configuration)\</OutputPath>
+ <OutputType>Exe</OutputType>
+ <RepositoryUrl>https://github.com/jpbruyere/vk.net</RepositoryUrl>
+ <License>https://opensource.org/licenses/MIT</License>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <EnableDefaultCompileItems>false</EnableDefaultCompileItems>
+ </PropertyGroup>
+
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <DefineConstants>TRACE;DEBUG;NETSTANDARD;NETSTANDARD2_0</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- <Optimize>true</Optimize>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>
- <ItemGroup>
- <Datas Include="..\data\**\*.*">
- <Link>data\%(RecursiveDir)%(Filename)%(Extension)</Link>
- </Datas>
- <GLSLShader Include="shaders\**\*.frag;shaders\**\*.vert;shaders\**\*.comp" />
- <Compile Include="*.cs" />
- </ItemGroup>
- <ItemGroup>
- <Reference Include="System.Numerics" />
+
+ <ItemGroup Condition="$(TargetFramework.StartsWith('net4'))">
<Reference Include="System" />
- <Reference Include="System.Numerics.Vectors">
- <HintPath>..\..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll</HintPath>
- </Reference>
- <Reference Include="mscorlib" />
- <Reference Include="System.Buffers">
- <HintPath>..\..\packages\System.Buffers.4.5.0\lib\netstandard2.0\System.Buffers.dll</HintPath>
- </Reference>
- <Reference Include="System.Runtime.CompilerServices.Unsafe">
- <HintPath>..\..\packages\System.Runtime.CompilerServices.Unsafe.4.5.2\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
- </Reference>
- <Reference Include="System.Memory">
- <HintPath>..\..\packages\System.Memory.4.5.2\lib\netstandard2.0\System.Memory.dll</HintPath>
- </Reference>
- <Reference Include="VK">
- <HintPath>..\..\packages\Vulkan.0.1.2.6\lib\netstandard2.0\VK.dll</HintPath>
- </Reference>
- </ItemGroup>
+ </ItemGroup>
+
<ItemGroup>
- <None Include="packages.config" />
- </ItemGroup>
+ <PackageReference Include="Vulkan" Version="0.1.2.8-beta" />
+ </ItemGroup>
+
<ItemGroup>
<ProjectReference Include="..\..\vke\CVKL.csproj">
- <Project>{32B7E80D-BEA7-4811-B82D-CC2533069F0A}</Project>
- <Name>CVKL</Name>
</ProjectReference>
- </ItemGroup>
- <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+ </ItemGroup>
+
+ <ItemGroup>
+ <GLSLShader Include="shaders\**\*.frag;shaders\**\*.vert;shaders\**\*.comp" />
+ <None Remove="shaders\**\*.frag;shaders\**\*.vert" />
+ <Compile Include="delaunay.cs" />
+ <Datas Include="..\data\**\*.*">
+ <Link>data\%(RecursiveDir)%(Filename)%(Extension)</Link>
+ </Datas>
+ </ItemGroup>
+
<Import Project="$(SolutionDir)spirv.targets" />
-</Project>
+</Project> \ No newline at end of file
diff --git a/samples/compute/packages.config b/samples/compute/packages.config
deleted file mode 100644
index 0f7f451..0000000
--- a/samples/compute/packages.config
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<packages>
- <package id="System.Buffers" version="4.5.0" targetFramework="net471" />
- <package id="System.Memory" version="4.5.2" targetFramework="net471" />
- <package id="System.Numerics.Vectors" version="4.5.0" targetFramework="net471" />
- <package id="System.Runtime.CompilerServices.Unsafe" version="4.5.2" targetFramework="net471" />
- <package id="Vulkan" version="0.1.2.6" targetFramework="net471" />
-</packages> \ No newline at end of file
diff --git a/samples/deferred/EnvironmentPipeline.cs b/samples/deferred/EnvironmentPipeline.cs
index 1d18151..cdb1230 100644
--- a/samples/deferred/EnvironmentPipeline.cs
+++ b/samples/deferred/EnvironmentPipeline.cs
@@ -58,11 +58,11 @@ namespace CVKL {
#region skybox
public List<string> cubemapPathes = new List<string> () {
- "../data/textures/papermill.ktx",
- "../data/textures/cubemap_yokohama_bc3_unorm.ktx",
- "../data/textures/gcanyon_cube.ktx",
- "../data/textures/pisa_cube.ktx",
- "../data/textures/uffizi_cube.ktx",
+ "../../../samples/data/textures/papermill.ktx",
+ "../../../samples/data/textures/cubemap_yokohama_bc3_unorm.ktx",
+ "../../../samples/data/textures/gcanyon_cube.ktx",
+ "../../../samples/data/textures/pisa_cube.ktx",
+ "../../../samples/data/textures/uffizi_cube.ktx",
};
static float[] box_vertices = {
1.0f, 1.0f,-1.0f, // +X side
diff --git a/samples/deferred/deferred.csproj b/samples/deferred/deferred.csproj
index 1515582..4632cc1 100644
--- a/samples/deferred/deferred.csproj
+++ b/samples/deferred/deferred.csproj
@@ -1,74 +1,46 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project Sdk="Microsoft.NET.Sdk">
+ <Import Project="$(SolutionDir)netfx.props" />
<PropertyGroup>
- <ProjectGuid>{1F05E74F-AEE8-481C-8FDF-89D81TTT30BE}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AssemblyName>deferred</AssemblyName>
- <TargetFrameworkVersion>v4.7.1</TargetFrameworkVersion>
- <OutputPath>$(SolutionDir)build\$(Configuration)\samples\deffered</OutputPath>
- <IntermediateOutputPath>$(SolutionDir)build\obj\$(Configuration)</IntermediateOutputPath>
- <StartupObject>deferred.Program</StartupObject>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- <DebugSymbols>true</DebugSymbols>
- <DebugType>full</DebugType>
- <Optimize>false</Optimize>
- <DefineConstants>DEBUG;_WITH_VKVG;_WITH_SHADOWS</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
+ <TargetFrameworks>net471;netstandard2.0</TargetFrameworks>
+ <OutputPath>$(SolutionDir)build\$(Configuration)\</OutputPath>
+ <OutputType>Exe</OutputType>
+ <RepositoryUrl>https://github.com/jpbruyere/vk.net</RepositoryUrl>
+ <License>https://opensource.org/licenses/MIT</License>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <EnableDefaultCompileItems>false</EnableDefaultCompileItems>
+ <EnableDefaultNoneItems>false</EnableDefaultNoneItems>
+ </PropertyGroup>
+
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <DefineConstants>WITH_SHADOWS;_WITH_VKVG;TRACE;DEBUG;NETSTANDARD;NETSTANDARD2_0</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- <Optimize>true</Optimize>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <DefineConstants>WITH_SHADOWS;_WITH_VKVG</DefineConstants>
</PropertyGroup>
+
+ <ItemGroup Condition="$(TargetFramework.StartsWith('net4'))">
+ <Reference Include="System" />
+ </ItemGroup>
+
+ <ItemGroup>
+ <PackageReference Include="Vulkan" Version="0.1.2.8-beta" />
+ </ItemGroup>
+
<ItemGroup>
+ <ProjectReference Include="..\..\vke\CVKL.csproj" />
+ <ProjectReference Include="..\..\crow\Crow\Crow.csproj" />
+ </ItemGroup>
+
+ <ItemGroup>
<GLSLShader Include="shaders\**\*.frag;shaders\**\*.vert;shaders\**\*.comp;shaders\**\*.geom" />
<Datas Include="..\data\**\*.*">
<Link>data\%(RecursiveDir)%(Filename)%(Extension)</Link>
</Datas>
<Compile Include="main.cs;EnvironmentPipeline.cs;deferredPbrRenderer.cs;shadowMapRenderer.cs" />
- </ItemGroup>
- <ItemGroup>
- <Reference Include="System.Numerics" />
- <Reference Include="System" />
- <Reference Include="System.Numerics.Vectors">
- <HintPath>..\..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll</HintPath>
- </Reference>
- <Reference Include="mscorlib" />
- <Reference Include="Newtonsoft.Json">
- <HintPath>..\..\packages\Newtonsoft.Json.12.0.2\lib\net45\Newtonsoft.Json.dll</HintPath>
- </Reference>
- <Reference Include="glTFLoader">
- <HintPath>..\..\packages\glTF2Loader.1.1.3-alpha\lib\net35\glTFLoader.dll</HintPath>
- </Reference>
- <Reference Include="System.Buffers">
- <HintPath>..\..\packages\System.Buffers.4.5.0\lib\netstandard2.0\System.Buffers.dll</HintPath>
- </Reference>
- <Reference Include="System.Runtime.CompilerServices.Unsafe">
- <HintPath>..\..\packages\System.Runtime.CompilerServices.Unsafe.4.5.2\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
- </Reference>
- <Reference Include="System.Memory">
- <HintPath>..\..\packages\System.Memory.4.5.2\lib\netstandard2.0\System.Memory.dll</HintPath>
- </Reference>
- <Reference Include="vkvg.net">
- <HintPath>..\..\packages\vkvg.net.0.2.1.1-beta\lib\netstandard2.0\vkvg.net.dll</HintPath>
- </Reference>
- <Reference Include="VK">
- <HintPath>..\..\packages\Vulkan.0.1.2.6\lib\netstandard2.0\VK.dll</HintPath>
- </Reference>
- </ItemGroup>
- <ItemGroup>
- <None Include="packages.config" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\..\vke\CVKL.csproj">
- <Project>{32B7E80D-BEA7-4811-B82D-CC2533069F0A}</Project>
- <Name>CVKL</Name>
- </ProjectReference>
- </ItemGroup>
- <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+ <EmbeddedResource Include="ui\**\*.*">
+ <LogicalName>deferred.%(Filename)%(Extension)</LogicalName>
+ </EmbeddedResource>
+ </ItemGroup>
+
<Import Project="$(SolutionDir)spirv.targets" />
-</Project>
+</Project> \ No newline at end of file
diff --git a/samples/deferred/deferredPbrRenderer.cs b/samples/deferred/deferredPbrRenderer.cs
index e6dafd8..5dc9885 100644
--- a/samples/deferred/deferredPbrRenderer.cs
+++ b/samples/deferred/deferredPbrRenderer.cs
@@ -314,10 +314,8 @@ namespace deferred {
public void buildCommandBuffers (CommandBuffer[] cmds) {
for (int i = 0; i < swapChain.ImageCount; ++i) {
cmds[i].Start ();
-#if WITH_VKVG
uiImage.SetLayout (cmds[i], VkImageAspectFlags.Color, VkImageLayout.Undefined, VkImageLayout.ShaderReadOnlyOptimal,
VkPipelineStageFlags.TopOfPipe, VkPipelineStageFlags.FragmentShader);
-#endif
recordDraw (cmds[i], frameBuffers[i]);
cmds[i].End ();
}
diff --git a/samples/deferred/main.cs b/samples/deferred/main.cs
index b8cac2e..7493c0c 100644
--- a/samples/deferred/main.cs
+++ b/samples/deferred/main.cs
@@ -4,14 +4,146 @@ using System.Runtime.InteropServices;
using Glfw;
using VK;
using CVKL;
+using System.Threading;
+using System.Collections.Generic;
+using System.Linq;
namespace deferred {
- class Program : VkWindow{
+ class Program : VkWindow, Crow.IValueChange {
static void Main (string[] args) {
using (Program vke = new Program ()) {
vke.Run ();
}
}
+ bool isRunning;
+
+ protected override void render () {
+ int idx = swapChain.GetNextImage ();
+
+ lock (crow.RenderMutex) {
+ if (idx < 0) {
+ OnResize ();
+ return;
+ }
+
+ presentQueue.Submit (cmds[idx], swapChain.presentComplete, drawComplete[idx]);
+ presentQueue.Present (swapChain, drawComplete[idx]);
+ presentQueue.WaitIdle ();
+ }
+ }
+
+ #region crow
+ vkvg.Device vkvgDev;
+ Image uiImage;
+
+ public Crow.Command CMDViewScenes, CMDViewEditor, CMDViewDebug, CMDViewMaterials;
+ void init_crow_commands () {
+ CMDViewScenes = new Crow.Command (new Action (() => loadWindow ("#deferred.main.crow", this))) { Caption = "Lighting", Icon = new Crow.SvgPicture ("#deferred.crow.svg"), CanExecute = true };
+ CMDViewEditor = new Crow.Command (new Action (() => loadWindow ("#deferred.scenes.crow", this))) { Caption = "Scenes", Icon = new Crow.SvgPicture ("#deferred.crow.svg"), CanExecute = true };
+ CMDViewDebug = new Crow.Command (new Action (() => loadWindow ("#deferred.debug.crow", this))) { Caption = "Debug", Icon = new Crow.SvgPicture ("#deferred.crow.svg"), CanExecute = true };
+ CMDViewMaterials = new Crow.Command (new Action (() => loadWindow ("#deferred.materials.crow", this))) { Caption = "Materials", Icon = new Crow.SvgPicture ("#deferred.crow.svg"), CanExecute = true };
+ }
+
+ void onApplyMaterialChanges (object sender, Crow.MouseButtonEventArgs e) {
+ Crow.ListBox lb = ((sender as Crow.Widget).Parent as Crow.Group).Children[0] as Crow.ListBox;
+ renderer.model.materialUBO.Update (renderer.model.materials);
+ }
+
+
+ void initUISurface () {
+ lock (crow.UpdateMutex) {
+ uiImage?.Dispose ();
+ uiImage = new CVKL.Image (dev, new VkImage ((ulong)crow.surf.VkImage.ToInt64 ()), VkFormat.B8g8r8a8Unorm,
+ VkImageUsageFlags.Sampled, swapChain.Width, swapChain.Height);
+ uiImage.SetName ("uiImage");
+ uiImage.CreateView (VkImageViewType.ImageView2D, VkImageAspectFlags.Color);
+ uiImage.CreateSampler (VkFilter.Nearest, VkFilter.Nearest, VkSamplerMipmapMode.Nearest, VkSamplerAddressMode.ClampToBorder);
+ uiImage.Descriptor.imageLayout = VkImageLayout.ShaderReadOnlyOptimal;
+ }
+ }
+
+
+ void crow_thread_func () {
+ vkvgDev = new vkvg.Device (instance.Handle, phy.Handle, dev.VkDev.Handle, presentQueue.qFamIndex,
+ vkvg.SampleCount.Sample_4, presentQueue.index);
+
+ crow = new Crow.Interface (vkvgDev, 800, 600);
+
+ isRunning = true;
+ //int frameCount = 0;
+
+ while (isRunning) {
+ crow.Update ();
+
+ /*if (frameCount++ > 100) {
+ for (int i = 0; i < crow.PerfMeasures.Count; i++)
+ crow.PerfMeasures[i].NotifyChanges ();
+ frameCount = 0;
+ }*/
+
+ Thread.Sleep (2);
+ }
+
+ dev.WaitIdle ();
+ crow.Dispose ();
+ vkvgDev.Dispose ();
+ }
+
+ #region IValueChange implementation
+ public event EventHandler<Crow.ValueChangeEventArgs> ValueChanged;
+ public virtual void NotifyValueChanged (string MemberName, object _value) {
+ if (ValueChanged != null)
+ ValueChanged.Invoke (this, new Crow.ValueChangeEventArgs (MemberName, _value));
+ }
+ #endregion
+
+ public DeferredPbrRenderer.DebugView CurrentDebugView {
+ get { return renderer.currentDebugView; }
+ set {
+ if (value == renderer.currentDebugView)
+ return;
+ lock(crow.UpdateMutex)
+ renderer.currentDebugView = value;
+ rebuildBuffers = true;
+ NotifyValueChanged ("CurrentDebugView", renderer.currentDebugView);
+ }
+ }
+
+ public float Gamma {
+ get { return renderer.matrices.gamma; }
+ set {
+ if (value == renderer.matrices.gamma)
+ return;
+ renderer.matrices.gamma = value;
+ NotifyValueChanged ("Gamma", value);
+ updateViewRequested = true;
+ }
+ }
+ public float Exposure {
+ get { return renderer.matrices.exposure; }
+ set {
+ if (value == renderer.matrices.exposure)
+ return;
+ renderer.matrices.exposure = value;
+ NotifyValueChanged ("Exposure", value);
+ updateViewRequested = true;
+ }
+ }
+ public float LightStrength {
+ get { return renderer.lights[renderer.lightNumDebug].color.X; }
+ set {
+ if (value == renderer.lights[renderer.lightNumDebug].color.X)
+ return;
+ renderer.lights[renderer.lightNumDebug].color = new Vector4(value);
+ NotifyValueChanged ("LightStrength", value);
+ renderer.uboLights.Update (renderer.lights);
+ }
+ }
+ public List<DeferredPbrRenderer.Light> Lights => renderer.lights.ToList ();
+ public List<Model.Scene> Scenes => renderer.model.Scenes;
+ public PbrModel.PbrMaterial[] Materials => renderer.model.materials;
+ Crow.Interface crow;
+ #endregion
protected override void configureEnabledFeatures (VkPhysicalDeviceFeatures available_features, ref VkPhysicalDeviceFeatures features) {
base.configureEnabledFeatures (available_features, ref features);
@@ -30,8 +162,8 @@ namespace deferred {
}
string[] modelPathes = {
- "../data/models/DamagedHelmet/glTF/DamagedHelmet.gltf",
- "../data/models/shadow.glb",
+ "../../../samples/data/models/DamagedHelmet/glTF/DamagedHelmet.gltf",
+ "../../../samples/data/models/shadow.glb",
//"/mnt/devel/vulkan/glTF-Sample-Models-master/2.0/Avocado/glTF/Avocado.gltf",
//"/mnt/devel/vulkan/glTF-Sample-Models-master/2.0/BarramundiFish/glTF/BarramundiFish.gltf",
//"/mnt/devel/vulkan/glTF-Sample-Models-master/2.0/BoomBoxWithAxes/glTF/BoomBoxWithAxes.gltf",
@@ -45,7 +177,7 @@ namespace deferred {
//"/mnt/devel/vulkan/glTF-Sample-Models-master/2.0/GearboxAssy/glTF/GearboxAssy.gltf",
//"/mnt/devel/vulkan/glTF-Sample-Models-master/2.0/Lantern/glTF/Lantern.gltf",
//"/mnt/devel/vulkan/glTF-Sample-Models-master/2.0/SciFiHelmet/glTF/SciFiHelmet.gltf",
- //"/mnt/devel/vulkan/glTF-Sample-Models-master/2.0/Sponza/glTF/Sponza.gltf",
+ "/mnt/devel/vulkan/glTF-Sample-Models-master/2.0/Sponza/glTF/Sponza.gltf",
//"/mnt/devel/vkChess/data/chess.gltf",
//"/home/jp/gltf/camaro/scene.gltf",
//"/home/jp/gltf/chessold/scene.gltf",
@@ -60,70 +192,8 @@ namespace deferred {
Queue transferQ;
DeferredPbrRenderer renderer;
- #if WITH_VKVG
- vkvg.Device vkvgDev;
- vkvg.Surface vkvgSurf;
- Image uiImage;
-
- void initUISurface () {
- uiImage?.Dispose ();
- vkvgSurf?.Dispose ();
- vkvgSurf = new vkvg.Surface (vkvgDev, (int)swapChain.Width, (int)swapChain.Height);
- uiImage = new Image (dev, new VkImage ((ulong)vkvgSurf.VkImage.ToInt64 ()), VkFormat.B8g8r8a8Unorm,
- VkImageUsageFlags.ColorAttachment, (uint)vkvgSurf.Width, (uint)vkvgSurf.Height);
- uiImage.CreateView (VkImageViewType.ImageView2D, VkImageAspectFlags.Color);
- uiImage.CreateSampler (VkFilter.Nearest, VkFilter.Nearest, VkSamplerMipmapMode.Nearest, VkSamplerAddressMode.ClampToBorder);
- uiImage.Descriptor.imageLayout = VkImageLayout.ShaderReadOnlyOptimal;
- uiImage.SetName ("uiImage");
- }
-
- void vkvgDraw () {
- using (vkvg.Context ctx = new vkvg.Context (vkvgSurf)) {
- ctx.Operator = vkvg.Operator.Clear;
- ctx.Paint ();
- ctx.Operator = vkvg.Operator.Over;
-
- ctx.LineWidth = 1;
- ctx.SetSource (0.1, 0.1, 0.1, 0.8);
- ctx.Rectangle (5.5, 5.5, 320, 300);
- ctx.FillPreserve ();
- ctx.Flush ();
- ctx.SetSource (0.8, 0.8, 0.8);
- ctx.Stroke ();
-
- ctx.FontFace = "mono";
- ctx.FontSize = 8;
- int x = 16;
- int y = 40, dy = 16;
- ctx.MoveTo (x, y);
- ctx.ShowText (string.Format ($"fps: {fps,5} "));
- ctx.MoveTo (x + 200, y - 0.5);
- ctx.Rectangle (x + 200, y - 8.5, 0.1 * fps, 10);
- ctx.SetSource (0.1, 0.9, 0.1);
- ctx.Fill ();
- ctx.SetSource (0.8, 0.8, 0.8);
- y += dy;
- ctx.MoveTo (x, y);
- ctx.ShowText (string.Format ($"Exposure:{renderer.matrices.exposure,5} "));
- y += dy;
- ctx.MoveTo (x, y);
- ctx.ShowText (string.Format ($"Gamma: {renderer.matrices.gamma,5} "));
- y += dy;
- ctx.MoveTo (x, y);
- ctx.ShowText (string.Format ($"Light pos: {renderer.lights[0].position.ToString ()} "));
- y += dy;
- ctx.MoveTo (x, y);
- ctx.ShowText (string.Format ($"{"Debug draw (numpad 0->9)",-30} : {renderer.currentDebugView.ToString ()} "));
- y += dy;
- ctx.MoveTo (x, y);
- ctx.ShowText (string.Format ($"{"Debug Prefil Face: (f)",-30} : {renderer.envCube.debugFace.ToString ()} "));
- y += dy;
- ctx.MoveTo (x, y);
- ctx.ShowText (string.Format ($"{"Debug Prefil Mip: (m)",-30} : {renderer.envCube.debugMip.ToString ()} "));
+#if WITH_VKVG
- //drawResources (ctx);
- }
- }
void drawResources (vkvg.Context ctx) {
ResourceManager rm = dev.resourceManager;
@@ -185,22 +255,48 @@ namespace deferred {
y += memPoolHeight;
}
}
- #endif
+#endif
+
Program () : base(true) {
camera = new Camera (Utils.DegreesToRadians (45f), 1f, 0.1f, 16f);
camera.SetPosition (0, 0, 2);
- #if WITH_VKVG
- vkvgDev = new vkvg.Device (instance.Handle, phy.Handle, dev.VkDev.Handle, presentQueue.qFamIndex,
- vkvg.SampleCount.Sample_4, presentQueue.index);
+ Thread crowThread = new Thread (crow_thread_func);
+ crowThread.IsBackground = true;
+ crowThread.Start ();
+
+ while (crow == null)
+ Thread.Sleep (5);
initUISurface ();
- #endif
renderer = new DeferredPbrRenderer (dev, swapChain, presentQueue, camera.NearPlane, camera.FarPlane);
renderer.LoadModel (transferQ, modelPathes[curModelIndex]);
camera.Model = Matrix4x4.CreateScale (1f / Math.Max (Math.Max (renderer.modelAABB.Width, renderer.modelAABB.Height), renderer.modelAABB.Depth));
+
+ init_crow_commands ();
+
+ crow.Load ("#deferred.menu.crow").DataSource = this;
+ //crow.Load ("#deferred.testImage.crow").DataSource = this;
+
+ //crow.LoadIMLFragment (@"<Image Width='32' Height='32' Margin='2' HorizontalAlignment='Left' VerticalAlignment='Top' Path='/mnt/devel/gts/vkvg/build/data/tiger.svg' Background='Grey' MouseEnter='{Background=Blue}' MouseLeave='{Background=White}'/>");
+ }
+
+ void loadWindow (string path, object dataSource = null) {
+ try {
+ Crow.Widget w = crow.FindByName (path);
+ if (w != null) {
+ crow.PutOnTop (w);
+ return;
+ }
+ w = crow.Load (path);
+ w.Name = path;
+ w.DataSource = dataSource;
+
+ } catch (Exception ex) {
+ System.Diagnostics.Debug.WriteLine (ex.ToString ());
+ }
}
void buildCommandBuffers () {
@@ -218,6 +314,7 @@ namespace deferred {
#endif
}
+ int frameCount = 0;
public override void Update () {
if (reloadModel) {
renderer.LoadModel (transferQ, modelPathes[curModelIndex]);
@@ -234,23 +331,58 @@ namespace deferred {
buildCommandBuffers ();
rebuildBuffers = false;
}
-#if WITH_VKVG
- vkvgDraw ();
-#endif
+
+ if (++frameCount > 20) {
+ NotifyValueChanged ("fps", fps);
+ frameCount = 0;
+ }
}
protected override void OnResize () {
-#if WITH_VKVG
+ crow.ProcessResize (new Crow.Rectangle (0, 0, (int)swapChain.Width, (int)swapChain.Height));
+
initUISurface ();
renderer.WriteUiImgDesciptor (uiImage);
-#endif
UpdateView ();
renderer.Resize ();
buildCommandBuffers ();
}
-#region Mouse and keyboard
+ #region Mouse and keyboard
+ protected override void onScroll (double xOffset, double yOffset) {
+ if (KeyModifiers.HasFlag (Modifier.Shift))
+ crow.ProcessMouseWheelChanged ((float)xOffset);
+ else
+ crow.ProcessMouseWheelChanged ((float)yOffset);
+ }
+ protected override void onMouseMove (double xPos, double yPos) {
+ if (crow.ProcessMouseMove ((int)xPos, (int)yPos))
+ return;
+
+ double diffX = lastMouseX - xPos;
+ double diffY = lastMouseY - yPos;
+ if (MouseButton[0]) {
+ camera.Rotate ((float)-diffX, (float)-diffY);
+ } else if (MouseButton[1]) {
+ camera.SetZoom ((float)diffY);
+ } else
+ return;
+
+ updateViewRequested = true;
+ }
+ protected override void onMouseButtonDown (Glfw.MouseButton button) {
+ if (crow.ProcessMouseButtonDown ((Crow.MouseButton)button))
+ return;
+ base.onMouseButtonDown (button);
+ }
+ protected override void onMouseButtonUp (Glfw.MouseButton button) {
+ if (crow.ProcessMouseButtonUp ((Crow.MouseButton)button))
+ return;
+ base.onMouseButtonUp (button);
+ }
protected override void onKeyDown (Key key, int scanCode, Modifier modifiers) {
+ if (crow.ProcessKeyDown ((Crow.Key)key))
+ return;
switch (key) {
case Key.F:
if (modifiers.HasFlag (Modifier.Shift)) {
@@ -387,17 +519,25 @@ namespace deferred {
}
updateViewRequested = true;
}
-#endregion
+ protected override void onKeyUp (Key key, int scanCode, Modifier modifiers) {
+ if (crow.ProcessKeyUp ((Crow.Key)key))
+ return;
+ }
+ protected override void onChar (CodePoint cp) {
+ if (crow.ProcessKeyPress (cp.ToChar ()))
+ return;
+ }
+ #endregion
protected override void Dispose (bool disposing) {
if (disposing) {
if (!isDisposed) {
+ isRunning = false;
+ Thread.Sleep (2);
+
renderer.Dispose ();
-#if WITH_VKVG
+
uiImage?.Dispose ();
- vkvgSurf?.Dispose ();
- vkvgDev.Dispose ();
-#endif
}
}
diff --git a/samples/deferred/packages.config b/samples/deferred/packages.config
index cb60b70..0e162ba 100644
--- a/samples/deferred/packages.config
+++ b/samples/deferred/packages.config
@@ -6,6 +6,5 @@
<package id="System.Memory" version="4.5.2" targetFramework="net471" />
<package id="System.Numerics.Vectors" version="4.5.0" targetFramework="net471" />
<package id="System.Runtime.CompilerServices.Unsafe" version="4.5.2" targetFramework="net471" />
- <package id="vkvg.net" version="0.2.1.1-beta" targetFramework="net471" />
<package id="Vulkan" version="0.1.2.6" targetFramework="net471" />
</packages> \ No newline at end of file
diff --git a/samples/deferred/shaders/tone_mapping.frag b/samples/deferred/shaders/tone_mapping.frag
index 482ffba..b4d1756 100644
--- a/samples/deferred/shaders/tone_mapping.frag
+++ b/samples/deferred/shaders/tone_mapping.frag
@@ -2,7 +2,7 @@
#extension GL_ARB_separate_shader_objects : enable
#extension GL_ARB_shading_language_420pack : enable
-#define WITH_VKVG 0
+#define WITH_VKVG 1
layout (set = 0, binding = 0) uniform UBO {
mat4 projection;
diff --git a/samples/deferred/ui/debug.crow b/samples/deferred/ui/debug.crow
new file mode 100644
index 0000000..4d78bf1
--- /dev/null
+++ b/samples/deferred/ui/debug.crow
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<Window Caption="Debug" Icon="#deferred.crow.svg" Left="10" Top="100" Width="40%" Height="50%">
+ <VerticalStack Spacing="1" Margin="10" CacheEnabled="true">
+ <HorizontalStack Height="Fit">
+ <Label Text="Fps:" Width="80"/>
+ <Label Text="{fps}" Width="Stretched" TextAlignment="Center"/>
+ </HorizontalStack>
+ <Expandable Caption="Debug Views">
+ <EnumSelector Left="20" EnumValue="{²CurrentDebugView}" Width="50%"/>
+ </Expandable>
+ </VerticalStack>
+</Window>
+
diff --git a/samples/deferred/ui/deferred.style b/samples/deferred/ui/deferred.style
new file mode 100644
index 0000000..c21ffb6
--- /dev/null
+++ b/samples/deferred/ui/deferred.style
@@ -0,0 +1,61 @@
+icon {
+ Width="14";
+ Height="14";
+}
+MemberViewLabel {
+ Margin="1";
+ Height="Fit";
+ Width="50%";
+ Background="White";
+}
+MemberViewHStack {
+ Focusable="true";
+ Height="Fit";
+ Spacing="1";
+ MouseEnter="{Background=SteelBlue}";
+ MouseLeave="{Background=Transparent}";
+}
+
+IcoBut {
+ Template = "#Crow.Coding.ui.IcoBut.template";
+ MinimumSize = "10,10";
+ Width = "8";
+ Height = "14";
+ Background = "White";
+}
+
+WinSchema {
+ Template="#Crow.Coding.ui.DockWindows.WinSchemaItem.template";
+ Focusable = "true";
+ MinimumSize="150,50";
+ Width = "Fit";
+ Height = "Fit";
+}
+TabItem {
+ AllowDrag="false";
+ Background="Jet";
+}
+TreeItemBorder {
+ CornerRadius="2";
+ Margin="0";
+ Focusable="true";
+ Height="Fit";
+ Width="Stretched";
+ Foreground="Transparent";
+ MouseEnter="{Foreground=DimGrey}";
+ MouseLeave="{Foreground=Transparent}";
+}
+TreeIcon {
+ Margin="0";
+ Width="14";
+ Height="14";
+}
+NormalizedFloat {
+ Minimum="0.0";
+ Maximum="1.0";
+ SmallIncrement="0.01";
+ LargeIncrement="0.1";
+ Decimals="2";
+ Width="60";
+ Foreground="Black";
+}
diff --git a/samples/deferred/ui/images/crow.svg b/samples/deferred/ui/images/crow.svg
new file mode 100644
index 0000000..c621130
--- /dev/null
+++ b/samples/deferred/ui/images/crow.svg
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ height="35.987217"
+ width="51.116982"
+ version="1.1"
+ id="svg2">
+ <metadata
+ id="metadata8">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <defs
+ id="defs6" />
+ <path
+ id="path2818"
+ d="m 36.232985,35.977162 c -0.02345,-0.0094 -0.04263,-0.04436 -0.04263,-0.07772 0,-0.03337 -0.04543,-0.117846 -0.100965,-0.187724 -0.05553,-0.06987 -0.10986,-0.152552 -0.120738,-0.183728 -0.04888,-0.140096 -0.547064,-0.441575 -0.740404,-0.448061 -0.01333,-6.73e-4 -0.0417,0.06441 -0.06301,0.144127 -0.0213,0.07971 -0.05448,0.164118 -0.0737,0.187567 -0.06807,0.08303 -0.2351,0.04596 -0.448164,-0.09947 -0.114492,-0.07815 -0.231452,-0.140793 -0.259915,-0.139198 -0.103032,0.0057 -0.22753,-0.0647 -0.284401,-0.160973 -0.105659,-0.178872 -0.451937,-0.41031 -0.613884,-0.41031 -0.11287,0 -0.378547,-0.121442 -0.488394,-0.223239 -0.06283,-0.05824 -0.129597,-0.08369 -0.219515,-0.08369 -0.191898,0 -0.291236,-0.05025 -0.332315,-0.168082 -0.02007,-0.05761 -0.05795,-0.104746 -0.08415,-0.104746 -0.02621,0 -0.07371,-0.02879 -0.105549,-0.06398 -0.03185,-0.03519 -0.108169,-0.07213 -0.169604,-0.08211 -0.219849,-0.03568 -0.937873,-0.414299 -0.993727,-0.524009 -0.01875,-0.03685 -0.103161,-0.143806 -0.187567,-0.237705 -0.189643,-0.210956 -0.537045,-0.371869 -0.741262,-0.343338 -0.710425,0.09925 -0.737631,0.100685 -1.030367,0.05449 -0.337983,-0.05334 -0.630446,-0.05889 -1.115893,-0.02117 -0.331487,0.02576 -0.347801,0.02387 -0.368967,-0.04283 -0.01219,-0.03838 0.0026,-0.154623 0.03266,-0.258318 0.03015,-0.103694 0.04455,-0.205124 0.03202,-0.225402 -0.04471,-0.07234 -0.314032,-0.0065 -0.532991,0.130268 -0.165667,0.103489 -0.230973,0.169125 -0.288563,0.290041 -0.07126,0.149603 -0.19268,0.232754 -0.339892,0.232754 -0.09327,0 -0.01149,-0.448641 0.108895,-0.597398 0.0301,-0.03719 0.045,-0.04843 0.03312,-0.02499 -0.01262,0.02492 3.4e-5,0.04263 0.03051,0.04263 0.03229,0 0.04463,-0.01945 0.03247,-0.05115 -0.0108,-0.02813 -0.0027,-0.05115 0.01813,-0.05115 0.02077,0 0.03776,-0.02034 0.03776,-0.04521 0,-0.05853 0.151433,-0.201223 0.181571,-0.171088 0.01268,0.01268 0.02305,0.003 0.02305,-0.02158 0,-0.05501 0.190827,-0.241992 0.218611,-0.214209 0.01107,0.01107 0.02012,0.0013 0.02012,-0.02169 0,-0.02299 0.01358,-0.03341 0.03018,-0.02314 0.0166,0.01026 0.07415,0.0046 0.127887,-0.01261 0.05374,-0.01721 0.185946,-0.03746 0.293797,-0.04502 0.154262,-0.01082 0.196092,-0.0032 0.196092,0.03533 0,0.03062 0.02017,0.04134 0.05362,0.02851 0.02949,-0.01132 0.08321,-0.0048 0.119365,0.01461 0.04469,0.02391 0.06573,0.02399 0.06573,0 0,-0.0546 0.166343,-0.02716 0.19016,0.03136 0.01696,0.04168 0.02726,0.03685 0.05065,-0.02383 0.03017,-0.0782 0.05209,-0.07969 0.33327,-0.02256 0.04625,0.0094 0.07104,0.0023 0.05918,-0.01685 -0.01918,-0.03103 0.105189,-0.09308 0.158609,-0.07913 0.01351,0.0035 0.0409,-0.02412 0.06088,-0.06145 0.01998,-0.03733 0.06279,-0.06787 0.09513,-0.06787 0.03235,0 0.07872,-0.0319 0.103074,-0.07089 0.03874,-0.06204 0.03597,-0.07306 -0.02225,-0.08828 -0.04068,-0.01065 -0.07465,-0.05808 -0.08746,-0.122132 -0.01151,-0.0576 -0.03098,-0.0947 -0.04325,-0.08243 -0.02243,0.02243 -0.09396,-0.07925 -0.134223,-0.190818 -0.01192,-0.03303 -0.05709,-0.06895 -0.100386,-0.07981 -0.0433,-0.01087 -0.08702,-0.04139 -0.09717,-0.06783 -0.01015,-0.02644 -0.03811,-0.04866 -0.06215,-0.04937 -0.02403,-6.72e-4 -0.09734,-0.06977 -0.162897,-0.153463 -0.06556,-0.08369 -0.141017,-0.152171 -0.167679,-0.152171 -0.02665,0 -0.03909,-0.0094 -0.02762,-0.02084 0.02949,-0.02949 -0.161533,-0.183774 -0.227545,-0.183774 -0.03567,0 -0.05475,-0.02971 -0.05475,-0.08526 0,-0.04689 -0.01667,-0.08526 -0.03705,-0.08526 -0.02039,0 -0.132932,-0.09206 -0.250118,-0.204591 -0.117184,-0.112527 -0.225744,-0.193097 -0.241239,-0.179042 -0.0155,0.01404 -0.01813,0.008 -0.0059,-0.01351 0.02148,-0.0376 -0.06692,-0.09775 -0.12476,-0.08487 -0.01546,0.0034 -0.01943,-0.0078 -0.0088,-0.02496 0.01062,-0.01717 -0.02277,-0.05853 -0.0742,-0.09191 -0.05142,-0.03337 -0.113546,-0.08877 -0.138053,-0.123093 -0.02451,-0.03432 -0.06672,-0.0624 -0.09378,-0.0624 -0.02707,0 -0.04922,-0.01355 -0.04922,-0.03012 0,-0.0438 -0.778285,-0.624964 -0.930964,-0.695162 -0.0729,-0.03352 -0.164401,-0.05081 -0.209278,-0.03955 -0.05655,0.01418 -0.102151,-0.0031 -0.15683,-0.05944 -0.0424,-0.0437 -0.06447,-0.05739 -0.04905,-0.03043 0.01542,0.02698 -0.03574,-0.0023 -0.113694,-0.06486 -0.140423,-0.112848 -0.199258,-0.210672 -0.162485,-0.270173 0.01048,-0.01696 -0.0034,-0.03946 -0.03092,-0.05001 -0.03157,-0.0121 -0.04839,-0.06147 -0.04566,-0.133995 0.0046,-0.123415 -0.115972,-0.333547 -0.242202,-0.421962 -0.03969,-0.0278 -0.06324,-0.06494 -0.05237,-0.08255 0.01089,-0.01761 -0.0042,-0.04121 -0.03354,-0.05247 -0.02932,-0.01125 -0.05331,-0.04833 -0.05331,-0.0824 0,-0.03407 -0.03837,-0.107533 -0.08526,-0.163263 -0.07704,-0.09156 -0.08519,-0.130424 -0.08459,-0.403332 0.0011,-0.467434 0.102818,-0.951299 0.346875,-1.649081 0.133708,-0.382291 0.234679,-0.776483 0.280602,-1.095504 0.01999,-0.138863 0.01188,-0.170521 -0.06808,-0.265547 -0.09126,-0.108463 -0.277674,-0.207699 -0.390138,-0.207699 -0.03326,0 -0.167911,-0.04572 -0.299229,-0.101598 -0.334854,-0.142493 -0.698295,-0.199641 -1.524701,-0.239741 -0.393891,-0.01911 -0.856189,-0.05756 -1.027322,-0.08543 -0.171134,-0.02796 -0.404168,-0.05076 -0.517855,-0.05076 -0.113686,0 -0.249901,-0.01718 -0.302703,-0.03821 -0.0528,-0.02101 -0.22913,-0.0397 -0.391836,-0.04152 -0.16271,-0.0018 -0.288412,-0.01532 -0.27934,-0.03 0.0091,-0.01468 -0.01127,-0.02647 -0.0452,-0.02621 -0.03393,2.24e-4 -0.315468,-0.0481 -0.625641,-0.107494 l -0.563945,-0.107977 -0.33979,0.10758 c -0.186882,0.05917 -0.349511,0.107539 -0.361388,0.107494 -0.04086,-1.36e-4 -0.05638,-0.13324 -0.01741,-0.149221 0.02145,-0.0088 -0.0023,-0.01721 -0.05276,-0.01869 -0.05047,-0.0015 -0.100161,0.01089 -0.110412,0.02747 -0.03208,0.05191 -0.458126,0.118498 -0.505769,0.07904 -0.02811,-0.02328 -0.09385,-0.0242 -0.195783,-0.0028 -0.08441,0.01777 -0.280073,0.0495 -0.434816,0.07054 -0.154743,0.02104 -0.281352,0.05283 -0.281352,0.07068 0,0.01786 -0.02302,0.02362 -0.05115,0.01281 -0.02814,-0.0108 -0.05123,-0.0086 -0.05131,0.0049 0,0.01348 -0.05615,0.02741 -0.124603,0.03097 -0.06845,0.0036 -0.1336,0.01891 -0.144786,0.0341 -0.02606,0.03542 -0.139983,0.04146 -0.796184,0.04221 -0.297591,4.49e-4 -0.537126,0.01439 -0.537126,0.0315 0,0.01698 -0.134282,0.03143 -0.298403,0.0321 -0.369505,0.0015 -0.539084,0.01992 -0.844055,0.09164 -0.131298,0.03088 -0.373004,0.06513 -0.537126,0.0761 -0.164122,0.01097 -0.298404,0.03207 -0.298404,0.04687 0,0.01481 -0.05371,0.0182 -0.119361,0.0076 -0.08039,-0.01304 -0.119361,-0.0061 -0.119361,0.02122 0,0.02232 -0.01443,0.03166 -0.03208,0.02075 -0.03408,-0.02106 -0.587009,0.111706 -0.615884,0.147893 -0.0094,0.01176 -0.04775,0.02527 -0.08526,0.03003 -0.319552,0.04061 -0.388045,0.05571 -0.371812,0.08197 0.01026,0.01661 -0.02466,0.02725 -0.07759,0.02367 -0.107275,-0.0073 -0.331986,0.114563 -0.292219,0.15843 0.014,0.01544 0.0067,0.01729 -0.01626,0.0041 -0.03986,-0.0229 -0.410541,0.170723 -0.776766,0.405746 -0.09378,0.06018 -0.400713,0.229852 -0.682064,0.377042 -0.8431486,0.441091 -1.5106691,0.786933 -1.9438848,1.00712 -0.331279,0.168378 -0.7656083,0.411685 -1.2106655,0.678201 -0.1208071,0.07234 -0.7235464,0.348753 -1.0060453,0.461358 -0.1688108,0.06729 -0.3529682,0.143067 -0.4092389,0.168389 -0.3782305,0.170213 -0.4488005,0.204855 -0.4944967,0.24276 -0.1118065,0.09275 -0.7795227,0.48269 -0.974639,0.569184 -0.1140235,0.05055 -0.3212008,0.108223 -0.4603938,0.12817 -0.2794774,0.04005 -0.6793677,0.03386 -0.6793677,-0.01051 0,-0.01562 -0.014897,-0.01916 -0.033103,-0.0079 -0.018206,0.01125 -0.04289,-0.01852 -0.054852,-0.0662 -0.011962,-0.04766 -0.028767,-0.08665 -0.037344,-0.08665 -0.027842,0 -0.1640932,0.0777 -0.1816285,0.103583 -0.024028,0.03546 -0.2704515,0.135139 -0.3340901,0.135139 -0.040327,0 -0.033244,-0.02142 0.029742,-0.08996 l 0.082677,-0.08996 -0.1534646,0.02493 c -0.084405,0.01371 -0.2762361,0.02752 -0.4262904,0.0307 -0.1617809,0.0034 -0.3133657,0.02625 -0.3724277,0.0561 -0.076685,0.03876 -0.1028397,0.04063 -0.113677,0.0081 -0.00774,-0.02322 -0.050258,-0.04223 -0.09448,-0.04223 -0.044221,0 -0.090781,-0.0168 -0.1034652,-0.03732 -0.012684,-0.02052 -0.05963,-0.03032 -0.1043224,-0.02178 -0.044694,0.0085 -0.0812605,0.0028 -0.0812605,-0.01277 0,-0.01557 -0.0226251,-0.01963 -0.0502787,-0.009 -0.0276536,0.01062 -0.0747891,-0.0052 -0.10474605,-0.03517 -0.0299569,-0.02996 -0.0836695,-0.05446 -0.11936206,-0.05446 -0.0755134,0 -0.16300798,-0.155442 -0.14396948,-0.255775 0.0216458,-0.114071 0.0858903,-0.269677 0.13551736,-0.328235 0.0258287,-0.03048 0.0424846,-0.07582 0.0370134,-0.100762 -0.005471,-0.02494 0.0126179,-0.04604 0.0401989,-0.04689 0.0275816,-8.75e-4 0.0695576,-0.03992 0.0932812,-0.08681 0.0237239,-0.04689 0.0433594,-0.07187 0.0436366,-0.05551 2.7333e-4,0.01638 0.0233532,0.0108 0.0512819,-0.01239 0.0279281,-0.02318 0.0409047,-0.05812 0.0288344,-0.07765 -0.0120695,-0.01954 -0.00597,-0.02563 0.013563,-0.01355 0.03826,0.02364 0.1334119,-0.06902 0.102556,-0.09987 -0.010234,-0.01023 -0.081291,0.01337 -0.15790503,0.05246 -0.19132318,0.0976 -0.53029094,0.131726 -0.60948002,0.06135 -0.040574,-0.03605 -0.10602968,-0.04828 -0.20760549,-0.03876 L 0,26.723956 0.13129745,26.603285 c 0.20194096,-0.185598 1.15569925,-0.834706 1.22646285,-0.834706 0.017944,0 1.0011722,-0.593762 1.1596288,-0.700289 l 0.1062908,-0.07146 -0.097498,-0.04316 c -0.075194,-0.03329 -0.09082,-0.05618 -0.068306,-0.100101 0.016056,-0.03132 0.038207,-0.148677 0.049225,-0.2608 0.013936,-0.141813 0.038705,-0.216631 0.081377,-0.245814 0.1348325,-0.09221 0.317117,-0.268214 0.317117,-0.306188 0,-0.04333 -0.2144179,0.01817 -0.8473768,0.243035 -0.1940842,0.06895 -0.3609084,0.117337 -0.3707213,0.107524 -0.030038,-0.03004 0.1889381,-0.28351 0.3932649,-0.455219 0.1064018,-0.08942 0.2148835,-0.182797 0.2410706,-0.207519 0.134978,-0.127412 0.6824316,-0.46318 1.0116807,-0.620491 0.2054297,-0.09815 0.4118743,-0.205241 0.4587663,-0.237974 0.046892,-0.03274 0.2270451,-0.133333 0.40034,-0.223546 0.1732947,-0.09022 0.3093674,-0.169742 0.3023838,-0.176726 -0.00698,-0.007 -0.1087422,0.01965 -0.226129,0.0592 -0.1501313,0.05057 -0.2241353,0.06119 -0.249524,0.0358 -0.025388,-0.02539 -0.024637,-0.03609 0.00253,-0.03609 0.021244,0 0.048451,-0.03096 0.060459,-0.06879 0.019185,-0.06045 0.1680893,-0.221549 0.4635947,-0.501568 0.048755,-0.0462 0.1428871,-0.117089 0.2091823,-0.157532 0.2161395,-0.131856 0.3951126,-0.257621 0.4169899,-0.29302 0.022754,-0.03682 1.0610754,-0.562441 1.1881729,-0.601483 0.04125,-0.01267 0.1911105,-0.08059 0.3330257,-0.150923 0.1419153,-0.07034 0.2933966,-0.139111 0.3366242,-0.152832 0.043226,-0.01372 0.1463559,-0.07271 0.2291753,-0.131083 0.1199707,-0.08456 0.1625792,-0.09864 0.2096072,-0.06927 0.047284,0.02953 0.1538875,-0.0087 0.5358933,-0.192258 0.2622766,-0.126017 0.5689448,-0.264972 0.6814862,-0.308789 0.1125401,-0.04382 0.2249981,-0.09985 0.2499076,-0.124513 0.081951,-0.08115 0.1773194,-0.116582 0.3449729,-0.128175 0.1131113,-0.0078 0.1886589,-0.03475 0.2391522,-0.08524 0.040595,-0.0406 0.1438461,-0.118225 0.2294472,-0.172512 0.1733184,-0.109916 0.2284002,-0.176259 0.2623733,-0.316014 0.01334,-0.05486 0.06939,-0.123095 0.132975,-0.161862 0.06158,-0.03755 0.08742,-0.0685 0.05876,-0.07038 -0.08661,-0.0057 0.555593,-0.16351 0.673539,-0.16552 0.06836,-0.0011 0.110835,-0.01922 0.110835,-0.0471 0,-0.02486 0.03789,-0.08081 0.08421,-0.124319 0.09656,-0.09071 0.08465,-0.1374 -0.03506,-0.1374 -0.139172,0 -0.09502,-0.04884 0.164003,-0.181411 0.306614,-0.156928 0.449342,-0.161093 0.841624,-0.02456 0.28366,0.09873 0.288206,0.09917 0.345032,0.03364 0.03167,-0.03652 0.06838,-0.06639 0.08158,-0.06639 0.02544,0 0.444123,-0.288445 0.530711,-0.36562 0.02814,-0.02508 0.1816,-0.14031 0.341033,-0.256071 0.159432,-0.115763 0.427996,-0.311618 0.596806,-0.435234 0.324997,-0.237988 0.519973,-0.363211 0.852581,-0.547569 0.112541,-0.06238 0.272663,-0.181743 0.355823,-0.265252 l 0.151204,-0.151834 -0.279091,0.01616 c -0.295876,0.01713 -0.322422,0.0016 -0.24494,-0.143172 0.05332,-0.09963 0.736112,-0.634181 1.100461,-0.86154 0.05926,-0.03698 0.08714,-0.07645 0.07227,-0.102311 -0.01332,-0.02315 -0.01159,-0.03067 0.0038,-0.01669 0.01542,0.01398 0.07543,-0.01065 0.133354,-0.05471 0.219267,-0.166827 1.171023,-0.727058 1.367134,-0.804733 0.258942,-0.102562 0.861798,-0.404573 0.886111,-0.443911 0.0101,-0.01634 0.121786,-0.06366 0.248193,-0.105146 0.287589,-0.09439 0.30873,-0.106826 0.229061,-0.134772 -0.06732,-0.02362 -0.07326,-0.02127 0.880461,-0.347551 0.239998,-0.08211 0.429331,-0.156371 0.420748,-0.165033 -0.0086,-0.0087 0.03161,-0.01751 0.08933,-0.01966 0.05771,-0.0022 0.121598,-0.02517 0.141958,-0.05115 0.02171,-0.0277 0.120634,-0.05234 0.239187,-0.05957 0.210669,-0.01285 0.602989,-0.173276 0.928324,-0.379597 0.08567,-0.05433 0.264945,-0.123611 0.398397,-0.153965 0.133453,-0.03035 0.2584,-0.06637 0.277662,-0.08004 0.01927,-0.01367 0.09641,-0.04558 0.171433,-0.07092 0.07503,-0.02534 0.173013,-0.07458 0.217746,-0.109424 0.04473,-0.03484 0.09298,-0.06335 0.107228,-0.06335 0.01425,0 0.07348,-0.04445 0.131636,-0.09877 0.113963,-0.106457 0.351444,-0.240935 0.463279,-0.26234 0.038,-0.0073 0.08445,-0.03321 0.10321,-0.05764 0.01875,-0.02443 0.09498,-0.08983 0.169391,-0.145337 0.194156,-0.144837 0.214536,-0.162058 0.478569,-0.404414 0.251516,-0.230862 0.606848,-0.516232 1.227718,-0.98599 0.344093,-0.2603468 0.589539,-0.4332454 1.258562,-0.886573 0.133088,-0.09018 0.449157,-0.2640469 0.702374,-0.3863728 0.253216,-0.1223245 0.529451,-0.2557186 0.613857,-0.2964302 0.08441,-0.04071 0.158614,-0.085626 0.16491,-0.099811 0.0063,-0.014184 0.02548,-0.017112 0.04263,-0.00653 0.01716,0.010605 0.0312,0.00558 0.0312,-0.011156 0,-0.016741 0.02005,-0.030435 0.04455,-0.030435 0.0245,0 0.158784,-0.058252 0.298402,-0.129445 0.139619,-0.071195 0.430335,-0.1978034 0.646038,-0.2813523 0.215704,-0.083549 0.491939,-0.1954213 0.613858,-0.2486049 0.121921,-0.053185 0.306077,-0.1321049 0.40924,-0.1753788 0.103162,-0.043273 0.29828,-0.1359289 0.433601,-0.2058975 0.135324,-0.069969 0.361685,-0.1753594 0.503025,-0.2342005 0.141344,-0.058844 0.256987,-0.118339 0.256987,-0.1322199 0,-0.013882 0.01945,-0.02524 0.04319,-0.02524 0.02377,0 0.303834,-0.1227275 0.622385,-0.2727296 0.318551,-0.1500017 0.675102,-0.3078947 0.792333,-0.3508747 0.117228,-0.042978 0.213145,-0.092292 0.213145,-0.1095837 0,-0.017291 0.01918,-0.027759 0.04263,-0.02326 0.06969,0.013374 0.594379,-0.1884232 0.639435,-0.2459351 0.0094,-0.011971 0.04007,-0.021527 0.06821,-0.021238 0.121558,0.00127 0.660662,-0.1945862 0.918837,-0.3337747 0.241294,-0.1300895 0.587545,-0.3830342 0.701059,-0.5121391 0.01875,-0.021333 0.06131,-0.048999 0.09456,-0.061479 0.03325,-0.012481 0.07001,-0.047591 0.08169,-0.078024 0.02692,-0.070138 0.174568,-0.219039 0.217202,-0.219039 0.01774,0 0.05143,-0.030691 0.07486,-0.068207 0.02342,-0.037513 0.06448,-0.068206 0.09123,-0.068206 0.02675,0 0.03887,-0.00976 0.02696,-0.021682 -0.01192,-0.011924 0.05783,-0.09633 0.155007,-0.1875678 0.09718,-0.091238 0.161929,-0.1668596 0.143886,-0.168049 -0.01803,-0.00118 0.0028,-0.016405 0.04612,-0.033815 0.04747,-0.019039 0.06915,-0.047456 0.05441,-0.071314 -0.01348,-0.021822 -0.0098,-0.030553 0.0083,-0.019409 0.01801,0.011138 0.09144,-0.040204 0.163151,-0.1140923 0.0717,-0.073888 0.117738,-0.1343421 0.10229,-0.1343421 -0.01546,0 0.02072,-0.036015 0.08038,-0.080032 0.05967,-0.044017 0.09718,-0.091336 0.08336,-0.105152 -0.01383,-0.013815 -0.0095,-0.020006 0.0097,-0.013752 0.04939,0.01615 0.223702,-0.1274928 0.194271,-0.1600887 -0.01342,-0.014875 -0.0072,-0.017247 0.01376,-0.00527 0.06096,0.034779 0.607999,-0.4589859 0.563584,-0.5087016 -0.0121,-0.013544 -0.0039,-0.014234 0.01831,-0.00155 0.02248,0.012885 0.06394,-0.010665 0.09378,-0.053276 0.02942,-0.042001 0.05349,-0.064232 0.05349,-0.049403 0,0.035425 0.155483,-0.078134 0.314002,-0.2293306 0.06954,-0.066327 0.191209,-0.1634486 0.270384,-0.2158258 l 0.143933,-0.095226 -0.09461,-0.017052 c -0.09208,-0.016595 -0.08962,-0.020213 0.09234,-0.1351948 0.102836,-0.064979 0.180276,-0.1355869 0.172099,-0.1569075 -0.0082,-0.021322 0.03576,-0.063723 0.09766,-0.094226 l 0.112534,-0.055461 -0.110835,-7.738e-4 c -0.121681,-8.545e-4 -0.148951,-0.052289 -0.04518,-0.085223 0.03611,-0.011461 0.177308,-0.1287936 0.313783,-0.260741 0.136473,-0.1319475 0.294923,-0.2638643 0.352116,-0.2931487 0.05718,-0.029285 0.112307,-0.066044 0.122484,-0.081687 0.01017,-0.015643 0.08691,-0.0653452 0.170517,-0.1104495 0.08361,-0.0451035 0.148684,-0.0976873 0.144617,-0.11685267 -0.0041,-0.0191645 0.0331,-0.0450046 0.08257,-0.0574227 0.04948,-0.0124174 0.127764,-0.0523182 0.173974,-0.0886698 0.04622,-0.0363507 0.110775,-0.0660921 0.143466,-0.0660921 0.08441,0 0.311151,-0.09789 0.391757,-0.16912543 0.07224,-0.0638419 0.511584,-0.24011339 0.598463,-0.24011339 0.02826,0 0.08528,-0.0237481 0.126716,-0.0527741 0.137291,-0.09616158 0.661132,-0.14352007 1.525634,-0.1379271367 0.792642,0.005129127 0.827085,0.008206607 1.091305,0.0975625367 0.150053,0.050747 0.291903,0.09246343 0.315215,0.09270283 0.09396,9.6895e-4 0.976611,0.42511458 1.100071,0.52862744 0.02811,0.02359 0.159498,0.0947176 0.291932,0.15806233 0.235834,0.11281152 0.25372,0.12719829 0.25372,0.20412699 0,0.023291 0.03271,0.029587 0.08526,0.016402 0.05003,-0.012556 0.08526,-0.00673 0.08526,0.014086 0,0.019516 0.04219,0.054229 0.09378,0.077137 0.05158,0.022909 0.123537,0.06862 0.159895,0.1015785 0.03637,0.032959 0.08624,0.059926 0.110835,0.059926 0.02459,0 0.04471,0.012883 0.04471,0.028629 0,0.037801 0.156041,0.1077839 0.240323,0.1077839 0.03664,0 0.0666,0.015347 0.0666,0.034103 0,0.050098 0.102113,0.041678 0.103394,-0.00853 4.52e-4,-0.025512 0.01972,-0.01804 0.04753,0.018611 0.03352,0.044207 0.07116,0.055035 0.135327,0.038932 0.05776,-0.014496 0.08889,-0.00837 0.08889,0.017504 0,0.021897 0.01498,0.030556 0.0333,0.019242 0.0461,-0.028494 0.444224,0.057046 0.423279,0.090944 -0.0093,0.015101 0.01841,0.027008 0.06163,0.02646 0.09589,-0.00121 0.512136,0.096881 0.42817,0.100902 -0.03285,0.00157 -0.05968,0.016565 -0.05968,0.033318 0,0.03259 0.410853,0.1157062 0.437957,0.0886 0.0089,-0.00889 0.03294,-0.00257 0.0534,0.014024 0.06789,0.055028 0.736829,0.2457834 0.776319,0.2213777 0.02148,-0.013281 0.02951,-0.00894 0.01796,0.00974 -0.01146,0.018537 0.130919,0.1054296 0.316393,0.1930939 0.185473,0.087664 0.472547,0.2615323 0.637942,0.3863739 0.1654,0.1248417 0.319902,0.2270363 0.343352,0.2270984 0.02346,6.81e-5 0.03547,0.00725 0.02675,0.015975 -0.0087,0.00872 0.03686,0.077444 0.101278,0.1527108 0.06442,0.075267 0.110018,0.148369 0.101315,0.162449 -0.0087,0.014079 0.0071,0.034399 0.03515,0.045154 0.02802,0.010755 0.0512,8.546e-4 0.05148,-0.022004 4.51e-4,-0.032265 0.0064,-0.032371 0.02662,-4.693e-4 0.01435,0.022595 0.02243,0.1068802 0.01796,0.1872996 -0.0057,0.1024476 0.0013,0.1309839 0.024,0.09533 0.02653,-0.041988 0.03272,-0.038959 0.03537,0.017319 0.0018,0.037513 0.01096,0.049024 0.0204,0.025578 0.0094,-0.023446 0.02802,-0.042629 0.04119,-0.042629 0.03781,0 0.03799,0.1327189 0,0.1560674 -0.02003,0.012395 -0.01119,0.037667 0.0217,0.061689 0.03979,0.029097 0.04904,0.067036 0.03244,0.1331389 -0.01277,0.050846 -0.03781,0.092447 -0.05563,0.092447 -0.01783,0 -0.02058,-0.019183 -0.0061,-0.042629 0.01444,-0.023446 -0.01394,-0.016324 -0.06312,0.015829 -0.08648,0.056549 -0.219373,0.09752 -0.342779,0.1056776 -0.0328,0.00217 -0.05968,0.015832 -0.05968,0.030358 0,0.014528 -0.03452,0.026195 -0.07673,0.025926 -0.04219,-2.688e-4 -0.12277,0.00591 -0.17904,0.013737 -0.971882,0.1351175 -1.779858,0.2316536 -2.0803,0.2485518 -0.206324,0.011606 -0.393648,0.035672 -0.416267,0.053482 -0.02261,0.017814 -0.05578,0.023341 -0.07366,0.012286 -0.05845,-0.036117 -0.137867,0.016695 -0.115393,0.076729 0.01854,0.049502 0.01385,0.050803 -0.03628,0.010053 -0.03979,-0.032383 -0.05754,-0.034549 -0.05754,-0.00703 0,0.021875 -0.01918,0.037283 -0.04264,0.034238 -0.113695,-0.014764 -0.168405,0.00487 -0.149657,0.0537 0.02179,0.056803 -0.03027,0.070789 -0.06349,0.017051 -0.01159,-0.018757 -0.0547,-0.032889 -0.0958,-0.031409 -0.04111,0.00149 -0.0564,0.010143 -0.03402,0.019253 0.02238,0.00911 0.03199,0.039256 0.02134,0.066986 -0.01674,0.043659 -0.02757,0.043 -0.0805,-0.00493 -0.04614,-0.041755 -0.07725,-0.046733 -0.126687,-0.020273 -0.03605,0.019289 -0.100448,0.02594 -0.143132,0.014777 -0.06857,-0.017931 -0.07496,-0.010784 -0.05491,0.061432 0.02026,0.072941 0.01773,0.075587 -0.02355,0.024614 -0.043,-0.053101 -0.05392,-0.052267 -0.155229,0.011876 -0.05993,0.037942 -0.108954,0.096734 -0.108954,0.1306499 0,0.044877 -0.01859,0.056808 -0.0682,0.04383 -0.0459,-0.012002 -0.06821,-0.00104 -0.06821,0.033502 0,0.031463 -0.04526,0.059826 -0.11689,0.073265 -0.0945,0.017728 -0.121158,0.041367 -0.139184,0.1234405 -0.02175,0.099065 -0.131379,0.1912377 -0.208964,0.1757021 -0.0213,-0.00429 -0.04769,0.015535 -0.05861,0.044002 -0.01092,0.028466 -0.0342,0.051758 -0.05175,0.051758 -0.03502,0 -0.139325,0.089285 -0.496709,0.4251098 -0.130107,0.1222664 -0.264395,0.2311337 -0.298403,0.241927 -0.03401,0.010793 -0.0623,0.045447 -0.06289,0.077007 -6.73e-4,0.031562 -0.0658,0.1065697 -0.144939,0.1666874 -0.270923,0.2058155 -0.531097,0.4853767 -0.510157,0.5481845 0.0076,0.022891 -0.0026,0.041625 -0.02258,0.041625 -0.02005,0 -0.05384,0.069059 -0.0751,0.1534642 -0.02126,0.084405 -0.05168,0.153465 -0.06763,0.153465 -0.01593,0 -0.02014,0.023019 -0.0093,0.051153 0.0108,0.028133 0.0056,0.051153 -0.01149,0.051153 -0.01712,0 -0.03115,0.034533 -0.03119,0.076733 0,0.1328989 -0.05393,0.4006339 -0.07758,0.3860182 -0.02005,-0.012388 -0.02725,0.1344432 -0.04256,0.8672752 -0.002,0.1031621 -0.01694,0.1959073 -0.03288,0.2061001 -0.03087,0.019749 -0.0581,0.1355871 -0.06226,0.2648322 -0.0013,0.043314 -0.0177,0.069369 -0.03625,0.057909 -0.01933,-0.011951 -0.02505,0.00175 -0.0134,0.03209 0.01118,0.029109 0.0038,0.052929 -0.01638,0.052929 -0.02017,0 -0.02725,0.024567 -0.01573,0.054598 0.01151,0.030024 0.004,0.065088 -0.01676,0.077907 -0.02074,0.012818 -0.04479,0.099111 -0.05345,0.1917602 -0.0087,0.092648 -0.03066,0.1734248 -0.0489,0.1795037 -0.01824,0.00606 -0.02536,0.040824 -0.01584,0.077209 0.01077,0.041208 -0.0034,0.074092 -0.03753,0.087197 -0.03015,0.01157 -0.04634,0.03478 -0.03596,0.05157 0.01038,0.0168 0.005,0.03053 -0.01205,0.03053 -0.017,0 -0.03228,0.04742 -0.03393,0.105393 -0.0051,0.179718 -0.117438,0.644115 -0.15081,0.623489 -0.01741,-0.01076 -0.02813,0.0011 -0.02381,0.02649 0.0043,0.02533 -0.0024,0.08442 -0.01478,0.131309 -0.01244,0.04689 -0.02923,0.154317 -0.03733,0.238722 -0.03648,0.380211 -0.166541,0.813049 -0.262056,0.87208 -0.01658,0.01025 -0.03014,0.06376 -0.03014,0.118927 0,0.05516 -0.01494,0.100297 -0.03323,0.100297 -0.04322,0 -0.145532,0.197792 -0.122006,0.23586 0.01,0.01608 -0.0048,0.04821 -0.0327,0.07138 -0.02793,0.02318 -0.05078,0.06201 -0.05078,0.08628 0,0.02428 -0.01521,0.04926 -0.03381,0.05551 -0.01859,0.0063 -0.03965,0.06171 -0.0468,0.123232 -0.0071,0.06153 -0.03801,0.139504 -0.06858,0.173284 -0.03057,0.03378 -0.04532,0.07168 -0.03278,0.08423 0.01255,0.01254 0.0024,0.02281 -0.02266,0.02281 -0.02501,0 -0.03585,0.0096 -0.0241,0.02137 0.0306,0.0306 -0.07344,0.220798 -0.170284,0.311282 -0.04526,0.04228 -0.07383,0.09055 -0.06351,0.107262 0.01033,0.01671 -0.0042,0.03918 -0.03219,0.04993 -0.02803,0.01075 -0.05096,0.05164 -0.05096,0.09084 0,0.03921 -0.01459,0.06228 -0.03239,0.05127 -0.03561,-0.022 -0.113081,0.09788 -0.08282,0.128147 0.01035,0.01034 -0.02074,0.04474 -0.06911,0.07642 -0.04835,0.03169 -0.08004,0.07036 -0.0704,0.08595 0.01898,0.03069 -0.114371,0.168819 -0.162961,0.168819 -0.01633,0 -0.02025,0.01524 -0.0088,0.03387 0.01151,0.01863 -0.03329,0.0897 -0.09956,0.157928 -0.06627,0.06823 -0.110938,0.139503 -0.09927,0.158378 0.01168,0.01887 -0.01552,0.06424 -0.06042,0.100806 -0.0449,0.03656 -0.05862,0.05631 -0.03048,0.04387 0.02814,-0.01243 0.01662,0.0079 -0.02558,0.04514 -0.0422,0.03726 -0.07673,0.08078 -0.07673,0.09671 0,0.01593 -0.03129,0.0485 -0.06953,0.07238 -0.03825,0.02388 -0.06135,0.05666 -0.05135,0.07284 0.01,0.01618 -0.0057,0.03859 -0.03494,0.0498 -0.02921,0.01121 -0.04333,0.03622 -0.03137,0.05557 0.01196,0.01935 0.0028,0.03097 -0.02039,0.02582 -0.02317,-0.0052 -0.05348,0.02899 -0.06734,0.07589 -0.01387,0.04689 -0.02673,0.07265 -0.0286,0.05724 -0.0047,-0.0388 -0.105707,0.06596 -0.105707,0.109636 0,0.01944 -0.03113,0.05199 -0.06916,0.07235 -0.03805,0.02035 -0.06111,0.05004 -0.05127,0.06597 0.0099,0.01593 -0.03193,0.07271 -0.09283,0.126176 -0.0609,0.05347 -0.118399,0.112566 -0.127777,0.131323 -0.0094,0.01876 -0.0255,0.03129 -0.03584,0.02784 -0.01033,-0.0034 -0.03831,0.02502 -0.0622,0.06325 -0.03566,0.0571 -0.03535,0.06485 0.0018,0.0434 0.05754,-0.03329 -0.100394,0.1488 -0.202424,0.233387 -0.04238,0.03514 -0.06834,0.078 -0.05767,0.09525 0.01067,0.01725 -0.0028,0.03137 -0.02973,0.03137 -0.05121,0 -0.198718,0.175689 -0.238939,0.28459 -0.01279,0.0346 -0.05386,0.07092 -0.09128,0.08071 -0.03742,0.0098 -0.06803,0.03258 -0.06803,0.05064 0,0.01807 -0.09548,0.127541 -0.212171,0.243271 -0.116693,0.115729 -0.208771,0.221926 -0.204617,0.235994 0.0042,0.01407 -0.0136,0.02558 -0.03946,0.02558 -0.0419,0 -0.36223,0.342153 -0.36223,0.386912 0,0.01812 -0.168333,0.207786 -0.434598,0.489667 -0.0797,0.08438 -0.134927,0.169585 -0.122716,0.189342 0.01221,0.01976 0.0063,0.02606 -0.01324,0.01401 -0.01949,-0.01205 -0.148957,0.09803 -0.287676,0.244627 -0.138717,0.146595 -0.276317,0.280693 -0.305775,0.297993 -0.113761,0.06682 -0.575254,0.510672 -0.575254,0.553274 0,0.0247 -0.01457,0.0359 -0.03239,0.0249 -0.01781,-0.01102 -0.04944,0.01184 -0.07028,0.05078 -0.02084,0.03893 -0.07624,0.08538 -0.123127,0.103201 -0.04688,0.01782 -0.07681,0.04604 -0.06651,0.06271 0.01031,0.01667 0,0.04609 -0.02352,0.06537 -0.04179,0.03468 -0.06108,0.04086 -0.127513,0.04086 -0.01875,0 -0.03027,0.01782 -0.02558,0.03961 0.0047,0.02178 -0.02216,0.04864 -0.05968,0.05968 -0.09596,0.02823 -0.460392,0.278998 -0.460392,0.316789 0,0.01721 -0.01255,0.02353 -0.02789,0.01405 -0.01535,-0.0095 -0.06906,0.02093 -0.119362,0.06757 -0.05031,0.04665 -0.09193,0.07268 -0.09251,0.05785 -6.72e-4,-0.01482 -0.01667,-6.8e-5 -0.0358,0.03272 -0.01911,0.03282 -0.06469,0.05968 -0.101275,0.05968 -0.03659,0 -0.09465,0.02686 -0.129032,0.05968 -0.03439,0.03282 -0.08427,0.06436 -0.110835,0.07008 -0.02657,0.0057 -0.06461,0.03156 -0.08453,0.05742 -0.01992,0.02586 -0.07746,0.05738 -0.127885,0.07003 -0.05042,0.01265 -0.09168,0.03925 -0.09168,0.0591 0,0.01985 -0.0097,0.02636 -0.02162,0.01447 -0.04327,-0.04327 -0.532043,0.244878 -0.72163,0.425432 -0.107024,0.101924 -0.294339,0.269485 -0.416257,0.372357 -0.351072,0.296226 -0.477445,0.419441 -0.477445,0.465526 0,0.02358 -0.01248,0.03903 -0.02774,0.03434 -0.03696,-0.01136 -0.401163,0.357536 -0.389174,0.394188 0.0052,0.01575 -0.0044,0.02012 -0.0213,0.0097 -0.01687,-0.01042 -0.120842,0.08723 -0.231043,0.217028 -0.110194,0.129794 -0.21571,0.237324 -0.234468,0.238955 -0.01875,0.0015 -0.139775,0.102333 -0.268924,0.223779 -0.129156,0.121446 -0.242179,0.220809 -0.251161,0.220809 -0.02537,0 -0.405851,0.275683 -0.572008,0.414454 -0.08205,0.06852 -0.314931,0.239897 -0.51753,0.380842 -0.387603,0.269655 -0.569368,0.44102 -0.766137,0.7223 -0.153643,0.219636 -0.36955,0.618807 -0.36955,0.683236 0,0.02749 -0.01176,0.04998 -0.02616,0.04998 -0.03167,0 -0.156417,0.321733 -0.224782,0.579755 -0.02733,0.103161 -0.05974,0.38707 -0.07201,0.63091 -0.01228,0.243838 -0.0367,0.457921 -0.0543,0.47574 -0.01759,0.01781 -0.03199,0.148686 -0.03199,0.290814 0,0.176685 -0.01649,0.281962 -0.05214,0.332861 -0.06265,0.08945 -0.03628,0.229636 0.05526,0.293757 0.03494,0.02447 0.273134,0.242804 0.529317,0.485172 0.256175,0.242373 0.479046,0.445791 0.495268,0.452042 0.01622,0.0063 0.02949,0.03311 0.02949,0.05968 0,0.02657 0.01297,0.04831 0.02881,0.04831 0.01584,0 0.103231,0.07579 0.194197,0.168432 0.09096,0.09264 0.17544,0.16222 0.187725,0.154627 0.01228,-0.0076 0.05524,0.02404 0.09546,0.07029 0.04022,0.04625 0.08856,0.0841 0.107445,0.0841 0.01889,0 0.03433,0.02302 0.03433,0.05115 0,0.02814 0.02393,0.05115 0.05316,0.05115 0.02924,0 0.04403,0.01481 0.03285,0.03288 -0.01118,0.01808 0.0378,0.07056 0.108823,0.116611 0.146636,0.09507 0.410528,0.327953 0.371622,0.327953 -0.01411,0 -0.0027,0.02302 0.02548,0.05115 0.02813,0.02814 0.07527,0.05115 0.104743,0.05115 0.02948,0 0.04976,0.01918 0.04506,0.04263 -0.0047,0.02344 0.01067,0.03879 0.0341,0.0341 0.02345,-0.0047 0.03879,0.01066 0.0341,0.0341 -0.0047,0.02344 0.01067,0.03879 0.03411,0.0341 0.02345,-0.0047 0.04263,0.0068 0.04263,0.02558 0,0.01875 0.01151,0.03167 0.02558,0.02869 0.01407,-0.003 0.05372,0.0068 0.08812,0.0218 0.04921,0.02142 0.05285,0.03336 0.01705,0.05605 -0.03107,0.0197 -0.01515,0.029 0.05031,0.02936 0.05269,4.48e-4 0.08814,0.01291 0.07878,0.02806 -0.0094,0.01515 0.01658,0.05262 0.05767,0.08326 0.211981,0.158129 0.321478,0.232868 0.398667,0.272128 0.115603,0.05878 0.204537,0.136366 0.205017,0.178823 6.73e-4,0.01926 0.06544,0.06496 0.144938,0.101519 0.141447,0.06505 0.340091,0.238163 0.308982,0.269278 -0.02718,0.02718 0.06833,0.153699 0.127777,0.169241 0.06948,0.01817 0.188265,0.276674 0.320871,0.69827 0.08404,0.267179 0.118475,0.330863 0.220688,0.408197 0.06662,0.0504 0.147197,0.124217 0.17907,0.164057 0.09286,0.116054 0.407185,0.314295 0.561941,0.354407 0.212211,0.05501 0.317944,0.197997 0.317944,0.42998 0,0.177064 0.0046,0.186422 0.114315,0.232258 0.06286,0.02626 0.181802,0.05857 0.2643,0.07179 0.08249,0.01322 0.264143,0.05332 0.403658,0.08911 0.139516,0.0358 0.327111,0.06508 0.416878,0.06508 0.191088,0 0.623427,0.160645 0.804959,0.299105 0.06647,0.0507 0.148841,0.153773 0.183033,0.229045 0.08345,0.183693 0.08156,0.232392 -0.0079,0.203999 -0.0628,-0.01994 -0.06843,-0.01289 -0.04589,0.05738 0.06069,0.189278 0.08178,0.333911 0.08254,0.566071 l 8.75e-4,0.247251 -0.10231,0 c -0.141004,0 -0.224605,-0.0965 -0.270173,-0.311862 -0.02207,-0.104268 -0.09225,-0.260923 -0.163567,-0.365089 -0.119313,-0.174261 -0.130354,-0.181565 -0.24619,-0.162767 -0.149842,0.02432 -0.206755,0.09784 -0.206755,0.267096 l 0,0.130514 -0.144938,-0.0091 c -0.128781,-0.0081 -0.143506,-0.0015 -0.132061,0.05907 0.02757,0.146015 0.01951,0.403542 -0.01289,0.41185 -0.01875,0.0048 -0.05329,0.0011 -0.07673,-0.0083 z m -4.19369,-3.988246 c 0.03255,-0.03255 -0.11857,-0.219098 -0.220265,-0.271924 -0.05026,-0.0261 -0.100619,-0.07448 -0.111934,-0.107508 -0.01132,-0.03303 -0.08846,-0.113161 -0.171444,-0.178065 -0.08298,-0.06491 -0.144604,-0.124279 -0.136937,-0.131946 0.01826,-0.01826 -0.252842,-0.244541 -0.292968,-0.244541 -0.01698,0 -0.03088,-0.02302 -0.03088,-0.05116 0,-0.02813 -0.01918,-0.04732 -0.04263,-0.04263 -0.02345,0.0047 -0.03879,-0.01067 -0.03411,-0.0341 0.0047,-0.02344 -0.0145,-0.04263 -0.04263,-0.04263 -0.02814,0 -0.05115,-0.02165 -0.05115,-0.04811 0,-0.02646 -0.09552,-0.13005 -0.212251,-0.230198 -0.116736,-0.100146 -0.253339,-0.224289 -0.30356,-0.27587 -0.05022,-0.05158 -0.09883,-0.09379 -0.108026,-0.09379 -0.0092,0 -0.09926,-0.08057 -0.200152,-0.17904 -0.186476,-0.182007 -0.359788,-0.332507 -0.382912,-0.332507 -0.007,0 -0.08682,-0.06799 -0.177335,-0.151102 -0.09051,-0.08311 -0.17673,-0.143589 -0.191592,-0.1344 -0.01486,0.0092 -0.02702,0.0024 -0.02702,-0.01528 0,-0.04201 -0.511787,-0.42675 -0.567681,-0.42675 -0.02375,0 -0.03553,-0.01237 -0.02619,-0.02747 0.02194,-0.03549 -0.281469,-0.225376 -0.403641,-0.252609 -0.05158,-0.01149 -0.09378,-0.03557 -0.09378,-0.05349 0,-0.019 -0.02956,-0.01678 -0.07091,0.0054 -0.06793,0.03636 -0.064,0.04498 0.09378,0.205769 0.09058,0.0923 0.183871,0.167842 0.207322,0.167869 0.02344,2.7e-5 0.04263,0.01302 0.04263,0.02885 0,0.01584 0.117144,0.14245 0.26033,0.281352 0.143178,0.138902 0.292804,0.289504 0.332507,0.334665 0.125042,0.142265 0.487691,0.495555 0.560957,0.546484 0.03864,0.02686 0.06096,0.06523 0.04957,0.08526 -0.01138,0.02003 -0.0087,0.02557 0.0061,0.0123 0.0147,-0.01326 0.07471,0.01169 0.133356,0.05543 0.05864,0.04375 0.165259,0.106726 0.236917,0.139967 0.0936,0.04341 0.117608,0.06848 0.08526,0.08899 -0.03381,0.02144 -0.02966,0.02869 0.01667,0.02908 0.03393,4.48e-4 0.05331,0.01409 0.04306,0.03066 -0.01667,0.02698 0.14951,0.115529 0.236282,0.125904 0.01875,0.0023 0.05419,0.0064 0.07875,0.0093 0.02455,0.0029 0.03515,0.02054 0.02356,0.0393 -0.01161,0.01875 0.0036,0.0341 0.0339,0.0341 0.03023,0 0.111436,0.03837 0.180445,0.08526 0.06901,0.04689 0.10272,0.08549 0.07492,0.08578 -0.04424,6.72e-4 -0.04417,0.0046 6.73e-4,0.03333 0.02814,0.01803 0.0764,0.02496 0.107242,0.01537 0.05882,-0.01828 0.141637,0.04693 0.20138,0.15856 0.01945,0.03632 0.09688,0.104889 0.17209,0.152367 0.10982,0.06933 0.132322,0.100292 0.114247,0.157236 -0.01432,0.04508 -0.0096,0.06294 0.01288,0.04903 0.01947,-0.01203 0.04436,-0.0074 0.05532,0.01035 0.01095,0.01772 -0.01483,0.0389 -0.05733,0.04706 -0.06684,0.01286 -0.06461,0.01548 0.01656,0.01949 0.07775,0.0038 0.09378,0.02023 0.09378,0.09574 0,0.149781 0.08859,0.215831 0.289483,0.215831 0.09713,0 0.186006,-0.0094 0.197504,-0.02091 z m -3.916702,-3.351519 c 0.01031,-0.01667 -0.03866,-0.07277 -0.108823,-0.124668 -0.162544,-0.12024 -0.245198,-0.220673 -0.246159,-0.299097 -0.0011,-0.08664 -0.139045,-0.398508 -0.176318,-0.398508 -0.01692,0 -0.04534,-0.03837 -0.06316,-0.08526 -0.01784,-0.04689 -0.04766,-0.08526 -0.06629,-0.08526 -0.01864,0 -0.02504,-0.02302 -0.01425,-0.05115 0.0108,-0.02813 0.0057,-0.05115 -0.01129,-0.05115 -0.04968,0 -0.120395,0.399496 -0.08306,0.469258 0.01779,0.03321 0.143661,0.159902 0.279747,0.281536 0.13608,0.121632 0.279425,0.254059 0.318537,0.294281 0.07702,0.0792 0.141411,0.09803 0.17108,0.05003 z m -0.771004,-2.50443 c -0.0043,-0.02202 0.0183,-0.08917 0.05025,-0.149197 0.03194,-0.06003 0.05808,-0.149179 0.05808,-0.198109 0,-0.05436 0.01416,-0.08021 0.0364,-0.06647 0.03025,0.01869 0.09496,-0.116002 0.0709,-0.147575 -0.004,-0.0054 0.01613,-0.03331 0.04495,-0.06211 0.02881,-0.02881 0.05237,-0.08874 0.05237,-0.133183 0,-0.04445 0.01414,-0.08955 0.03142,-0.100225 0.01728,-0.01069 0.05839,-0.09215 0.09136,-0.181054 0.03297,-0.08891 0.08744,-0.201739 0.12104,-0.250748 0.0336,-0.04901 0.05132,-0.09889 0.03937,-0.110837 -0.01194,-0.01194 -0.0038,-0.02173 0.01806,-0.02173 0.02189,0 0.03955,-0.02686 0.03927,-0.05968 -6.73e-4,-0.05155 -0.0055,-0.05271 -0.03706,-0.0085 -0.03005,0.04207 -0.03367,0.03904 -0.02039,-0.01705 0.0089,-0.03751 0.02822,-0.09773 0.04298,-0.13381 0.02151,-0.05253 0.01548,-0.06124 -0.03023,-0.0437 -0.07092,0.02721 -0.07416,-0.02222 -0.0059,-0.09045 0.02814,-0.02813 0.05065,-0.07911 0.05002,-0.113272 -8.75e-4,-0.05383 -0.01019,-0.05124 -0.06906,0.01945 -0.03736,0.04486 -0.07781,0.07168 -0.08988,0.0596 -0.01208,-0.01207 -0.05363,0.0049 -0.09234,0.0378 -0.06688,0.05679 -0.06809,0.05679 -0.02417,0 0.02827,-0.0365 0.03201,-0.05968 0.0096,-0.05968 -0.02012,0 -0.04886,0.01918 -0.06386,0.04263 -0.01501,0.02344 -0.057,0.06565 -0.09334,0.09379 -0.06006,0.0465 -0.06403,0.04573 -0.0437,-0.0085 0.0123,-0.03282 0.0081,-0.05969 -0.0093,-0.05969 -0.01746,0 -0.04841,0.06522 -0.06882,0.144939 -0.02042,0.07972 -0.04562,0.167959 -0.05602,0.196096 -0.04849,0.131129 -0.111834,0.499144 -0.09503,0.552109 0.01033,0.03255 0.0018,0.09092 -0.01898,0.129723 -0.04485,0.08379 -0.0079,0.827525 0.03967,0.798134 0.01662,-0.01026 0.02669,-0.0367 0.02239,-0.05873 z m 0.415265,-1.487433 c 0,-0.01986 0.01535,-0.03611 0.0341,-0.03611 0.01875,0 0.03411,0.0068 0.03411,0.01503 0,0.0083 -0.01535,0.02453 -0.03411,0.03611 -0.01875,0.01158 -0.0341,0.0048 -0.0341,-0.01503 z m 0.06821,-0.102309 c 0,-0.01985 0.01535,-0.03611 0.0341,-0.03611 0.01875,0 0.0341,0.0068 0.0341,0.01503 0,0.0083 -0.01535,0.02452 -0.0341,0.03611 -0.01875,0.01158 -0.0341,0.0048 -0.0341,-0.01503 z M 50.350048,2.911456 c -0.04024,-0.04024 -0.0851,-0.060404 -0.09969,-0.044811 -0.01458,0.015594 -0.0073,0.035235 0.01633,0.043647 0.02355,0.00841 0.03614,0.026146 0.02793,0.039407 -0.0082,0.013261 0.01737,0.026543 0.05685,0.029515 l 0.07175,0.0054 -0.07316,-0.073163 z M 28.551232,31.653751 c 0,-0.0083 0.01534,-0.02453 0.0341,-0.03611 0.01875,-0.01158 0.0341,-0.0048 0.0341,0.01503 0,0.01987 -0.01534,0.03611 -0.0341,0.03611 -0.01875,0 -0.0341,-0.0067 -0.0341,-0.01503 z M 47.469354,1.6014697 c 0.0231,-0.00934 0.06912,-0.00991 0.102307,-0.00127 0.03317,0.00865 0.01431,0.016289 -0.04196,0.016985 -0.05627,6.93e-4 -0.08342,-0.00638 -0.06032,-0.015721 z"
+ style="fill:#000000" />
+</svg>
diff --git a/samples/deferred/ui/main.crow b/samples/deferred/ui/main.crow
new file mode 100644
index 0000000..14e6082
--- /dev/null
+++ b/samples/deferred/ui/main.crow
@@ -0,0 +1,37 @@
+<?xml version="1.0"?>
+<Window Caption="Lighting" Icon="#deferred.crow.svg" Left="10" Top="100" Width="40%" Height="40%" CornerRadius="10">
+ <VerticalStack Spacing="1" Margin="10" CacheEnabled="true">
+ <HorizontalStack Height="Fit" >
+ <Label Text="Exposure:" Width="80"/>
+ <Slider Height="10" Value="{²Exposure}" Maximum="10.0" SmallIncrement="0.1" LargeIncrement="1.0"/>
+ <Label Text="{Exposure}" Width="40" TextAlignment="Right" />
+ </HorizontalStack>
+ <HorizontalStack Height="Fit">
+ <Label Text="Gamma:" Width="80" />
+ <Slider Height="10" Value="{²Gamma}" Maximum="10.0" SmallIncrement="0.1" LargeIncrement="1.0"/>
+ <Label Text="{Gamma}" Width="40" TextAlignment="Right" />
+ </HorizontalStack>
+ <HorizontalStack Height="Fit">
+ <Label Text="Light Strength:" Width="100" />
+ <Slider Height="10" Value="{²LightStrength}" Maximum="50.0" SmallIncrement="0.1" LargeIncrement="5.0"/>
+ <Label Text="{LightStrength}" Width="40" TextAlignment="Right" />
+ </HorizontalStack>
+ <ListBox Name="dv" Data="{Lights}" Width="Stretched" Height="Fit">
+ <ItemTemplate>
+ <Border Height="Fit">
+ <VerticalStack>
+ <HorizontalStack>
+ <Label Text="Position" Width="50"/>
+ <Label Text="{position}"/>
+ </HorizontalStack>
+ <HorizontalStack>
+ <Label Text="Color" Width="50"/>
+ <Label Text="{color}"/>
+ </HorizontalStack>
+ </VerticalStack>
+ </Border>
+ </ItemTemplate>
+ </ListBox>
+ </VerticalStack>
+</Window>
+
diff --git a/samples/deferred/ui/materials.crow b/samples/deferred/ui/materials.crow
new file mode 100644
index 0000000..b4c5432
--- /dev/null
+++ b/samples/deferred/ui/materials.crow
@@ -0,0 +1,30 @@
+<?xml version="1.0"?>
+<Window Icon="#deferred.crow.svg" Left="10" Top="100" Width="40%" Height="40%" CornerRadius="10">
+ <VerticalStack>
+ <ListBox Data="{Materials}">
+ <ItemTemplate DataType="PbrMaterial">
+ <VerticalStack>
+ <ColorPicker Width="260" Height="Fit"/>
+ <HorizontalStack>
+ <Label Width="Stretched" Text="Metallic Factor"/>
+ <Spinner Style="NormalizedFloat" Value="{²metallicFactor}"/>
+ </HorizontalStack>
+ <HorizontalStack>
+ <Label Width="Stretched" Text="Roughness Factor"/>
+ <Spinner Style="NormalizedFloat" Value="{²roughnessFactor}"/>
+ </HorizontalStack>
+ <HorizontalStack>
+ <Label Width="Stretched" Text="Alpha Mask"/>
+ <Spinner Style="NormalizedFloat" Value="{²alphaMask}"/>
+ </HorizontalStack>
+ <HorizontalStack>
+ <Label Width="Stretched" Text="Alpha Mask Cutoff"/>
+ <Spinner Style="NormalizedFloat" Value="{²alphaMaskCutoff}"/>
+ </HorizontalStack>
+ </VerticalStack>
+ </ItemTemplate>
+ </ListBox>
+ <Button Caption="Apply" MouseClick="onApplyMaterialChanges"/>
+ </VerticalStack>
+</Window>
+
diff --git a/samples/deferred/ui/menu.crow b/samples/deferred/ui/menu.crow
new file mode 100644
index 0000000..1cc36be
--- /dev/null
+++ b/samples/deferred/ui/menu.crow
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<Menu>
+ <MenuItem Caption="View" Fit="true" PopWidth="150">
+ <MenuItem Command="{CMDViewScenes}"/>
+ <MenuItem Command="{CMDViewDebug}"/>
+ <MenuItem Command="{CMDViewEditor}"/>
+ <MenuItem Command="{CMDViewMaterials}"/>
+ </MenuItem>
+</Menu> \ No newline at end of file
diff --git a/samples/deferred/ui/mono_crash.12991d684.0.json b/samples/deferred/ui/mono_crash.12991d684.0.json
new file mode 100644
index 0000000..69dbeb6
--- /dev/null
+++ b/samples/deferred/ui/mono_crash.12991d684.0.json
@@ -0,0 +1,7534 @@
+{
+ "protocol_version" : "0.0.4",
+ "configuration" : {
+ "version" : "(5.20.1) (explicit/886c4901747)",
+ "tlc" : "normal",
+ "sigsgev" : "altstack",
+ "notifications" : "epoll",
+ "architecture" : "amd64",
+ "disabled_features" : "none",
+ "smallconfig" : "disabled",
+ "bigarrays" : "disabled",
+ "softdebug" : "enabled",
+ "interpreter" : "enabled",
+ "suspend" : "hybrid",
+ "llvm_support" : "disabled"
+ },
+ "memory" : {
+ "minor_gc_time" : "219650903",
+ "major_gc_time" : "13765912",
+ "minor_gc_count" : "5877",
+ "major_gc_count" : "50",
+ "major_gc_time_concurrent" : "135027906"
+ },
+ "threads" : [
+ {
+ "is_managed" : true,
+ "offset_free_hash" : "0xcca4f7ced",
+ "offset_rich_hash" : "0xcca4f822a",
+ "crashed" : false,
+ "native_thread_id" : "0x7fce060ff700",
+ "thread_info_addr" : "0x7fcdf00008d0",
+ "thread_name" : "Thread Pool Wor",
+ "ctx" : {
+ "IP" : "0x7fce795bdfac",
+ "SP" : "0x7fce060fe050",
+ "BP" : "(nil)"
+ },
+ "managed_frames" : [
+ {
+ "native_address" : "unregistered"
+ }
+,
+ {
+ "is_managed" : "true",
+ "guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+ "token" : "0x00000",
+ "native_offset" : "0x0",
+ "filename" : "System.dll",
+ "sizeofimage" : "0x278000",
+ "timestamp" : "0xc134f6ee",
+ "il_offset" : "0x00026"
+ }
+,
+ {
+ "is_managed" : "true",
+ "guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+ "token" : "0x6003dc8",
+ "native_offset" : "0x0",
+ "filename" : "System.dll",
+ "sizeofimage" : "0x278000",
+ "timestamp" : "0xc134f6ee",
+ "il_offset" : "0x00012"
+ }
+,
+ {
+ "is_managed" : "true",
+ "guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+ "token" : "0x6004114",
+ "native_offset" : "0x0",
+ "filename" : "System.dll",
+ "sizeofimage" : "0x278000",
+ "timestamp" : "0xc134f6ee",
+ "il_offset" : "0x00027"
+ }
+,
+ {
+ "is_managed" : "true",
+ "guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+ "token" : "0x6004113",
+ "native_offset" : "0x0",
+ "filename" : "System.dll",
+ "sizeofimage" : "0x278000",
+ "timestamp" : "0xc134f6ee",
+ "il_offset" : "0x002dc"
+ }
+,
+ {
+ "is_managed" : "true",
+ "guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+ "token" : "0x6004308",
+ "native_offset" : "0x0",
+ "filename" : "System.dll",
+ "sizeofimage" : "0x278000",
+ "timestamp" : "0xc134f6ee",
+ "il_offset" : "0x00000"
+ }
+,
+ {
+ "is_managed" : "true",
+ "guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+ "token" : "0x60022bd",
+ "native_offset" : "0x0",
+ "filename" : "mscorlib.dll",
+ "sizeofimage" : "0x450000",
+ "timestamp" : "0xc40271ca",
+ "il_offset" : "0x00025"
+ }
+,
+ {
+ "is_managed" : "true",
+ "guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+ "token" : "0x60022b9",
+ "native_offset" : "0x0",
+ "filename" : "mscorlib.dll",
+ "sizeofimage" : "0x450000",
+ "timestamp" : "0xc40271ca",
+ "il_offset" : "0x00000"
+ }
+,
+ {
+ "is_managed" : "true",
+ "guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+ "token" : "0x60022bc",
+ "native_offset" : "0x0",
+ "filename" : "mscorlib.dll",
+ "sizeofimage" : "0x450000",
+ "timestamp" : "0xc40271ca",
+ "il_offset" : "0x00000"
+ }
+,
+ {
+ "is_managed" : "true",
+ "guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+ "token" : "0x6001dff",
+ "native_offset" : "0x0",
+ "filename" : "mscorlib.dll",
+ "sizeofimage" : "0x450000",
+ "timestamp" : "0xc40271ca",
+ "il_offset" : "0x00071"
+ }
+,
+ {
+ "is_managed" : "true",
+ "guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+ "token" : "0x6001dfe",
+ "native_offset" : "0x0",
+ "filename" : "mscorlib.dll",
+ "sizeofimage" : "0x450000",
+ "timestamp" : "0xc40271ca",
+ "il_offset" : "0x00000"
+ }
+,
+ {
+ "is_managed" : "true",
+ "guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+ "token" : "0x6002325",
+ "native_offset" : "0x0",
+ "filename" : "mscorlib.dll",
+ "sizeofimage" : "0x450000",
+ "timestamp" : "0xc40271ca",
+ "il_offset" : "0x00034"
+ }
+,
+ {
+ "is_managed" : "true",
+ "guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+ "token" : "0x60022bb",
+ "native_offset" : "0x0",
+ "filename" : "mscorlib.dll",
+ "sizeofimage" : "0x450000",
+ "timestamp" : "0xc40271ca",
+ "il_offset" : "0x0004a"
+ }
+,
+ {
+ "is_managed" : "true",
+ "guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+ "token" : "0x6002431",
+ "native_offset" : "0x0",
+ "filename" : "mscorlib.dll",
+ "sizeofimage" : "0x450000",
+ "timestamp" : "0xc40271ca",
+ "il_offset" : "0x00000"
+ }
+,
+ {
+ "is_managed" : "true",
+ "guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+ "token" : "0x6001e55",
+ "native_offset" : "0x0",
+ "filename" : "mscorlib.dll",
+ "sizeofimage" : "0x450000",
+ "timestamp" : "0xc40271ca",
+ "il_offset" : "0x00025"
+ }
+,
+ {
+ "is_managed" : "true",
+ "guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+ "token" : "0x6001dff",
+ "native_offset" : "0x0",
+ "filename" : "mscorlib.dll",
+ "sizeofimage" : "0x450000",
+ "timestamp" : "0xc40271ca",
+ "il_offset" : "0x00071"
+ }
+,
+ {
+ "is_managed" : "true",
+ "guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+ "token" : "0x6001dfe",
+ "native_offset" : "0x0",
+ "filename" : "mscorlib.dll",
+ "sizeofimage" : "0x450000",
+ "timestamp" : "0xc40271ca",
+ "il_offset" : "0x00000"
+ }
+,
+ {
+ "is_managed" : "true",
+ "guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+ "token" : "0x6001dfd",
+ "native_offset" : "0x0",
+ "filename" : "mscorlib.dll",
+ "sizeofimage" : "0x450000",
+ "timestamp" : "0xc40271ca",
+ "il_offset" : "0x0002b"
+ }
+,
+ {
+ "is_managed" : "true",
+ "guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+ "token" : "0x6001e56",
+ "native_offset" : "0x0",
+ "filename" : "mscorlib.dll",
+ "sizeofimage" : "0x450000",
+ "timestamp" : "0xc40271ca",
+ "il_offset" : "0x0000f"
+ }
+,
+ {
+ "is_managed" : "true",
+ "guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+ "token" : "0x00000",
+ "native_offset" : "0x0",
+ "filename" : "mscorlib.dll",
+ "sizeofimage" : "0x450000",
+ "timestamp" : "0xc40271ca",
+ "il_offset" : "0x0001e"
+ }
+
+ ],
+ "unmanaged_frames" : [
+ {
+ "native_address" : "unregistered"
+ }
+,
+ {
+ "native_address" : "unregistered"
+ }
+,
+ {
+ "native_address" : "unregistered"
+ }
+,
+ {
+ "native_address" : "unregistered"
+ }
+,
+ {
+ "native_address" : "unregistered"
+ }
+,
+ {
+ "native_address" : "unregistered"
+ }
+,
+ {
+ "native_address" : "unregistered"
+ }
+,
+ {
+ "native_address" : "unregistered"
+ }
+,
+ {
+ "native_address" : "unregistered"
+ }
+,
+ {
+ "native_address" : "unregistered"
+ }
+,
+ {
+ "native_address" : "unregistered"
+ }
+,
+ {
+ "native_address" : "unregistered"
+ }
+,
+ {
+ "native_address" : "unregistered"
+ }
+
+ ]
+},
+{
+ "is_managed" : true,
+ "offset_free_hash" : "0x7da3ab74a",
+ "offset_rich_hash" : "0x7da3ab8b5",
+ "crashed" : false,
+ "native_thread_id" : "0x7fcdcd6fd700",
+ "thread_info_addr" : "0x7fce3a033d00",
+ "thread_name" : "SDB output read",
+ "ctx" : {
+ "IP" : "0x7fce795bdfac",
+ "SP" : "0x7fcdcd6fc2b0",
+ "BP" : "(nil)"
+ },
+ "managed_frames" : [
+ {
+ "native_address" : "unregistered"
+ }
+,
+ {
+ "is_managed" : "true",
+ "guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+ "token" : "0x00000",
+ "native_offset" : "0x0",
+ "filename" : "mscorlib.dll",
+ "sizeofimage" : "0x450000",
+ "timestamp" : "0xc40271ca",
+ "il_offset" : "0x0004f"
+ }
+,
+ {
+ "is_managed" : "true",
+ "guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+ "token" : "0x60055ec",
+ "native_offset" : "0x0",
+ "filename" : "mscorlib.dll",
+ "sizeofimage" : "0x450000",
+ "timestamp" : "0xc40271ca",
+ "il_offset" : "0x00010"
+ }
+,
+ {
+ "is_managed" : "true",
+ "guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+ "token" : "0x6005593",
+ "native_offset" : "0x0",
+ "filename" : "mscorlib.dll",
+ "sizeofimage" : "0x450000",
+ "timestamp" : "0xc40271ca",
+ "il_offset" : "0x00026"
+ }
+,
+ {
+ "is_managed" : "true",
+ "guid" : "2334BB37-A1E0-4C4B-8D85-A6DE3E6356E7",
+ "token" : "0x6000040",
+ "native_offset" : "0x0",
+ "filename" : "Mono.Debugging.Soft.dll",
+ "sizeofimage" : "0x2e000",
+ "timestamp" : "0x5c79f81f",
+ "il_offset" : "0x00010"
+ }
+,
+ {
+ "is_managed" : "true",
+ "guid" : "2334BB37-A1E0-4C4B-8D85-A6DE3E6356E7",
+ "token" : "0x60001ee",
+ "native_offset" : "0x0",
+ "filename" : "Mono.Debugging.Soft.dll",
+ "sizeofimage" : "0x2e000",
+ "timestamp" : "0x5c79f81f",
+ "il_offset" : "0x00000"
+ }
+,
+ {
+ "is_managed" : "true",
+ "guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+ "token" : "0x6001e55",
+ "native_offset" : "0x0",
+ "filename" : "mscorlib.dll",
+ "sizeofimage" : "0x450000",
+ "timestamp" : "0xc40271ca",
+ "il_offset" : "0x00014"
+ }
+,
+ {
+ "is_managed" : "true",
+ "guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+ "token" : "0x6001dff",
+ "native_offset" : "0x0",
+ "filename" : "mscorlib.dll",
+ "sizeofimage" : "0x450000",
+ "timestamp" : "0xc40271ca",
+ "il_offset" : "0x00071"
+ }
+,
+ {
+ "is_managed" : "true",
+ "guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+ "token" : "0x6001dfe",
+ "native_offset" : "0x0",
+ "filename" : "mscorlib.dll",
+ "sizeofimage" : "0x450000",
+ "timestamp" : "0xc40271ca",
+ "il_offset" : "0x00000"
+ }
+,
+ {
+ "is_managed" : "true",
+ "guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+ "token" : "0x6001dfd",
+ "native_offset" : "0x0",
+ "filename" : "mscorlib.dll",
+ "sizeofimage" : "0x450000",
+ "timestamp" : "0xc40271ca",
+ "il_offset" : "0x0002b"
+ }
+,
+ {
+ "is_managed" : "true",
+ "guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+ "token" : "0x6001e57",
+ "native_offset" : "0x0",
+ "filename" : "mscorlib.dll",
+ "sizeofimage" : "0x450000",
+ "timestamp" : "0xc40271ca",
+ "il_offset" : "0x00008"
+ }
+,
+ {
+ "is_managed" : "true",
+ "guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+ "token" : "0x00000",
+ "native_offset" : "0x0",
+ "filename" : "mscorlib.dll",
+ "sizeofimage" : "0x450000",
+ "timestamp" : "0xc40271ca",
+ "il_offset" : "0x0001e"
+ }
+
+ ],
+"unmanaged_frames" : [
+{
+ "native_address" : "unregistered"
+ }
+,
+{
+ "native_address" : "unregistered"
+ }
+,
+{
+ "native_address" : "unregistered"
+ }
+,
+{
+ "native_address" : "unregistered"
+ }
+,
+{
+ "native_address" : "unregistered"
+ }
+,
+{
+ "native_address" : "unregistered"
+ }
+,
+{
+ "native_address" : "unregistered"
+ }
+,
+{
+ "native_address" : "unregistered"
+ }
+,
+{
+ "native_address" : "unregistered"
+ }
+,
+{
+ "native_address" : "unregistered"
+ }
+,
+{
+ "native_address" : "unregistered"
+ }
+,
+{
+ "native_address" : "unregistered"
+ }
+,
+{
+ "native_address" : "unregistered"
+ }
+
+]
+},
+{
+"is_managed" : true,
+"offset_free_hash" : "0xb26e48ee7",
+"offset_rich_hash" : "0xb26e49123",
+"crashed" : false,
+"native_thread_id" : "0x7fce45da1700",
+"thread_info_addr" : "0x7fce20000b20",
+"thread_name" : "Thread Pool Wor",
+"ctx" : {
+ "IP" : "0x7fce795bdfac",
+ "SP" : "0x7fce45da01d0",
+ "BP" : "(nil)"
+},
+"managed_frames" : [
+{
+ "native_address" : "unregistered"
+ }
+,
+{
+ "is_managed" : "true",
+ "guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+ "token" : "0x00000",
+ "native_offset" : "0x0",
+ "filename" : "mscorlib.dll",
+ "sizeofimage" : "0x450000",
+ "timestamp" : "0xc40271ca",
+ "il_offset" : "0x00000"
+ }
+,
+{
+ "is_managed" : "true",
+ "guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+ "token" : "0x00000",
+ "native_offset" : "0x0",
+ "filename" : "mscorlib.dll",
+ "sizeofimage" : "0x450000",
+ "timestamp" : "0xc40271ca",
+ "il_offset" : "0x0004f"
+ }
+,
+{
+ "is_managed" : "true",
+ "guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+ "token" : "0x60055ec",
+ "native_offset" : "0x0",
+ "filename" : "mscorlib.dll",
+ "sizeofimage" : "0x450000",
+ "timestamp" : "0xc40271ca",
+ "il_offset" : "0x00010"
+ }
+,
+{
+ "is_managed" : "true",
+ "guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+ "token" : "0x6005593",
+ "native_offset" : "0x0",
+ "filename" : "mscorlib.dll",
+ "sizeofimage" : "0x450000",
+ "timestamp" : "0xc40271ca",
+ "il_offset" : "0x00026"
+ }
+,
+{
+ "is_managed" : "true",
+ "guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+ "token" : "0x600532a",
+ "native_offset" : "0x0",
+ "filename" : "mscorlib.dll",
+ "sizeofimage" : "0x450000",
+ "timestamp" : "0xc40271ca",
+ "il_offset" : "0x0000b"
+ }
+,
+{
+ "is_managed" : "true",
+ "guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+ "token" : "0x60021bf",
+ "native_offset" : "0x0",
+ "filename" : "mscorlib.dll",
+ "sizeofimage" : "0x450000",
+ "timestamp" : "0xc40271ca",
+ "il_offset" : "0x0002b"
+ }
+,
+{
+ "is_managed" : "true",
+ "guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+ "token" : "0x60022b9",
+ "native_offset" : "0x0",
+ "filename" : "mscorlib.dll",
+ "sizeofimage" : "0x450000",
+ "timestamp" : "0xc40271ca",
+ "il_offset" : "0x00000"
+ }
+,
+{
+ "is_managed" : "true",
+ "guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+ "token" : "0x60022bc",
+ "native_offset" : "0x0",
+ "filename" : "mscorlib.dll",
+ "sizeofimage" : "0x450000",
+ "timestamp" : "0xc40271ca",
+ "il_offset" : "0x00000"
+ }
+,
+{
+ "is_managed" : "true",
+ "guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+ "token" : "0x6001dff",
+ "native_offset" : "0x0",
+ "filename" : "mscorlib.dll",
+ "sizeofimage" : "0x450000",
+ "timestamp" : "0xc40271ca",
+ "il_offset" : "0x00071"
+ }
+,
+{
+ "is_managed" : "true",
+ "guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+ "token" : "0x6001dfe",
+ "native_offset" : "0x0",
+ "filename" : "mscorlib.dll",
+ "sizeofimage" : "0x450000",
+ "timestamp" : "0xc40271ca",
+ "il_offset" : "0x00000"
+ }
+,
+{
+ "is_managed" : "true",
+ "guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+ "token" : "0x6002325",
+ "native_offset" : "0x0",
+ "filename" : "mscorlib.dll",
+ "sizeofimage" : "0x450000",
+ "timestamp" : "0xc40271ca",
+ "il_offset" : "0x00034"
+ }
+,
+{
+ "is_managed" : "true",
+ "guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+ "token" : "0x60022bb",
+ "native_offset" : "0x0",
+ "filename" : "mscorlib.dll",
+ "sizeofimage" : "0x450000",
+ "timestamp" : "0xc40271ca",
+ "il_offset" : "0x0004a"
+ }
+,
+{
+ "is_managed" : "true",
+ "guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+ "token" : "0x60022ba",
+ "native_offset" : "0x0",
+ "filename" : "mscorlib.dll",
+ "sizeofimage" : "0x450000",
+ "timestamp" : "0xc40271ca",
+ "il_offset" : "0x00000"
+ }
+,
+{
+ "is_managed" : "true",
+ "guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+ "token" : "0x6001f07",
+ "native_offset" : "0x0",
+ "filename" : "mscorlib.dll",
+ "sizeofimage" : "0x450000",
+ "timestamp" : "0xc40271ca",
+ "il_offset" : "0x00074"
+ }
+,
+{
+ "is_managed" : "true",
+ "guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+ "token" : "0x6001f1c",
+ "native_offset" : "0x0",
+ "filename" : "mscorlib.dll",
+ "sizeofimage" : "0x450000",
+ "timestamp" : "0xc40271ca",
+ "il_offset" : "0x00000"
+ }
+,
+{
+ "is_managed" : "true",
+ "guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+ "token" : "0x00000",
+ "native_offset" : "0x0",
+ "filename" : "mscorlib.dll",
+ "sizeofimage" : "0x450000",
+ "timestamp" : "0xc40271ca",
+ "il_offset" : "0x0001e"
+ }
+
+],
+"unmanaged_frames" : [
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+
+]
+},
+{
+"is_managed" : true,
+"offset_free_hash" : "0x644001dba",
+"offset_rich_hash" : "0x644001efc",
+"crashed" : false,
+"native_thread_id" : "0x7fce5c2fb700",
+"thread_info_addr" : "0x7fce4c000b20",
+"thread_name" : "Timer-Scheduler",
+"ctx" : {
+"IP" : "0x7fce795bdfac",
+"SP" : "0x7fce5c2fa570",
+"BP" : "(nil)"
+},
+"managed_frames" : [
+{
+"native_address" : "unregistered"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x00000",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0000b"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001f68",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00019"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x600201f",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00048"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001e55",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00014"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dff",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00071"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dfe",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dfd",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0002b"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001e57",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00008"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x00000",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0001e"
+}
+
+],
+"unmanaged_frames" : [
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+
+]
+},
+{
+"is_managed" : true,
+"offset_free_hash" : "0xb26e48ee7",
+"offset_rich_hash" : "0xb26e49123",
+"crashed" : false,
+"native_thread_id" : "0x7fce47419700",
+"thread_info_addr" : "0x7fce30000b20",
+"thread_name" : "Thread Pool Wor",
+"ctx" : {
+"IP" : "0x7fce795bdfac",
+"SP" : "0x7fce474181d0",
+"BP" : "(nil)"
+},
+"managed_frames" : [
+{
+"native_address" : "unregistered"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x00000",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x00000",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0004f"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x60055ec",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00010"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6005593",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00026"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x600532a",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0000b"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x60021bf",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0002b"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x60022b9",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x60022bc",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dff",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00071"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dfe",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6002325",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00034"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x60022bb",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0004a"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x60022ba",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001f07",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00074"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001f1c",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x00000",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0001e"
+}
+
+],
+"unmanaged_frames" : [
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+
+]
+},
+{
+"is_managed" : true,
+"offset_free_hash" : "0xd77dda152",
+"offset_rich_hash" : "0xd77dda68f",
+"crashed" : false,
+"native_thread_id" : "0x7fce6cf41700",
+"thread_info_addr" : "0x7fcdfc323f60",
+"thread_name" : "Thread Pool Wor",
+"ctx" : {
+"IP" : "0x7fce795bdfac",
+"SP" : "0x7fce6cf401f0",
+"BP" : "(nil)"
+},
+"managed_frames" : [
+{
+"native_address" : "unregistered"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x00000",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+"token" : "0x00000",
+"native_offset" : "0x0",
+"filename" : "System.dll",
+"sizeofimage" : "0x278000",
+"timestamp" : "0xc134f6ee",
+"il_offset" : "0x00026"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+"token" : "0x6003dc8",
+"native_offset" : "0x0",
+"filename" : "System.dll",
+"sizeofimage" : "0x278000",
+"timestamp" : "0xc134f6ee",
+"il_offset" : "0x00012"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+"token" : "0x6004114",
+"native_offset" : "0x0",
+"filename" : "System.dll",
+"sizeofimage" : "0x278000",
+"timestamp" : "0xc134f6ee",
+"il_offset" : "0x00027"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+"token" : "0x6004113",
+"native_offset" : "0x0",
+"filename" : "System.dll",
+"sizeofimage" : "0x278000",
+"timestamp" : "0xc134f6ee",
+"il_offset" : "0x002dc"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+"token" : "0x6004308",
+"native_offset" : "0x0",
+"filename" : "System.dll",
+"sizeofimage" : "0x278000",
+"timestamp" : "0xc134f6ee",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x60022bd",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00025"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x60022b9",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x60022bc",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dff",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00071"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dfe",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6002325",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00034"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x60022bb",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0004a"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6002431",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001e55",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00025"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dff",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00071"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dfe",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dfd",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0002b"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001e56",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0000f"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x00000",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0001e"
+}
+
+],
+"unmanaged_frames" : [
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+
+]
+},
+{
+"is_managed" : true,
+"offset_free_hash" : "0xd77dda152",
+"offset_rich_hash" : "0xd77dda68f",
+"crashed" : false,
+"native_thread_id" : "0x7fce06ad4700",
+"thread_info_addr" : "0x7fcdec000b20",
+"thread_name" : "Thread Pool Wor",
+"ctx" : {
+"IP" : "0x7fce795bdfac",
+"SP" : "0x7fce06ad31f0",
+"BP" : "(nil)"
+},
+"managed_frames" : [
+{
+"native_address" : "unregistered"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x00000",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+"token" : "0x00000",
+"native_offset" : "0x0",
+"filename" : "System.dll",
+"sizeofimage" : "0x278000",
+"timestamp" : "0xc134f6ee",
+"il_offset" : "0x00026"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+"token" : "0x6003dc8",
+"native_offset" : "0x0",
+"filename" : "System.dll",
+"sizeofimage" : "0x278000",
+"timestamp" : "0xc134f6ee",
+"il_offset" : "0x00012"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+"token" : "0x6004114",
+"native_offset" : "0x0",
+"filename" : "System.dll",
+"sizeofimage" : "0x278000",
+"timestamp" : "0xc134f6ee",
+"il_offset" : "0x00027"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+"token" : "0x6004113",
+"native_offset" : "0x0",
+"filename" : "System.dll",
+"sizeofimage" : "0x278000",
+"timestamp" : "0xc134f6ee",
+"il_offset" : "0x002dc"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+"token" : "0x6004308",
+"native_offset" : "0x0",
+"filename" : "System.dll",
+"sizeofimage" : "0x278000",
+"timestamp" : "0xc134f6ee",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x60022bd",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00025"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x60022b9",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x60022bc",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dff",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00071"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dfe",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6002325",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00034"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x60022bb",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0004a"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6002431",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001e55",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00025"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dff",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00071"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dfe",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dfd",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0002b"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001e56",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0000f"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x00000",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0001e"
+}
+
+],
+"unmanaged_frames" : [
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+
+]
+},
+{
+"is_managed" : true,
+"offset_free_hash" : "0xd77dda152",
+"offset_rich_hash" : "0xd77dda68f",
+"crashed" : false,
+"native_thread_id" : "0x7fce46b76700",
+"thread_info_addr" : "0x7fce34000b20",
+"thread_name" : "GUI Thread",
+"ctx" : {
+"IP" : "0x7fce795bdfac",
+"SP" : "0x7fce46b751f0",
+"BP" : "(nil)"
+},
+"managed_frames" : [
+{
+"native_address" : "unregistered"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x00000",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+"token" : "0x00000",
+"native_offset" : "0x0",
+"filename" : "System.dll",
+"sizeofimage" : "0x278000",
+"timestamp" : "0xc134f6ee",
+"il_offset" : "0x00026"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+"token" : "0x6003dc8",
+"native_offset" : "0x0",
+"filename" : "System.dll",
+"sizeofimage" : "0x278000",
+"timestamp" : "0xc134f6ee",
+"il_offset" : "0x00012"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+"token" : "0x6004114",
+"native_offset" : "0x0",
+"filename" : "System.dll",
+"sizeofimage" : "0x278000",
+"timestamp" : "0xc134f6ee",
+"il_offset" : "0x00027"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+"token" : "0x6004113",
+"native_offset" : "0x0",
+"filename" : "System.dll",
+"sizeofimage" : "0x278000",
+"timestamp" : "0xc134f6ee",
+"il_offset" : "0x002dc"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+"token" : "0x6004308",
+"native_offset" : "0x0",
+"filename" : "System.dll",
+"sizeofimage" : "0x278000",
+"timestamp" : "0xc134f6ee",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x60022bd",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00025"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x60022b9",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x60022bc",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dff",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00071"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dfe",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6002325",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00034"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x60022bb",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0004a"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6002431",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001e55",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00025"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dff",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00071"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dfe",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dfd",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0002b"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001e56",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0000f"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x00000",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0001e"
+}
+
+],
+"unmanaged_frames" : [
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+
+]
+},
+{
+"is_managed" : true,
+"offset_free_hash" : "0x644001ff2",
+"offset_rich_hash" : "0x644002155",
+"crashed" : false,
+"native_thread_id" : "0x7fce6d142700",
+"thread_info_addr" : "0x7fce60000b20",
+"thread_name" : "Thread Pool Wor",
+"ctx" : {
+"IP" : "0x7fce795bdfac",
+"SP" : "0x7fce6d141210",
+"BP" : "(nil)"
+},
+"managed_frames" : [
+{
+"native_address" : "unregistered"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x00000",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0000b"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6002005",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0002d"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001f21",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00007"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dff",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00071"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dfe",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001f1f",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00021"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001f07",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00074"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001f1c",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x00000",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0001e"
+}
+
+],
+"unmanaged_frames" : [
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+
+]
+},
+{
+"is_managed" : true,
+"offset_free_hash" : "0xd77dda152",
+"offset_rich_hash" : "0xd77dda68f",
+"crashed" : false,
+"native_thread_id" : "0x7fce052d1700",
+"thread_info_addr" : "0x7fce080008d0",
+"thread_name" : "Thread Pool Wor",
+"ctx" : {
+"IP" : "0x7fce795bdfac",
+"SP" : "0x7fce052d01f0",
+"BP" : "(nil)"
+},
+"managed_frames" : [
+{
+"native_address" : "unregistered"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x00000",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+"token" : "0x00000",
+"native_offset" : "0x0",
+"filename" : "System.dll",
+"sizeofimage" : "0x278000",
+"timestamp" : "0xc134f6ee",
+"il_offset" : "0x00026"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+"token" : "0x6003dc8",
+"native_offset" : "0x0",
+"filename" : "System.dll",
+"sizeofimage" : "0x278000",
+"timestamp" : "0xc134f6ee",
+"il_offset" : "0x00012"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+"token" : "0x6004114",
+"native_offset" : "0x0",
+"filename" : "System.dll",
+"sizeofimage" : "0x278000",
+"timestamp" : "0xc134f6ee",
+"il_offset" : "0x00027"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+"token" : "0x6004113",
+"native_offset" : "0x0",
+"filename" : "System.dll",
+"sizeofimage" : "0x278000",
+"timestamp" : "0xc134f6ee",
+"il_offset" : "0x002dc"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+"token" : "0x6004308",
+"native_offset" : "0x0",
+"filename" : "System.dll",
+"sizeofimage" : "0x278000",
+"timestamp" : "0xc134f6ee",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x60022bd",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00025"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x60022b9",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x60022bc",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dff",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00071"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dfe",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6002325",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00034"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x60022bb",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0004a"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6002431",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001e55",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00025"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dff",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00071"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dfe",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dfd",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0002b"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001e56",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0000f"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x00000",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0001e"
+}
+
+],
+"unmanaged_frames" : [
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+
+]
+},
+{
+"is_managed" : true,
+"offset_free_hash" : "0xd77dda152",
+"offset_rich_hash" : "0xd77dda68f",
+"crashed" : false,
+"native_thread_id" : "0x7fce04ad0700",
+"thread_info_addr" : "0x7fcdfc0008d0",
+"thread_name" : "Thread Pool Wor",
+"ctx" : {
+"IP" : "0x7fce795bdfac",
+"SP" : "0x7fce04acf1f0",
+"BP" : "(nil)"
+},
+"managed_frames" : [
+{
+"native_address" : "unregistered"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x00000",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+"token" : "0x00000",
+"native_offset" : "0x0",
+"filename" : "System.dll",
+"sizeofimage" : "0x278000",
+"timestamp" : "0xc134f6ee",
+"il_offset" : "0x00026"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+"token" : "0x6003dc8",
+"native_offset" : "0x0",
+"filename" : "System.dll",
+"sizeofimage" : "0x278000",
+"timestamp" : "0xc134f6ee",
+"il_offset" : "0x00012"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+"token" : "0x6004114",
+"native_offset" : "0x0",
+"filename" : "System.dll",
+"sizeofimage" : "0x278000",
+"timestamp" : "0xc134f6ee",
+"il_offset" : "0x00027"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+"token" : "0x6004113",
+"native_offset" : "0x0",
+"filename" : "System.dll",
+"sizeofimage" : "0x278000",
+"timestamp" : "0xc134f6ee",
+"il_offset" : "0x002dc"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+"token" : "0x6004308",
+"native_offset" : "0x0",
+"filename" : "System.dll",
+"sizeofimage" : "0x278000",
+"timestamp" : "0xc134f6ee",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x60022bd",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00025"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x60022b9",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x60022bc",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dff",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00071"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dfe",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6002325",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00034"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x60022bb",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0004a"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6002431",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001e55",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00025"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dff",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00071"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dfe",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dfd",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0002b"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001e56",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0000f"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x00000",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0001e"
+}
+
+],
+"unmanaged_frames" : [
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+
+]
+},
+{
+"is_managed" : true,
+"offset_free_hash" : "0x8750e8aa9",
+"offset_rich_hash" : "0x8750e8c09",
+"crashed" : false,
+"native_thread_id" : "0x7fcdd38fe700",
+"thread_info_addr" : "0x7fce2c54ea60",
+"thread_name" : "SDB Event Handl",
+"ctx" : {
+"IP" : "0x7fce795bdfac",
+"SP" : "0x7fcdd38fd450",
+"BP" : "(nil)"
+},
+"managed_frames" : [
+{
+"native_address" : "unregistered"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x00000",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x00000",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00025"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001e35",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0002f"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001e2c",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "A72E1810-8C73-47BE-A221-F7796A33CC72",
+"token" : "0x600035e",
+"native_offset" : "0x0",
+"filename" : "Mono.Debugger.Soft.dll",
+"sizeofimage" : "0x30000",
+"timestamp" : "0x5c79f81d",
+"il_offset" : "0x00026"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "2334BB37-A1E0-4C4B-8D85-A6DE3E6356E7",
+"token" : "0x6000071",
+"native_offset" : "0x0",
+"filename" : "Mono.Debugging.Soft.dll",
+"sizeofimage" : "0x2e000",
+"timestamp" : "0x5c79f81f",
+"il_offset" : "0x00010"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001e55",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00014"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dff",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00071"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dfe",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dfd",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0002b"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001e57",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00008"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x00000",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0001e"
+}
+
+],
+"unmanaged_frames" : [
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+
+]
+},
+{
+"is_managed" : true,
+"offset_free_hash" : "0xd77dda152",
+"offset_rich_hash" : "0xd77dda68f",
+"crashed" : false,
+"native_thread_id" : "0x7fce042cf700",
+"thread_info_addr" : "0x7fcde0003280",
+"thread_name" : "Thread Pool Wor",
+"ctx" : {
+"IP" : "0x7fce795bdfac",
+"SP" : "0x7fce042ce1f0",
+"BP" : "(nil)"
+},
+"managed_frames" : [
+{
+"native_address" : "unregistered"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x00000",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+"token" : "0x00000",
+"native_offset" : "0x0",
+"filename" : "System.dll",
+"sizeofimage" : "0x278000",
+"timestamp" : "0xc134f6ee",
+"il_offset" : "0x00026"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+"token" : "0x6003dc8",
+"native_offset" : "0x0",
+"filename" : "System.dll",
+"sizeofimage" : "0x278000",
+"timestamp" : "0xc134f6ee",
+"il_offset" : "0x00012"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+"token" : "0x6004114",
+"native_offset" : "0x0",
+"filename" : "System.dll",
+"sizeofimage" : "0x278000",
+"timestamp" : "0xc134f6ee",
+"il_offset" : "0x00027"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+"token" : "0x6004113",
+"native_offset" : "0x0",
+"filename" : "System.dll",
+"sizeofimage" : "0x278000",
+"timestamp" : "0xc134f6ee",
+"il_offset" : "0x002dc"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+"token" : "0x6004308",
+"native_offset" : "0x0",
+"filename" : "System.dll",
+"sizeofimage" : "0x278000",
+"timestamp" : "0xc134f6ee",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x60022bd",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00025"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x60022b9",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x60022bc",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dff",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00071"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dfe",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6002325",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00034"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x60022bb",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0004a"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6002431",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001e55",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00025"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dff",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00071"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dfe",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dfd",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0002b"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001e56",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0000f"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x00000",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0001e"
+}
+
+],
+"unmanaged_frames" : [
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+
+]
+},
+{
+"is_managed" : true,
+"offset_free_hash" : "0xf85f24df5",
+"offset_rich_hash" : "0xf85f25184",
+"crashed" : false,
+"native_thread_id" : "0x7fce44dfe700",
+"thread_info_addr" : "0x7fce1c0008d0",
+"thread_name" : "Thread Pool Wor",
+"ctx" : {
+"IP" : "0x7fce795bdfac",
+"SP" : "0x7fce44dfcfe0",
+"BP" : "(nil)"
+},
+"managed_frames" : [
+{
+"native_address" : "unregistered"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x00000",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00025"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001e35",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0002f"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001d80",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x000d9"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+"token" : "0x6003ae0",
+"native_offset" : "0x0",
+"filename" : "System.dll",
+"sizeofimage" : "0x278000",
+"timestamp" : "0xc134f6ee",
+"il_offset" : "0x00067"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+"token" : "0x6003adf",
+"native_offset" : "0x0",
+"filename" : "System.dll",
+"sizeofimage" : "0x278000",
+"timestamp" : "0xc134f6ee",
+"il_offset" : "0x00006"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+"token" : "0x6003ada",
+"native_offset" : "0x0",
+"filename" : "System.dll",
+"sizeofimage" : "0x278000",
+"timestamp" : "0xc134f6ee",
+"il_offset" : "0x00009"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "E5969C60-110B-4D73-A2DB-144BF8757E5A",
+"token" : "0x6000b76",
+"native_offset" : "0x0",
+"filename" : "Microsoft.CodeAnalysis.Features.dll",
+"sizeofimage" : "0x290000",
+"timestamp" : "0x8f26a99c",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "5DA55B00-63AB-4CC0-89C7-1DD7627C0EB2",
+"token" : "0x6001fa5",
+"native_offset" : "0x0",
+"filename" : "Microsoft.CodeAnalysis.Workspaces.dll",
+"sizeofimage" : "0x2aa000",
+"timestamp" : "0xfd8e2685",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x60022bd",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0000f"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x60022b9",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x60022bc",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dff",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00071"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dfe",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6002325",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00034"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x60022bb",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0004a"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6002431",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001e55",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00025"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dff",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00071"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dfe",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dfd",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0002b"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001e56",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0000f"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x00000",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0001e"
+}
+
+],
+"unmanaged_frames" : [
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+
+]
+},
+{
+"is_managed" : true,
+"offset_free_hash" : "0x5ce7bb4e1",
+"offset_rich_hash" : "0x5ce7bb643",
+"crashed" : false,
+"native_thread_id" : "0x7fce5cdf7700",
+"thread_info_addr" : "0x7fce48000b20",
+"thread_name" : "NuGet backgroun",
+"ctx" : {
+"IP" : "0x7fce795bdfac",
+"SP" : "0x7fce5cdf6530",
+"BP" : "(nil)"
+},
+"managed_frames" : [
+{
+"native_address" : "unregistered"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x00000",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0000b"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001f68",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00019"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "32B4715A-E1B2-4BCC-8A20-0D2E6E21A607",
+"token" : "0x60005b6",
+"native_offset" : "0x0",
+"filename" : "MonoDevelop.PackageManagement.dll",
+"sizeofimage" : "0x9e000",
+"timestamp" : "0xbf026b53",
+"il_offset" : "0x00068"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001e55",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00014"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dff",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00071"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dfe",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dfd",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0002b"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001e57",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00008"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x00000",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0001e"
+}
+
+],
+"unmanaged_frames" : [
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+
+]
+},
+{
+"is_managed" : true,
+"offset_free_hash" : "0x119ccc4883",
+"offset_rich_hash" : "0x119ccc5f59",
+"crashed" : false,
+"native_thread_id" : "0x7fce793d0740",
+"thread_info_addr" : "0x55a50dc13670",
+"thread_name" : "GUI Thread",
+"ctx" : {
+"IP" : "0x7fce795c09c2",
+"SP" : "0x7ffec5b48cc0",
+"BP" : "0x55a515fdf430"
+},
+"managed_frames" : [
+{
+"native_address" : "unregistered"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x00000",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "ED39F21B-9E93-43DC-BD44-2A17AD356A9F",
+"token" : "0x6000033",
+"native_offset" : "0x0",
+"filename" : "glib-sharp.dll",
+"sizeofimage" : "0x1e000",
+"timestamp" : "0x0",
+"il_offset" : "0x00089"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "7AAB76E8-7BCE-48A4-B45C-F7FA613CB70C",
+"token" : "0x6003c77",
+"native_offset" : "0x0",
+"filename" : "gtk-sharp.dll",
+"sizeofimage" : "0x164000",
+"timestamp" : "0x0",
+"il_offset" : "0x00029"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "7AAB76E8-7BCE-48A4-B45C-F7FA613CB70C",
+"token" : "0x00000",
+"native_offset" : "0x0",
+"filename" : "gtk-sharp.dll",
+"sizeofimage" : "0x164000",
+"timestamp" : "0x0",
+"il_offset" : "0xffffffff"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "7AAB76E8-7BCE-48A4-B45C-F7FA613CB70C",
+"token" : "0x00000",
+"native_offset" : "0x0",
+"filename" : "gtk-sharp.dll",
+"sizeofimage" : "0x164000",
+"timestamp" : "0x0",
+"il_offset" : "0x0000c"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "7AAB76E8-7BCE-48A4-B45C-F7FA613CB70C",
+"token" : "0x6000aa1",
+"native_offset" : "0x0",
+"filename" : "gtk-sharp.dll",
+"sizeofimage" : "0x164000",
+"timestamp" : "0x0",
+"il_offset" : "0x00006"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "C0354B3A-60C5-4B63-A107-28D2CB660ACC",
+"token" : "0x60004a4",
+"native_offset" : "0x0",
+"filename" : "MonoDevelop.Ide.dll",
+"sizeofimage" : "0x6d4000",
+"timestamp" : "0xbe849b9e",
+"il_offset" : "0x00016"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "C0354B3A-60C5-4B63-A107-28D2CB660ACC",
+"token" : "0x6001703",
+"native_offset" : "0x0",
+"filename" : "MonoDevelop.Ide.dll",
+"sizeofimage" : "0x6d4000",
+"timestamp" : "0xbe849b9e",
+"il_offset" : "0x0007d"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "C0354B3A-60C5-4B63-A107-28D2CB660ACC",
+"token" : "0x6001701",
+"native_offset" : "0x0",
+"filename" : "MonoDevelop.Ide.dll",
+"sizeofimage" : "0x6d4000",
+"timestamp" : "0xbe849b9e",
+"il_offset" : "0x00009"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "C0354B3A-60C5-4B63-A107-28D2CB660ACC",
+"token" : "0x6001104",
+"native_offset" : "0x0",
+"filename" : "MonoDevelop.Ide.dll",
+"sizeofimage" : "0x6d4000",
+"timestamp" : "0xbe849b9e",
+"il_offset" : "0x000bb"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "C0354B3A-60C5-4B63-A107-28D2CB660ACC",
+"token" : "0x60010b6",
+"native_offset" : "0x0",
+"filename" : "MonoDevelop.Ide.dll",
+"sizeofimage" : "0x6d4000",
+"timestamp" : "0xbe849b9e",
+"il_offset" : "0x00022"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "C0354B3A-60C5-4B63-A107-28D2CB660ACC",
+"token" : "0x6001103",
+"native_offset" : "0x0",
+"filename" : "MonoDevelop.Ide.dll",
+"sizeofimage" : "0x6d4000",
+"timestamp" : "0xbe849b9e",
+"il_offset" : "0x0002b"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "C0354B3A-60C5-4B63-A107-28D2CB660ACC",
+"token" : "0x6004bd0",
+"native_offset" : "0x0",
+"filename" : "MonoDevelop.Ide.dll",
+"sizeofimage" : "0x6d4000",
+"timestamp" : "0xbe849b9e",
+"il_offset" : "0x00019"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "C0354B3A-60C5-4B63-A107-28D2CB660ACC",
+"token" : "0x00000",
+"native_offset" : "0x0",
+"filename" : "MonoDevelop.Ide.dll",
+"sizeofimage" : "0x6d4000",
+"timestamp" : "0xbe849b9e",
+"il_offset" : "0x0001e"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x00000",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x60034c8",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x000b5"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6003a78",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0001c"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6003a70",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00016"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x60035d3",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00007"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "C0354B3A-60C5-4B63-A107-28D2CB660ACC",
+"token" : "0x6003cc8",
+"native_offset" : "0x0",
+"filename" : "MonoDevelop.Ide.dll",
+"sizeofimage" : "0x6d4000",
+"timestamp" : "0xbe849b9e",
+"il_offset" : "0x00008"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "C0354B3A-60C5-4B63-A107-28D2CB660ACC",
+"token" : "0x6003cae",
+"native_offset" : "0x0",
+"filename" : "MonoDevelop.Ide.dll",
+"sizeofimage" : "0x6d4000",
+"timestamp" : "0xbe849b9e",
+"il_offset" : "0x0000a"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "C0354B3A-60C5-4B63-A107-28D2CB660ACC",
+"token" : "0x6003cc6",
+"native_offset" : "0x0",
+"filename" : "MonoDevelop.Ide.dll",
+"sizeofimage" : "0x6d4000",
+"timestamp" : "0xbe849b9e",
+"il_offset" : "0x0011a"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x600351a",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00035"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6003a6b",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0001a"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x600361b",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0004a"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x600390e",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00039"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6003931",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0000a"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6003597",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x000cc"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x600358b",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00093"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x00000",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0001e"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x00000",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "C0354B3A-60C5-4B63-A107-28D2CB660ACC",
+"token" : "0x00000",
+"native_offset" : "0x0",
+"filename" : "MonoDevelop.Ide.dll",
+"sizeofimage" : "0x6d4000",
+"timestamp" : "0xbe849b9e",
+"il_offset" : "0x0001d"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "C0354B3A-60C5-4B63-A107-28D2CB660ACC",
+"token" : "0x00000",
+"native_offset" : "0x0",
+"filename" : "MonoDevelop.Ide.dll",
+"sizeofimage" : "0x6d4000",
+"timestamp" : "0xbe849b9e",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "C0354B3A-60C5-4B63-A107-28D2CB660ACC",
+"token" : "0x600170d",
+"native_offset" : "0x0",
+"filename" : "MonoDevelop.Ide.dll",
+"sizeofimage" : "0x6d4000",
+"timestamp" : "0xbe849b9e",
+"il_offset" : "0x00044"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "C0354B3A-60C5-4B63-A107-28D2CB660ACC",
+"token" : "0x600170b",
+"native_offset" : "0x0",
+"filename" : "MonoDevelop.Ide.dll",
+"sizeofimage" : "0x6d4000",
+"timestamp" : "0xbe849b9e",
+"il_offset" : "0x0000c"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "C0354B3A-60C5-4B63-A107-28D2CB660ACC",
+"token" : "0x6001709",
+"native_offset" : "0x0",
+"filename" : "MonoDevelop.Ide.dll",
+"sizeofimage" : "0x6d4000",
+"timestamp" : "0xbe849b9e",
+"il_offset" : "0x00001"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "C0354B3A-60C5-4B63-A107-28D2CB660ACC",
+"token" : "0x60016ec",
+"native_offset" : "0x0",
+"filename" : "MonoDevelop.Ide.dll",
+"sizeofimage" : "0x6d4000",
+"timestamp" : "0xbe849b9e",
+"il_offset" : "0x0004f"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "C0354B3A-60C5-4B63-A107-28D2CB660ACC",
+"token" : "0x6004bf4",
+"native_offset" : "0x0",
+"filename" : "MonoDevelop.Ide.dll",
+"sizeofimage" : "0x6d4000",
+"timestamp" : "0xbe849b9e",
+"il_offset" : "0x000bf"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x00000",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00036"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "A0B4B72C-448E-4DB9-964E-28C48A04BDE2",
+"token" : "0x6001683",
+"native_offset" : "0x0",
+"filename" : "MonoDevelop.Core.dll",
+"sizeofimage" : "0x1c2000",
+"timestamp" : "0x982e7372",
+"il_offset" : "0x00046"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "A0B4B72C-448E-4DB9-964E-28C48A04BDE2",
+"token" : "0x60016a4",
+"native_offset" : "0x0",
+"filename" : "MonoDevelop.Core.dll",
+"sizeofimage" : "0x1c2000",
+"timestamp" : "0x982e7372",
+"il_offset" : "0x0000f"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "C0354B3A-60C5-4B63-A107-28D2CB660ACC",
+"token" : "0x600178f",
+"native_offset" : "0x0",
+"filename" : "MonoDevelop.Ide.dll",
+"sizeofimage" : "0x6d4000",
+"timestamp" : "0xbe849b9e",
+"il_offset" : "0x0007c"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "C0354B3A-60C5-4B63-A107-28D2CB660ACC",
+"token" : "0x6004be8",
+"native_offset" : "0x0",
+"filename" : "MonoDevelop.Ide.dll",
+"sizeofimage" : "0x6d4000",
+"timestamp" : "0xbe849b9e",
+"il_offset" : "0x00012"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "ED39F21B-9E93-43DC-BD44-2A17AD356A9F",
+"token" : "0x6000033",
+"native_offset" : "0x0",
+"filename" : "glib-sharp.dll",
+"sizeofimage" : "0x1e000",
+"timestamp" : "0x0",
+"il_offset" : "0x00051"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "7AAB76E8-7BCE-48A4-B45C-F7FA613CB70C",
+"token" : "0x6003c77",
+"native_offset" : "0x0",
+"filename" : "gtk-sharp.dll",
+"sizeofimage" : "0x164000",
+"timestamp" : "0x0",
+"il_offset" : "0x00029"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "7AAB76E8-7BCE-48A4-B45C-F7FA613CB70C",
+"token" : "0x00000",
+"native_offset" : "0x0",
+"filename" : "gtk-sharp.dll",
+"sizeofimage" : "0x164000",
+"timestamp" : "0x0",
+"il_offset" : "0xffffffff"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "7AAB76E8-7BCE-48A4-B45C-F7FA613CB70C",
+"token" : "0x00000",
+"native_offset" : "0x0",
+"filename" : "gtk-sharp.dll",
+"sizeofimage" : "0x164000",
+"timestamp" : "0x0",
+"il_offset" : "0x0000c"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "7AAB76E8-7BCE-48A4-B45C-F7FA613CB70C",
+"token" : "0x60041c1",
+"native_offset" : "0x0",
+"filename" : "gtk-sharp.dll",
+"sizeofimage" : "0x164000",
+"timestamp" : "0x0",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "C0354B3A-60C5-4B63-A107-28D2CB660ACC",
+"token" : "0x60015db",
+"native_offset" : "0x0",
+"filename" : "MonoDevelop.Ide.dll",
+"sizeofimage" : "0x6d4000",
+"timestamp" : "0xbe849b9e",
+"il_offset" : "0x00007"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "C0354B3A-60C5-4B63-A107-28D2CB660ACC",
+"token" : "0x600177a",
+"native_offset" : "0x0",
+"filename" : "MonoDevelop.Ide.dll",
+"sizeofimage" : "0x6d4000",
+"timestamp" : "0xbe849b9e",
+"il_offset" : "0x00b91"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "C0354B3A-60C5-4B63-A107-28D2CB660ACC",
+"token" : "0x6001791",
+"native_offset" : "0x0",
+"filename" : "MonoDevelop.Ide.dll",
+"sizeofimage" : "0x6d4000",
+"timestamp" : "0xbe849b9e",
+"il_offset" : "0x000f4"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F17F5715-FC8C-42BD-827F-0D9E633392DD",
+"token" : "0x6000001",
+"native_offset" : "0x0",
+"filename" : "MonoDevelop.exe",
+"sizeofimage" : "0x18000",
+"timestamp" : "0xd9e768c1",
+"il_offset" : "0x00001"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F17F5715-FC8C-42BD-827F-0D9E633392DD",
+"token" : "0x00000",
+"native_offset" : "0x0",
+"filename" : "MonoDevelop.exe",
+"sizeofimage" : "0x18000",
+"timestamp" : "0xd9e768c1",
+"il_offset" : "0x0001e"
+}
+
+],
+"unmanaged_frames" : [
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+
+]
+},
+{
+"is_managed" : false,
+"offset_free_hash" : "0x0",
+"offset_rich_hash" : "0x0",
+"crashed" : false,
+"native_thread_id" : "0x7fcdda8ff700",
+"thread_info_addr" : "0x7fce681517c0",
+"thread_name" : "GUI Thread",
+"ctx" : {
+"IP" : "0x7fce795bdfac",
+"SP" : "0x7fcdda8fea90",
+"BP" : "(nil)"
+},
+"unmanaged_frames" : [
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+
+]
+},
+{
+"is_managed" : true,
+"offset_free_hash" : "0xd77dda152",
+"offset_rich_hash" : "0xd77dda68f",
+"crashed" : false,
+"native_thread_id" : "0x7fce054f9700",
+"thread_info_addr" : "0x55a510f421c0",
+"thread_name" : "Thread Pool Wor",
+"ctx" : {
+"IP" : "0x7fce795bdfac",
+"SP" : "0x7fce054f81f0",
+"BP" : "(nil)"
+},
+"managed_frames" : [
+{
+"native_address" : "unregistered"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x00000",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+"token" : "0x00000",
+"native_offset" : "0x0",
+"filename" : "System.dll",
+"sizeofimage" : "0x278000",
+"timestamp" : "0xc134f6ee",
+"il_offset" : "0x00026"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+"token" : "0x6003dc8",
+"native_offset" : "0x0",
+"filename" : "System.dll",
+"sizeofimage" : "0x278000",
+"timestamp" : "0xc134f6ee",
+"il_offset" : "0x00012"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+"token" : "0x6004114",
+"native_offset" : "0x0",
+"filename" : "System.dll",
+"sizeofimage" : "0x278000",
+"timestamp" : "0xc134f6ee",
+"il_offset" : "0x00027"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+"token" : "0x6004113",
+"native_offset" : "0x0",
+"filename" : "System.dll",
+"sizeofimage" : "0x278000",
+"timestamp" : "0xc134f6ee",
+"il_offset" : "0x002dc"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+"token" : "0x6004308",
+"native_offset" : "0x0",
+"filename" : "System.dll",
+"sizeofimage" : "0x278000",
+"timestamp" : "0xc134f6ee",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x60022bd",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00025"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x60022b9",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x60022bc",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dff",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00071"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dfe",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6002325",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00034"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x60022bb",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0004a"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6002431",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001e55",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00025"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dff",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00071"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dfe",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dfd",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0002b"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001e56",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0000f"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x00000",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0001e"
+}
+
+],
+"unmanaged_frames" : [
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+
+]
+},
+{
+"is_managed" : true,
+"offset_free_hash" : "0xd77dda152",
+"offset_rich_hash" : "0xd77dda68f",
+"crashed" : false,
+"native_thread_id" : "0x7fce056fa700",
+"thread_info_addr" : "0x7fcde0000b20",
+"thread_name" : "Thread Pool Wor",
+"ctx" : {
+"IP" : "0x7fce795bdfac",
+"SP" : "0x7fce056f91f0",
+"BP" : "(nil)"
+},
+"managed_frames" : [
+{
+"native_address" : "unregistered"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x00000",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+"token" : "0x00000",
+"native_offset" : "0x0",
+"filename" : "System.dll",
+"sizeofimage" : "0x278000",
+"timestamp" : "0xc134f6ee",
+"il_offset" : "0x00026"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+"token" : "0x6003dc8",
+"native_offset" : "0x0",
+"filename" : "System.dll",
+"sizeofimage" : "0x278000",
+"timestamp" : "0xc134f6ee",
+"il_offset" : "0x00012"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+"token" : "0x6004114",
+"native_offset" : "0x0",
+"filename" : "System.dll",
+"sizeofimage" : "0x278000",
+"timestamp" : "0xc134f6ee",
+"il_offset" : "0x00027"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+"token" : "0x6004113",
+"native_offset" : "0x0",
+"filename" : "System.dll",
+"sizeofimage" : "0x278000",
+"timestamp" : "0xc134f6ee",
+"il_offset" : "0x002dc"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+"token" : "0x6004308",
+"native_offset" : "0x0",
+"filename" : "System.dll",
+"sizeofimage" : "0x278000",
+"timestamp" : "0xc134f6ee",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x60022bd",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00025"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x60022b9",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x60022bc",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dff",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00071"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dfe",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6002325",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00034"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x60022bb",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0004a"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6002431",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001e55",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00025"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dff",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00071"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dfe",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dfd",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0002b"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001e56",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0000f"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x00000",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0001e"
+}
+
+],
+"unmanaged_frames" : [
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+
+]
+},
+{
+"is_managed" : true,
+"offset_free_hash" : "0x887c8dbaf",
+"offset_rich_hash" : "0x887c8dd1a",
+"crashed" : false,
+"native_thread_id" : "0x7fcdd3d00700",
+"thread_info_addr" : "0x7fce1008f4a0",
+"thread_name" : "SDB error reade",
+"ctx" : {
+"IP" : "0x7fce795bdfac",
+"SP" : "0x7fcdd3cff450",
+"BP" : "(nil)"
+},
+"managed_frames" : [
+{
+"native_address" : "unregistered"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x00000",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x00000",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0004f"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x60055ec",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00010"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6005593",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00026"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "2334BB37-A1E0-4C4B-8D85-A6DE3E6356E7",
+"token" : "0x6000040",
+"native_offset" : "0x0",
+"filename" : "Mono.Debugging.Soft.dll",
+"sizeofimage" : "0x2e000",
+"timestamp" : "0x5c79f81f",
+"il_offset" : "0x00010"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "2334BB37-A1E0-4C4B-8D85-A6DE3E6356E7",
+"token" : "0x60001ee",
+"native_offset" : "0x0",
+"filename" : "Mono.Debugging.Soft.dll",
+"sizeofimage" : "0x2e000",
+"timestamp" : "0x5c79f81f",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001e55",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00014"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dff",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00071"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dfe",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dfd",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0002b"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001e57",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00008"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x00000",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0001e"
+}
+
+],
+"unmanaged_frames" : [
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+
+]
+},
+{
+"is_managed" : true,
+"offset_free_hash" : "0xd77dda152",
+"offset_rich_hash" : "0xd77dda68f",
+"crashed" : false,
+"native_thread_id" : "0x7fce058fb700",
+"thread_info_addr" : "0x7fcdf80008d0",
+"thread_name" : "Thread Pool Wor",
+"ctx" : {
+"IP" : "0x7fce795bdfac",
+"SP" : "0x7fce058fa1f0",
+"BP" : "(nil)"
+},
+"managed_frames" : [
+{
+"native_address" : "unregistered"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x00000",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+"token" : "0x00000",
+"native_offset" : "0x0",
+"filename" : "System.dll",
+"sizeofimage" : "0x278000",
+"timestamp" : "0xc134f6ee",
+"il_offset" : "0x00026"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+"token" : "0x6003dc8",
+"native_offset" : "0x0",
+"filename" : "System.dll",
+"sizeofimage" : "0x278000",
+"timestamp" : "0xc134f6ee",
+"il_offset" : "0x00012"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+"token" : "0x6004114",
+"native_offset" : "0x0",
+"filename" : "System.dll",
+"sizeofimage" : "0x278000",
+"timestamp" : "0xc134f6ee",
+"il_offset" : "0x00027"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+"token" : "0x6004113",
+"native_offset" : "0x0",
+"filename" : "System.dll",
+"sizeofimage" : "0x278000",
+"timestamp" : "0xc134f6ee",
+"il_offset" : "0x002dc"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+"token" : "0x6004308",
+"native_offset" : "0x0",
+"filename" : "System.dll",
+"sizeofimage" : "0x278000",
+"timestamp" : "0xc134f6ee",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x60022bd",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00025"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x60022b9",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x60022bc",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dff",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00071"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dfe",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6002325",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00034"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x60022bb",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0004a"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6002431",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001e55",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00025"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dff",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00071"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dfe",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dfd",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0002b"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001e56",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0000f"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x00000",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0001e"
+}
+
+],
+"unmanaged_frames" : [
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+
+]
+},
+{
+"is_managed" : true,
+"offset_free_hash" : "0xadad97164",
+"offset_rich_hash" : "0xadad972d5",
+"crashed" : false,
+"native_thread_id" : "0x7fcdccef9700",
+"thread_info_addr" : "0x7fce2c0008d0",
+"thread_name" : "SDB Receiver",
+"ctx" : {
+"IP" : "0x7fce795bdfac",
+"SP" : "0x7fcdccef8130",
+"BP" : "(nil)"
+},
+"managed_frames" : [
+{
+"native_address" : "unregistered"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x00000",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+"token" : "0x00000",
+"native_offset" : "0x0",
+"filename" : "System.dll",
+"sizeofimage" : "0x278000",
+"timestamp" : "0xc134f6ee",
+"il_offset" : "0x0004b"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+"token" : "0x60020fa",
+"native_offset" : "0x0",
+"filename" : "System.dll",
+"sizeofimage" : "0x278000",
+"timestamp" : "0xc134f6ee",
+"il_offset" : "0x0000c"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+"token" : "0x60020f1",
+"native_offset" : "0x0",
+"filename" : "System.dll",
+"sizeofimage" : "0x278000",
+"timestamp" : "0xc134f6ee",
+"il_offset" : "0x0002e"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+"token" : "0x600208c",
+"native_offset" : "0x0",
+"filename" : "System.dll",
+"sizeofimage" : "0x278000",
+"timestamp" : "0xc134f6ee",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "A72E1810-8C73-47BE-A221-F7796A33CC72",
+"token" : "0x600016f",
+"native_offset" : "0x0",
+"filename" : "Mono.Debugger.Soft.dll",
+"sizeofimage" : "0x30000",
+"timestamp" : "0x5c79f81d",
+"il_offset" : "0x00001"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "A72E1810-8C73-47BE-A221-F7796A33CC72",
+"token" : "0x60000fb",
+"native_offset" : "0x0",
+"filename" : "Mono.Debugger.Soft.dll",
+"sizeofimage" : "0x30000",
+"timestamp" : "0x5c79f81d",
+"il_offset" : "0x00006"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "A72E1810-8C73-47BE-A221-F7796A33CC72",
+"token" : "0x60000fd",
+"native_offset" : "0x0",
+"filename" : "Mono.Debugger.Soft.dll",
+"sizeofimage" : "0x30000",
+"timestamp" : "0x5c79f81d",
+"il_offset" : "0x00009"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "A72E1810-8C73-47BE-A221-F7796A33CC72",
+"token" : "0x6000103",
+"native_offset" : "0x0",
+"filename" : "Mono.Debugger.Soft.dll",
+"sizeofimage" : "0x30000",
+"timestamp" : "0x5c79f81d",
+"il_offset" : "0x00001"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "A72E1810-8C73-47BE-A221-F7796A33CC72",
+"token" : "0x6000102",
+"native_offset" : "0x0",
+"filename" : "Mono.Debugger.Soft.dll",
+"sizeofimage" : "0x30000",
+"timestamp" : "0x5c79f81d",
+"il_offset" : "0x00005"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001e55",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00014"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dff",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00071"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dfe",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dfd",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0002b"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001e57",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00008"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x00000",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0001e"
+}
+
+],
+"unmanaged_frames" : [
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+
+]
+},
+{
+"is_managed" : true,
+"offset_free_hash" : "0xd77dda152",
+"offset_rich_hash" : "0xd77dda68f",
+"crashed" : false,
+"native_thread_id" : "0x7fce17fff700",
+"thread_info_addr" : "0x7fce00000b20",
+"thread_name" : "Thread Pool Wor",
+"ctx" : {
+"IP" : "0x7fce795bdfac",
+"SP" : "0x7fce17ffe1f0",
+"BP" : "(nil)"
+},
+"managed_frames" : [
+{
+"native_address" : "unregistered"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x00000",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+"token" : "0x00000",
+"native_offset" : "0x0",
+"filename" : "System.dll",
+"sizeofimage" : "0x278000",
+"timestamp" : "0xc134f6ee",
+"il_offset" : "0x00026"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+"token" : "0x6003dc8",
+"native_offset" : "0x0",
+"filename" : "System.dll",
+"sizeofimage" : "0x278000",
+"timestamp" : "0xc134f6ee",
+"il_offset" : "0x00012"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+"token" : "0x6004114",
+"native_offset" : "0x0",
+"filename" : "System.dll",
+"sizeofimage" : "0x278000",
+"timestamp" : "0xc134f6ee",
+"il_offset" : "0x00027"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+"token" : "0x6004113",
+"native_offset" : "0x0",
+"filename" : "System.dll",
+"sizeofimage" : "0x278000",
+"timestamp" : "0xc134f6ee",
+"il_offset" : "0x002dc"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+"token" : "0x6004308",
+"native_offset" : "0x0",
+"filename" : "System.dll",
+"sizeofimage" : "0x278000",
+"timestamp" : "0xc134f6ee",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x60022bd",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00025"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x60022b9",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x60022bc",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dff",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00071"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dfe",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6002325",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00034"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x60022bb",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0004a"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6002431",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001e55",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00025"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dff",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00071"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dfe",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dfd",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0002b"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001e56",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0000f"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x00000",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0001e"
+}
+
+],
+"unmanaged_frames" : [
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+
+]
+},
+{
+"is_managed" : true,
+"offset_free_hash" : "0xd77dda152",
+"offset_rich_hash" : "0xd77dda68f",
+"crashed" : false,
+"native_thread_id" : "0x7fce05afc700",
+"thread_info_addr" : "0x7fce180008d0",
+"thread_name" : "Thread Pool Wor",
+"ctx" : {
+"IP" : "0x7fce795bdfac",
+"SP" : "0x7fce05afb1f0",
+"BP" : "(nil)"
+},
+"managed_frames" : [
+{
+"native_address" : "unregistered"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x00000",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+"token" : "0x00000",
+"native_offset" : "0x0",
+"filename" : "System.dll",
+"sizeofimage" : "0x278000",
+"timestamp" : "0xc134f6ee",
+"il_offset" : "0x00026"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+"token" : "0x6003dc8",
+"native_offset" : "0x0",
+"filename" : "System.dll",
+"sizeofimage" : "0x278000",
+"timestamp" : "0xc134f6ee",
+"il_offset" : "0x00012"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+"token" : "0x6004114",
+"native_offset" : "0x0",
+"filename" : "System.dll",
+"sizeofimage" : "0x278000",
+"timestamp" : "0xc134f6ee",
+"il_offset" : "0x00027"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+"token" : "0x6004113",
+"native_offset" : "0x0",
+"filename" : "System.dll",
+"sizeofimage" : "0x278000",
+"timestamp" : "0xc134f6ee",
+"il_offset" : "0x002dc"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+"token" : "0x6004308",
+"native_offset" : "0x0",
+"filename" : "System.dll",
+"sizeofimage" : "0x278000",
+"timestamp" : "0xc134f6ee",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x60022bd",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00025"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x60022b9",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x60022bc",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dff",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00071"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dfe",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6002325",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00034"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x60022bb",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0004a"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6002431",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001e55",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00025"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dff",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00071"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dfe",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dfd",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0002b"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001e56",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0000f"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x00000",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0001e"
+}
+
+],
+"unmanaged_frames" : [
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+
+]
+},
+{
+"is_managed" : true,
+"offset_free_hash" : "0x12991d684",
+"offset_rich_hash" : "0x12991d6fb",
+"crashed" : true,
+"native_thread_id" : "0x7fce7665b700",
+"thread_info_addr" : "0x7fce70000b20",
+"thread_name" : "Finalizer",
+"ctx" : {
+"IP" : "0x55a50c0fe830",
+"SP" : "0x7fce76658d9c",
+"BP" : "0x7fce76658d9c"
+},
+"managed_frames" : [
+{
+"native_address" : "unregistered"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "ED39F21B-9E93-43DC-BD44-2A17AD356A9F",
+"token" : "0x00000",
+"native_offset" : "0x0",
+"filename" : "glib-sharp.dll",
+"sizeofimage" : "0x1e000",
+"timestamp" : "0x0",
+"il_offset" : "0x0000c"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "ED39F21B-9E93-43DC-BD44-2A17AD356A9F",
+"token" : "0x6000142",
+"native_offset" : "0x0",
+"filename" : "glib-sharp.dll",
+"sizeofimage" : "0x1e000",
+"timestamp" : "0x0",
+"il_offset" : "0x00014"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "7AAB76E8-7BCE-48A4-B45C-F7FA613CB70C",
+"token" : "0x60041bd",
+"native_offset" : "0x0",
+"filename" : "gtk-sharp.dll",
+"sizeofimage" : "0x164000",
+"timestamp" : "0x0",
+"il_offset" : "0x00030"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "7AAB76E8-7BCE-48A4-B45C-F7FA613CB70C",
+"token" : "0x60008e2",
+"native_offset" : "0x0",
+"filename" : "gtk-sharp.dll",
+"sizeofimage" : "0x164000",
+"timestamp" : "0x0",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "647377EB-95C2-47E4-9871-E1B13CB84399",
+"token" : "0x6000300",
+"native_offset" : "0x0",
+"filename" : "Xwt.Gtk.dll",
+"sizeofimage" : "0x54000",
+"timestamp" : "0x5c79f741",
+"il_offset" : "0x00007"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "647377EB-95C2-47E4-9871-E1B13CB84399",
+"token" : "0x6000088",
+"native_offset" : "0x0",
+"filename" : "Xwt.Gtk.dll",
+"sizeofimage" : "0x54000",
+"timestamp" : "0x5c79f741",
+"il_offset" : "0x00002"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x00000",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0001e"
+}
+
+],
+"unmanaged_frames" : [
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+
+]
+},
+{
+"is_managed" : true,
+"offset_free_hash" : "0xd77dda152",
+"offset_rich_hash" : "0xd77dda68f",
+"crashed" : false,
+"native_thread_id" : "0x7fce05cfd700",
+"thread_info_addr" : "0x7fcde8000b20",
+"thread_name" : "Thread Pool Wor",
+"ctx" : {
+"IP" : "0x7fce795bdfac",
+"SP" : "0x7fce05cfc1f0",
+"BP" : "(nil)"
+},
+"managed_frames" : [
+{
+"native_address" : "unregistered"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x00000",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+"token" : "0x00000",
+"native_offset" : "0x0",
+"filename" : "System.dll",
+"sizeofimage" : "0x278000",
+"timestamp" : "0xc134f6ee",
+"il_offset" : "0x00026"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+"token" : "0x6003dc8",
+"native_offset" : "0x0",
+"filename" : "System.dll",
+"sizeofimage" : "0x278000",
+"timestamp" : "0xc134f6ee",
+"il_offset" : "0x00012"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+"token" : "0x6004114",
+"native_offset" : "0x0",
+"filename" : "System.dll",
+"sizeofimage" : "0x278000",
+"timestamp" : "0xc134f6ee",
+"il_offset" : "0x00027"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+"token" : "0x6004113",
+"native_offset" : "0x0",
+"filename" : "System.dll",
+"sizeofimage" : "0x278000",
+"timestamp" : "0xc134f6ee",
+"il_offset" : "0x002dc"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+"token" : "0x6004308",
+"native_offset" : "0x0",
+"filename" : "System.dll",
+"sizeofimage" : "0x278000",
+"timestamp" : "0xc134f6ee",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x60022bd",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00025"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x60022b9",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x60022bc",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dff",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00071"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dfe",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6002325",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00034"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x60022bb",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0004a"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6002431",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001e55",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00025"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dff",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00071"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dfe",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dfd",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0002b"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001e56",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0000f"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x00000",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0001e"
+}
+
+],
+"unmanaged_frames" : [
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+
+]
+},
+{
+"is_managed" : true,
+"offset_free_hash" : "0x103380725a",
+"offset_rich_hash" : "0x10338075e9",
+"crashed" : false,
+"native_thread_id" : "0x7fce14555700",
+"thread_info_addr" : "0x7fce0c000b20",
+"thread_name" : "Thread Pool Wor",
+"ctx" : {
+"IP" : "0x7fce795bdfac",
+"SP" : "0x7fce14554180",
+"BP" : "(nil)"
+},
+"managed_frames" : [
+{
+"native_address" : "unregistered"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x00000",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x00000",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00025"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001e35",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0002f"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001d80",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x000d9"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+"token" : "0x6003ae0",
+"native_offset" : "0x0",
+"filename" : "System.dll",
+"sizeofimage" : "0x278000",
+"timestamp" : "0xc134f6ee",
+"il_offset" : "0x00067"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+"token" : "0x6003adf",
+"native_offset" : "0x0",
+"filename" : "System.dll",
+"sizeofimage" : "0x278000",
+"timestamp" : "0xc134f6ee",
+"il_offset" : "0x00006"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+"token" : "0x6003ada",
+"native_offset" : "0x0",
+"filename" : "System.dll",
+"sizeofimage" : "0x278000",
+"timestamp" : "0xc134f6ee",
+"il_offset" : "0x00009"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "E5969C60-110B-4D73-A2DB-144BF8757E5A",
+"token" : "0x6000b76",
+"native_offset" : "0x0",
+"filename" : "Microsoft.CodeAnalysis.Features.dll",
+"sizeofimage" : "0x290000",
+"timestamp" : "0x8f26a99c",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "5DA55B00-63AB-4CC0-89C7-1DD7627C0EB2",
+"token" : "0x6001fa5",
+"native_offset" : "0x0",
+"filename" : "Microsoft.CodeAnalysis.Workspaces.dll",
+"sizeofimage" : "0x2aa000",
+"timestamp" : "0xfd8e2685",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x60022bd",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0000f"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x60022b9",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x60022bc",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dff",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00071"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dfe",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6002325",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00034"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x60022bb",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0004a"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6002431",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001e55",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00025"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dff",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00071"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dfe",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dfd",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0002b"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001e56",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0000f"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x00000",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0001e"
+}
+
+],
+"unmanaged_frames" : [
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+
+]
+},
+{
+"is_managed" : true,
+"offset_free_hash" : "0xd77dda152",
+"offset_rich_hash" : "0xd77dda68f",
+"crashed" : false,
+"native_thread_id" : "0x7fce05efe700",
+"thread_info_addr" : "0x7fcdf40008d0",
+"thread_name" : "Thread Pool Wor",
+"ctx" : {
+"IP" : "0x7fce795bdfac",
+"SP" : "0x7fce05efd1f0",
+"BP" : "(nil)"
+},
+"managed_frames" : [
+{
+"native_address" : "unregistered"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x00000",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+"token" : "0x00000",
+"native_offset" : "0x0",
+"filename" : "System.dll",
+"sizeofimage" : "0x278000",
+"timestamp" : "0xc134f6ee",
+"il_offset" : "0x00026"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+"token" : "0x6003dc8",
+"native_offset" : "0x0",
+"filename" : "System.dll",
+"sizeofimage" : "0x278000",
+"timestamp" : "0xc134f6ee",
+"il_offset" : "0x00012"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+"token" : "0x6004114",
+"native_offset" : "0x0",
+"filename" : "System.dll",
+"sizeofimage" : "0x278000",
+"timestamp" : "0xc134f6ee",
+"il_offset" : "0x00027"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+"token" : "0x6004113",
+"native_offset" : "0x0",
+"filename" : "System.dll",
+"sizeofimage" : "0x278000",
+"timestamp" : "0xc134f6ee",
+"il_offset" : "0x002dc"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "4A8AD8C3-332D-4EE8-88C2-6A127B4F9D6A",
+"token" : "0x6004308",
+"native_offset" : "0x0",
+"filename" : "System.dll",
+"sizeofimage" : "0x278000",
+"timestamp" : "0xc134f6ee",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x60022bd",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00025"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x60022b9",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x60022bc",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dff",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00071"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dfe",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6002325",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00034"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x60022bb",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0004a"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6002431",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001e55",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00025"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dff",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00071"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dfe",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x00000"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001dfd",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0002b"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x6001e56",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0000f"
+}
+,
+{
+"is_managed" : "true",
+"guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+"token" : "0x00000",
+"native_offset" : "0x0",
+"filename" : "mscorlib.dll",
+"sizeofimage" : "0x450000",
+"timestamp" : "0xc40271ca",
+"il_offset" : "0x0001e"
+}
+
+],
+"unmanaged_frames" : [
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+,
+{
+"native_address" : "unregistered"
+}
+
+]
+}
+]
+} \ No newline at end of file
diff --git a/samples/deferred/ui/mono_crash.12991d684.1.json b/samples/deferred/ui/mono_crash.12991d684.1.json
new file mode 100644
index 0000000..0def8aa
--- /dev/null
+++ b/samples/deferred/ui/mono_crash.12991d684.1.json
@@ -0,0 +1,245 @@
+{
+ "protocol_version" : "0.0.4",
+ "configuration" : {
+ "version" : "(5.20.1) (explicit/886c4901747)",
+ "tlc" : "normal",
+ "sigsgev" : "altstack",
+ "notifications" : "epoll",
+ "architecture" : "amd64",
+ "disabled_features" : "none",
+ "smallconfig" : "disabled",
+ "bigarrays" : "disabled",
+ "softdebug" : "enabled",
+ "interpreter" : "enabled",
+ "suspend" : "hybrid",
+ "llvm_support" : "disabled"
+ },
+ "memory" : {
+ "minor_gc_time" : "2373884929",
+ "major_gc_time" : "55572350",
+ "minor_gc_count" : "58325",
+ "major_gc_count" : "112",
+ "major_gc_time_concurrent" : "524665760"
+ },
+ "threads" : [
+ {
+ "is_managed" : true,
+ "offset_free_hash" : "0x12991d684",
+ "offset_rich_hash" : "0x12991d6fb",
+ "crashed" : true,
+ "native_thread_id" : "0x7fc410b10700",
+ "thread_info_addr" : "0x7fc40c000b20",
+ "thread_name" : "Finalizer",
+ "ctx" : {
+ "IP" : "0x564a36175830",
+ "SP" : "0x7fc410b0dd9c",
+ "BP" : "0x7fc410b0dd9c"
+ },
+ "managed_frames" : [
+ {
+ "native_address" : "unregistered"
+ }
+,
+ {
+ "is_managed" : "true",
+ "guid" : "ED39F21B-9E93-43DC-BD44-2A17AD356A9F",
+ "token" : "0x00000",
+ "native_offset" : "0x0",
+ "filename" : "glib-sharp.dll",
+ "sizeofimage" : "0x1e000",
+ "timestamp" : "0x0",
+ "il_offset" : "0x0000c"
+ }
+,
+ {
+ "is_managed" : "true",
+ "guid" : "ED39F21B-9E93-43DC-BD44-2A17AD356A9F",
+ "token" : "0x6000142",
+ "native_offset" : "0x0",
+ "filename" : "glib-sharp.dll",
+ "sizeofimage" : "0x1e000",
+ "timestamp" : "0x0",
+ "il_offset" : "0x00014"
+ }
+,
+ {
+ "is_managed" : "true",
+ "guid" : "7AAB76E8-7BCE-48A4-B45C-F7FA613CB70C",
+ "token" : "0x60041bd",
+ "native_offset" : "0x0",
+ "filename" : "gtk-sharp.dll",
+ "sizeofimage" : "0x164000",
+ "timestamp" : "0x0",
+ "il_offset" : "0x00030"
+ }
+,
+ {
+ "is_managed" : "true",
+ "guid" : "7AAB76E8-7BCE-48A4-B45C-F7FA613CB70C",
+ "token" : "0x60008e2",
+ "native_offset" : "0x0",
+ "filename" : "gtk-sharp.dll",
+ "sizeofimage" : "0x164000",
+ "timestamp" : "0x0",
+ "il_offset" : "0x00000"
+ }
+,
+ {
+ "is_managed" : "true",
+ "guid" : "647377EB-95C2-47E4-9871-E1B13CB84399",
+ "token" : "0x6000300",
+ "native_offset" : "0x0",
+ "filename" : "Xwt.Gtk.dll",
+ "sizeofimage" : "0x54000",
+ "timestamp" : "0x5c79f741",
+ "il_offset" : "0x00007"
+ }
+,
+ {
+ "is_managed" : "true",
+ "guid" : "647377EB-95C2-47E4-9871-E1B13CB84399",
+ "token" : "0x6000088",
+ "native_offset" : "0x0",
+ "filename" : "Xwt.Gtk.dll",
+ "sizeofimage" : "0x54000",
+ "timestamp" : "0x5c79f741",
+ "il_offset" : "0x00002"
+ }
+,
+ {
+ "is_managed" : "true",
+ "guid" : "F9CA7668-AA09-40C8-9A6C-9879C6574D1F",
+ "token" : "0x00000",
+ "native_offset" : "0x0",
+ "filename" : "mscorlib.dll",
+ "sizeofimage" : "0x450000",
+ "timestamp" : "0xc40271ca",
+ "il_offset" : "0x0001e"
+ }
+
+ ],
+ "unmanaged_frames" : [
+ {
+ "native_address" : "unregistered"
+ }
+,
+ {
+ "native_address" : "unregistered"
+ }
+,
+ {
+ "native_address" : "unregistered"
+ }
+,
+ {
+ "native_address" : "unregistered"
+ }
+,
+ {
+ "native_address" : "unregistered"
+ }
+,
+ {
+ "native_address" : "unregistered"
+ }
+,
+ {
+ "native_address" : "unregistered"
+ }
+,
+ {
+ "native_address" : "unregistered"
+ }
+,
+ {
+ "native_address" : "unregistered"
+ }
+,
+ {
+ "native_address" : "unregistered"
+ }
+,
+ {
+ "native_address" : "unregistered"
+ }
+,
+ {
+ "native_address" : "unregistered"
+ }
+,
+ {
+ "native_address" : "unregistered"
+ }
+
+ ]
+},
+{
+ "is_managed" : false,
+ "offset_free_hash" : "0x0",
+ "offset_rich_hash" : "0x0",
+ "crashed" : false,
+ "native_thread_id" : "0x7fc4138cf740",
+ "thread_info_addr" : "0x564a382e9670",
+ "thread_name" : "GUI Thread",
+ "ctx" : {
+ "IP" : "0x7fc413abf9c2",
+ "SP" : "0x7fffea79df50",
+ "BP" : "0x564a3f64fa50"
+ },
+ "unmanaged_frames" : [
+ {
+ "native_address" : "unregistered"
+ }
+,
+ {
+ "native_address" : "unregistered"
+ }
+,
+ {
+ "native_address" : "unregistered"
+ }
+,
+ {
+ "native_address" : "unregistered"
+ }
+,
+ {
+ "native_address" : "unregistered"
+ }
+,
+ {
+ "native_address" : "unregistered"
+ }
+,
+ {
+ "native_address" : "unregistered"
+ }
+,
+ {
+ "native_address" : "unregistered"
+ }
+,
+ {
+ "native_address" : "unregistered"
+ }
+,
+ {
+ "native_address" : "unregistered"
+ }
+,
+ {
+ "native_address" : "unregistered"
+ }
+,
+ {
+ "native_address" : "unregistered"
+ }
+,
+ {
+ "native_address" : "unregistered"
+ }
+
+ ]
+}
+]
+} \ No newline at end of file
diff --git a/samples/deferred/ui/sceneItem.crow b/samples/deferred/ui/sceneItem.crow
new file mode 100644
index 0000000..ecb3a53
--- /dev/null
+++ b/samples/deferred/ui/sceneItem.crow
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<VerticalStack>
+ <Border Style="TreeItemBorder" MouseDoubleClick="./onClickForExpand">
+ <HorizontalStack Spacing="5">
+ <Image Margin="1" Width="10" Height="10" Focusable="true" MouseDown="./onClickForExpand"
+ Path="{./Image}"
+ Visible="{./IsExpandable}"
+ SvgSub="{./IsExpanded}"
+ MouseEnter="{Background=LightGrey}"
+ MouseLeave="{Background=Transparent}"/>
+ <Image Style="TreeIcon"
+ Path="#Crow.Icons.folder.svg" SvgSub="{./IsExpanded}"/>
+ <Label Text="{./Caption}"/>
+ </HorizontalStack>
+ </Border>
+ <Container Name="Content" Visible="false"/>
+</VerticalStack>
+
diff --git a/samples/deferred/ui/scenes.crow b/samples/deferred/ui/scenes.crow
new file mode 100644
index 0000000..b7f1b4f
--- /dev/null
+++ b/samples/deferred/ui/scenes.crow
@@ -0,0 +1,41 @@
+<?xml version="1.0"?>
+<Window Caption="Scenes" Icon="#deferred.crow.svg" Left="10" Top="100" Width="40%" Height="80%" CornerRadius="10">
+ <TreeView Data="{Scenes}" Width="Stretched">
+ <ItemTemplate DataType="Scene" Data="GetNodes">
+ <Expandable Caption="{Name}" Template="#deferred.sceneItem.crow" IsExpanded="{²IsExpanded}">
+ <HorizontalStack Height="Fit">
+ <Widget Width="8" Height="10"/>
+ <VerticalStack Height="Fit" Name="ItemsContainer"/>
+ </HorizontalStack>
+ </Expandable>
+ </ItemTemplate>
+ <ItemTemplate DataType="Node" Data="Children">
+ <Expandable Caption="Node" IsExpanded="{²IsExpanded}">
+ <Template>
+ <VerticalStack>
+ <Border Style="TreeItemBorder" MouseDoubleClick="./onClickForExpand">
+ <HorizontalStack Spacing="5">
+ <Image Margin="1" Width="10" Height="10" Focusable="true" MouseDown="./onClickForExpand"
+ Path="{./Image}"
+ Visible="{./IsExpandable}"
+ SvgSub="{./IsExpanded}"
+ MouseEnter="{Background=LightGrey}"
+ MouseLeave="{Background=Transparent}"/>
+ <Image Style="TreeIcon"
+ Path="#Crow.Icons.folder.svg" SvgSub="{./IsExpanded}"/>
+ <Label Text="{./Caption}"/>
+ <Label DataSource="{Mesh}" Text="{Name}"/>
+ </HorizontalStack>
+ </Border>
+ <Container Name="Content" Visible="false"/>
+ </VerticalStack>
+ </Template>>
+ <HorizontalStack Height="Fit">
+ <Widget Width="8" Height="10"/>
+ <VerticalStack Height="Fit" Name="ItemsContainer"/>
+ </HorizontalStack>
+ </Expandable>
+ </ItemTemplate>
+ </TreeView>
+</Window>
+
diff --git a/samples/deferred/ui/testImage.crow b/samples/deferred/ui/testImage.crow
new file mode 100644
index 0000000..c245e14
--- /dev/null
+++ b/samples/deferred/ui/testImage.crow
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<EnumSelector Height="300" EnumValue="{²CurrentDebugView}"/>
+
diff --git a/samples/pbrSashaWillem/EnvironmentPipeline.cs b/samples/pbrSashaWillem/EnvironmentPipeline.cs
index 9127d7f..69c845c 100644
--- a/samples/pbrSashaWillem/EnvironmentPipeline.cs
+++ b/samples/pbrSashaWillem/EnvironmentPipeline.cs
@@ -64,11 +64,11 @@ namespace CVKL {
#region skybox
public List<string> cubemapPathes = new List<string>() {
- "../data/textures/papermill.ktx",
- "../data/textures/cubemap_yokohama_bc3_unorm.ktx",
- "../data/textures/gcanyon_cube.ktx",
- "../data/textures/pisa_cube.ktx",
- "../data/textures/uffizi_cube.ktx",
+ "../../../samples/data/textures/papermill.ktx",
+ "../../../samples/data/textures/cubemap_yokohama_bc3_unorm.ktx",
+ "../../../samples/data/textures/gcanyon_cube.ktx",
+ "../../../samples/data/textures/pisa_cube.ktx",
+ "../../../samples/data/textures/uffizi_cube.ktx",
};
static float[] box_vertices = {
1.0f, 1.0f,-1.0f, // +X side
diff --git a/samples/pbrSashaWillem/PbrPipeline.cs b/samples/pbrSashaWillem/PbrPipeline.cs
index fdc6381..15ebb50 100644
--- a/samples/pbrSashaWillem/PbrPipeline.cs
+++ b/samples/pbrSashaWillem/PbrPipeline.cs
@@ -89,7 +89,7 @@ namespace CVKL {
uboMats = new HostBuffer (Dev, VkBufferUsageFlags.UniformBuffer, matrices, true);
string[] modelPathes = {
- "../data/models/DamagedHelmet/glTF/DamagedHelmet.gltf",
+ "../../../samples/data/models/DamagedHelmet/glTF/DamagedHelmet.gltf",
"/mnt/devel/vulkan/glTF-Sample-Models-master/2.0/Avocado/glTF/Avocado.gltf",
"/mnt/devel/vulkan/glTF-Sample-Models-master/2.0/BarramundiFish/glTF/BarramundiFish.gltf",
"/mnt/devel/vulkan/glTF-Sample-Models-master/2.0/BoomBoxWithAxes/glTF/BoomBoxWithAxes.gltf",
diff --git a/samples/pbrSashaWillem/SachaWillemPbr.csproj b/samples/pbrSashaWillem/SachaWillemPbr.csproj
index 75c0a82..9fe5ead 100644
--- a/samples/pbrSashaWillem/SachaWillemPbr.csproj
+++ b/samples/pbrSashaWillem/SachaWillemPbr.csproj
@@ -1,81 +1,46 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project Sdk="Microsoft.NET.Sdk">
+ <Import Project="$(SolutionDir)netfx.props" />
<PropertyGroup>
- <ProjectGuid>{1F18E74F-BCC9-481C-8FDF-89D81CBB30BE}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AssemblyName>SachaWillemPbr</AssemblyName>
- <TargetFrameworkVersion>v4.7.1</TargetFrameworkVersion>
- <OutputPath>$(SolutionDir)build\$(Configuration)\samples\SachaWillemPbr</OutputPath>
- <IntermediateOutputPath>$(SolutionDir)build\obj\$(Configuration)</IntermediateOutputPath>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- <DebugSymbols>true</DebugSymbols>
- <DebugType>full</DebugType>
- <Optimize>false</Optimize>
- <DefineConstants>DEBUG</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
+ <TargetFrameworks>net471;netstandard2.0</TargetFrameworks>
+ <OutputPath>$(SolutionDir)build\$(Configuration)\</OutputPath>
+ <OutputType>Exe</OutputType>
+ <RepositoryUrl>https://github.com/jpbruyere/vk.net</RepositoryUrl>
+ <License>https://opensource.org/licenses/MIT</License>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <EnableDefaultCompileItems>true</EnableDefaultCompileItems>
+ <EnableDefaultNoneItems>false</EnableDefaultNoneItems>
+ </PropertyGroup>
+
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <DefineConstants>_WITH_VKVG;TRACE;DEBUG;NETSTANDARD;NETSTANDARD2_0</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- <Optimize>true</Optimize>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <DefineConstants>_WITH_VKVG</DefineConstants>
</PropertyGroup>
+
+ <ItemGroup Condition="$(TargetFramework.StartsWith('net4'))">
+ <Reference Include="System" />
+ </ItemGroup>
+
+ <ItemGroup>
+ <PackageReference Include="Vulkan" Version="0.1.2.8-beta" />
+ </ItemGroup>
+
<ItemGroup>
- <Compile Include="*.cs" />
+ <ProjectReference Include="..\..\vke\CVKL.csproj" />
+ <ProjectReference Include="..\..\crow\Crow\Crow.csproj" />
+ </ItemGroup>
+
+ <ItemGroup>
+ <GLSLShader Include="shaders\**\*.frag;shaders\**\*.vert;shaders\**\*.comp;shaders\**\*.geom" />
<Datas Include="..\data\**\*.*">
<Link>data\%(RecursiveDir)%(Filename)%(Extension)</Link>
</Datas>
- <GLSLShader Include="shaders\**\*.frag;shaders\**\*.vert;shaders\**\*.comp" />
- </ItemGroup>
- <ItemGroup>
- <Reference Include="System" />
- <Reference Include="System.Numerics.Vectors">
- <HintPath>..\..\packages\System.Numerics.Vectors.4.6.0-preview4.19212.13\lib\net46\System.Numerics.Vectors.dll</HintPath>
- </Reference>
- <Reference Include="mscorlib" />
- <Reference Include="Newtonsoft.Json">
- <HintPath>..\..\packages\Newtonsoft.Json.12.0.2\lib\net45\Newtonsoft.Json.dll</HintPath>
- </Reference>
- <Reference Include="glTFLoader">
- <HintPath>..\..\packages\glTF2Loader.1.1.3-alpha\lib\net35\glTFLoader.dll</HintPath>
- </Reference>
- <Reference Include="System.Buffers">
- <HintPath>..\..\packages\System.Buffers.4.5.0\lib\netstandard2.0\System.Buffers.dll</HintPath>
- </Reference>
- <Reference Include="System.Runtime.CompilerServices.Unsafe">
- <HintPath>..\..\packages\System.Runtime.CompilerServices.Unsafe.4.5.2\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
- </Reference>
- <Reference Include="System.Memory">
- <HintPath>..\..\packages\System.Memory.4.5.2\lib\netstandard2.0\System.Memory.dll</HintPath>
- </Reference>
- <Reference Include="VK">
- <HintPath>..\..\packages\Vulkan.0.1.2.6\lib\netstandard2.0\VK.dll</HintPath>
- </Reference>
- <Reference Include="vkvg.net">
- <HintPath>..\..\packages\vkvg.net.0.2.1.1-beta\lib\netstandard2.0\vkvg.net.dll</HintPath>
- </Reference>
- <Reference Include="System.Numerics" />
- </ItemGroup>
- <ItemGroup>
- <None Include="packages.config" />
- </ItemGroup>
- <ItemGroup>
- <Folder Include="ui\" />
- </ItemGroup>
- <ItemGroup>
- <EmbeddedResource Include="ui\fps.crow">
- <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
- </EmbeddedResource>
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\..\vke\CVKL.csproj">
- <Project>{32B7E80D-BEA7-4811-B82D-CC2533069F0A}</Project>
- <Name>CVKL</Name>
- </ProjectReference>
- </ItemGroup>
- <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+
+ <EmbeddedResource Include="ui\**\*.*">
+ <LogicalName>deferred.%(Filename)%(Extension)</LogicalName>
+ </EmbeddedResource>
+ </ItemGroup>
+
<Import Project="$(SolutionDir)spirv.targets" />
</Project>
diff --git a/samples/pbrSashaWillem/packages.config b/samples/pbrSashaWillem/packages.config
deleted file mode 100644
index 4bf92a9..0000000
--- a/samples/pbrSashaWillem/packages.config
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<packages>
- <package id="glTF2Loader" version="1.1.3-alpha" targetFramework="net471" />
- <package id="Newtonsoft.Json" version="12.0.2" targetFramework="net471" />
- <package id="System.Buffers" version="4.5.0" targetFramework="net471" />
- <package id="System.Memory" version="4.5.2" targetFramework="net471" />
- <package id="System.Numerics.Vectors" version="4.6.0-preview4.19212.13" targetFramework="net471" />
- <package id="System.Runtime.CompilerServices.Unsafe" version="4.5.2" targetFramework="net471" />
- <package id="vkvg.net" version="0.2.1.1-beta" targetFramework="net471" />
- <package id="Vulkan" version="0.1.2.6" targetFramework="net471" />
-</packages> \ No newline at end of file
diff --git a/samples/vkvg_tests/main.cs b/samples/vkvg_tests/main.cs
index 99f0398..08ec9f0 100644
--- a/samples/vkvg_tests/main.cs
+++ b/samples/vkvg_tests/main.cs
@@ -1,4 +1,6 @@
-using System.Threading;
+using System;
+using System.IO;
+using System.Threading;
using CVKL;
using VK;
@@ -30,6 +32,37 @@ namespace vkvg_test {
}
void vkvgDraw () {
+ using (vkvg.Surface svgSurf = new vkvg.Surface (vkvgDev, 300, 300)) {
+ using (vkvg.Context ctx = new vkvg.Context (svgSurf)) {
+ IntPtr nsvg = IntPtr.Zero;
+
+ using (Stream nsvgStream = Crow.Interface.StaticGetStreamFromPath ("../../../samples/data/tiger.svg")) {
+ using (StreamReader sr = new StreamReader (nsvgStream)) {
+ nsvg = vkvgDev.LoadSvgFragment (sr.ReadToEnd ());
+ }
+ }
+
+
+ ctx.SetSource (0.8f, 0.8f, 0.8f);
+ ctx.Paint ();
+
+ ctx.Scale (0.2f, 0.2f);
+ ctx.RenderSvg (nsvg, null);
+
+ vkvgDev.DestroySvg (nsvg);
+ }
+
+ //svgSurf.WriteToPng ("/mnt/data/test.png");
+
+ using (vkvg.Context ctx = new vkvg.Context (vkvgSurf)) {
+ ctx.SetSourceSurface (svgSurf, 0, 0);
+ ctx.Paint ();
+ }
+ }
+ }
+ #region fps print
+ void vkvgDraw1 () {
+
using (vkvg.Context ctx = new vkvg.Context (vkvgSurf)) {
//ctx.SetSource (1.0, 0.1, 0.1, 0.2);
//ctx.Paint ();
@@ -80,6 +113,8 @@ namespace vkvg_test {
}
#endregion
+ #endregion
+
bool recreateSurfaceStatus = true;
void recreateSurface () {
@@ -96,7 +131,7 @@ namespace vkvg_test {
void uiThreadFunc () {
vkvgDev = new vkvg.Device (instance.Handle, phy.Handle, dev.VkDev.Handle, presentQueue.qFamIndex,
- vkvg.SampleCount.Sample_1, presentQueue.index);
+ vkvg.SampleCount.Sample_8, presentQueue.index);
while (true) {
if (recreateSurfaceStatus == true)
diff --git a/samples/vkvg_tests/packages.config b/samples/vkvg_tests/packages.config
deleted file mode 100644
index cb60b70..0000000
--- a/samples/vkvg_tests/packages.config
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<packages>
- <package id="glTF2Loader" version="1.1.3-alpha" targetFramework="net471" />
- <package id="Newtonsoft.Json" version="12.0.2" targetFramework="net471" />
- <package id="System.Buffers" version="4.5.0" targetFramework="net471" />
- <package id="System.Memory" version="4.5.2" targetFramework="net471" />
- <package id="System.Numerics.Vectors" version="4.5.0" targetFramework="net471" />
- <package id="System.Runtime.CompilerServices.Unsafe" version="4.5.2" targetFramework="net471" />
- <package id="vkvg.net" version="0.2.1.1-beta" targetFramework="net471" />
- <package id="Vulkan" version="0.1.2.6" targetFramework="net471" />
-</packages> \ No newline at end of file
diff --git a/samples/vkvg_tests/vkvg_tests.csproj b/samples/vkvg_tests/vkvg_tests.csproj
index 4ef1c82..9fe5ead 100644
--- a/samples/vkvg_tests/vkvg_tests.csproj
+++ b/samples/vkvg_tests/vkvg_tests.csproj
@@ -1,74 +1,46 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project Sdk="Microsoft.NET.Sdk">
+ <Import Project="$(SolutionDir)netfx.props" />
<PropertyGroup>
- <ProjectGuid>{1F05E74F-AEE8-481C-8FDF-456654CC30BE}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AssemblyName>vkvg_tests</AssemblyName>
- <TargetFrameworkVersion>v4.7.1</TargetFrameworkVersion>
- <OutputPath>$(SolutionDir)build\$(Configuration)\samples\vkvg_tests</OutputPath>
- <IntermediateOutputPath>$(SolutionDir)build\obj\$(Configuration)</IntermediateOutputPath>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- <DebugSymbols>true</DebugSymbols>
- <DebugType>full</DebugType>
- <Optimize>false</Optimize>
- <DefineConstants>DEBUG;DEBUG_MARKER</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
+ <TargetFrameworks>net471;netstandard2.0</TargetFrameworks>
+ <OutputPath>$(SolutionDir)build\$(Configuration)\</OutputPath>
+ <OutputType>Exe</OutputType>
+ <RepositoryUrl>https://github.com/jpbruyere/vk.net</RepositoryUrl>
+ <License>https://opensource.org/licenses/MIT</License>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <EnableDefaultCompileItems>true</EnableDefaultCompileItems>
+ <EnableDefaultNoneItems>false</EnableDefaultNoneItems>
+ </PropertyGroup>
+
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <DefineConstants>_WITH_VKVG;TRACE;DEBUG;NETSTANDARD;NETSTANDARD2_0</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- <Optimize>true</Optimize>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <DefineConstants>_WITH_VKVG</DefineConstants>
</PropertyGroup>
+
+ <ItemGroup Condition="$(TargetFramework.StartsWith('net4'))">
+ <Reference Include="System" />
+ </ItemGroup>
+
+ <ItemGroup>
+ <PackageReference Include="Vulkan" Version="0.1.2.8-beta" />
+ </ItemGroup>
+
<ItemGroup>
+ <ProjectReference Include="..\..\vke\CVKL.csproj" />
+ <ProjectReference Include="..\..\crow\Crow\Crow.csproj" />
+ </ItemGroup>
+
+ <ItemGroup>
+ <GLSLShader Include="shaders\**\*.frag;shaders\**\*.vert;shaders\**\*.comp;shaders\**\*.geom" />
<Datas Include="..\data\**\*.*">
<Link>data\%(RecursiveDir)%(Filename)%(Extension)</Link>
</Datas>
- <GLSLShader Include="shaders\simpletexture.frag" />
- <GLSLShader Include="shaders\FullScreenQuad.vert" />
- <Compile Include="main.cs" />
- </ItemGroup>
- <ItemGroup>
- <Reference Include="System.Numerics" />
- <Reference Include="System" />
- <Reference Include="System.Numerics.Vectors">
- <HintPath>..\..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll</HintPath>
- </Reference>
- <Reference Include="mscorlib" />
- <Reference Include="Newtonsoft.Json">
- <HintPath>..\..\packages\Newtonsoft.Json.12.0.2\lib\net45\Newtonsoft.Json.dll</HintPath>
- </Reference>
- <Reference Include="glTFLoader">
- <HintPath>..\..\packages\glTF2Loader.1.1.3-alpha\lib\net35\glTFLoader.dll</HintPath>
- </Reference>
- <Reference Include="System.Buffers">
- <HintPath>..\..\packages\System.Buffers.4.5.0\lib\netstandard2.0\System.Buffers.dll</HintPath>
- </Reference>
- <Reference Include="System.Runtime.CompilerServices.Unsafe">
- <HintPath>..\..\packages\System.Runtime.CompilerServices.Unsafe.4.5.2\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
- </Reference>
- <Reference Include="System.Memory">
- <HintPath>..\..\packages\System.Memory.4.5.2\lib\netstandard2.0\System.Memory.dll</HintPath>
- </Reference>
- <Reference Include="VK">
- <HintPath>..\..\packages\Vulkan.0.1.2.6\lib\netstandard2.0\VK.dll</HintPath>
- </Reference>
- <Reference Include="vkvg.net">
- <HintPath>..\..\packages\vkvg.net.0.2.1.1-beta\lib\netstandard2.0\vkvg.net.dll</HintPath>
- </Reference>
- </ItemGroup>
- <ItemGroup>
- <None Include="packages.config" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\..\vke\CVKL.csproj">
- <Project>{32B7E80D-BEA7-4811-B82D-CC2533069F0A}</Project>
- <Name>CVKL</Name>
- </ProjectReference>
- </ItemGroup>
- <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+
+ <EmbeddedResource Include="ui\**\*.*">
+ <LogicalName>deferred.%(Filename)%(Extension)</LogicalName>
+ </EmbeddedResource>
+ </ItemGroup>
+
<Import Project="$(SolutionDir)spirv.targets" />
</Project>
diff --git a/vk.generator/Properties/AssemblyInfo.cs b/vk.generator/Properties/AssemblyInfo.cs
deleted file mode 100644
index 99c0f8d..0000000
--- a/vk.generator/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,51 +0,0 @@
-//
-// AssemblyInfo.cs
-//
-// Author:
-// Jean-Philippe Bruyère <jp_bruyere@hotmail.com>
-//
-// Copyright (c) 2019 jp
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-using System.Reflection;
-using System.Runtime.CompilerServices;
-
-// Information about this assembly is defined by the following attributes.
-// Change them to the values specific to your project.
-
-[assembly: AssemblyTitle ("vk.generator")]
-[assembly: AssemblyDescription ("")]
-[assembly: AssemblyConfiguration ("")]
-[assembly: AssemblyCompany ("Grand Tetra Software")]
-[assembly: AssemblyProduct ("")]
-[assembly: AssemblyCopyright ("jp")]
-[assembly: AssemblyTrademark ("")]
-[assembly: AssemblyCulture ("")]
-
-// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
-// The form "{Major}.{Minor}.*" will automatically update the build and revision,
-// and "{Major}.{Minor}.{Build}.*" will update just the revision.
-
-[assembly: AssemblyVersion ("1.0.*")]
-
-// The following attributes are used to specify the signing key for the assembly,
-// if desired. See the Mono documentation for more information about signing.
-
-//[assembly: AssemblyDelaySign(false)]
-//[assembly: AssemblyKeyFile("")]
diff --git a/vk.generator/vk.generator.csproj b/vk.generator/vk.generator.csproj
index 8b12064..0bc275e 100644
--- a/vk.generator/vk.generator.csproj
+++ b/vk.generator/vk.generator.csproj
@@ -1,47 +1,19 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project Sdk="Microsoft.NET.Sdk">
+ <Import Project="$(SolutionDir)netfx.props" />
<PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <ProjectGuid>{87AC7BE1-143E-4FF4-91F8-981B1CAAF1DD}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <RootNamespace>vk.generator</RootNamespace>
- <AssemblyName>vk.generator</AssemblyName>
- <TargetFrameworkVersion>v4.7</TargetFrameworkVersion>
+ <TargetFrameworks>net471;netstandard2.0</TargetFrameworks>
+ <OutputType>Exe</OutputType>
+ <RepositoryUrl>https://github.com/jpbruyere/vk.net</RepositoryUrl>
+ <License>https://opensource.org/licenses/MIT</License>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- <DebugSymbols>true</DebugSymbols>
- <DebugType>full</DebugType>
- <Optimize>false</Optimize>
- <OutputPath>bin\Debug</OutputPath>
- <DefineConstants>DEBUG;</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- <ExternalConsole>true</ExternalConsole>
- <PlatformTarget>x86</PlatformTarget>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- <Optimize>true</Optimize>
- <OutputPath>bin\Release</OutputPath>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- <ExternalConsole>true</ExternalConsole>
- <PlatformTarget>x86</PlatformTarget>
- </PropertyGroup>
- <ItemGroup>
+
+ <ItemGroup Condition="$(TargetFramework.StartsWith('net4'))">
<Reference Include="System" />
- <Reference Include="System.Xml" />
- <Reference Include="System.Xml.Serialization" />
- <Reference Include="System.Xml.Linq" />
- </ItemGroup>
- <ItemGroup>
- <Compile Include="Program.cs" />
- <Compile Include="Properties\AssemblyInfo.cs" />
- </ItemGroup>
+ </ItemGroup>
<ItemGroup>
- <None Include="vk.xml">
+ <None Update="vk.xml">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
- <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
</Project> \ No newline at end of file
diff --git a/vk.net.sln b/vk.net.sln
index 560aa71..a69feea 100644
--- a/vk.net.sln
+++ b/vk.net.sln
@@ -1,10 +1,6 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CVKL", "vke\CVKL.csproj", "{32B7E80D-BEA7-4811-B82D-CC2533069F0A}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Triangle", "samples\Triangle\Triangle.csproj", "{96A2E0B9-91AE-4EB9-A435-185D01E24067}"
-EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{A2A2849A-0032-4AA8-BC0E-82C69D7DE354}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Textured", "samples\Textured\Textured.csproj", "{96A2E0B8-91AE-4EB9-A435-185D01E24067}"
@@ -15,89 +11,97 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "vk.generator", "vk.generato
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "vk.rewrite", "vk.rewrite\vk.rewrite.csproj", "{F41EA96F-A9F7-4E85-B2EE-5757C5FAD00D}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VK", "VK\VK.csproj", "{F25D42B5-CE69-4B3B-A621-06908906739A}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SachaWillemPbr", "samples\pbrSashaWillem\SachaWillemPbr.csproj", "{1F18E74F-BCC9-481C-8FDF-89D81CBB30BE}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Crow", "crow\Crow\Crow.csproj", "{C2980F9B-4798-4C05-99E2-E174810F7C7B}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "vkvg_tests", "samples\vkvg_tests\vkvg_tests.csproj", "{1F05E74F-AEE8-481C-8FDF-456654CC30BE}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "deferred", "samples\deferred\deferred.csproj", "{1F05E74F-AEE8-481C-8FDF-89D81TTT30BE}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "vulkan-netcore", "VK\vulkan.csproj", "{1603D809-D9C4-4EE5-B921-B053CE22E068}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SachaWillemPbr", "samples\pbrSashaWillem\SachaWillemPbr.csproj", "{1F18E74F-BCC9-481C-8FDF-89D81CBB30BE}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CVKL", "vke\CVKL.csproj", "{9E12DFE6-7DC7-4BF2-8077-42DDC69FD0A1}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VkvgCrowTest", "samples\VkvgCrowTest\VkvgCrowTest.csproj", "{1F18E74F-BCC9-481C-8888-89D81CBB30BE}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Triangle", "samples\Triangle\Triangle.csproj", "{001F5D64-871B-47A4-A823-78C7CE3785AA}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "vkvg_tests", "samples\vkvg_tests\vkvg_tests.csproj", "{1F05E74F-AEE8-481C-8FDF-456654CC30BE}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "deferred", "samples\deferred\deferred.csproj", "{BFF1BEEC-2E93-4963-AD3C-2A8C9BA05C36}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "compute", "samples\compute\compute.csproj", "{1F05E74F-AEE8-481C-8FDF-4566654897BE}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "compute", "samples\compute\compute.csproj", "{05515E15-D3C3-4A8C-A940-9467D9D77823}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "vkvg.net", "..\..\vkvg.net\vkvg\vkvg.net.csproj", "{A927D603-9707-4E8A-9638-2B22C18201E1}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Crow", "crow\Crow\Crow.csproj", "{7BD4136D-AC65-40AF-A5B5-335079219588}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
+ temp|Any CPU = temp|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {32B7E80D-BEA7-4811-B82D-CC2533069F0A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {32B7E80D-BEA7-4811-B82D-CC2533069F0A}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {32B7E80D-BEA7-4811-B82D-CC2533069F0A}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {32B7E80D-BEA7-4811-B82D-CC2533069F0A}.Release|Any CPU.Build.0 = Release|Any CPU
- {96A2E0B9-91AE-4EB9-A435-185D01E24067}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {96A2E0B9-91AE-4EB9-A435-185D01E24067}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {96A2E0B9-91AE-4EB9-A435-185D01E24067}.Release|Any CPU.Build.0 = Release|Any CPU
- {96A2E0B9-91AE-4EB9-A435-185D01E24067}.Debug|Any CPU.Build.0 = Debug|Any CPU
{96A2E0B8-91AE-4EB9-A435-185D01E24067}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{96A2E0B8-91AE-4EB9-A435-185D01E24067}.Release|Any CPU.ActiveCfg = Release|Any CPU
{96A2E0B8-91AE-4EB9-A435-185D01E24067}.Release|Any CPU.Build.0 = Release|Any CPU
{96A2E0B8-91AE-4EB9-A435-185D01E24067}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {96A2E0B8-91AE-4EB9-A435-185D01E24067}.temp|Any CPU.ActiveCfg = Debug|Any CPU
{96A2A7896-91AE-4EB9-A435-185D01E24067}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{96A2A7896-91AE-4EB9-A435-185D01E24067}.Release|Any CPU.ActiveCfg = Release|Any CPU
{96A2A7896-91AE-4EB9-A435-185D01E24067}.Release|Any CPU.Build.0 = Release|Any CPU
{96A2A7896-91AE-4EB9-A435-185D01E24067}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {87AC7BE1-143E-4FF4-91F8-981B1CAAF1DD}.Debug|Any CPU.ActiveCfg = Release|Any CPU
+ {96A2A7896-91AE-4EB9-A435-185D01E24067}.temp|Any CPU.ActiveCfg = Debug|Any CPU
+ {87AC7BE1-143E-4FF4-91F8-981B1CAAF1DD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{87AC7BE1-143E-4FF4-91F8-981B1CAAF1DD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{87AC7BE1-143E-4FF4-91F8-981B1CAAF1DD}.Release|Any CPU.Build.0 = Release|Any CPU
- {F41EA96F-A9F7-4E85-B2EE-5757C5FAD00D}.Debug|Any CPU.ActiveCfg = Release|Any CPU
+ {87AC7BE1-143E-4FF4-91F8-981B1CAAF1DD}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {87AC7BE1-143E-4FF4-91F8-981B1CAAF1DD}.temp|Any CPU.ActiveCfg = Debug|Any CPU
+ {87AC7BE1-143E-4FF4-91F8-981B1CAAF1DD}.temp|Any CPU.Build.0 = Debug|Any CPU
+ {F41EA96F-A9F7-4E85-B2EE-5757C5FAD00D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F41EA96F-A9F7-4E85-B2EE-5757C5FAD00D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F41EA96F-A9F7-4E85-B2EE-5757C5FAD00D}.Release|Any CPU.Build.0 = Release|Any CPU
- {F25D42B5-CE69-4B3B-A621-06908906739A}.Debug|Any CPU.ActiveCfg = Release|Any CPU
- {F25D42B5-CE69-4B3B-A621-06908906739A}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {F25D42B5-CE69-4B3B-A621-06908906739A}.Release|Any CPU.Build.0 = Release|Any CPU
- {C2980F9B-4798-4C05-99E2-E174810F7C7B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {C2980F9B-4798-4C05-99E2-E174810F7C7B}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {C2980F9B-4798-4C05-99E2-E174810F7C7B}.Release|Any CPU.Build.0 = Release|Any CPU
- {1F05E74F-AEE8-481C-8FDF-89D81TTT30BE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {1F05E74F-AEE8-481C-8FDF-89D81TTT30BE}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {1F05E74F-AEE8-481C-8FDF-89D81TTT30BE}.Release|Any CPU.Build.0 = Release|Any CPU
- {1F05E74F-AEE8-481C-8FDF-89D81TTT30BE}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F41EA96F-A9F7-4E85-B2EE-5757C5FAD00D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F41EA96F-A9F7-4E85-B2EE-5757C5FAD00D}.temp|Any CPU.ActiveCfg = Debug|Any CPU
+ {F41EA96F-A9F7-4E85-B2EE-5757C5FAD00D}.temp|Any CPU.Build.0 = Debug|Any CPU
{1F18E74F-BCC9-481C-8FDF-89D81CBB30BE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1F18E74F-BCC9-481C-8FDF-89D81CBB30BE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1F18E74F-BCC9-481C-8FDF-89D81CBB30BE}.Release|Any CPU.Build.0 = Release|Any CPU
{1F18E74F-BCC9-481C-8FDF-89D81CBB30BE}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {1F18E74F-BCC9-481C-8888-89D81CBB30BE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {1F18E74F-BCC9-481C-8888-89D81CBB30BE}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {1F18E74F-BCC9-481C-8888-89D81CBB30BE}.Release|Any CPU.Build.0 = Release|Any CPU
+ {1F18E74F-BCC9-481C-8FDF-89D81CBB30BE}.temp|Any CPU.ActiveCfg = Debug|Any CPU
{1F05E74F-AEE8-481C-8FDF-456654CC30BE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1F05E74F-AEE8-481C-8FDF-456654CC30BE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1F05E74F-AEE8-481C-8FDF-456654CC30BE}.Release|Any CPU.Build.0 = Release|Any CPU
- {1F05E74F-AEE8-481C-8FDF-4566654897BE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {1F05E74F-AEE8-481C-8FDF-4566654897BE}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {1F05E74F-AEE8-481C-8FDF-4566654897BE}.Release|Any CPU.Build.0 = Release|Any CPU
- {1F05E74F-AEE8-481C-8FDF-4566654897BE}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {A927D603-9707-4E8A-9638-2B22C18201E1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {A927D603-9707-4E8A-9638-2B22C18201E1}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {A927D603-9707-4E8A-9638-2B22C18201E1}.Release|Any CPU.Build.0 = Release|Any CPU
+ {1F05E74F-AEE8-481C-8FDF-456654CC30BE}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {1F05E74F-AEE8-481C-8FDF-456654CC30BE}.temp|Any CPU.ActiveCfg = Debug|Any CPU
+ {1603D809-D9C4-4EE5-B921-B053CE22E068}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {1603D809-D9C4-4EE5-B921-B053CE22E068}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {1603D809-D9C4-4EE5-B921-B053CE22E068}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {1603D809-D9C4-4EE5-B921-B053CE22E068}.Release|Any CPU.Build.0 = Release|Any CPU
+ {1603D809-D9C4-4EE5-B921-B053CE22E068}.temp|Any CPU.ActiveCfg = Debug|Any CPU
+ {9E12DFE6-7DC7-4BF2-8077-42DDC69FD0A1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {9E12DFE6-7DC7-4BF2-8077-42DDC69FD0A1}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {9E12DFE6-7DC7-4BF2-8077-42DDC69FD0A1}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {9E12DFE6-7DC7-4BF2-8077-42DDC69FD0A1}.Release|Any CPU.Build.0 = Release|Any CPU
+ {9E12DFE6-7DC7-4BF2-8077-42DDC69FD0A1}.temp|Any CPU.ActiveCfg = Debug|Any CPU
+ {001F5D64-871B-47A4-A823-78C7CE3785AA}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {001F5D64-871B-47A4-A823-78C7CE3785AA}.Release|Any CPU.Build.0 = Release|Any CPU
+ {001F5D64-871B-47A4-A823-78C7CE3785AA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {001F5D64-871B-47A4-A823-78C7CE3785AA}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {001F5D64-871B-47A4-A823-78C7CE3785AA}.temp|Any CPU.ActiveCfg = Debug|Any CPU
+ {7BD4136D-AC65-40AF-A5B5-335079219588}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {7BD4136D-AC65-40AF-A5B5-335079219588}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {7BD4136D-AC65-40AF-A5B5-335079219588}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {7BD4136D-AC65-40AF-A5B5-335079219588}.Release|Any CPU.Build.0 = Release|Any CPU
+ {7BD4136D-AC65-40AF-A5B5-335079219588}.temp|Any CPU.ActiveCfg = Debug|Any CPU
+ {BFF1BEEC-2E93-4963-AD3C-2A8C9BA05C36}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {BFF1BEEC-2E93-4963-AD3C-2A8C9BA05C36}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {BFF1BEEC-2E93-4963-AD3C-2A8C9BA05C36}.temp|Any CPU.ActiveCfg = Debug|Any CPU
+ {05515E15-D3C3-4A8C-A940-9467D9D77823}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {05515E15-D3C3-4A8C-A940-9467D9D77823}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {05515E15-D3C3-4A8C-A940-9467D9D77823}.temp|Any CPU.ActiveCfg = Debug|Any CPU
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
- {96A2E0B9-91AE-4EB9-A435-185D01E24067} = {A2A2849A-0032-4AA8-BC0E-82C69D7DE354}
{96A2E0B8-91AE-4EB9-A435-185D01E24067} = {A2A2849A-0032-4AA8-BC0E-82C69D7DE354}
{96A2A7896-91AE-4EB9-A435-185D01E24067} = {A2A2849A-0032-4AA8-BC0E-82C69D7DE354}
- {C2980F9B-4798-4C05-99E2-E174810F7C7B} = {A2A2849A-0032-4AA8-BC0E-82C69D7DE354}
- {1F05E74F-AEE8-481C-8FDF-89D81TTT30BE} = {A2A2849A-0032-4AA8-BC0E-82C69D7DE354}
{1F18E74F-BCC9-481C-8FDF-89D81CBB30BE} = {A2A2849A-0032-4AA8-BC0E-82C69D7DE354}
- {1F18E74F-BCC9-481C-8888-89D81CBB30BE} = {A2A2849A-0032-4AA8-BC0E-82C69D7DE354}
{1F05E74F-AEE8-481C-8FDF-456654CC30BE} = {A2A2849A-0032-4AA8-BC0E-82C69D7DE354}
- {1F05E74F-AEE8-481C-8FDF-4566654897BE} = {A2A2849A-0032-4AA8-BC0E-82C69D7DE354}
- {A927D603-9707-4E8A-9638-2B22C18201E1} = {A2A2849A-0032-4AA8-BC0E-82C69D7DE354}
+ {001F5D64-871B-47A4-A823-78C7CE3785AA} = {A2A2849A-0032-4AA8-BC0E-82C69D7DE354}
+ {BFF1BEEC-2E93-4963-AD3C-2A8C9BA05C36} = {A2A2849A-0032-4AA8-BC0E-82C69D7DE354}
+ {05515E15-D3C3-4A8C-A940-9467D9D77823} = {A2A2849A-0032-4AA8-BC0E-82C69D7DE354}
+ {7BD4136D-AC65-40AF-A5B5-335079219588} = {A2A2849A-0032-4AA8-BC0E-82C69D7DE354}
EndGlobalSection
GlobalSection(MonoDevelopProperties) = preSolution
Policies = $0
diff --git a/vk.rewrite/Properties/AssemblyInfo.cs b/vk.rewrite/Properties/AssemblyInfo.cs
deleted file mode 100644
index 750a60f..0000000
--- a/vk.rewrite/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,51 +0,0 @@
-//
-// AssemblyInfo.cs
-//
-// Author:
-// Jean-Philippe Bruyère <jp_bruyere@hotmail.com>
-//
-// Copyright (c) 2019 jp
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-using System.Reflection;
-using System.Runtime.CompilerServices;
-
-// Information about this assembly is defined by the following attributes.
-// Change them to the values specific to your project.
-
-[assembly: AssemblyTitle ("vk.rewrite")]
-[assembly: AssemblyDescription ("")]
-[assembly: AssemblyConfiguration ("")]
-[assembly: AssemblyCompany ("Grand Tetra Software")]
-[assembly: AssemblyProduct ("")]
-[assembly: AssemblyCopyright ("jp")]
-[assembly: AssemblyTrademark ("")]
-[assembly: AssemblyCulture ("")]
-
-// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
-// The form "{Major}.{Minor}.*" will automatically update the build and revision,
-// and "{Major}.{Minor}.{Build}.*" will update just the revision.
-
-[assembly: AssemblyVersion ("1.0.*")]
-
-// The following attributes are used to specify the signing key for the assembly,
-// if desired. See the Mono documentation for more information about signing.
-
-//[assembly: AssemblyDelaySign(false)]
-//[assembly: AssemblyKeyFile("")]
diff --git a/vk.rewrite/packages.config b/vk.rewrite/packages.config
deleted file mode 100644
index e432b27..0000000
--- a/vk.rewrite/packages.config
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<packages>
- <package id="Mono.Cecil" version="0.10.3" targetFramework="net47" />
-</packages> \ No newline at end of file
diff --git a/vk.rewrite/vk.rewrite.csproj b/vk.rewrite/vk.rewrite.csproj
index 038eaa9..75962f1 100644
--- a/vk.rewrite/vk.rewrite.csproj
+++ b/vk.rewrite/vk.rewrite.csproj
@@ -1,68 +1,19 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project Sdk="Microsoft.NET.Sdk">
+ <Import Project="$(SolutionDir)netfx.props" />
<PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <ProjectGuid>{F41EA96F-A9F7-4E85-B2EE-5757C5FAD00D}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <TargetFrameworkVersion>v4.7</TargetFrameworkVersion>
- <RootNamespace>vk.rewrite</RootNamespace>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- <DebugSymbols>true</DebugSymbols>
- <DebugType>full</DebugType>
- <Optimize>false</Optimize>
- <OutputPath>bin/Debug</OutputPath>
- <DefineConstants>DEBUG;</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- <Optimize>true</Optimize>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- <OutputPath>bin/Release</OutputPath>
+ <TargetFrameworks>net471;netstandard2.0</TargetFrameworks>
+ <OutputType>Exe</OutputType>
+ <RepositoryUrl>https://github.com/jpbruyere/vk.net</RepositoryUrl>
+ <License>https://opensource.org/licenses/MIT</License>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>
- <ItemGroup>
+
+ <ItemGroup Condition="$(TargetFramework.StartsWith('net4'))">
<Reference Include="System" />
- <Reference Include="Mono.Cecil">
- <HintPath>..\packages\Mono.Cecil.0.10.3\lib\net40\Mono.Cecil.dll</HintPath>
- </Reference>
- <Reference Include="Mono.Cecil.Mdb">
- <HintPath>..\packages\Mono.Cecil.0.10.3\lib\net40\Mono.Cecil.Mdb.dll</HintPath>
- </Reference>
- <Reference Include="Mono.Cecil.Pdb">
- <HintPath>..\packages\Mono.Cecil.0.10.3\lib\net40\Mono.Cecil.Pdb.dll</HintPath>
- </Reference>
- <Reference Include="Mono.Cecil.Rocks">
- <HintPath>..\packages\Mono.Cecil.0.10.3\lib\net40\Mono.Cecil.Rocks.dll</HintPath>
- </Reference>
- </ItemGroup>
- <ItemGroup>
- <Compile Include="Properties\AssemblyInfo.cs" />
- <Compile Include="Program.cs" />
- </ItemGroup>
- <ItemGroup>
- <None Include="packages.config" />
- </ItemGroup>
- <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
-
+ </ItemGroup>
-</Project><!--<Project Sdk="Microsoft.NET.Sdk">
-
- <PropertyGroup>
- <TargetFramework>netstandard2.0</TargetFramework>
- <OutputType>Exe</OutputType>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- </PropertyGroup>
- <ItemGroup>
- </ItemGroup>
<ItemGroup>
<PackageReference Include="Mono.Cecil" Version="0.10.3" />
</ItemGroup>
-</Project>--> \ No newline at end of file
+</Project>
+
diff --git a/vke/CVKL-dotnet.csproj b/vke/CVKL-dotnet.csproj
deleted file mode 100644
index baacce5..0000000
--- a/vke/CVKL-dotnet.csproj
+++ /dev/null
@@ -1,38 +0,0 @@
-<Project Sdk="Microsoft.NET.Sdk">
- <PropertyGroup>
- <TargetFramework>netstandard2.0</TargetFramework>
-
- <Copyright></Copyright>
- <AssemblyVersion>0.1.2</AssemblyVersion>
- <Description>C# vulkan library with IDispose model and references counting</Description>
- <Company></Company>
- <Product>CVKL</Product>
- <PackageId>CVKL</PackageId>
- <PackageTags>C# vulkan game library compute glfw</PackageTags>
- <PackageVersion>$(AssemblyVersion)</PackageVersion>
- <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
- <PackageRequireLicenseAcceptance>false</PackageRequireLicenseAcceptance>
- <PackageProjectUrl>https://github.com/jpbruyere/vk.net/blob/master/README.md</PackageProjectUrl>
- <PackageLicense>https://opensource.org/licenses/MIT</PackageLicense>
- <PackageReleaseNotes></PackageReleaseNotes>
- <RepositoryUrl>https://github.com/jpbruyere/vk.net</RepositoryUrl>
- <!--<PackageIconUrl>https://github.com/KhronosGroup/glTF/blob/master/specification/figures/gltf.png</PackageIconUrl>-->
- <Authors>Jean-Philippe Bruyère</Authors>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <DefineConstants>_RENDERDOC;TRACE;DEBUG;NETSTANDARD;NETSTANDARD2_0</DefineConstants>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- </PropertyGroup>
- <ItemGroup>
- <Compile Remove="Properties\AssemblyInfo.cs;src\Renderer.cs;src\QueueFamily.cs" />
- </ItemGroup>
- <ItemGroup>
- <PackageReference Include="glTF2Loader" Version="1.1.3-alpha" />
- <PackageReference Include="Vulkan" Version="0.1.2.6" />
- <PackageReference Include="System.Runtime.CompilerServices.Unsafe" Version="4.6.0-preview4.19212.13" />
- <PackageReference Include="System.Numerics.Vectors" Version="4.6.0-preview4.19212.13" />
- </ItemGroup>
-</Project>
diff --git a/vke/CVKL.csproj b/vke/CVKL.csproj
index 66fcad4..9023ab9 100644
--- a/vke/CVKL.csproj
+++ b/vke/CVKL.csproj
@@ -1,53 +1,59 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project Sdk="Microsoft.NET.Sdk">
+ <Import Project="$(SolutionDir)netfx.props" />
<PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <ProjectGuid>{32B7E80D-BEA7-4811-B82D-CC2533069F0A}</ProjectGuid>
- <OutputType>Library</OutputType>
+ <TargetFrameworks>net471;netstandard2.0</TargetFrameworks>
+
+ <Copyright></Copyright>
+ <AssemblyVersion>0.1.3</AssemblyVersion>
+ <Description>C# vulkan library with IDispose model and references counting</Description>
+ <Company></Company>
+ <Product>CVKL</Product>
+ <PackageId>CVKL</PackageId>
+ <PackageTags>C# vulkan game library compute glfw</PackageTags>
+ <PackageVersion>$(AssemblyVersion)-beta</PackageVersion>
+ <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
+ <PackageRequireLicenseAcceptance>False</PackageRequireLicenseAcceptance>
+ <PackageProjectUrl>https://github.com/jpbruyere/vk.net/blob/master/README.md</PackageProjectUrl>
+ <PackageLicense>https://opensource.org/licenses/MIT</PackageLicense>
+ <PackageReleaseNotes></PackageReleaseNotes>
+ <RepositoryUrl>https://github.com/jpbruyere/vk.net</RepositoryUrl>
+ <!--<PackageIconUrl>https://github.com/KhronosGroup/glTF/blob/master/specification/figures/gltf.png</PackageIconUrl>-->
+ <Authors>Jean-Philippe Bruyère</Authors>
+ <SynchReleaseVersion>false</SynchReleaseVersion>
<AssemblyName>CVKL</AssemblyName>
- <TargetFrameworkVersion>v4.7.1</TargetFrameworkVersion>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <OutputPath>bin\$(Configuration)</OutputPath>
+ <OutputPath>$(SolutionDir)build\$(Configuration)\</OutputPath>
+ <LangVersion>7.2</LangVersion>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>
+
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<WarningLevel>4</WarningLevel>
<Optimize>false</Optimize>
<CheckForOverflowUnderflow>true</CheckForOverflowUnderflow>
- <DefineConstants>DEBUG;_RENDERDOC;</DefineConstants>
- <LangVersion>7.2</LangVersion>
+ <DefineConstants>DEBUG;_RENDERDOC;NETSTANDARD;NETSTANDARD2_0</DefineConstants>
</PropertyGroup>
+
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<Optimize>true</Optimize>
- <LangVersion>7.2</LangVersion>
</PropertyGroup>
- <ItemGroup>
+
+ <ItemGroup Condition="$(TargetFramework.StartsWith('net4'))">
<Reference Include="System" />
- <Reference Include="mscorlib" />
- <Reference Include="System.ComponentModel.Composition" />
+ <Reference Include="System.Runtime" />
<Reference Include="System.Core" />
<Reference Include="System.Runtime.CompilerServices.Unsafe">
- <HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.4.6.0-preview4.19212.13\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
- </Reference>
- <Reference Include="Newtonsoft.Json">
- <HintPath>..\packages\Newtonsoft.Json.12.0.2\lib\net45\Newtonsoft.Json.dll</HintPath>
- </Reference>
- <Reference Include="glTFLoader">
- <HintPath>..\packages\glTF2Loader.1.1.3-alpha\lib\net35\glTFLoader.dll</HintPath>
+ <HintPath>..\..\..\..\..\usr\lib\monodevelop\bin\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
</Reference>
- <Reference Include="VK">
- <HintPath>..\packages\Vulkan.0.1.2.6\lib\netstandard2.0\VK.dll</HintPath>
- </Reference>
- <Reference Include="System.Numerics.Vectors">
- <HintPath>..\packages\System.Numerics.Vectors.4.6.0-preview4.19212.13\lib\net46\System.Numerics.Vectors.dll</HintPath>
- </Reference>
- <Reference Include="System.Numerics" />
- </ItemGroup>
- <ItemGroup>
- <Compile Include="**/*.cs" />
</ItemGroup>
+ <ItemGroup Condition="$(TargetFramework.StartsWith('netstandard'))">
+ <PackageReference Include="System.Numerics.Vectors" Version="4.6.0-preview4.19212.13" />
+ <PackageReference Include="System.Runtime.CompilerServices.Unsafe" Version="4.5.2" />
+ </ItemGroup>
<ItemGroup>
- <None Include="packages.config" />
+ <PackageReference Include="glTF2Loader" Version="1.1.3-alpha" />
+ <PackageReference Include="Vulkan" Version="0.1.2.8-beta" />
</ItemGroup>
- <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+ <ItemGroup>
+ <Compile Remove="Properties\AssemblyInfo.cs;src\Renderer.cs;src\QueueFamily.cs" />
+ </ItemGroup>
</Project> \ No newline at end of file
diff --git a/vke/packages.config b/vke/packages.config
deleted file mode 100644
index 1af220a..0000000
--- a/vke/packages.config
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<packages>
- <package id="glTF2Loader" version="1.1.3-alpha" targetFramework="net471" />
- <package id="Newtonsoft.Json" version="12.0.2" targetFramework="net471" />
- <package id="System.Numerics.Vectors" version="4.6.0-preview4.19212.13" targetFramework="net471" />
- <package id="System.Runtime.CompilerServices.Unsafe" version="4.6.0-preview4.19212.13" targetFramework="net471" />
- <package id="Vulkan" version="0.1.2.6" targetFramework="net471" />
-</packages> \ No newline at end of file
diff --git a/vke/src/Model.cs b/vke/src/Model.cs
index 280dc2a..ed440a9 100644
--- a/vke/src/Model.cs
+++ b/vke/src/Model.cs
@@ -141,6 +141,7 @@ namespace CVKL {
public class Scene {
public string Name;
public Node Root;
+ public List<Node> GetNodes () => Root.Children;
public BoundingBox AABB => Root.GetAABB (Matrix4x4.Identity);
}
diff --git a/vke/src/PbrModel.cs b/vke/src/PbrModel.cs
index a92fbd9..bcd5c9c 100644
--- a/vke/src/PbrModel.cs
+++ b/vke/src/PbrModel.cs
@@ -70,13 +70,13 @@ namespace CVKL {
}
Image[] textures;
- PbrMaterial[] materials;
+ public PbrMaterial[] materials;
DescriptorSet[] descriptorSets;
DescriptorPool descriptorPool;
public GPUBuffer vbo;
public GPUBuffer ibo;
- public GPUBuffer<PbrMaterial> materialUBO;
+ public HostBuffer<PbrMaterial> materialUBO;
public PbrModel (Queue transferQ, string path) {
dev = transferQ.Dev;
@@ -123,7 +123,7 @@ namespace CVKL {
loadMaterials (ctx, layout, attachments);
- materialUBO = new GPUBuffer<PbrMaterial> (transferQ, cmdPool, VkBufferUsageFlags.UniformBuffer, materials);
+ materialUBO = new HostBuffer<PbrMaterial> (dev, VkBufferUsageFlags.UniformBuffer, materials);
Scenes = new List<Scene> (ctx.LoadScenes (out defaultSceneIndex));
}
diff --git a/vke/src/VkWindow.cs b/vke/src/VkWindow.cs
index a04b9ce..446004e 100644
--- a/vke/src/VkWindow.cs
+++ b/vke/src/VkWindow.cs
@@ -66,6 +66,7 @@ namespace CVKL {
uint width, height;
bool[] buttons = new bool[10];
+ public Modifier KeyModifiers = 0;
uint frameCount;
Stopwatch frameChrono;
@@ -104,9 +105,11 @@ namespace CVKL {
Glfw3.SetMouseButtonPosCallback (hWin, HandleMouseButtonDelegate);
Glfw3.SetCursorPosCallback (hWin, HandleCursorPosDelegate);
Glfw3.SetWindowSizeCallback (hWin, HandleWindowSizeDelegate);
+ Glfw3.SetScrollCallback (hWin, HandleScrollDelegate);
+ Glfw3.SetCharCallback (hWin, HandleCharDelegate);
initVulkan (vSync, debugMarkers);
- }
+ }
void initVulkan (bool vSync, bool debugMarkers) {
instance = new Instance ();
@@ -184,8 +187,8 @@ namespace CVKL {
presentQueue.WaitIdle ();
}
-
- protected virtual void onMouseMove (double xPos, double yPos) {
+ protected virtual void onScroll (double xOffset, double yOffset) {}
+ protected virtual void onMouseMove (double xPos, double yPos) {
double diffX = lastMouseX - xPos;
double diffY = lastMouseY - yPos;
if (MouseButton[0]) {
@@ -235,8 +238,10 @@ namespace CVKL {
updateViewRequested = true;
}
protected virtual void onKeyUp (Key key, int scanCode, Modifier modifiers) { }
+ protected virtual void onChar (CodePoint cp) { }
- static void HandleWindowSizeDelegate (IntPtr window, int width, int height) {}
+ #region events delegates
+ static void HandleWindowSizeDelegate (IntPtr window, int width, int height) {}
static void HandleCursorPosDelegate (IntPtr window, double xPosition, double yPosition) {
currentWindow.onMouseMove (xPosition, yPosition);
currentWindow.lastMouseX = xPosition;
@@ -251,18 +256,26 @@ namespace CVKL {
currentWindow.onMouseButtonUp (button);
}
}
- static void HandleKeyDelegate (IntPtr window, Key key, int scanCode, InputAction action, Modifier modifiers) {
+ static void HandleScrollDelegate (IntPtr window, double xOffset, double yOffset) {
+ currentWindow.onScroll (xOffset, yOffset);
+ }
+ static void HandleKeyDelegate (IntPtr window, Key key, int scanCode, InputAction action, Modifier modifiers) {
+ currentWindow.KeyModifiers = modifiers;
if (action == InputAction.Press || action == InputAction.Repeat) {
currentWindow.onKeyDown (key, scanCode, modifiers);
} else {
currentWindow.onKeyUp (key, scanCode, modifiers);
}
}
-
+ static void HandleCharDelegate (IntPtr window, CodePoint codepoint) {
+ currentWindow.onChar (codepoint);
+ }
+ #endregion
+
/// <summary>
/// main window loop, exits on GLFW3 exit event
/// </summary>
- public virtual void Run () {
+ public virtual void Run () {
OnResize ();
UpdateView ();