comparison test1.nim @ 1199:ba1af13233ee compiletime-tests

add: working main-renderloop
author sam <sam@basx.dev>
date Sat, 13 Jul 2024 23:27:12 +0700
parents 96a094cd0c78
children 5c6491f28dcd
comparison
equal deleted inserted replaced
1198:96a094cd0c78 1199:ba1af13233ee
1 import std/os 1 import std/os
2 import std/monotimes
3 import std/times
2 import std/options 4 import std/options
3 5
4 import semicongine 6 import semicongine
5 7
6 type 8 type
71 fontAtlas: Texture[TVec4[uint8]](width: 1, height: 1, data: @[TVec4[uint8]([0'u8, 0'u8, 0'u8, 1'u8])]), 73 fontAtlas: Texture[TVec4[uint8]](width: 1, height: 1, data: @[TVec4[uint8]([0'u8, 0'u8, 0'u8, 1'u8])]),
72 settings: GPUValue[ShaderSettings, UniformBuffer](data: ShaderSettings(gamma: 1.0)) 74 settings: GPUValue[ShaderSettings, UniformBuffer](data: ShaderSettings(gamma: 1.0))
73 ) 75 )
74 ) 76 )
75 77
76 let renderpass = CreatePresentationRenderPass() 78 let mainRenderpass = CreatePresentationRenderPass()
77 var swapchainResult = InitSwapchain(renderpass = renderpass) 79 var swapchainResult = InitSwapchain(renderpass = mainRenderpass)
80
78 assert swapchainResult.isSome() 81 assert swapchainResult.isSome()
79 var swapchain = swapchainResult.get() 82 var swapchain = swapchainResult.get()
80 83
81 # shaders 84 # shaders
82 var pipeline1 = CreatePipeline[ShaderA](renderPass = renderpass) 85 var pipeline1 = CreatePipeline[ShaderA](renderPass = mainRenderpass)
83 86
84 var renderdata = InitRenderData() 87 var renderdata = InitRenderData()
85 88
86 # buffer assignment 89 # buffer assignment
87 echo "Assigning buffers to GPUData fields" 90 echo "Assigning buffers to GPUData fields"
107 InitDescriptorSet(renderdata, pipeline1.GetLayoutFor(GlobalSet), myGlobals) 110 InitDescriptorSet(renderdata, pipeline1.GetLayoutFor(GlobalSet), myGlobals)
108 InitDescriptorSet(renderdata, pipeline1.GetLayoutFor(MaterialSet), uniforms1) 111 InitDescriptorSet(renderdata, pipeline1.GetLayoutFor(MaterialSet), uniforms1)
109 112
110 113
111 # start command buffer 114 # start command buffer
112 while true: 115 var t = getMonoTime()
113 RecordRenderingCommands(swapchain, framebuffer, commandbuffer): 116 while UpdateInputs():
114 var 117 WithNextFrame(swapchain, framebuffer, commandbuffer):
115 clearColors = [VkClearValue(color: VkClearColorValue(float32: [0, 0, 0, 0]))] 118 WithRenderPass(mainRenderpass, framebuffer, commandbuffer, swapchain.width, swapchain.height, NewVec4f(1, 0, 0, 0)):
116 renderPassInfo = VkRenderPassBeginInfo( 119 # echo (getMonoTime() - t).inMicroseconds.float / 1000.0
117 sType: VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO, 120 t = getMonoTime()
118 renderPass: renderpass,
119 framebuffer: framebuffer,
120 renderArea: VkRect2D(
121 offset: VkOffset2D(x: 0, y: 0),
122 extent: VkExtent2D(width: frameWidth, height: frameHeight),
123 ),
124 clearValueCount: uint32(clearColors.len),
125 pClearValues: clearColors.ToCPointer(),
126 )
127 viewport = VkViewport(
128 x: 0.0,
129 y: 0.0,
130 width: frameWidth.float32,
131 height: frameHeight.float32,
132 minDepth: 0.0,
133 maxDepth: 1.0,
134 )
135 scissor = VkRect2D(
136 offset: VkOffset2D(x: 0, y: 0),
137 extent: VkExtent2D(width: frameWidth, height: frameHeight)
138 )
139 vkCmdBeginRenderPass(commandbuffer, addr(renderPassInfo), VK_SUBPASS_CONTENTS_INLINE)
140
141 # setup viewport
142 vkCmdSetViewport(commandbuffer, firstViewport = 0, viewportCount = 1, addr(viewport))
143 vkCmdSetScissor(commandbuffer, firstScissor = 0, scissorCount = 1, addr(scissor))
144
145 # bind pipeline, will be loop
146 # block:
147 # Bind(pipeline1, commandbuffer, currentFrameInFlight = currentFrameInFlight)
148
149 # render object, will be loop
150 # block:
151 # Render(commandbuffer, pipeline1, myGlobals, uniforms1, myMesh1, instances1)
152
153 vkCmdEndRenderPass(commandbuffer)