Mercurial > games > semicongine
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 |
rev | line source |
---|---|
588 | 1 import std/tables |
2 import std/strformat | |
3 import std/logging | |
4 | |
667
d3500ae5d235
did: small refactoring of module structure
Sam <sam@basx.dev>
parents:
625
diff
changeset
|
5 import ../core |
588 | 6 import ./buffer |
7 | |
8 type | |
9 Drawable* = object | |
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 | 12 instanceCount*: uint32 # number of instance |
13 case indexed*: bool | |
14 of true: | |
15 indexType*: VkIndexType | |
16 indexBufferOffset*: uint64 | |
17 of false: | |
18 discard | |
19 | |
20 func `$`*(drawable: Drawable): string = | |
21 if drawable.indexed: | |
22 &"Drawable(elementCount: {drawable.elementCount}, instanceCount: {drawable.instanceCount}, bufferOffsets: {drawable.bufferOffsets}, indexType: {drawable.indexType}, indexBufferOffset: {drawable.indexBufferOffset})" | |
23 else: | |
24 &"Drawable(elementCount: {drawable.elementCount}, instanceCount: {drawable.instanceCount}, bufferOffsets: {drawable.bufferOffsets})" | |
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 | 27 debug "Draw ", drawable |
28 | |
29 var buffers: seq[VkBuffer] | |
30 var offsets: seq[VkDeviceSize] | |
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 | 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 | 35 |
36 commandBuffer.vkCmdBindVertexBuffers( | |
37 firstBinding=0'u32, | |
38 bindingCount=uint32(buffers.len), | |
39 pBuffers=buffers.toCPointer(), | |
40 pOffsets=offsets.toCPointer() | |
41 ) | |
42 if drawable.indexed: | |
43 commandBuffer.vkCmdBindIndexBuffer(indexBuffer.vk, VkDeviceSize(drawable.indexBufferOffset), drawable.indexType) | |
44 commandBuffer.vkCmdDrawIndexed( | |
45 indexCount=drawable.elementCount, | |
46 instanceCount=drawable.instanceCount, | |
47 firstIndex=0, | |
48 vertexOffset=0, | |
49 firstInstance=0 | |
50 ) | |
51 else: | |
52 commandBuffer.vkCmdDraw( | |
53 vertexCount=drawable.elementCount, | |
54 instanceCount=drawable.instanceCount, | |
55 firstVertex=0, | |
56 firstInstance=0 | |
57 ) |