diff options
Diffstat (limited to 'samples/Model/main.cs')
| -rw-r--r-- | samples/Model/main.cs | 242 |
1 files changed, 0 insertions, 242 deletions
diff --git a/samples/Model/main.cs b/samples/Model/main.cs deleted file mode 100644 index 3223b16..0000000 --- a/samples/Model/main.cs +++ /dev/null @@ -1,242 +0,0 @@ -using System; -using System.Numerics; -using System.Runtime.InteropServices; -using Glfw; -using CVKL; -using VK; -using static CVKL.Camera; -using Buffer = CVKL.Buffer; - -namespace ModelSample { - class Program : VkWindow { - static void Main (string[] args) { - using (Program vke = new Program ()) { - vke.Run (); - } - } - - public struct Matrices { - public Matrix4x4 projection; - public Matrix4x4 view; - public Matrix4x4 model; - public Vector4 lightPos; - public float gamma; - public float exposure; - } - - public Matrices matrices = new Matrices { - lightPos = new Vector4 (0.0f, 0.0f, -2.0f, 1.0f), - gamma = 1.0f, - exposure = 2.0f, - }; - - HostBuffer uboMats; - - DescriptorPool descriptorPool; - DescriptorSetLayout descLayoutMatrix; - DescriptorSetLayout descLayoutTextures; - DescriptorSet dsMats; - - GraphicPipeline pipeline; - Framebuffer[] frameBuffers; - - Model model; - - Camera2 Camera = new Camera2 (Utils.DegreesToRadians (60f), 1f); - - Program () : base () { - init (); - - model = new Model (presentQueue, "../data/models/DamagedHelmet/glTF/DamagedHelmet.gltf"); - model.WriteMaterialsDescriptorSets (descLayoutTextures, - VK.AttachmentType.Color, - VK.AttachmentType.Normal, - VK.AttachmentType.AmbientOcclusion, - VK.AttachmentType.MetalRoughness, - VK.AttachmentType.Emissive); - } - - void init (VkSampleCountFlags samples = VkSampleCountFlags.SampleCount4) { - descriptorPool = new DescriptorPool (dev, 2, - new VkDescriptorPoolSize (VkDescriptorType.UniformBuffer) - ); - - descLayoutMatrix = new DescriptorSetLayout (dev, - new VkDescriptorSetLayoutBinding (0, VkShaderStageFlags.Vertex|VkShaderStageFlags.Fragment, VkDescriptorType.UniformBuffer)); - - 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) - ); - - dsMats = descriptorPool.Allocate (descLayoutMatrix); - - GraphicPipelineConfig cfg = GraphicPipelineConfig.CreateDefault (VkPrimitiveTopology.TriangleList, samples); - - cfg.Layout = new PipelineLayout (dev, descLayoutMatrix, descLayoutTextures); - cfg.Layout.AddPushConstants ( - new VkPushConstantRange (VkShaderStageFlags.Vertex, (uint)Marshal.SizeOf<Matrix4x4> ()), - new VkPushConstantRange (VkShaderStageFlags.Fragment, (uint)Marshal.SizeOf<Model.PbrMaterial> (), 64) - ); - cfg.RenderPass = new RenderPass (dev, swapChain.ColorFormat, dev.GetSuitableDepthFormat (), samples); - - cfg.AddVertexBinding<Model.Vertex> (0); - cfg.SetVertexAttributes (0, VkFormat.R32g32b32Sfloat, VkFormat.R32g32b32Sfloat, VkFormat.R32g32Sfloat); - - cfg.AddShader (VkShaderStageFlags.Vertex, "shaders/pbrtest.vert.spv"); - cfg.AddShader (VkShaderStageFlags.Fragment, "shaders/pbrtest.frag.spv"); - - pipeline = new GraphicPipeline (cfg); - - uboMats = new HostBuffer (dev, VkBufferUsageFlags.UniformBuffer, (ulong)Marshal.SizeOf<Matrices>()); - uboMats.Map ();//permanent map - - DescriptorSetWrites uboUpdate = new DescriptorSetWrites (dsMats, descLayoutMatrix.Bindings[0]); - uboUpdate.Write (dev, uboMats.Descriptor); - } - - void buildCommandBuffers () { - for (int i = 0; i < swapChain.ImageCount; ++i) { - cmds[i]?.Free (); - cmds[i] = cmdPool.AllocateCommandBuffer (); - cmds[i].Start (); - - recordDraw (cmds[i], frameBuffers[i]); - - cmds[i].End (); - } - } - void recordDraw (CommandBuffer cmd, Framebuffer fb) { - pipeline.RenderPass.Begin (cmd, fb); - - cmd.SetViewport (fb.Width, fb.Height); - cmd.SetScissor (fb.Width, fb.Height); - - cmd.BindDescriptorSet (pipeline.Layout, dsMats); - pipeline.Bind (cmd); - model.Bind (cmd); - model.DrawAll (cmd, pipeline.Layout); - - pipeline.RenderPass.End (cmd); - } - - void updateMatrices () { - - Camera.AspectRatio = (float)swapChain.Width / swapChain.Height; - - matrices.projection = Camera.Projection; - matrices.view = Camera.View; - matrices.model = Camera.Model; - uboMats.Update (matrices, (uint)Marshal.SizeOf<Matrices> ()); - } - - public override void UpdateView () { - updateMatrices (); - updateViewRequested = false; - } - - protected override void onMouseMove (double xPos, double yPos) { - double diffX = lastMouseX - xPos; - double diffY = lastMouseY - yPos; - if (MouseButton[0]) { - Camera.Rotate ((float)-diffX,(float)-diffY); - } else if (MouseButton[1]) { - Camera.Zoom ((float)diffY); - } - - updateViewRequested = true; - } - - protected override void onKeyDown (Key key, int scanCode, Modifier modifiers) { - switch (key) { - case Key.Up: - Camera.Rotate (0, 0, 1); - break; - case Key.Down: - Camera.Move (0, 0, -1); - break; - case Key.Left: - Camera.Move (1, 0, 0); - break; - case Key.Right: - Camera.Move (-1, 0, 0); - break; - case Key.PageUp: - Camera.Move (0, 1, 0); - break; - case Key.PageDown: - Camera.Move (0, -1, 0); - break; - case Key.F1: - if (modifiers.HasFlag (Modifier.Shift)) - matrices.exposure -= 0.3f; - else - matrices.exposure += 0.3f; - break; - case Key.F2: - if (modifiers.HasFlag (Modifier.Shift)) - matrices.gamma -= 0.1f; - else - matrices.gamma += 0.1f; - break; - case Key.F3: - if (Camera.Type == CamType.FirstPerson) - Camera.Type = CamType.LookAt; - else - Camera.Type = CamType.FirstPerson; - break; - default: - base.onKeyDown (key, scanCode, modifiers); - return; - } - updateViewRequested = true; - } - - protected override void OnResize () { - - updateMatrices (); - - 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 (pipeline.RenderPass, swapChain.Width, swapChain.Height, - (pipeline.Samples == VkSampleCountFlags.SampleCount1) ? new Image[] { - swapChain.images[i], - null - } : new Image[] { - null, - null, - swapChain.images[i] - }); - } - - buildCommandBuffers (); - } - - protected override void Dispose (bool disposing) { - if (disposing) { - if (!isDisposed) { - dev.WaitIdle (); - for (int i = 0; i < swapChain.ImageCount; ++i) - frameBuffers[i]?.Dispose (); - model.Dispose (); - pipeline.Dispose (); - descLayoutMatrix.Dispose (); - descLayoutTextures.Dispose (); - descriptorPool.Dispose (); - - uboMats.Dispose (); - } - } - - base.Dispose (disposing); - } - } -} |