# HG changeset patch # User sam # Date 1721137175 -25200 # Node ID e177336cac3f2aa56adc39a765bcb97ad1fecf1c # Parent 8cf9a05b03eb92b5fecbaa9a9afd655f6636cdc8 sync to notebook in bedroom diff -r 8cf9a05b03eb -r e177336cac3f semicongine/rendering/renderer.nim --- a/semicongine/rendering/renderer.nim Tue Jul 16 15:57:38 2024 +0700 +++ b/semicongine/rendering/renderer.nim Tue Jul 16 20:39:35 2024 +0700 @@ -687,3 +687,6 @@ proc asGPUValue*[T](data: T, bufferType: static BufferType): auto = GPUValue[T, bufferType](data: data) + +proc asDescriptorSet*[T](data: T): auto = + DescriptorSet[T](data: data) diff -r 8cf9a05b03eb -r e177336cac3f tests/test_rendering Binary file tests/test_rendering has changed diff -r 8cf9a05b03eb -r e177336cac3f tests/test_rendering.nim --- a/tests/test_rendering.nim Tue Jul 16 15:57:38 2024 +0700 +++ b/tests/test_rendering.nim Tue Jul 16 20:39:35 2024 +0700 @@ -124,55 +124,63 @@ type RenderSettings = object - gamma: float32 - FirstDS = object - settings: GPUValue[RenderSettings, UniformBufferMapped] + brigthness: float32 + ObjectSettings = object + baseColor: Vec3f + MainSet = object + renderSettings: GPUValue[RenderSettings, UniformBufferMapped] + materialSettings: GPUValue[ObjectSettings, UniformBuffer] + OtherSet = object + # TODO + QuadShader = object position {.VertexAttribute.}: Vec3f - color {.VertexAttribute.}: Vec3f fragmentColor {.Pass.}: Vec3f outColor {.ShaderOutput.}: Vec4f - descriptorSets {.DescriptorSets.}: (FirstDS, ) + descriptorSets {.DescriptorSets.}: (MainSet, OtherSet) # code vertexCode: string = """void main() { - fragmentColor = vec3(pow(color.r, settings.gamma), pow(color.g, settings.gamma), pow(color.b, settings.gamma)); + fragmentColor = materialSettings.baseColor * renderSettings.brigthness; gl_Position = vec4(position, 1);}""" fragmentCode: string = """void main() { outColor = vec4(fragmentColor, 1);}""" QuadMesh = object position: GPUArray[Vec3f, VertexBuffer] - color: GPUArray[Vec3f, VertexBuffer] indices: GPUArray[uint16, IndexBuffer] var quad = QuadMesh( - position: asGPUArray([NewVec3f(-0.9, -0.5), NewVec3f(-0.9, 0.5), NewVec3f(0.9, 0.5), NewVec3f(0.9, -0.5)], VertexBuffer), + position: asGPUArray([NewVec3f(-0.5, -0.5), NewVec3f(-0.5, 0.5), NewVec3f(0.5, 0.5), NewVec3f(0.5, -0.5)], VertexBuffer), indices: asGPUArray([0'u16, 1'u16, 2'u16, 2'u16, 3'u16, 0'u16], IndexBuffer), - color: asGPUArray([NewVec3f(0, 0, 0), NewVec3f(0, 0, 0), NewVec3f(1, 1, 1), NewVec3f(1, 1, 1)], VertexBuffer), + ) + var mainSet = asDescriptorSet( + MainSet( + renderSettings: asGPUValue(RenderSettings(brigthness: 0), UniformBufferMapped), + materialSettings: asGPUValue(ObjectSettings(baseColor: NewVec3f(1, 1, 0)), UniformBuffer), + ) ) - var settings = DescriptorSet[FirstDS]( - data: FirstDS( - settings: asGPUValue(RenderSettings( - gamma: 0.01'f32 - ), UniformBufferMapped) + var settings = asDescriptorSet( + OtherSet( + # TODO + ) ) - ) + AssignBuffers(renderdata, quad) - AssignBuffers(renderdata, settings) + AssignBuffers(renderdata, mainSet) renderdata.FlushAllMemory() var pipeline = CreatePipeline[QuadShader](renderPass = mainRenderpass, samples = swapchain.samples) - InitDescriptorSet(renderdata, pipeline.descriptorSetLayouts[0], settings) + InitDescriptorSet(renderdata, pipeline.descriptorSetLayouts[0], mainSet) var c = 0 while UpdateInputs() and c < nFrames: WithNextFrame(swapchain, framebuffer, commandbuffer): - WithBind(commandbuffer, (settings, ), pipeline, swapchain.currentFiF): + WithBind(commandbuffer, (mainSet, ), pipeline, swapchain.currentFiF): WithRenderPass(mainRenderpass, framebuffer, commandbuffer, swapchain.width, swapchain.height, NewVec4f(0, 0, 0, 0)): WithPipeline(commandbuffer, pipeline): - Render(commandbuffer = commandbuffer, pipeline = pipeline, firstSet = settings, mesh = quad) - settings.data.settings.data.gamma = 0.01'f32 + (c.float32 / nFrames.float32) * 5'f32 - UpdateGPUBuffer(settings.data.settings) + Render(commandbuffer = commandbuffer, pipeline = pipeline, firstSet = mainSet, mesh = quad) + mainSet.data.renderSettings.data.brigthness = (c.float32 / nFrames.float32) + UpdateGPUBuffer(mainSet.data.renderSettings) renderdata.FlushAllMemory() inc c @@ -191,10 +199,10 @@ swapchain = InitSwapchain(renderpass = mainRenderpass).get() # tests a simple triangle with minimalistic shader and vertex format - test_01_triangle(nFrames) + # test_01_triangle(nFrames) # tests instanced triangles and quads, mixing meshes and instances - test_02_triangle_quad_instanced(nFrames) + # test_02_triangle_quad_instanced(nFrames) # tests test_03_global_descriptorset(nFrames) @@ -208,7 +216,7 @@ mainRenderpass = CreatePresentationRenderPass(samples = VK_SAMPLE_COUNT_4_BIT) swapchain = InitSwapchain(renderpass = mainRenderpass, samples = VK_SAMPLE_COUNT_4_BIT).get() - test_01_triangle(99999999) + # test_01_triangle(99999999) checkVkResult vkDeviceWaitIdle(vulkan.device) vkDestroyRenderPass(vulkan.device, mainRenderpass, nil)