diff options
| author | Jean-Philippe Bruyère <jp_bruyere@hotmail.com> | 2019-04-27 17:25:11 +0200 |
|---|---|---|
| committer | j-p <jp_bruyere@hotmail.com> | 2019-05-02 03:07:11 +0200 |
| commit | 7ad0af87681660bac60d564b8387f44a6d0ccd46 (patch) | |
| tree | 0da918c9c9eb85dd080801834ed047f59158f679 | |
| parent | 58eddf11cc951caca5aca1e7f33610fc1e58e5ff (diff) | |
model loading interface
| -rw-r--r-- | samples/deferred/deferred.csproj | 2 | ||||
| -rw-r--r-- | samples/deferred/deferredPbrRenderer.cs | 59 | ||||
| -rw-r--r-- | samples/deferred/main.cs | 81 | ||||
| -rw-r--r-- | samples/deferred/packages.config | 2 |
4 files changed, 80 insertions, 64 deletions
diff --git a/samples/deferred/deferred.csproj b/samples/deferred/deferred.csproj index 0b3a0ad..ac0b35f 100644 --- a/samples/deferred/deferred.csproj +++ b/samples/deferred/deferred.csproj @@ -54,7 +54,7 @@ <HintPath>..\..\packages\System.Memory.4.5.2\lib\netstandard2.0\System.Memory.dll</HintPath> </Reference> <Reference Include="vkvg.net"> - <HintPath>..\..\packages\vkvg.net.0.2.0\lib\netstandard2.0\vkvg.net.dll</HintPath> + <HintPath>..\..\packages\vkvg.net.0.2.1-beta\lib\netstandard2.0\vkvg.net.dll</HintPath> </Reference> <Reference Include="VK"> <HintPath>..\..\packages\Vulkan.0.1.2.6\lib\netstandard2.0\VK.dll</HintPath> diff --git a/samples/deferred/deferredPbrRenderer.cs b/samples/deferred/deferredPbrRenderer.cs index 2099670..2dba1df 100644 --- a/samples/deferred/deferredPbrRenderer.cs +++ b/samples/deferred/deferredPbrRenderer.cs @@ -249,49 +249,27 @@ namespace deferred { uboMatrices = new HostBuffer (dev, VkBufferUsageFlags.UniformBuffer, matrices, true); uboLights = new HostBuffer<Light> (dev, VkBufferUsageFlags.UniformBuffer, lights, true); - string[] modelPathes = { - "../data/models/DamagedHelmet/glTF/DamagedHelmet.gltf", - "/home/jp/gltf/chessold/scene.gltf", - "../data/models/Hubble.glb", - "../data/models/MER_static.glb", - "../data/models/ISS_stationary.glb", - "/mnt/devel/vulkan/glTF-Sample-Models-master/2.0/Avocado/glTF/Avocado.gltf", - "/mnt/devel/vulkan/glTF-Sample-Models-master/2.0/BarramundiFish/glTF/BarramundiFish.gltf", - "/mnt/devel/vulkan/glTF-Sample-Models-master/2.0/BoomBoxWithAxes/glTF/BoomBoxWithAxes.gltf", - "/mnt/devel/vulkan/glTF-Sample-Models-master/2.0/Box/glTF/Box.gltf", - "/mnt/devel/vulkan/glTF-Sample-Models-master/2.0/EnvironmentTest/glTF/EnvironmentTest.gltf", - "/mnt/devel/vulkan/glTF-Sample-Models-master/2.0/MetalRoughSpheres/glTF/MetalRoughSpheres.gltf", - "/mnt/devel/vulkan/glTF-Sample-Models-master/2.0/OrientationTest/glTF/OrientationTest.gltf", - "/mnt/devel/vulkan/glTF-Sample-Models-master/2.0/Buggy/glTF/Buggy.gltf", - "/mnt/devel/vulkan/glTF-Sample-Models-master/2.0/2CylinderEngine/glTF-Embedded/2CylinderEngine.gltf", - "/mnt/devel/vulkan/glTF-Sample-Models-master/2.0/FlightHelmet/glTF/FlightHelmet.gltf", - "/mnt/devel/vulkan/glTF-Sample-Models-master/2.0/GearboxAssy/glTF/GearboxAssy.gltf", - "/mnt/devel/vulkan/glTF-Sample-Models-master/2.0/Lantern/glTF/Lantern.gltf", - "/mnt/devel/vulkan/glTF-Sample-Models-master/2.0/SciFiHelmet/glTF/SciFiHelmet.gltf", - "/mnt/devel/vulkan/glTF-Sample-Models-master/2.0/Sponza/glTF/Sponza.gltf", - "/mnt/devel/vkChess/data/chess.gltf", - "/home/jp/gltf/camaro/scene.gltf" - }; + DescriptorSetWrites uboUpdate = new DescriptorSetWrites (dsMain, descLayoutMain.Bindings.GetRange (0, 5).ToArray ()); + uboUpdate.Write (dev, + uboMatrices.Descriptor, + envCube.irradianceCube.Descriptor, + envCube.prefilterCube.Descriptor, + envCube.lutBrdf.Descriptor, + uboLights.Descriptor); + } - model = new PbrModel (presentQueue, modelPathes[0], + public void LoadModel (Queue transferQ, string path) { + dev.WaitIdle (); + model?.Dispose (); + model = new PbrModel (transferQ, path, descLayoutTextures, AttachmentType.Color, AttachmentType.PhysicalProps, AttachmentType.Normal, AttachmentType.AmbientOcclusion, AttachmentType.Emissive); - //model = new Model (presentQueue, "../data/models/chess.gltf"); - //model = new Model (presentQueue, "../data/models/Sponza/glTF/Sponza.gltf"); - //model = new Model (dev, presentQueue, "../data/models/icosphere.gltf"); - //model = new Model (dev, presentQueue, cmdPool, "../data/models/cube.gltf"); - DescriptorSetWrites uboUpdate = new DescriptorSetWrites (descLayoutMain); - uboUpdate.Write (dev, dsMain, - uboMatrices.Descriptor, - envCube.irradianceCube.Descriptor, - envCube.prefilterCube.Descriptor, - envCube.lutBrdf.Descriptor, - uboLights.Descriptor, - model.materialUBO.Descriptor); + DescriptorSetWrites uboUpdate = new DescriptorSetWrites (dsMain, descLayoutMain.Bindings[5]); + uboUpdate.Write (dev, model.materialUBO.Descriptor); modelAABB = model.DefaultScene.AABB; } @@ -315,10 +293,11 @@ namespace deferred { envCube.RecordDraw (cmd); renderPass.BeginSubPass (cmd); - gBuffPipeline.Bind (cmd); - model.Bind (cmd); - model.DrawAll (cmd, gBuffPipeline.Layout); - + if (model != null) { + gBuffPipeline.Bind (cmd); + model.Bind (cmd); + model.DrawAll (cmd, gBuffPipeline.Layout); + } renderPass.BeginSubPass (cmd); cmd.BindDescriptorSet (composePipeline.Layout, dsGBuff, 2); diff --git a/samples/deferred/main.cs b/samples/deferred/main.cs index c20be6e..abea5fe 100644 --- a/samples/deferred/main.cs +++ b/samples/deferred/main.cs @@ -18,52 +18,77 @@ namespace deferred { features.samplerAnisotropy = true; features.sampleRateShading = true; } - VkSampleCountFlags samples = VkSampleCountFlags.SampleCount4; - VkFormat hdrFormat = VkFormat.R32g32b32a32Sfloat; + protected override void createQueues () { + base.createQueues (); + transferQ = new Queue (dev, VkQueueFlags.Transfer); + } + + string[] modelPathes = { + "../data/models/DamagedHelmet/glTF/DamagedHelmet.gltf", + "/mnt/devel/vulkan/glTF-Sample-Models-master/2.0/Avocado/glTF/Avocado.gltf", + "/mnt/devel/vulkan/glTF-Sample-Models-master/2.0/BarramundiFish/glTF/BarramundiFish.gltf", + "/mnt/devel/vulkan/glTF-Sample-Models-master/2.0/BoomBoxWithAxes/glTF/BoomBoxWithAxes.gltf", + "/mnt/devel/vulkan/glTF-Sample-Models-master/2.0/Box/glTF/Box.gltf", + "/mnt/devel/vulkan/glTF-Sample-Models-master/2.0/EnvironmentTest/glTF/EnvironmentTest.gltf", + "/mnt/devel/vulkan/glTF-Sample-Models-master/2.0/MetalRoughSpheres/glTF/MetalRoughSpheres.gltf", + "/mnt/devel/vulkan/glTF-Sample-Models-master/2.0/OrientationTest/glTF/OrientationTest.gltf", + "/mnt/devel/vulkan/glTF-Sample-Models-master/2.0/Buggy/glTF/Buggy.gltf", + "/mnt/devel/vulkan/glTF-Sample-Models-master/2.0/2CylinderEngine/glTF-Embedded/2CylinderEngine.gltf", + "/mnt/devel/vulkan/glTF-Sample-Models-master/2.0/FlightHelmet/glTF/FlightHelmet.gltf", + "/mnt/devel/vulkan/glTF-Sample-Models-master/2.0/GearboxAssy/glTF/GearboxAssy.gltf", + "/mnt/devel/vulkan/glTF-Sample-Models-master/2.0/Lantern/glTF/Lantern.gltf", + "/mnt/devel/vulkan/glTF-Sample-Models-master/2.0/SciFiHelmet/glTF/SciFiHelmet.gltf", + "/mnt/devel/vulkan/glTF-Sample-Models-master/2.0/Sponza/glTF/Sponza.gltf", + "/mnt/devel/vkChess/data/chess.gltf", + "/home/jp/gltf/camaro/scene.gltf", + "/home/jp/gltf/chessold/scene.gltf", + "../data/models/Hubble.glb", + "../data/models/MER_static.glb", + "../data/models/ISS_stationary.glb", + }; + + int curModelIndex = 0; + bool reloadModel = true; + + Queue transferQ; DeferredPbrRenderer renderer; Program () { - camera = new Camera (Utils.DegreesToRadians (45f), 1f, 0.1f, 16f); + camera = new Camera (Utils.DegreesToRadians (60f), 1f, 0.1f, 16f); camera.SetPosition (0, 0, 3); renderer = new DeferredPbrRenderer (dev, swapChain, presentQueue, camera.NearPlane, camera.FarPlane); - - camera.Model = Matrix4x4.CreateScale (1f / Math.Max (Math.Max (renderer.modelAABB.Width, renderer.modelAABB.Height), renderer.modelAABB.Depth)); } - - void buildCommandBuffers () { cmdPool.FreeCommandBuffers (cmds); cmds = cmdPool.AllocateCommandBuffer (swapChain.ImageCount); renderer.buildCommandBuffers (cmds); } - - - #region update public override void UpdateView () { renderer.UpdateView (camera); updateViewRequested = false; } - - #endregion - - protected override void OnResize () { - UpdateView (); - renderer.Resize (); - buildCommandBuffers (); - } - - public override void Update () { + if (reloadModel) { + renderer.LoadModel (transferQ, modelPathes[curModelIndex]); + reloadModel = false; + camera.Model = Matrix4x4.CreateScale (1f / Math.Max (Math.Max (renderer.modelAABB.Width, renderer.modelAABB.Height), renderer.modelAABB.Depth)); + updateViewRequested = true; + rebuildBuffers = true; + } if (!rebuildBuffers) return; buildCommandBuffers (); rebuildBuffers = false; } - + protected override void OnResize () { + UpdateView (); + renderer.Resize (); + buildCommandBuffers (); + } #region Mouse and keyboard protected override void onKeyDown (Key key, int scanCode, Modifier modifiers) { @@ -168,13 +193,25 @@ namespace deferred { renderer.pipelineCache.Save (); Console.WriteLine ($"Pipeline Cache saved."); break; + case Key.KeypadAdd: + curModelIndex++; + if (curModelIndex >= modelPathes.Length) + curModelIndex = 0; + reloadModel = true; + break; + case Key.KeypadSubtract: + curModelIndex--; + if (curModelIndex < modelPathes.Length) + curModelIndex = modelPathes.Length -1; + reloadModel = true; + break; default: base.onKeyDown (key, scanCode, modifiers); return; } updateViewRequested = true; } -#endregion + #endregion protected override void Dispose (bool disposing) { if (disposing) { diff --git a/samples/deferred/packages.config b/samples/deferred/packages.config index bc04d50..3b083ad 100644 --- a/samples/deferred/packages.config +++ b/samples/deferred/packages.config @@ -6,6 +6,6 @@ <package id="System.Memory" version="4.5.2" targetFramework="net471" /> <package id="System.Numerics.Vectors" version="4.5.0" targetFramework="net471" /> <package id="System.Runtime.CompilerServices.Unsafe" version="4.5.2" targetFramework="net471" /> - <package id="vkvg.net" version="0.2.0" targetFramework="net471" /> + <package id="vkvg.net" version="0.2.1-beta" targetFramework="net471" /> <package id="Vulkan" version="0.1.2.6" targetFramework="net471" /> </packages>
\ No newline at end of file |