.vs
+.vscode
build/
packages/
datas
</ItemGroup>
<ItemGroup>
- <Compile Include="$(MSBuildThisFileDirectory)common\Utils.cs"/>
+ <Compile Include="$(MSBuildThisFileDirectory)common\Utils.cs;$(MSBuildThisFileDirectory)common\SampleBase.cs"/>
<GLSLShader Include="shaders\**\*.frag;shaders\**\*.vert;shaders\**\*.comp;shaders\**\*.geom">
<LogicalName>shaders.%(Filename)%(Extension).spv</LogicalName>
</GLSLShader>
/// <summary>
/// Simple textured quad sample
/// </summary>
- class Program : VkWindow {
+ class Program : SampleBase {
static void Main (string[] args) {
#if DEBUG
Instance.VALIDATION = true;
/// <summary>
/// Simple textured cube sampled.
/// </summary>
- class Program : VkWindow {
+ class Program : SampleBase {
static void Main (string[] args) {
#if DEBUG
```
shader are automatically compiled by [`SpirVTasks`](../../SpirVTasks/README.md) if added to the project. The resulting shaders are automatically embedded in the assembly. To specifiy that the shader path is a resource name, put the **'#'** prefix. Else the path will be search on disk.
```csharp
-cfg.AddShader (VkShaderStageFlags.Vertex, "#shaders.main.vert.spv");
-cfg.AddShader (VkShaderStageFlags.Fragment, "#shaders.main.frag.spv");
+cfg.AddShader (dev, VkShaderStageFlags.Vertex, "#shaders.main.vert.spv");
+cfg.AddShader (dev, VkShaderStageFlags.Fragment, "#shaders.main.frag.spv");
```
Once the pipeline configuration is complete, we use it to effectively create and activate a graphic pipeline. Activables used by the pipeline (like the RenderPass, or the PipelineLayout) are referenced in the newly created managed pipeline. So the Configuration object doesn't need cleanup.
```csharp
//the traditional triangle sample
namespace Triangle {
- class Program : VkWindow {
+ class Program : SampleBase {
static void Main (string[] args) {
#if DEBUG
Instance.VALIDATION = true;
namespace Crow {
public class CrowWin : vke.VkWindow, IValueChange {
+#if NETCOREAPP
+ static IntPtr resolveUnmanaged (Assembly assembly, String libraryName) {
+
+ switch (libraryName)
+ {
+ case "glfw3":
+ return NativeLibrary.Load("glfw", assembly, null);
+ case "rsvg-2.40":
+ return NativeLibrary.Load("rsvg-2", assembly, null);
+ }
+ Console.WriteLine ($"[UNRESOLVE] {assembly} {libraryName}");
+ return IntPtr.Zero;
+ }
+
+ static CrowWin () {
+ System.Runtime.Loader.AssemblyLoadContext.Default.ResolvingUnmanagedDll+=resolveUnmanaged;
+ }
+#endif
#region IValueChange implementation
public event EventHandler<ValueChangeEventArgs> ValueChanged;
public virtual void NotifyValueChanged (string MemberName, object _value) {
--- /dev/null
+using System;
+using System.IO;
+using System.Linq;
+using System.Reflection;
+using System.Runtime.InteropServices;
+
+
+namespace vke {
+ public abstract class SampleBase : VkWindow {
+#if NETCOREAPP
+ static IntPtr resolveUnmanaged (Assembly assembly, String libraryName) {
+
+ switch (libraryName)
+ {
+ case "glfw3":
+ return NativeLibrary.Load("glfw", assembly, null);
+ case "rsvg-2.40":
+ return NativeLibrary.Load("rsvg-2", assembly, null);
+ }
+ Console.WriteLine ($"[UNRESOLVE] {assembly} {libraryName}");
+ return IntPtr.Zero;
+ }
+
+ static SampleBase () {
+ System.Runtime.Loader.AssemblyLoadContext.Default.ResolvingUnmanagedDll+=resolveUnmanaged;
+ }
+#endif
+ public SampleBase (string name = "VkWindow", uint _width = 800, uint _height = 600, bool vSync = true) :
+ base (name, _width, _height, vSync){}
+ }
+}
/// <summary>
/// Deferred PBR rendering.
/// </summary>
- class Deferred : VkWindow {
+ class Deferred : SampleBase {
static void Main (string[] args) {
#if DEBUG
Instance.VALIDATION = true;
DeferredPbrRenderer.NUM_SAMPLES = VkSampleCountFlags.SampleCount4;
DeferredPbrRenderer.HDR_FORMAT = VkFormat.R32g32b32a32Sfloat;
DeferredPbrRenderer.MRT_FORMAT = VkFormat.R32g32b32a32Sfloat;
-
PbrModelTexArray.TEXTURE_DIM = 1024;
using (Deferred vke = new Deferred ()) {
computeQ = new Queue (dev, VkQueueFlags.Compute);
}
- int curModelIndex = 13;
+ int curModelIndex = 1;
bool reloadModel;
bool rebuildBuffers;
using vke;
namespace pbrSample {
- class Program : VkWindow {
+ class Program : SampleBase {
static void Main (string[] args) {
#if DEBUG