changeset 62:7153eadb07eb

fix: some formatting, bug when opening on windows.
author Sam <sam@basx.dev>
date Wed, 25 Jan 2023 23:56:59 +0700
parents 0f04ba283558
children 1862fada1726
files config.nims src/semicongine/engine.nim src/semicongine/mesh.nim src/semicongine/thing.nim
diffstat 4 files changed, 45 insertions(+), 31 deletions(-) [+]
line wrap: on
line diff
--- a/config.nims	Tue Jan 24 10:22:38 2023 +0700
+++ b/config.nims	Wed Jan 25 23:56:59 2023 +0700
@@ -116,7 +116,7 @@
     exec(&"scp {file} sam@mail.basx.dev:/var/www/public.basx.dev/semicongine/release/windows/")
 
 task glslangValidator, "Download glslangValidator (required for linux compilation)":
-  let dirname="/tmp/glslang_download"
+  let dirname = "/tmp/glslang_download"
   exec &"mkdir -p {dirname}"
   exec &"cd {dirname} && wget https://github.com/KhronosGroup/glslang/releases/download/master-tot/glslang-master-linux-Release.zip"
   exec &"cd {dirname} && unzip *.zip"
@@ -124,14 +124,14 @@
   exec &"rm -rf {dirname}"
 
 task glslangValidator_exe, "Download glslangValidator.exe (required for windows compilation)":
-  let dirname="/tmp/glslang_download"
+  let dirname = "/tmp/glslang_download"
   exec &"mkdir -p {dirname}"
   exec &"cd {dirname} && wget https://github.com/KhronosGroup/glslang/releases/download/master-tot/glslang-master-windows-x64-Release.zip"
   exec &"cd {dirname} && unzip *.zip"
   exec &"mv {dirname}/bin/glslangValidator.exe examples/"
   exec &"rm -rf {dirname}"
 
-task run_all , "Run all binaries":
+task run_all, "Run all binaries":
   for file in listFiles("build/debug/linux"):
     exec file
   for file in listFiles("build/release/linux"):
--- a/src/semicongine/engine.nim	Tue Jan 24 10:22:38 2023 +0700
+++ b/src/semicongine/engine.nim	Wed Jan 25 23:56:59 2023 +0700
@@ -199,6 +199,11 @@
   var imageCount = capabilities.minImageCount + 1
   if capabilities.maxImageCount > 0:
     imageCount = min(capabilities.maxImageCount, imageCount)
+  # TODO: fix when dimension is zero
+  var extent = VkExtent2D(
+    width: if dimension[0] > 0: dimension[0] else: 1,
+    height: if dimension[1] > 0: dimension[1] else: 1,
+  )
   # setup swapchain
   var swapchainCreateInfo = VkSwapchainCreateInfoKHR(
     sType: VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR,
@@ -206,10 +211,10 @@
     minImageCount: imageCount,
     imageFormat: surfaceFormat.format,
     imageColorSpace: surfaceFormat.colorSpace,
-    imageExtent: VkExtent2D(width: dimension[0], height: dimension[1]),
+    imageExtent: extent,
     imageArrayLayers: 1,
     imageUsage: VkImageUsageFlags(VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT),
-    # VK_SHARING_MODE_CONCURRENT no supported (i.e cannot use different queue families for  drawing to swap surface?)
+    # VK_SHARING_MODE_CONCURRENT no supported (i.e cannot use different queue families for drawing to swap surface?)
     imageSharingMode: VK_SHARING_MODE_EXCLUSIVE,
     preTransform: capabilities.currentTransform,
     compositeAlpha: VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR,
--- a/src/semicongine/mesh.nim	Tue Jan 24 10:22:38 2023 +0700
+++ b/src/semicongine/mesh.nim	Wed Jan 25 23:56:59 2023 +0700
@@ -22,7 +22,8 @@
           when srcname == dstname:
             dstvalue.data.add srcvalue.data
 
-func createUberMesh*[T: object, U: uint16|uint32](meshes: openArray[IndexedMesh[T, U]]): IndexedMesh[T, U] =
+func createUberMesh*[T: object, U: uint16|uint32](meshes: openArray[IndexedMesh[
+    T, U]]): IndexedMesh[T, U] =
   var indexoffset = U(0)
   for mesh in meshes:
     for srcname, srcvalue in mesh.vertexData.fieldPairs:
@@ -36,10 +37,11 @@
       result.indices.add indexdata
     indexoffset += U(mesh.vertexData.VertexCount)
 
-func getVkIndexType[T: object, U: uint16|uint32](m: IndexedMesh[T, U]): VkIndexType =
+func getVkIndexType[T: object, U: uint16|uint32](m: IndexedMesh[T,
+    U]): VkIndexType =
   when U is uint16: VK_INDEX_TYPE_UINT16
   elif U is uint32: VK_INDEX_TYPE_UINT32
-      
+
 proc createVertexBuffers*[M: Mesh|IndexedMesh](
   mesh: M,
   device: VkDevice,
@@ -52,12 +54,15 @@
     when typeof(value) is VertexAttribute:
       assert value.data.len > 0
       var flags = if value.useOnDeviceMemory: {TransferSrc} else: {VertexBuffer}
-      var stagingBuffer = device.InitBuffer(physicalDevice, value.datasize, flags, {HostVisible, HostCoherent})
+      var stagingBuffer = device.InitBuffer(physicalDevice, value.datasize,
+          flags, {HostVisible, HostCoherent})
       copyMem(stagingBuffer.data, addr(value.data[0]), value.datasize)
 
       if value.useOnDeviceMemory:
-        var finalBuffer = device.InitBuffer(physicalDevice, value.datasize, {TransferDst, VertexBuffer}, {DeviceLocal})
-        transferBuffer(commandPool, queue, stagingBuffer, finalBuffer, value.datasize)
+        var finalBuffer = device.InitBuffer(physicalDevice, value.datasize, {
+            TransferDst, VertexBuffer}, {DeviceLocal})
+        transferBuffer(commandPool, queue, stagingBuffer, finalBuffer,
+            value.datasize)
         stagingBuffer.trash()
         result[0].add(finalBuffer)
         value.buffer = finalBuffer
@@ -73,14 +78,17 @@
   queue: VkQueue,
   useDeviceLocalBuffer: bool = true # decides if data is transfered to the fast device-local memory or not
 ): Buffer =
-  let bufferSize = uint64(mesh.indices.len * sizeof(get(genericParams(typeof(mesh.indices)), 0)))
+  let bufferSize = uint64(mesh.indices.len * sizeof(get(genericParams(typeof(
+      mesh.indices)), 0)))
   let flags = if useDeviceLocalBuffer: {TransferSrc} else: {IndexBuffer}
 
-  var stagingBuffer = device.InitBuffer(physicalDevice, bufferSize, flags, {HostVisible, HostCoherent})
+  var stagingBuffer = device.InitBuffer(physicalDevice, bufferSize, flags, {
+      HostVisible, HostCoherent})
   copyMem(stagingBuffer.data, addr(mesh.indices[0]), bufferSize)
 
   if useDeviceLocalBuffer:
-    var finalBuffer = device.InitBuffer(physicalDevice, bufferSize, {TransferDst, IndexBuffer}, {DeviceLocal})
+    var finalBuffer = device.InitBuffer(physicalDevice, bufferSize, {
+        TransferDst, IndexBuffer}, {DeviceLocal})
     transferBuffer(commandPool, queue, stagingBuffer, finalBuffer, bufferSize)
     stagingBuffer.trash()
     return finalBuffer
@@ -95,15 +103,27 @@
   queue: VkQueue,
   useDeviceLocalBufferForIndices: bool = true # decides if data is transfered to the fast device-local memory or not
 ): (seq[Buffer], Buffer, uint32, VkIndexType) =
-  result[0] = createVertexBuffers(mesh, device, physicalDevice, commandPool, queue)[0]
-  result[1] = createIndexBuffer(mesh, device, physicalDevice, commandPool, queue, useDeviceLocalBufferForIndices)
+  result[0] = createVertexBuffers(mesh, device, physicalDevice, commandPool,
+      queue)[0]
+  result[1] = createIndexBuffer(mesh, device, physicalDevice, commandPool,
+      queue, useDeviceLocalBufferForIndices)
   result[2] = uint32(mesh.indices.len * mesh.indices[0].len)
 
   result[3] = getVkIndexType(mesh)
 
-func squareData*[T:SomeFloat](): auto = PositionAttribute[TVec2[T]](
-  data: @[TVec2[T]([T(0), T(0)]), TVec2[T]([T(0), T(1)]), TVec2[T]([T(1), T(1)]), TVec2[T]([T(1), T(0)])]
+func squareData*[T: SomeFloat](): auto = PositionAttribute[TVec2[T]](
+  data: @[TVec2[T]([T(0), T(0)]), TVec2[T]([T(0), T(1)]), TVec2[T]([T(1), T(
+      1)]), TVec2[T]([T(1), T(0)])]
 )
-func squareIndices*[T:uint16|uint32](): auto = seq[array[3, T]](
+func squareIndices*[T: uint16|uint32](): auto = seq[array[3, T]](
   @[[T(0), T(1), T(3)], [T(2), T(1), T(3)]]
 )
+
+method update*(mesh: Mesh, dt: float32) =
+  echo "The update"
+  echo mesh.thing.getModelTransform()
+  echo mesh.vertexData
+method update*(mesh: IndexedMesh, dt: float32) =
+  echo "The update"
+  echo mesh.thing.getModelTransform()
+  echo mesh.vertexData
--- a/src/semicongine/thing.nim	Tue Jan 24 10:22:38 2023 +0700
+++ b/src/semicongine/thing.nim	Wed Jan 25 23:56:59 2023 +0700
@@ -130,16 +130,5 @@
       queue.add child
     yield next
 
-method update*(thing: Thing, dt: float32) {.base.} =
-  echo "The update"
-  let transform = thing.getModelTransform()
-  for part in thing.parts:
-    echo "  The part ", part
-    for name, value in part[].fieldPairs:
-      echo "    attribute ", name
-      when typeof(value) is ModelTransformAttribute:
-        value.data = @[transform.transposed()]
-        echo "updated stuff"
-
+method update*(thing: Thing, dt: float32) {.base.} = discard
 method update*(part: Part, dt: float32) {.base.} = discard
-