annotate src/semicongine/vulkan/drawable.nim @ 714:5f7ec8d1bd33

fix: API changes
author sam <sam@basx.dev>
date Wed, 24 May 2023 01:31:21 +0700
parents a02d503ffa53
children c73224f9d38f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
588
008592db0442 did: big refactoring
Sam <sam@basx.dev>
parents:
diff changeset
1 import std/tables
008592db0442 did: big refactoring
Sam <sam@basx.dev>
parents:
diff changeset
2 import std/strformat
008592db0442 did: big refactoring
Sam <sam@basx.dev>
parents:
diff changeset
3 import std/logging
008592db0442 did: big refactoring
Sam <sam@basx.dev>
parents:
diff changeset
4
667
d3500ae5d235 did: small refactoring of module structure
Sam <sam@basx.dev>
parents: 625
diff changeset
5 import ../core
588
008592db0442 did: big refactoring
Sam <sam@basx.dev>
parents:
diff changeset
6 import ./buffer
008592db0442 did: big refactoring
Sam <sam@basx.dev>
parents:
diff changeset
7
008592db0442 did: big refactoring
Sam <sam@basx.dev>
parents:
diff changeset
8 type
008592db0442 did: big refactoring
Sam <sam@basx.dev>
parents:
diff changeset
9 Drawable* = object
008592db0442 did: big refactoring
Sam <sam@basx.dev>
parents:
diff changeset
10 elementCount*: uint32 # number of vertices or indices
625
c48ceb622b27 fix: buffer update with staging buffer not correctly working
Sam <sam@basx.dev>
parents: 618
diff changeset
11 bufferOffsets*: seq[(string, MemoryPerformanceHint, uint64)] # list of buffers and list of offset for each attribute in that buffer
588
008592db0442 did: big refactoring
Sam <sam@basx.dev>
parents:
diff changeset
12 instanceCount*: uint32 # number of instance
008592db0442 did: big refactoring
Sam <sam@basx.dev>
parents:
diff changeset
13 case indexed*: bool
008592db0442 did: big refactoring
Sam <sam@basx.dev>
parents:
diff changeset
14 of true:
008592db0442 did: big refactoring
Sam <sam@basx.dev>
parents:
diff changeset
15 indexType*: VkIndexType
008592db0442 did: big refactoring
Sam <sam@basx.dev>
parents:
diff changeset
16 indexBufferOffset*: uint64
008592db0442 did: big refactoring
Sam <sam@basx.dev>
parents:
diff changeset
17 of false:
008592db0442 did: big refactoring
Sam <sam@basx.dev>
parents:
diff changeset
18 discard
008592db0442 did: big refactoring
Sam <sam@basx.dev>
parents:
diff changeset
19
008592db0442 did: big refactoring
Sam <sam@basx.dev>
parents:
diff changeset
20 func `$`*(drawable: Drawable): string =
008592db0442 did: big refactoring
Sam <sam@basx.dev>
parents:
diff changeset
21 if drawable.indexed:
008592db0442 did: big refactoring
Sam <sam@basx.dev>
parents:
diff changeset
22 &"Drawable(elementCount: {drawable.elementCount}, instanceCount: {drawable.instanceCount}, bufferOffsets: {drawable.bufferOffsets}, indexType: {drawable.indexType}, indexBufferOffset: {drawable.indexBufferOffset})"
008592db0442 did: big refactoring
Sam <sam@basx.dev>
parents:
diff changeset
23 else:
008592db0442 did: big refactoring
Sam <sam@basx.dev>
parents:
diff changeset
24 &"Drawable(elementCount: {drawable.elementCount}, instanceCount: {drawable.instanceCount}, bufferOffsets: {drawable.bufferOffsets})"
008592db0442 did: big refactoring
Sam <sam@basx.dev>
parents:
diff changeset
25
625
c48ceb622b27 fix: buffer update with staging buffer not correctly working
Sam <sam@basx.dev>
parents: 618
diff changeset
26 proc draw*(commandBuffer: VkCommandBuffer, drawable: Drawable, vertexBuffers: Table[MemoryPerformanceHint, Buffer], indexBuffer: Buffer) =
588
008592db0442 did: big refactoring
Sam <sam@basx.dev>
parents:
diff changeset
27 debug "Draw ", drawable
008592db0442 did: big refactoring
Sam <sam@basx.dev>
parents:
diff changeset
28
008592db0442 did: big refactoring
Sam <sam@basx.dev>
parents:
diff changeset
29 var buffers: seq[VkBuffer]
008592db0442 did: big refactoring
Sam <sam@basx.dev>
parents:
diff changeset
30 var offsets: seq[VkDeviceSize]
008592db0442 did: big refactoring
Sam <sam@basx.dev>
parents:
diff changeset
31
625
c48ceb622b27 fix: buffer update with staging buffer not correctly working
Sam <sam@basx.dev>
parents: 618
diff changeset
32 for (name, performanceHint, offset) in drawable.bufferOffsets:
617
f7e7af33e9ee did: refactor memory selection
Sam <sam@basx.dev>
parents: 599
diff changeset
33 buffers.add vertexBuffers[performanceHint].vk
599
5eadc1e1d6d8 fix: mixing memory location types is not working
Sam <sam@basx.dev>
parents: 588
diff changeset
34 offsets.add VkDeviceSize(offset)
588
008592db0442 did: big refactoring
Sam <sam@basx.dev>
parents:
diff changeset
35
008592db0442 did: big refactoring
Sam <sam@basx.dev>
parents:
diff changeset
36 commandBuffer.vkCmdBindVertexBuffers(
008592db0442 did: big refactoring
Sam <sam@basx.dev>
parents:
diff changeset
37 firstBinding=0'u32,
008592db0442 did: big refactoring
Sam <sam@basx.dev>
parents:
diff changeset
38 bindingCount=uint32(buffers.len),
008592db0442 did: big refactoring
Sam <sam@basx.dev>
parents:
diff changeset
39 pBuffers=buffers.toCPointer(),
008592db0442 did: big refactoring
Sam <sam@basx.dev>
parents:
diff changeset
40 pOffsets=offsets.toCPointer()
008592db0442 did: big refactoring
Sam <sam@basx.dev>
parents:
diff changeset
41 )
008592db0442 did: big refactoring
Sam <sam@basx.dev>
parents:
diff changeset
42 if drawable.indexed:
008592db0442 did: big refactoring
Sam <sam@basx.dev>
parents:
diff changeset
43 commandBuffer.vkCmdBindIndexBuffer(indexBuffer.vk, VkDeviceSize(drawable.indexBufferOffset), drawable.indexType)
008592db0442 did: big refactoring
Sam <sam@basx.dev>
parents:
diff changeset
44 commandBuffer.vkCmdDrawIndexed(
008592db0442 did: big refactoring
Sam <sam@basx.dev>
parents:
diff changeset
45 indexCount=drawable.elementCount,
008592db0442 did: big refactoring
Sam <sam@basx.dev>
parents:
diff changeset
46 instanceCount=drawable.instanceCount,
008592db0442 did: big refactoring
Sam <sam@basx.dev>
parents:
diff changeset
47 firstIndex=0,
008592db0442 did: big refactoring
Sam <sam@basx.dev>
parents:
diff changeset
48 vertexOffset=0,
008592db0442 did: big refactoring
Sam <sam@basx.dev>
parents:
diff changeset
49 firstInstance=0
008592db0442 did: big refactoring
Sam <sam@basx.dev>
parents:
diff changeset
50 )
008592db0442 did: big refactoring
Sam <sam@basx.dev>
parents:
diff changeset
51 else:
008592db0442 did: big refactoring
Sam <sam@basx.dev>
parents:
diff changeset
52 commandBuffer.vkCmdDraw(
008592db0442 did: big refactoring
Sam <sam@basx.dev>
parents:
diff changeset
53 vertexCount=drawable.elementCount,
008592db0442 did: big refactoring
Sam <sam@basx.dev>
parents:
diff changeset
54 instanceCount=drawable.instanceCount,
008592db0442 did: big refactoring
Sam <sam@basx.dev>
parents:
diff changeset
55 firstVertex=0,
008592db0442 did: big refactoring
Sam <sam@basx.dev>
parents:
diff changeset
56 firstInstance=0
008592db0442 did: big refactoring
Sam <sam@basx.dev>
parents:
diff changeset
57 )