aboutsummaryrefslogtreecommitdiffstatsci
path: root/samples
diff options
context:
space:
mode:
authorJean-Philippe Bruyère <jp_bruyere@hotmail.com>2019-04-27 17:25:11 +0200
committerj-p <jp_bruyere@hotmail.com>2019-05-02 03:07:11 +0200
commit57b06f5484aa076a20adef2f04bfbbafaab6d6cc (patch)
treece75739cc56e1bfffe9fa46d84cefcd8b60ac830 /samples
parent21768fea096466919e450f0141355189c2513266 (diff)
model loading interface
Diffstat (limited to 'samples')
-rw-r--r--samples/deferred/deferred.csproj2
-rw-r--r--samples/deferred/deferredPbrRenderer.cs59
-rw-r--r--samples/deferred/main.cs81
-rw-r--r--samples/deferred/packages.config2
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