]> O.S.I.I.S - jp/crow.git/commitdiff
net.sdk project files
authorJean-Philippe Bruyère <jp_bruyere@hotmail.com>
Sat, 4 May 2019 01:06:06 +0000 (03:06 +0200)
committerJean-Philippe Bruyère <jp_bruyere@hotmail.com>
Sat, 4 May 2019 01:06:06 +0000 (03:06 +0200)
Crow/Crow.NetStd.csproj [deleted file]
Crow/Crow.csproj
Crow/packages.config [deleted file]
Crow/src/CrowVkWin.cs [new file with mode: 0644]
MDCrow/obj/MDCrow.csproj.nuget.cache [deleted file]
MDCrow/obj/MDCrow.csproj.nuget.g.props [deleted file]
MDCrow/obj/MDCrow.csproj.nuget.g.targets [deleted file]
MDCrow/obj/project.assets.json [deleted file]
Samples/HelloWorld/main.cs
netfx.props [new file with mode: 0644]

diff --git a/Crow/Crow.NetStd.csproj b/Crow/Crow.NetStd.csproj
deleted file mode 100644 (file)
index 0421fa3..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-<Project Sdk="Microsoft.NET.Sdk">
-
-  <PropertyGroup>
-    <RootNamespace>Crow</RootNamespace>
-    <Description>C.R.O.W. is a widget toolkit and rendering engine entirely developed in C# with templates, styles, compositing, and bindings.</Description>        
-        
-<!--    <TargetFramework>netstandard2.0</TargetFramework>-->
-    <TargetFramework>netcoreapp2.0</TargetFramework>
-        
-    <OutputPath>$(SolutionDir)build/$(Configuration)</OutputPath>
-    <IntermediateOutputPath>$(SolutionDir)build/obj/$(Configuration)</IntermediateOutputPath>  
-
-    <DefineConstants>DESIGN_MODE</DefineConstants>
-    
-    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>        
-    <EnableDefaultItems>false</EnableDefaultItems>
-    <EnableDefaultCompileItems>false</EnableDefaultCompileItems>
-    <PackOnBuild>true</PackOnBuild>
-    <PackageId>Crow</PackageId>
-    <PackageVersion>0.8.0.1-beta</PackageVersion>
-<!--    <PackageVersionSuffix>-beta</PackageVersionSuffix>not working-->
-    <Authors>JP Bruyère</Authors>
-    <Title>C# Rapid Open Widget Toolkit</Title>
-    <PackageLicenseUrl>https://opensource.org/licenses/MIT</PackageLicenseUrl>
-    <PackageIconUrl>https://jpbruyere.github.io/Crow/images/crow.png</PackageIconUrl>
-    <PackageProjectUrl>https://github.com/jpbruyere/Crow/wiki</PackageProjectUrl>
-    <PackageTags>Crow Widget Interface GUI C# .Net Mono</PackageTags>
-    <PackageCopyright>Copyright 2013-2018</PackageCopyright>
-    <PackageReleaseNotes></PackageReleaseNotes>
-    <Owners>JP Bruyère</Owners>
-  </PropertyGroup>
-   
-  
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
-    <DefineConstants>TRACE;DESIGN_MODE;DEBUG</DefineConstants>
-  </PropertyGroup>
-  
-  <ItemGroup>
-    <Compile Include="src\**\*.cs" Exclude="src\Mono.Cairo\NativeMethods-internal.cs" />
-        
-    <EmbeddedResource Include="Templates\*.*">
-      <LogicalName>Crow.%(Filename).template</LogicalName>
-    </EmbeddedResource>
-    
-    <EmbeddedResource Include="Default.style" />
-    <EmbeddedResource Include="Icons\*.*" />
-        
-    <PackageReference Include="NuGet.Build.Packaging" Version="0.2.2" />
-  </ItemGroup>  
-  <ItemGroup>
-    <Folder Include="src\backends\win32\" />
-  </ItemGroup>
-  <ItemGroup>
-    <Compile Remove="src\backends\win32\User32\Structs\RawInputDevice.cs" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="src\backends\win32\User32\Structs\RawInputDevice.cs" />
-  </ItemGroup>
-</Project>
index 7f877da8c71b492073fa8c427535a7a5d7366245..16438f4c792f19661b8da2e0eaa7cb949557a65b 100644 (file)
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" DefaultTargets="Build" 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>{C2980F9B-4798-4C05-99E2-E174810F7C7B}</ProjectGuid>
-    <OutputType>Library</OutputType>
-    <AppDesignerFolder>Properties</AppDesignerFolder>
-    <RootNamespace>Crow</RootNamespace>
+    <TargetFrameworks>net471;netstandard2.0</TargetFrameworks>
     <AssemblyName>Crow</AssemblyName>
-    <FileAlignment>512</FileAlignment>
-    <AllowUnsafeBlocks>True</AllowUnsafeBlocks>
-    <NoStdLib>False</NoStdLib>
-    <TreatWarningsAsErrors>False</TreatWarningsAsErrors>
-    <WarningLevel>4</WarningLevel>
-    <NoWin32Manifest>False</NoWin32Manifest>
-    <SignAssembly>false</SignAssembly>
-    <RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent>
-    <Description>C# Rapid Open Widget</Description>
-    <BaseAddress>4194304</BaseAddress>
-    <OutputPath>$(SolutionDir)build\$(Configuration)</OutputPath>
-    <IntermediateOutputPath>$(SolutionDir)build\obj\$(Configuration)</IntermediateOutputPath>
-    <AssemblyOriginatorKeyFile>crow.key</AssemblyOriginatorKeyFile>
-    <ProductVersion>8.0.30703</ProductVersion>
-    <SchemaVersion>2.0</SchemaVersion>
-    <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
-    <ReleaseVersion>0.8.0</ReleaseVersion>
+    <Copyright></Copyright>
+    <AssemblyVersion>0.9.0</AssemblyVersion>    
+    <Description>C.R.O.W. is a widget toolkit and rendering engine entirely developed in C# with templates, styles, compositing, and bindings.</Description>        
+                    
+    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>        
+    <EnableDefaultItems>false</EnableDefaultItems>
+    <EnableDefaultCompileItems>false</EnableDefaultCompileItems>
+        
+    <Authors>Jean-Philippe Bruyère</Authors>
+    <Title>C# Rapid Open Widget Toolkit</Title>        
+    <PackageId>Crow.VK</PackageId>
+    <PackageTags>Crow Vulkan Widget Interface GUI</PackageTags>
+    <PackageVersion>$(AssemblyVersion)-beta</PackageVersion>
+    <PackOnBuild>True</PackOnBuild>
+    <PackageRequireLicenseAcceptance>false</PackageRequireLicenseAcceptance>
+    <PackageProjectUrl>https://github.com/jpbruyere/Crow/wiki</PackageProjectUrl>        
+    <PackageLicense>https://opensource.org/licenses/MIT</PackageLicense>
+    <PackageIconUrl>https://jpbruyere.github.io/Crow/images/crow.png</PackageIconUrl>
+    <PackageCopyright>Copyright 2013-2019</PackageCopyright>
+    <PackageReleaseNotes>Turn on vulkan layer through vkvg</PackageReleaseNotes>    
+    <RepositoryUrl>https://github.com/jpbruyere/Crow</RepositoryUrl>
+        
+    <OutputPath>$(SolutionDir)build\$(Configuration)\</OutputPath>        
+    <DefineConstants>DESIGN_MODE</DefineConstants>
   </PropertyGroup>
+   
+  
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
-    <DebugSymbols>true</DebugSymbols>
-    <DebugType>full</DebugType>
-    <CheckForOverflowUnderflow>true</CheckForOverflowUnderflow>
-    <Optimize>false</Optimize>
-    <OutputPath>$(SolutionDir)build\Debug</OutputPath>
-    <DefineConstants>TRACE0;DEBUG;DEBUG_BINDING_FUNC_CALLS0;DEBUG_DRAGNDROP0;DEBUG_LOG0;XLIB_BACKEND0;DESIGN_MODE;DEBUG_UPDATE0;DEBUG_FOCUS0;DEBUG_DISPOSE0;MEASURE_TIME0;DEBUG_LOAD0;DEBUG_BINDING0;DEBUG_CLIP_RECTANGLE0</DefineConstants>
-    <EnvironmentVariables>
-      <EnvironmentVariables>
-        <Variable name="MONO_CAIRO_DEBUG_DISPOSE" value="1" />
-      </EnvironmentVariables>
-    </EnvironmentVariables>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
-    <Optimize>true</Optimize>
-    <DefineConstants>DESIGN_MODE</DefineConstants>
-    <OutputPath>$(SolutionDir)build\Release</OutputPath>
+    <DefineConstants>TRACE;DESIGN_MODE;DEBUG</DefineConstants>
   </PropertyGroup>
-  <ItemGroup>
-    <Compile Include="src\**\*.cs" Exclude="src\Mono.Cairo\NativeMethods-internal.cs;src\backends\win32\User32\Structs\RawInputDevice.cs;src\vkvg\Point.cs" />
-  </ItemGroup>
-  <ItemGroup>
+  
+  <ItemGroup Condition="$(TargetFramework.StartsWith('net4'))">
     <Reference Include="System" />
     <Reference Include="System.Data" />
     <Reference Include="System.Xml" />
-    <Reference Include="Microsoft.CSharp" />
-    <Reference Include="System.Drawing" />
-    <Reference Include="VK">
-      <HintPath>..\..\packages\Vulkan.0.1.2.6\lib\netstandard2.0\VK.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>
-    </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.Numerics" />
-    <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="CVKL-dotnet">
-      <HintPath>..\packages\CVKL.0.1.2\lib\netstandard2.0\CVKL-dotnet.dll</HintPath>
-    </Reference>
-  </ItemGroup>
-  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
-  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
-       Other similar extension points exist, see Microsoft.Common.targets.
-  <Target Name="BeforeBuild">
-  </Target>
-  <Target Name="AfterBuild">
-  </Target>
-  -->
-  <ItemGroup>
-    <Folder Include="src\GraphicObjects\" />
-    <Folder Include="src\Cairo\" />
-    <Folder Include="Images\" />
-    <Folder Include="Images\Icons\" />
-    <Folder Include="src\CompilerServices\" />
-    <Folder Include="src\Fill\" />
-    <Folder Include="src\Input\" />
-    <Folder Include="src\rsvg\" />
-    <Folder Include="src\IML\" />
-    <Folder Include="Icons\" />
-    <Folder Include="src\debug\" />
-    <Folder Include="src\backends\" />
-    <Folder Include="src\backends\xlib\" />
-    <Folder Include="src\backends\xcb\" />
-    <Folder Include="src\vkvg\" />
+    <Reference Include="Microsoft.CSharp" />        
   </ItemGroup>
+    
   <ItemGroup>
-    <EmbeddedResource Include="Icons\*.*" />
-    <EmbeddedResource Include="Default.style" />
-    <EmbeddedResource Include="Templates\Button.template">
-      <LogicalName>Crow.Button.template</LogicalName>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Templates\CheckBox.template">
-      <LogicalName>Crow.CheckBox.template</LogicalName>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Templates\ComboBox.template">
-      <LogicalName>Crow.ComboBox.template</LogicalName>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Templates\Expandable.template">
-      <LogicalName>Crow.Expandable.template</LogicalName>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Templates\DirectoryView.template">
-      <LogicalName>Crow.DirectoryView.template</LogicalName>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Templates\FileDialog.template">
-      <LogicalName>Crow.FileDialog.template</LogicalName>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Templates\GroupBox.template">
-      <LogicalName>Crow.GroupBox.template</LogicalName>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Templates\ListBox.template">
-      <LogicalName>Crow.ListBox.template</LogicalName>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Templates\MessageBox.template">
-      <LogicalName>Crow.MessageBox.template</LogicalName>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Templates\Popper.template">
-      <LogicalName>Crow.Popper.template</LogicalName>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Templates\RadioButton.template">
-      <LogicalName>Crow.RadioButton.template</LogicalName>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Templates\ScrollBar.template">
-      <LogicalName>Crow.ScrollBar.template</LogicalName>
+    <Compile Include="src\**\*.cs" />
+        
+    <EmbeddedResource Include="Templates\*.*">
+      <LogicalName>Crow.%(Filename).template</LogicalName>
     </EmbeddedResource>
-    <EmbeddedResource Include="Templates\Slider.template">
-      <LogicalName>Crow.Slider.template</LogicalName>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Templates\Spinner.template">
-      <LogicalName>Crow.Spinner.template</LogicalName>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Templates\TabItem.template">
-      <LogicalName>Crow.TabItem.template</LogicalName>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Templates\TreeView.template">
-      <LogicalName>Crow.TreeView.template</LogicalName>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Templates\Window.template">
-      <LogicalName>Crow.Window.template</LogicalName>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Images\Icons\Cursors\ibeam" />
-    <EmbeddedResource Include="Templates\MenuItem.template">
-      <LogicalName>Crow.MenuItem.template</LogicalName>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Templates\Menu.template">
-      <LogicalName>Crow.Menu.template</LogicalName>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Templates\ColorPicker.template">
-      <LogicalName>Crow.ColorPicker.template</LogicalName>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Templates\ToolWindow.template">
-      <LogicalName>Crow.ToolWindow.template</LogicalName>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Templates\FileItems.template">
-      <LogicalName>Crow.FileItems.template</LogicalName>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Templates\DefaultItem.template">
-      <LogicalName>Crow.DefaultItem.template</LogicalName>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Templates\ScrollingListBox.template">
-      <LogicalName>Crow.ScrollingListBox.template</LogicalName>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Templates\imgItem.template" />
-    <EmbeddedResource Include="Templates\ArrowBut.template">
-      <LogicalName>Crow.ArrowBut.template</LogicalName>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Templates\treeList.template" />
-    <EmbeddedResource Include="Templates\CheckBox2.template">
-      <LogicalName>Crow.CheckBox2.template</LogicalName>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Templates\Tooltip.template">
-      <LogicalName>Crow.Tooltip.template</LogicalName>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Templates\ContextMenu.template">
-      <LogicalName>Crow.ContextMenu.template</LogicalName>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Templates\DockWindow.template">
-      <LogicalName>Crow.DockWindow.template</LogicalName>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Templates\HScrollBar.template">
-      <LogicalName>Crow.HScrollBar.template</LogicalName>
+    
+    <EmbeddedResource Include="Default.style" />
+    <EmbeddedResource Include="Icons\*.*">
+        <LogicalName>Crow.Icons.%(Filename)%(Extension)</LogicalName>    
     </EmbeddedResource>
-    <None Include="Crow.dll.config">
-      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
-    </None>
-    <EmbeddedResource Include="Images\Icons\Cursors\arrow" />
-    <EmbeddedResource Include="Images\Icons\Cursors\bottom_left_corner" />
-    <EmbeddedResource Include="Images\Icons\Cursors\bottom_right_corner" />
-    <EmbeddedResource Include="Images\Icons\Cursors\cross" />
-    <EmbeddedResource Include="Images\Icons\Cursors\hand" />
-    <EmbeddedResource Include="Images\Icons\Cursors\help" />
-    <EmbeddedResource Include="Images\Icons\Cursors\move" />
-    <EmbeddedResource Include="Images\Icons\Cursors\sb_h_double_arrow" />
-    <EmbeddedResource Include="Images\Icons\Cursors\sb_v_double_arrow" />
-    <EmbeddedResource Include="Images\Icons\Cursors\top_left_corner" />
-    <EmbeddedResource Include="Images\Icons\Cursors\top_right_corner" />
-    <None Include="packages.config" />
-  </ItemGroup>
+  </ItemGroup>  
+    
+  <ItemGroup>
+    <ProjectReference Include="..\..\vke\CVKL.csproj" />
+  </ItemGroup>    
+    
 </Project>
diff --git a/Crow/packages.config b/Crow/packages.config
deleted file mode 100644 (file)
index c480cd6..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<packages>
-  <package id="CVKL" version="0.1.2" targetFramework="net461" />
-  <package id="glTF2Loader" version="1.1.3-alpha" targetFramework="net461" />
-  <package id="Newtonsoft.Json" version="12.0.2" targetFramework="net461" />
-  <package id="System.Numerics.Vectors" version="4.6.0-preview4.19212.13" targetFramework="net461" />
-  <package id="System.Runtime.CompilerServices.Unsafe" version="4.6.0-preview4.19212.13" targetFramework="net461" />
-  <package id="Vulkan" version="0.1.2.6" targetFramework="net461" />
-</packages>
\ No newline at end of file
diff --git a/Crow/src/CrowVkWin.cs b/Crow/src/CrowVkWin.cs
new file mode 100644 (file)
index 0000000..890b461
--- /dev/null
@@ -0,0 +1,215 @@
+using System;
+using System.Threading;
+using Crow;
+using CVKL;
+using VK;
+
+namespace Crow
+{
+       public class CrowVkWin : VkWindow, IValueChange {
+               bool isRunning;
+
+               protected override void render () {
+                       int idx = swapChain.GetNextImage ();
+
+                       if (idx < 0) {
+                               OnResize ();
+                               return;
+                       }
+
+                       lock (crow.RenderMutex) {
+                               presentQueue.Submit (cmds[idx], swapChain.presentComplete, drawComplete[idx]);
+                               presentQueue.Present (swapChain, drawComplete[idx]);
+                               presentQueue.WaitIdle ();
+                       }
+                       Thread.Sleep (1);
+               }
+
+               #region crow
+               #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
+
+               protected Crow.Interface crow;
+
+               void crow_thread_func () {
+                       vkvgDev = new vkvg.Device (instance.Handle, phy.Handle, dev.VkDev.Handle, presentQueue.qFamIndex,
+                               vkvg.SampleCount.Sample_8, presentQueue.index);
+
+                       crow = new Crow.Interface (vkvgDev, 800, 600);
+
+                       isRunning = true;
+                       while (isRunning) {
+                               crow.Update ();
+                               Thread.Sleep (3);
+                       }
+
+                       crow.Dispose ();
+                       vkvgDev.Dispose ();
+
+                       crow = null;
+               }
+               #endregion
+
+
+               protected CVKL.Image uiImage;
+               protected vkvg.Device vkvgDev;
+
+               void initUISurface () {
+                       lock (crow.UpdateMutex) {
+                               try {
+                                       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;
+                               } catch (Exception ex) {
+                                       Console.WriteLine (ex);
+                               }
+                       }
+               }
+
+               protected CrowVkWin () : base() {               
+                       Thread crowThread = new Thread (crow_thread_func);
+                       crowThread.IsBackground = true;
+                       crowThread.Start ();
+
+                       while (crow == null)
+                               Thread.Sleep (2);
+
+                       initUISurface ();
+               }
+
+               protected virtual void recordDraw (CommandBuffer cmd, int imageIndex) { }
+
+               void buildCommandBuffers () {
+                       for (int i = 0; i < swapChain.ImageCount; ++i) {
+                               cmds[i]?.Free ();
+                               cmds[i] = cmdPool.AllocateAndStart ();
+
+                               CommandBuffer cmd = cmds [i];
+
+                               recordDraw (cmd, i);
+
+                               swapChain.images [i].SetLayout (cmd, VkImageAspectFlags.Color,
+                                       VkImageLayout.Undefined, VkImageLayout.TransferDstOptimal,
+                                       VkPipelineStageFlags.BottomOfPipe, VkPipelineStageFlags.Transfer);
+                               uiImage.SetLayout (cmd, VkImageAspectFlags.Color,
+                                       VkImageLayout.ColorAttachmentOptimal, VkImageLayout.TransferSrcOptimal,
+                                       VkPipelineStageFlags.ColorAttachmentOutput, VkPipelineStageFlags.Transfer);
+                                       
+                               VkImageSubresourceLayers imgSubResLayer = new VkImageSubresourceLayers {
+                                       aspectMask = VkImageAspectFlags.Color,
+                                       mipLevel = 0,
+                                       baseArrayLayer = 0,
+                                       layerCount = 1
+                               };
+                               VkImageCopy cregion = new VkImageCopy {
+                                       srcSubresource = imgSubResLayer,
+                                       srcOffset = default (VkOffset3D),
+                                       dstSubresource = imgSubResLayer,
+                                       dstOffset = default (VkOffset3D),
+                                       extent = new VkExtent3D { width = swapChain.Width, height = swapChain.Height }
+                               };
+                               Vk.vkCmdCopyImage (cmds [i].Handle, uiImage.Handle, VkImageLayout.TransferSrcOptimal,
+                                       swapChain.images [i].Handle, VkImageLayout.TransferDstOptimal, 1, ref cregion);
+
+                               swapChain.images [i].SetLayout (cmd, VkImageAspectFlags.Color,
+                                       VkImageLayout.TransferDstOptimal, VkImageLayout.PresentSrcKHR,
+                                       VkPipelineStageFlags.Transfer, VkPipelineStageFlags.BottomOfPipe);
+                               uiImage.SetLayout (cmd, VkImageAspectFlags.Color,
+                                       VkImageLayout.TransferSrcOptimal, VkImageLayout.ColorAttachmentOptimal,
+                                       VkPipelineStageFlags.Transfer, VkPipelineStageFlags.ColorAttachmentOutput);
+
+                               cmds [i].End ();
+                       }
+               }
+
+               /// <summary>
+               /// rebuild command buffers if needed
+               /// </summary>
+               public override void Update () {
+                       if (rebuildBuffers) {
+                               buildCommandBuffers ();
+                               rebuildBuffers = false;
+                       }
+               }
+
+               protected override void OnResize () {
+                       dev.WaitIdle ();
+
+                       crow.ProcessResize (new Crow.Rectangle (0, 0, (int)swapChain.Width, (int)swapChain.Height));
+
+                       initUISurface ();
+
+                       buildCommandBuffers ();
+                       dev.WaitIdle ();
+               }
+
+               #region Mouse and keyboard
+               //protected override void onScroll (double xOffset, double yOffset)
+               //{
+               //      if (KeyModifiers.HasFlag (Glfw.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;
+               }
+               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 (Glfw.Key key, int scanCode, Glfw.Modifier modifiers)
+               {
+                       if (crow.ProcessKeyDown ((Crow.Key)key))
+                               return;
+               }
+               protected override void onKeyUp (Glfw.Key key, int scanCode, Glfw.Modifier modifiers)
+               {
+                       if (crow.ProcessKeyUp ((Crow.Key)key))
+                               return;
+               }
+               //protected override void onChar (Glfw.CodePoint cp)
+               //{
+               //      if (crow.ProcessKeyPress (cp.ToChar ()))
+               //              return;
+               //}
+               #endregion
+
+               #region dispose
+               protected override void Dispose (bool disposing) {
+                       if (disposing) {
+                               if (!isDisposed) {
+                                       dev.WaitIdle ();
+
+                                       isRunning = false;
+                                       uiImage?.Dispose ();
+                                       while (crow != null)
+                                               Thread.Sleep (1);
+                               }
+                       }
+
+                       base.Dispose (disposing);
+               }
+               #endregion
+       }
+}
\ No newline at end of file
diff --git a/MDCrow/obj/MDCrow.csproj.nuget.cache b/MDCrow/obj/MDCrow.csproj.nuget.cache
deleted file mode 100644 (file)
index 879e416..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-{
-  "version": 1,
-  "dgSpecHash": "JR3Npq+qOMR4zqncbQZsp/9dSn2NHwuEQPHQrZBIcsWprf3vSAuB7kmnfnBox0NfgAlDwyqly5A6+chqHs1DDA==",
-  "success": true
-}
\ No newline at end of file
diff --git a/MDCrow/obj/MDCrow.csproj.nuget.g.props b/MDCrow/obj/MDCrow.csproj.nuget.g.props
deleted file mode 100644 (file)
index ef7190e..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="no"?>
-<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
-    <RestoreSuccess Condition=" '$(RestoreSuccess)' == '' ">True</RestoreSuccess>
-    <RestoreTool Condition=" '$(RestoreTool)' == '' ">NuGet</RestoreTool>
-    <ProjectAssetsFile Condition=" '$(ProjectAssetsFile)' == '' ">/mnt/devel/gts/vk.net/crow/MDCrow/obj/project.assets.json</ProjectAssetsFile>
-    <NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">/home/jp/.nuget/packages/</NuGetPackageRoot>
-    <NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">/home/jp/.nuget/packages/;/usr/share/dotnet/sdk/NuGetFallbackFolder</NuGetPackageFolders>
-    <NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">PackageReference</NuGetProjectStyle>
-    <NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">4.8.0</NuGetToolVersion>
-  </PropertyGroup>
-  <PropertyGroup>
-    <MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>
-  </PropertyGroup>
-  <ImportGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
-    <Import Project="$(NuGetPackageRoot)monodevelop.addins/0.4.7/build/MonoDevelop.Addins.props" Condition="Exists('$(NuGetPackageRoot)monodevelop.addins/0.4.7/build/MonoDevelop.Addins.props')" />
-  </ImportGroup>
-</Project>
\ No newline at end of file
diff --git a/MDCrow/obj/MDCrow.csproj.nuget.g.targets b/MDCrow/obj/MDCrow.csproj.nuget.g.targets
deleted file mode 100644 (file)
index 175c03f..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="no"?>
-<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <PropertyGroup>
-    <MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>
-  </PropertyGroup>
-  <ImportGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
-    <Import Project="$(NuGetPackageRoot)monodevelop.addins/0.4.7/build/MonoDevelop.Addins.targets" Condition="Exists('$(NuGetPackageRoot)monodevelop.addins/0.4.7/build/MonoDevelop.Addins.targets')" />
-  </ImportGroup>
-</Project>
\ No newline at end of file
diff --git a/MDCrow/obj/project.assets.json b/MDCrow/obj/project.assets.json
deleted file mode 100644 (file)
index 8c5c091..0000000
+++ /dev/null
@@ -1,115 +0,0 @@
-{
-  "version": 3,
-  "targets": {
-    ".NETFramework,Version=v4.6.1": {
-      "MonoDevelop.Addins/0.4.7": {
-        "type": "package",
-        "build": {
-          "build/MonoDevelop.Addins.props": {},
-          "build/MonoDevelop.Addins.targets": {}
-        }
-      },
-      "Crow/1.0.0": {
-        "type": "project",
-        "compile": {
-          "bin/placeholder/Crow.dll": {}
-        },
-        "runtime": {
-          "bin/placeholder/Crow.dll": {}
-        }
-      }
-    }
-  },
-  "libraries": {
-    "MonoDevelop.Addins/0.4.7": {
-      "sha512": "eUqhwtcw224cx8OjkGaCwVsl4UO78X4nE3r1PpQVGaJWopwaUvKbyDfNmGxpDAKO5/+K4v3Dxxuz5zhFpz+6hQ==",
-      "type": "package",
-      "path": "monodevelop.addins/0.4.7",
-      "files": [
-        ".signature.p7s",
-        "build/ICSharpCode.SharpZipLib.dll",
-        "build/Mono.Addins.CecilReflector.dll",
-        "build/Mono.Addins.Setup.dll",
-        "build/Mono.Addins.dll",
-        "build/Mono.Cecil.Mdb.dll",
-        "build/Mono.Cecil.Pdb.dll",
-        "build/Mono.Cecil.Rocks.dll",
-        "build/Mono.Cecil.dll",
-        "build/MonoDevelop.Addins.Tasks.dll",
-        "build/MonoDevelop.Addins.Tasks.pdb",
-        "build/MonoDevelop.Addins.props",
-        "build/MonoDevelop.Addins.targets",
-        "monodevelop.addins.0.4.7.nupkg.sha512",
-        "monodevelop.addins.nuspec"
-      ]
-    },
-    "Crow/1.0.0": {
-      "type": "project",
-      "path": "../Crow/Crow.csproj",
-      "msbuildProject": "../Crow/Crow.csproj"
-    }
-  },
-  "projectFileDependencyGroups": {
-    ".NETFramework,Version=v4.6.1": [
-      "Crow >= 1.0.0",
-      "MonoDevelop.Addins >= 0.4.7"
-    ]
-  },
-  "packageFolders": {
-    "/home/jp/.nuget/packages/": {},
-    "/usr/share/dotnet/sdk/NuGetFallbackFolder": {}
-  },
-  "project": {
-    "version": "1.0.0",
-    "restore": {
-      "projectUniqueName": "/mnt/devel/gts/vk.net/crow/MDCrow/MDCrow.csproj",
-      "projectName": "MDCrow",
-      "projectPath": "/mnt/devel/gts/vk.net/crow/MDCrow/MDCrow.csproj",
-      "packagesPath": "/home/jp/.nuget/packages/",
-      "outputPath": "/mnt/devel/gts/vk.net/crow/MDCrow/obj/",
-      "projectStyle": "PackageReference",
-      "fallbackFolders": [
-        "/usr/share/dotnet/sdk/NuGetFallbackFolder"
-      ],
-      "configFilePaths": [
-        "/home/jp/.config/NuGet/NuGet.Config"
-      ],
-      "originalTargetFrameworks": [
-        "net461"
-      ],
-      "sources": {
-        "/mnt/devel/Crow": {},
-        "/mnt/devel/gts/vk.net/VK/bin/Release/": {},
-        "/mnt/devel/gts/vk.net/vke/bin/Release": {},
-        "/mnt/devel/vkvg.net/vkvg/bin/Release": {},
-        "https://api.nuget.org/v3/index.json": {},
-        "https://www.myget.org/F/opentk-develop": {},
-        "https://www.nuget.org/api/v2/": {}
-      },
-      "frameworks": {
-        "net461": {
-          "projectReferences": {
-            "/mnt/devel/gts/vk.net/crow/Crow/Crow.csproj": {
-              "projectPath": "/mnt/devel/gts/vk.net/crow/Crow/Crow.csproj"
-            }
-          }
-        }
-      },
-      "warningProperties": {
-        "warnAsError": [
-          "NU1605"
-        ]
-      }
-    },
-    "frameworks": {
-      "net461": {
-        "dependencies": {
-          "MonoDevelop.Addins": {
-            "target": "Package",
-            "version": "[0.4.7, )"
-          }
-        }
-      }
-    }
-  }
-}
\ No newline at end of file
index 6657cc432c4a951a68cb603c691c35cdc310bf10..633ab13c4280e35f5b0315fb72d70e1400b892f3 100644 (file)
@@ -6,218 +6,15 @@ using VK;
 
 namespace HelloWorld
 {
-       class Program : VkWindow, IValueChange {
+       class Program : CrowVkWin {
                static void Main (string[] args) {
                        using (Program vke = new Program ()) {
-                               vke.Run ();
-                       }
-               }
-               bool isRunning;
-
-               protected override void render () {
-                       int idx = swapChain.GetNextImage ();
-
-                       if (idx < 0) {
-                               OnResize ();
-                               return;
-                       }
-
-                       lock (crow.RenderMutex) {
-                               presentQueue.Submit (cmds[idx], swapChain.presentComplete, drawComplete[idx]);
-                               presentQueue.Present (swapChain, drawComplete[idx]);
-                               presentQueue.WaitIdle ();
-                       }
-                       Thread.Sleep (1);
-               }
-
-               #region crow
-               #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
-
-               Crow.Interface crow;
-
-               void crow_thread_func () {
-                       vkvgDev = new vkvg.Device (instance.Handle, phy.Handle, dev.VkDev.Handle, presentQueue.qFamIndex,
-                               vkvg.SampleCount.Sample_8, presentQueue.index);
-
-                       crow = new Crow.Interface (vkvgDev, 800, 600);
-
-                       isRunning = true;
-                       while (isRunning) {
-                               crow.Update ();
-                               Thread.Sleep (5);
-                       }
-
-                       crow.Dispose ();
-                       vkvgDev.Dispose ();
-
-                       crow = null;
-               }
-               #endregion
-
-
-               CVKL.Image uiImage;
-               vkvg.Device vkvgDev;
-
-               void initUISurface () {
-                       lock (crow.UpdateMutex) {
-                               try {
-                                       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;
-                               } catch (Exception ex) {
-                                       Console.WriteLine (ex);
-                               }
-                       }
-               }
-
-
-               Program () {            
-                       Thread crowThread = new Thread (crow_thread_func);
-                       crowThread.IsBackground = true;
-                       crowThread.Start ();
-
-                       while (crow == null)
-                               Thread.Sleep (2);
-
-                       initUISurface ();
+                               vke.crow.Load ("#HelloWorld.helloworld.crow").DataSource = vke;
+                               vke.crow.LoadIMLFragment ("<FileDialog />");
 
-                       crow.Load ("#HelloWorld.helloworld.crow").DataSource = this;
-
-                       crow.LoadIMLFragment ("<FileDialog />");
-               }
-
-               void buildCommandBuffers () {
-                       for (int i = 0; i < swapChain.ImageCount; ++i) {
-                               cmds[i]?.Free ();
-                               cmds[i] = cmdPool.AllocateAndStart ();
-
-                               CommandBuffer cmd = cmds [i];
-
-                               swapChain.images [i].SetLayout (cmd, VkImageAspectFlags.Color,
-                                       VkImageLayout.Undefined, VkImageLayout.TransferDstOptimal,
-                                       VkPipelineStageFlags.BottomOfPipe, VkPipelineStageFlags.Transfer);
-                               uiImage.SetLayout (cmd, VkImageAspectFlags.Color,
-                                       VkImageLayout.ColorAttachmentOptimal, VkImageLayout.TransferSrcOptimal,
-                                       VkPipelineStageFlags.ColorAttachmentOutput, VkPipelineStageFlags.Transfer);
-                                       
-                               VkImageSubresourceLayers imgSubResLayer = new VkImageSubresourceLayers {
-                                       aspectMask = VkImageAspectFlags.Color,
-                                       mipLevel = 0,
-                                       baseArrayLayer = 0,
-                                       layerCount = 1
-                               };
-                               VkImageCopy cregion = new VkImageCopy {
-                                       srcSubresource = imgSubResLayer,
-                                       srcOffset = default (VkOffset3D),
-                                       dstSubresource = imgSubResLayer,
-                                       dstOffset = default (VkOffset3D),
-                                       extent = new VkExtent3D { width = swapChain.Width, height = swapChain.Height }
-                               };
-                               Vk.vkCmdCopyImage (cmds [i].Handle, uiImage.Handle, VkImageLayout.TransferSrcOptimal,
-                                       swapChain.images [i].Handle, VkImageLayout.TransferDstOptimal, 1, ref cregion);
-
-                               swapChain.images [i].SetLayout (cmd, VkImageAspectFlags.Color,
-                                       VkImageLayout.TransferDstOptimal, VkImageLayout.PresentSrcKHR,
-                                       VkPipelineStageFlags.Transfer, VkPipelineStageFlags.BottomOfPipe);
-                               uiImage.SetLayout (cmd, VkImageAspectFlags.Color,
-                                       VkImageLayout.TransferSrcOptimal, VkImageLayout.ColorAttachmentOptimal,
-                                       VkPipelineStageFlags.Transfer, VkPipelineStageFlags.ColorAttachmentOutput);
-
-                               cmds [i].End ();
-                       }
-               }
-
-
-               #region update
-               int frameCount = 0;
-
-               public override void Update () {
-                       if (++frameCount > 20) {
-                               NotifyValueChanged ("fps", fps);
-                               frameCount = 0;
+                               vke.Run ();
                        }
                }
-               #endregion
-
-
-               protected override void OnResize () {
-                       dev.WaitIdle ();
-
-                       crow.ProcessResize (new Crow.Rectangle (0, 0, (int)swapChain.Width, (int)swapChain.Height));
-
-                       initUISurface ();
-
-                       buildCommandBuffers ();
-                       dev.WaitIdle ();
-               }
-               #region Mouse and keyboard
-               //protected override void onScroll (double xOffset, double yOffset)
-               //{
-               //      if (KeyModifiers.HasFlag (Glfw.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;
-               }
-               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 (Glfw.Key key, int scanCode, Glfw.Modifier modifiers)
-               {
-                       if (crow.ProcessKeyDown ((Crow.Key)key))
-                               return;
-               }
-               protected override void onKeyUp (Glfw.Key key, int scanCode, Glfw.Modifier modifiers)
-               {
-                       if (crow.ProcessKeyUp ((Crow.Key)key))
-                               return;
-               }
-               //protected override void onChar (Glfw.CodePoint cp)
-               //{
-               //      if (crow.ProcessKeyPress (cp.ToChar ()))
-               //              return;
-               //}
-               #endregion
-
-               #region dispose
-               protected override void Dispose (bool disposing) {
-                       if (disposing) {
-                               if (!isDisposed) {
-                                       dev.WaitIdle ();
 
-                                       isRunning = false;
-                                       uiImage?.Dispose ();
-                                       while (crow != null)
-                                               Thread.Sleep (1);
-                               }
-                       }
-
-                       base.Dispose (disposing);
-               }
-               #endregion
        }
 }
\ No newline at end of file
diff --git a/netfx.props b/netfx.props
new file mode 100644 (file)
index 0000000..25fdbe0
--- /dev/null
@@ -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>
+