aboutsummaryrefslogtreecommitdiffstatsci
path: root/samples/Model/main.cs
diff options
context:
space:
mode:
Diffstat (limited to 'samples/Model/main.cs')
-rw-r--r--samples/Model/main.cs242
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);
- }
- }
-}