+++ /dev/null
-<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>
-<?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>
+++ /dev/null
-<?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
--- /dev/null
+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
+++ /dev/null
-{
- "version": 1,
- "dgSpecHash": "JR3Npq+qOMR4zqncbQZsp/9dSn2NHwuEQPHQrZBIcsWprf3vSAuB7kmnfnBox0NfgAlDwyqly5A6+chqHs1DDA==",
- "success": true
-}
\ No newline at end of file
+++ /dev/null
-<?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
+++ /dev/null
-<?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
+++ /dev/null
-{
- "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
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
--- /dev/null
+<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>
+