changeset 1283:0369fa1ffbd9

did: undo part of stupid API renaming a few weeks back ;(
author sam <sam@basx.dev>
date Mon, 29 Jul 2024 16:50:50 +0700
parents 3308b88e53a6
children feb52b1c18e0
files semicongine/core.nim semicongine/gltf.nim semicongine/image.nim semicongine/input.nim semicongine/rendering.nim semicongine/rendering/platform/linux.nim semicongine/rendering/platform/windows.nim semicongine/rendering/renderer.nim semicongine/rendering/renderpasses.nim semicongine/rendering/shaders.nim semicongine/rendering/swapchain.nim semicongine/rendering/vulkan_wrappers.nim semicongine/resources.nim semicongine/storage.nim semicongine/text/textbox.nim tests/test_gltf.nim tests/test_rendering.nim tests/test_text.nim
diffstat 18 files changed, 494 insertions(+), 494 deletions(-) [+]
line wrap: on
line diff
--- a/semicongine/core.nim	Mon Jul 29 16:05:09 2024 +0700
+++ b/semicongine/core.nim	Mon Jul 29 16:50:50 2024 +0700
@@ -1,4 +1,4 @@
-const RESOURCEROOT = "resources"
+const RESOURCEROOT {.hint[XDeclaredButNotUsed]: off.} = "resources"
 
 include ./core/utils
 include ./core/buildconfig
--- a/semicongine/gltf.nim	Mon Jul 29 16:05:09 2024 +0700
+++ b/semicongine/gltf.nim	Mon Jul 29 16:50:50 2024 +0700
@@ -154,7 +154,7 @@
 
   let bufferView = root["bufferViews"][root["images"][imageIndex][
       "bufferView"].getInt()]
-  result = LoadImageData[BGRA](getBufferViewData(bufferView, mainBuffer))
+  result = loadImageData[BGRA](getBufferViewData(bufferView, mainBuffer))
 
   if textureNode.hasKey("sampler"):
     let sampler = root["samplers"][textureNode["sampler"].getInt()]
@@ -339,7 +339,7 @@
           nodes.add nodeId.getInt()
         result.scenes.add nodes
 
-proc LoadMeshes*[TMesh, TMaterial](
+proc loadMeshes*[TMesh, TMaterial](
   path: string,
   meshAttributesMapping: static MeshAttributeNames,
   materialAttributesMapping: static MaterialAttributeNames,
--- a/semicongine/image.nim	Mon Jul 29 16:05:09 2024 +0700
+++ b/semicongine/image.nim	Mon Jul 29 16:50:50 2024 +0700
@@ -28,7 +28,7 @@
     isRenderTarget*: bool = false
     samples*: VkSampleCountFlagBits = VK_SAMPLE_COUNT_1_BIT
 
-proc LoadImageData*[T: PixelType](pngData: string|seq[uint8]): Image[T] =
+proc loadImageData*[T: PixelType](pngData: string|seq[uint8]): Image[T] =
   when T is Gray:
     let nChannels = 1.cint
   elif T is BGRA:
@@ -57,14 +57,14 @@
     for i in 0 ..< result.data.len:
       swap(result.data[i][0], result.data[i][2])
 
-proc LoadImage*[T: PixelType](path: string, package = DEFAULT_PACKAGE): Image[T] =
+proc loadImage*[T: PixelType](path: string, package = DEFAULT_PACKAGE): Image[T] =
   assert path.splitFile().ext.toLowerAscii == ".png", "Unsupported image type: " & path.splitFile().ext.toLowerAscii
   when T is Gray:
     let pngType = 0.cint
   elif T is BGRA:
     let pngType = 6.cint
 
-  result = LoadImageData[T](loadResource_intern(path, package = package).readAll())
+  result = loadImageData[T](loadResource_intern(path, package = package).readAll())
 
 # stb_image.h has no encoding support, maybe check stb_image_write or similar
 #
--- a/semicongine/input.nim	Mon Jul 29 16:05:09 2024 +0700
+++ b/semicongine/input.nim	Mon Jul 29 16:50:50 2024 +0700
@@ -17,7 +17,7 @@
 # warning, shit is not thread safe
 var input = Input()
 
-proc UpdateInputs*(): bool =
+proc updateInputs*(): bool =
   # reset input states
   input.keyWasPressed = {}
   input.keyWasReleased = {}
@@ -28,10 +28,10 @@
   input.windowWasResized = false
 
   if input.lockMouse and input.hasFocus:
-    SetMousePosition(vulkan.window, x=int(vulkan.swapchain.width div 2), y=int(vulkan.swapchain.height div 2))
+    setMousePosition(vulkan.window, x=int(vulkan.swapchain.width div 2), y=int(vulkan.swapchain.height div 2))
 
   var killed = false
-  for event in vulkan.window.PendingEvents():
+  for event in vulkan.window.pendingEvents():
     case event.eventType:
       of Quit:
         killed = true
@@ -66,27 +66,27 @@
 
   return not killed
 
-proc KeyIsDown*(key: Key): bool = key in input.keyIsDown
-proc KeyWasPressed*(key: Key): bool = key in input.keyWasPressed
-proc KeyWasPressed*(): bool = input.keyWasPressed.len > 0
-proc KeyWasReleased*(key: Key): bool = key in input.keyWasReleased
-proc MouseIsDown*(button: MouseButton): bool = button in input.mouseIsDown
-proc MouseWasPressed*(): bool = input.mouseWasPressed.len > 0
-proc MouseWasPressed*(button: MouseButton): bool = button in input.mouseWasPressed
-proc MousePressedButtons*(): set[MouseButton] = input.mouseWasPressed
-proc MouseWasReleased*(): bool = input.mouseWasReleased.len > 0
-proc MouseWasReleased*(button: MouseButton): bool = button in input.mouseWasReleased
-proc MouseReleasedButtons*(): set[MouseButton] = input.mouseWasReleased
-proc MousePosition*(): Vec2f = input.mousePosition
-proc MousePositionNormalized*(size: (int, int)): Vec2f =
+proc keyIsDown*(key: Key): bool = key in input.keyIsDown
+proc keyWasPressed*(key: Key): bool = key in input.keyWasPressed
+proc keyWasPressed*(): bool = input.keyWasPressed.len > 0
+proc keyWasReleased*(key: Key): bool = key in input.keyWasReleased
+proc mouseIsDown*(button: MouseButton): bool = button in input.mouseIsDown
+proc mouseWasPressed*(): bool = input.mouseWasPressed.len > 0
+proc mouseWasPressed*(button: MouseButton): bool = button in input.mouseWasPressed
+proc mousePressedButtons*(): set[MouseButton] = input.mouseWasPressed
+proc mouseWasReleased*(): bool = input.mouseWasReleased.len > 0
+proc mouseWasReleased*(button: MouseButton): bool = button in input.mouseWasReleased
+proc mouseReleasedButtons*(): set[MouseButton] = input.mouseWasReleased
+proc mousePosition*(): Vec2f = input.mousePosition
+proc mousePositionNormalized*(size: (int, int)): Vec2f =
   result.x = (input.mousePosition.x / float32(size[0])) * 2.0 - 1.0
   result.y = (input.mousePosition.y / float32(size[1])) * 2.0 - 1.0
-proc MouseMove*(): Vec2f = input.mouseMove
-proc MouseWheel*(): float32 = input.mouseWheel
-proc WindowWasResized*(): auto = input.windowWasResized
-proc WindowIsMinimized*(): auto = input.windowIsMinimized
-proc LockMouse*(value: bool) = input.lockMouse = value
-proc HasFocus*(): bool = input.hasFocus
+proc mouseMove*(): Vec2f = input.mouseMove
+proc mouseWheel*(): float32 = input.mouseWheel
+proc windowWasResized*(): auto = input.windowWasResized
+proc windowIsMinimized*(): auto = input.windowIsMinimized
+proc lockMouse*(value: bool) = input.lockMouse = value
+proc hasFocus*(): bool = input.hasFocus
 
 
 # actions as a slight abstraction over raw input
@@ -99,49 +99,49 @@
 # warning, shit is not thread safe
 var actionMap: ActionMap
 
-proc MapAction*[T: enum](action: T, key: Key) =
+proc mapAction*[T: enum](action: T, key: Key) =
   if not actionMap.keyActions.contains($action):
     actionMap.keyActions[$action] = {}
   actionMap.keyActions[$action].incl key
 
-proc MapAction*[T: enum](action: T, button: MouseButton) =
+proc mapAction*[T: enum](action: T, button: MouseButton) =
   if not actionMap.mouseActions.contains($action):
     actionMap.mouseActions[$action] = {}
   actionMap.mouseActions[$action].incl button
 
-proc MapAction*[T: enum](action: T, keys: openArray[Key|MouseButton]) =
+proc mapAction*[T: enum](action: T, keys: openArray[Key|MouseButton]) =
   for key in keys:
-    MapAction(action, key)
+    mapAction(action, key)
 
-proc UnmapAction*[T: enum](action: T, key: Key) =
+proc unmapAction*[T: enum](action: T, key: Key) =
   if actionMap.keyActions.contains($action):
     actionMap.keyActions[$action].excl(key)
 
-proc UnmapAction*[T: enum](action: T, button: MouseButton) =
+proc unmapAction*[T: enum](action: T, button: MouseButton) =
   if actionMap.mouseActions.contains($action):
     actionMap.mouseActions[$action].excl(button)
 
-proc UnmapAction*[T: enum](action: T) =
+proc unmapAction*[T: enum](action: T) =
   if actionMap.keyActions.contains($action):
     actionMap.keyActions[$action] = {}
   if actionMap.mouseActions.contains($action):
     actionMap.mouseActions[$action] = {}
 
-proc SaveCurrentActionMapping*() =
+proc saveCurrentActionMapping*() =
   for name, keys in actionMap.keyActions.pairs:
-    SystemStorage.Store(name, keys, table = "input_mapping_key")
+    SystemStorage.store(name, keys, table = "input_mapping_key")
   for name, buttons in actionMap.mouseActions.pairs:
-    SystemStorage.Store(name, buttons, table = "input_mapping_mouse")
+    SystemStorage.store(name, buttons, table = "input_mapping_mouse")
 
-proc LoadActionMapping*[T]() =
+proc loadActionMapping*[T]() =
   reset(actionMap)
   for name in SystemStorage.List(table = "input_mapping_key"):
     let action = parseEnum[T](name)
     let keys = SystemStorage.Load(name, set[Key](), table = "input_mapping_key")
     for key in keys:
-      MapAction(action, key)
+      mapAction(action, key)
 
-proc ActionDown*[T](action: T): bool =
+proc actionDown*[T](action: T): bool =
   if actionMap.keyActions.contains($action):
     for key in actionMap.keyActions[$action]:
       if key in input.keyIsDown:
@@ -153,7 +153,7 @@
         return true
     return false
 
-proc ActionPressed*[T](action: T): bool =
+proc actionPressed*[T](action: T): bool =
   if actionMap.keyActions.contains($action):
     for key in actionMap.keyActions[$action]:
       if key in input.keyWasPressed:
@@ -163,7 +163,7 @@
       if button in input.mouseWasPressed:
         return true
 
-proc ActionReleased*[T](action: T): bool =
+proc actionReleased*[T](action: T): bool =
   if actionMap.keyActions.contains($action):
     for key in actionMap.keyActions[$action]:
       if key in input.keyWasReleased:
@@ -173,7 +173,7 @@
       if button in input.mouseWasReleased:
         return true
 
-proc ActionValue*[T](action: T): float32 =
+proc actionValue*[T](action: T): float32 =
   if actionMap.keyActions.contains($action):
     for key in actionMap.keyActions[$action]:
       if key in input.keyIsDown:
--- a/semicongine/rendering.nim	Mon Jul 29 16:05:09 2024 +0700
+++ b/semicongine/rendering.nim	Mon Jul 29 16:50:50 2024 +0700
@@ -44,7 +44,7 @@
     graphicsQueueFamily*: uint32
     graphicsQueue*: VkQueue
     debugMessenger: VkDebugUtilsMessengerEXT
-    # populated through the InitSwapchain proc
+    # populated through the initSwapchain proc
     swapchain*: Swapchain
     # unclear as of yet
     anisotropy*: float32 = 0 # needs to be enable during device creation
@@ -53,10 +53,10 @@
     samples*: VkSampleCountFlagBits
     depthBuffer*: bool
   Swapchain* = ref object
-    # parameters to InitSwapchain, required for swapchain recreation
+    # parameters to initSwapchain, required for swapchain recreation
     renderPass*: RenderPass
     vSync: bool
-    # populated through InitSwapchain proc
+    # populated through initSwapchain proc
     vk: VkSwapchainKHR
     width*: uint32
     height*: uint32
@@ -82,7 +82,7 @@
     oldSwapchainCounter: int # swaps until old swapchain will be destroyed
 
 var vulkan*: VulkanGlobals
-var fullscreen: bool
+var fullscreen_internal: bool
 
 type
   # type aliases
@@ -137,40 +137,40 @@
     imageViews: seq[VkImageView]
     samplers: seq[VkSampler]
 
-template ForDescriptorFields(shader: typed, fieldname, valuename, typename, countname, bindingNumber, body: untyped): untyped =
+template forDescriptorFields(shader: typed, fieldname, valuename, typename, countname, bindingNumber, body: untyped): untyped =
   var `bindingNumber` {.inject.} = 0'u32
   for theFieldname, value in fieldPairs(shader):
     when typeof(value) is Image:
       block:
-        const `fieldname` {.inject.} = theFieldname
+        const `fieldname` {.inject, hint[XDeclaredButNotUsed]: off.} = theFieldname
         const `typename` {.inject.} = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER
         const `countname` {.inject.} = 1'u32
-        let `valuename` {.inject.} = value
+        let `valuename` {.inject, hint[XDeclaredButNotUsed]: off.} = value
         body
         `bindingNumber`.inc
     elif typeof(value) is GPUValue:
       block:
-        const `fieldname` {.inject.} = theFieldname
+        const `fieldname` {.inject, hint[XDeclaredButNotUsed]: off.} = theFieldname
         const `typename` {.inject.} = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER
         const `countname` {.inject.} = 1'u32
-        let `valuename` {.inject.} = value
+        let `valuename` {.inject, hint[XDeclaredButNotUsed]: off.} = value
         body
         `bindingNumber`.inc
     elif typeof(value) is array:
       when elementType(value) is Image:
         block:
-          const `fieldname` {.inject.} = theFieldname
+          const `fieldname` {.inject, hint[XDeclaredButNotUsed]: off.} = theFieldname
           const `typename` {.inject.} = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER
           const `countname` {.inject.} = uint32(typeof(value).len)
-          let `valuename` {.inject.} = value
+          let `valuename` {.inject, hint[XDeclaredButNotUsed]: off.} = value
           body
           `bindingNumber`.inc
       elif elementType(value) is GPUValue:
         block:
-          const `fieldname` {.inject.} = theFieldname
+          const `fieldname` {.inject, hint[XDeclaredButNotUsed]: off.} = theFieldname
           const `typename` {.inject.} = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER
           const `countname` {.inject.} = len(value).uint32
-          let `valuename` {.inject.} = value
+          let `valuename` {.inject hint[XDeclaredButNotUsed]: off.} = value
           body
           `bindingNumber`.inc
       else:
@@ -206,7 +206,7 @@
     raise newException(Exception, errorMsg)
   return false
 
-proc InitVulkan*(appName: string = "semicongine app") =
+proc initVulkan*(appName: string = "semicongine app") =
 
   # instance creation
 
@@ -248,8 +248,8 @@
   #
   for extension in requiredExtensions:
     loadExtension(vulkan.instance, $extension)
-  vulkan.window = CreateWindow(appName)
-  vulkan.surface = CreateNativeSurface(vulkan.instance, vulkan.window)
+  vulkan.window = createWindow(appName)
+  vulkan.surface = createNativeSurface(vulkan.instance, vulkan.window)
 
   # logical device creation
 
@@ -278,8 +278,8 @@
     )
 
   # get physical device and graphics queue family
-  vulkan.physicalDevice = GetBestPhysicalDevice(vulkan.instance)
-  vulkan.graphicsQueueFamily = GetQueueFamily(vulkan.physicalDevice, VK_QUEUE_GRAPHICS_BIT)
+  vulkan.physicalDevice = getBestPhysicalDevice(vulkan.instance)
+  vulkan.graphicsQueueFamily = getQueueFamily(vulkan.physicalDevice, VK_QUEUE_GRAPHICS_BIT)
 
   let
     priority = cfloat(1)
@@ -315,31 +315,31 @@
   )
   vulkan.graphicsQueue = svkGetDeviceQueue(vulkan.device, vulkan.graphicsQueueFamily, VK_QUEUE_GRAPHICS_BIT)
 
-proc ClearSwapchain*() =
+proc clearSwapchain*() =
   assert vulkan.swapchain != nil, "Swapchain has not been initialized yet"
-  DestroySwapchain(vulkan.swapchain)
+  destroySwapchain(vulkan.swapchain)
   vulkan.swapchain = nil
 
-proc SetupSwapchain*(renderPass: RenderPass, vSync: bool = false) =
+proc setupSwapchain*(renderPass: RenderPass, vSync: bool = false) =
   assert vulkan.swapchain == nil, "Swapchain has already been initialized yet"
-  vulkan.swapchain = InitSwapchain(renderPass, vSync = vSync)
+  vulkan.swapchain = initSwapchain(renderPass, vSync = vSync)
 
-proc DestroyVulkan*() =
+proc destroyVulkan*() =
   if vulkan.swapchain != nil:
-    DestroySwapchain(vulkan.swapchain)
+    destroySwapchain(vulkan.swapchain)
   vkDestroyDevice(vulkan.device, nil)
   vkDestroySurfaceKHR(vulkan.instance, vulkan.surface, nil)
   vkDestroyDebugUtilsMessengerEXT(vulkan.instance, vulkan.debugMessenger, nil)
   vkDestroyInstance(vulkan.instance, nil)
 
-proc ShowSystemCursor*(value: bool) = vulkan.window.ShowSystemCursor(value)
-proc Fullscreen*(): bool = fullscreen
-proc SetFullscreen*(enable: bool) =
-  if enable != fullscreen:
-    fullscreen = enable
-    vulkan.window.SetFullscreen(fullscreen)
+proc showSystemCursor*(value: bool) = vulkan.window.showSystemCursor(value)
+proc fullscreen*(): bool = fullscreen_internal
+proc setFullscreen*(enable: bool) =
+  if enable != fullscreen_internal:
+    fullscreen_internal = enable
+    vulkan.window.setFullscreen(fullscreen_internal)
 
-proc GetAspectRatio*(): float32 =
+proc getAspectRatio*(): float32 =
   assert vulkan.swapchain != nil, "Swapchain has not been initialized yet"
   vulkan.swapchain.width.float32 / vulkan.swapchain.height.float32
 
@@ -347,7 +347,7 @@
   assert vulkan.swapchain != nil, "Swapchain has not been initialized yet"
   vulkan.swapchain.currentFiF
 
-proc MaxFramebufferSampleCount*(maxSamples = VK_SAMPLE_COUNT_8_BIT): VkSampleCountFlagBits =
+proc maxFramebufferSampleCount*(maxSamples = VK_SAMPLE_COUNT_8_BIT): VkSampleCountFlagBits =
   let limits = svkGetPhysicalDeviceProperties().limits
   let available = VkSampleCountFlags(
     limits.framebufferColorSampleCounts.uint32 and limits.framebufferDepthSampleCounts.uint32
--- a/semicongine/rendering/platform/linux.nim	Mon Jul 29 16:05:09 2024 +0700
+++ b/semicongine/rendering/platform/linux.nim	Mon Jul 29 16:50:50 2024 +0700
@@ -51,7 +51,7 @@
 proc XErrorLogger(display: PDisplay, event: PXErrorEvent): cint {.cdecl.} =
   logging.error &"Xlib: {event[]}"
 
-proc CreateWindow*(title: string): NativeWindow =
+proc createWindow*(title: string): NativeWindow =
   checkXlibResult XInitThreads()
   let display = XOpenDisplay(nil)
   if display == nil:
@@ -94,10 +94,10 @@
   checkXlibResult display.XFreePixmap(pixmap)
   return NativeWindow(display: display, window: window, emptyCursor: empty_cursor)
 
-proc SetTitle*(window: NativeWindow, title: string) =
+proc setTitle*(window: NativeWindow, title: string) =
   checkXlibResult XSetStandardProperties(window.display, window.window, title, "window", 0, nil, 0, nil)
 
-proc SetFullscreen*(window: var NativeWindow, enable: bool) =
+proc setFullscreen*(window: var NativeWindow, enable: bool) =
   var
     wm_state = window.display.XInternAtom("_NET_WM_STATE", 0)
     wm_fullscreen = window.display.XInternAtom("_NET_WM_STATE_FULLSCREEN", 0)
@@ -127,7 +127,7 @@
   )
   checkXlibResult window.display.XFlush()
 
-proc ShowSystemCursor*(window: NativeWindow, value: bool) =
+proc showSystemCursor*(window: NativeWindow, value: bool) =
   if value == true:
     checkXlibResult XUndefineCursor(window.display, window.window)
     checkXlibResult window.display.XFlush()
@@ -135,17 +135,17 @@
     checkXlibResult XDefineCursor(window.display, window.window, window.emptyCursor)
     checkXlibResult window.display.XFlush()
 
-proc Destroy*(window: NativeWindow) =
+proc destroy*(window: NativeWindow) =
   checkXlibResult window.display.XFreeCursor(window.emptyCursor)
   checkXlibResult window.display.XDestroyWindow(window.window)
   discard window.display.XCloseDisplay() # always returns 0
 
-proc Size*(window: NativeWindow): (int, int) =
+proc size*(window: NativeWindow): (int, int) =
   var attribs: XWindowAttributes
   checkXlibResult XGetWindowAttributes(window.display, window.window, addr(attribs))
   return (int(attribs.width), int(attribs.height))
 
-proc PendingEvents*(window: NativeWindow): seq[Event] =
+proc pendingEvents*(window: NativeWindow): seq[Event] =
   var event: XEvent
   while window.display.XPending() > 0:
     discard window.display.XNextEvent(addr(event))
@@ -185,7 +185,7 @@
       discard
 
 
-proc GetMousePosition*(window: NativeWindow): Option[Vec2f] =
+proc getMousePosition*(window: NativeWindow): Option[Vec2f] =
   var
     root: x11.Window
     win: x11.Window
@@ -208,7 +208,7 @@
   if onscreen != 0:
     result = some(Vec2f([float32(winX), float32(winY)]))
 
-proc SetMousePosition*(window: NativeWindow, x, y: int) =
+proc setMousePosition*(window: NativeWindow, x, y: int) =
   checkXlibResult XWarpPointer(
     window.display,
     default(x11.Window),
@@ -219,7 +219,7 @@
   )
   checkXlibResult XSync(window.display, false.XBool)
 
-proc CreateNativeSurface(instance: VkInstance, window: NativeWindow): VkSurfaceKHR =
+proc createNativeSurface(instance: VkInstance, window: NativeWindow): VkSurfaceKHR =
   var surfaceCreateInfo = VkXlibSurfaceCreateInfoKHR(
     sType: VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR,
     dpy: cast[ptr Display](window.display),
--- a/semicongine/rendering/platform/windows.nim	Mon Jul 29 16:05:09 2024 +0700
+++ b/semicongine/rendering/platform/windows.nim	Mon Jul 29 16:50:50 2024 +0700
@@ -40,7 +40,7 @@
 # sorry, have to use module-global variable to capture windows events
 var currentEvents: seq[Event]
 
-template CheckWin32Result*(call: untyped) =
+template checkWin32Result*(call: untyped) =
   let value = call
   if value == 0:
     raise newException(Exception, "Win32 error: " & astToStr(call) & " returned " & $value)
@@ -52,7 +52,7 @@
   defaultCursor = LoadCursor(0, IDC_ARROW)
 var currentCursor = defaultCursor
 
-proc MapLeftRightKeys(key: INT, lparam: LPARAM): INT =
+proc mapLeftRightKeys(key: INT, lparam: LPARAM): INT =
   case key
   of VK_SHIFT:
     MapVirtualKey(UINT((lParam and 0x00ff0000) shr 16), MAPVK_VSC_TO_VK_EX)
@@ -63,7 +63,7 @@
   else:
     key
 
-proc WindowHandler(hwnd: HWND, uMsg: UINT, wParam: WPARAM, lParam: LPARAM): LRESULT {.stdcall.} =
+proc windowHandler(hwnd: HWND, uMsg: UINT, wParam: WPARAM, lParam: LPARAM): LRESULT {.stdcall.} =
   case uMsg
   of WM_DESTROY:
     currentEvents.add(Event(eventType: EventType.Quit))
@@ -110,7 +110,7 @@
     return DefWindowProc(hwnd, uMsg, wParam, lParam)
 
 
-proc CreateWindow*(title: string): NativeWindow =
+proc createWindow*(title: string): NativeWindow =
   when DEBUG:
     AllocConsole()
     discard stdin.reopen("conIN$", fmRead)
@@ -147,12 +147,12 @@
   result.g_wpPrev.length = UINT(sizeof(WINDOWPLACEMENT))
   discard result.hwnd.ShowWindow(SW_SHOW)
 
-proc SetTitle*(window: NativeWindow, title: string) =
+proc setTitle*(window: NativeWindow, title: string) =
   window.hwnd.SetWindowText(T(title))
 
 # inspired by the one and only, Raymond Chen
 # https://devblogs.microsoft.com/oldnewthing/20100412-00/?p=14353
-proc SetFullscreen*(window: var NativeWindow, enable: bool) =
+proc setFullscreen*(window: var NativeWindow, enable: bool) =
   let dwStyle: DWORD = GetWindowLong(window.hwnd, GWL_STYLE)
   if enable:
     var mi = MONITORINFO(cbSize: DWORD(sizeof(MONITORINFO)))
@@ -164,7 +164,7 @@
     SetWindowPlacement(window.hwnd, addr window.g_wpPrev)
     SetWindowPos(window.hwnd, HWND(0), 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE or SWP_NOZORDER or SWP_NOOWNERZORDER or SWP_FRAMECHANGED)
 
-proc ShowSystemCursor*(window: NativeWindow, value: bool) =
+proc showSystemCursor*(window: NativeWindow, value: bool) =
   if value == true:
     currentCursor = defaultCursor
     SetCursor(currentCursor)
@@ -172,15 +172,15 @@
     currentCursor = invisibleCursor
     SetCursor(currentCursor)
 
-proc Destroy*(window: NativeWindow) =
+proc destroy*(window: NativeWindow) =
   discard
 
-proc Size*(window: NativeWindow): (int, int) =
+proc size*(window: NativeWindow): (int, int) =
   var rect: RECT
-  CheckWin32Result GetWindowRect(window.hwnd, addr(rect))
+  checkWin32Result GetWindowRect(window.hwnd, addr(rect))
   (int(rect.right - rect.left), int(rect.bottom - rect.top))
 
-proc PendingEvents*(window: NativeWindow): seq[Event] =
+proc pendingEvents*(window: NativeWindow): seq[Event] =
   # empty queue
   currentEvents = newSeq[Event]()
   var msg: MSG
@@ -190,17 +190,17 @@
     DispatchMessage(addr(msg))
   return currentEvents
 
-proc GetMousePosition*(window: NativeWindow): Option[Vec2f] =
+proc getMousePosition*(window: NativeWindow): Option[Vec2f] =
   var p: POINT
   let res = GetCursorPos(addr(p))
   if res:
     return some(Vec2f([float32(p.x), float32(p.y)]))
   return none(Vec2f)
 
-proc SetMousePosition*(window: NativeWindow, x, y: int) =
-  CheckWin32Result SetCursorPos(x, y)
+proc setMousePosition*(window: NativeWindow, x, y: int) =
+  checkWin32Result SetCursorPos(x, y)
 
-proc CreateNativeSurface*(instance: VkInstance, window: NativeWindow): VkSurfaceKHR =
+proc createNativeSurface*(instance: VkInstance, window: NativeWindow): VkSurfaceKHR =
   assert instance.Valid
   var surfaceCreateInfo = VkWin32SurfaceCreateInfoKHR(
     sType: VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR,
--- a/semicongine/rendering/renderer.nim	Mon Jul 29 16:05:09 2024 +0700
+++ b/semicongine/rendering/renderer.nim	Mon Jul 29 16:50:50 2024 +0700
@@ -10,7 +10,7 @@
     of UniformBuffer: @[VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT, VK_BUFFER_USAGE_TRANSFER_DST_BIT]
     of UniformBufferMapped: @[VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT]
 
-proc GetVkFormat(grayscale: bool, usage: openArray[VkImageUsageFlagBits]): VkFormat =
+proc getVkFormat(grayscale: bool, usage: openArray[VkImageUsageFlagBits]): VkFormat =
   let formats = if grayscale: [VK_FORMAT_R8_SRGB, VK_FORMAT_R8_UNORM]
                 else: [VK_FORMAT_B8G8R8A8_SRGB, VK_FORMAT_B8G8R8A8_UNORM]
 
@@ -50,10 +50,10 @@
 
 template bufferType(gpuData: GPUData): untyped =
   typeof(gpuData).TBuffer
-func NeedsMapping(bType: BufferType): bool =
+func needsMapping(bType: BufferType): bool =
   bType in [VertexBufferMapped, IndexBufferMapped, UniformBufferMapped]
-template NeedsMapping(gpuData: GPUData): untyped =
-  gpuData.bufferType.NeedsMapping
+template needsMapping(gpuData: GPUData): untyped =
+  gpuData.bufferType.needsMapping
 
 template size(gpuArray: GPUArray): uint64 =
   (gpuArray.data.len * sizeof(elementType(gpuArray.data))).uint64
@@ -67,13 +67,13 @@
 template rawPointer(gpuValue: GPUValue): pointer =
   addr(gpuValue.data)
 
-proc IsMappable(memoryTypeIndex: uint32): bool =
+proc isMappable(memoryTypeIndex: uint32): bool =
   var physicalProperties: VkPhysicalDeviceMemoryProperties
   vkGetPhysicalDeviceMemoryProperties(vulkan.physicalDevice, addr(physicalProperties))
   let flags = toEnums(physicalProperties.memoryTypes[memoryTypeIndex].propertyFlags)
   return VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT in flags
 
-proc InitDescriptorSet*(
+proc initDescriptorSet*(
   renderData: RenderData,
   layout: VkDescriptorSetLayout,
   descriptorSet: var DescriptorSet,
@@ -117,7 +117,7 @@
   var imageWrites = newSeqOfCap[VkDescriptorImageInfo](1024)
   var bufferWrites = newSeqOfCap[VkDescriptorBufferInfo](1024)
 
-  ForDescriptorFields(descriptorSet.data, fieldName, fieldValue, descriptorType, descriptorCount, descriptorBindingNumber):
+  forDescriptorFields(descriptorSet.data, fieldName, fieldValue, descriptorType, descriptorCount, descriptorBindingNumber):
     for i in 0 ..< descriptorSet.vk.len:
       when typeof(fieldValue) is GPUValue:
         bufferWrites.add VkDescriptorBufferInfo(
@@ -199,14 +199,14 @@
     pDescriptorCopies = nil,
   )
 
-proc AllocateNewMemoryBlock(size: uint64, mType: uint32): MemoryBlock =
+proc allocateNewMemoryBlock(size: uint64, mType: uint32): MemoryBlock =
   result = MemoryBlock(
     vk: svkAllocateMemory(size, mType),
     size: size,
     rawPointer: nil,
     offsetNextFree: 0,
   )
-  if mType.IsMappable():
+  if mType.isMappable():
     checkVkResult vkMapMemory(
       device = vulkan.device,
       memory = result.vk,
@@ -216,7 +216,7 @@
       ppData = addr(result.rawPointer)
     )
 
-proc FlushBuffer*(buffer: Buffer) =
+proc flushBuffer*(buffer: Buffer) =
   var flushRegion = VkMappedMemoryRange(
     sType: VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE,
     memory: buffer.memory,
@@ -225,7 +225,7 @@
   )
   checkVkResult vkFlushMappedMemoryRanges(vulkan.device, 1, addr(flushRegion))
 
-proc FlushAllMemory*(renderData: RenderData) =
+proc flushAllMemory*(renderData: RenderData) =
   var flushRegions = newSeq[VkMappedMemoryRange]()
   for memoryBlocks in renderData.memory:
     for memoryBlock in memoryBlocks:
@@ -238,7 +238,7 @@
   if flushRegions.len > 0:
     checkVkResult vkFlushMappedMemoryRanges(vulkan.device, flushRegions.len.uint32, flushRegions.ToCPointer())
 
-proc AllocateNewBuffer(renderData: var RenderData, size: uint64, bufferType: BufferType): Buffer =
+proc allocateNewBuffer(renderData: var RenderData, size: uint64, bufferType: BufferType): Buffer =
   result = Buffer(
     vk: svkCreateBuffer(size, bufferType.usage),
     size: size,
@@ -246,7 +246,7 @@
     offsetNextFree: 0,
   )
   let memoryRequirements = svkGetBufferMemoryRequirements(result.vk)
-  let memoryType = BestMemory(mappable = bufferType.NeedsMapping, filter = memoryRequirements.memoryTypes)
+  let memoryType = bestMemory(mappable = bufferType.needsMapping, filter = memoryRequirements.memoryTypes)
 
   # check if there is an existing allocated memory block that is large enough to be used
   var selectedBlockI = -1
@@ -258,7 +258,7 @@
   # otherwise, allocate a new block of memory and use that
   if selectedBlockI < 0:
     selectedBlockI = renderData.memory[memoryType].len
-    renderData.memory[memoryType].add AllocateNewMemoryBlock(
+    renderData.memory[memoryType].add allocateNewMemoryBlock(
       size = max(memoryRequirements.size, MEMORY_BLOCK_ALLOCATION_SIZE),
       mType = memoryType
     )
@@ -279,28 +279,28 @@
   result.rawPointer = selectedBlock.rawPointer.pointerAddOffset(selectedBlock.offsetNextFree)
   renderData.memory[memoryType][selectedBlockI].offsetNextFree += memoryRequirements.size
 
-proc UpdateGPUBuffer*(gpuData: GPUData, flush = false, allFrames = false) =
+proc updateGPUBuffer*(gpuData: GPUData, flush = false, allFrames = false) =
   if gpuData.size == 0:
     return
 
-  when NeedsMapping(gpuData):
+  when needsMapping(gpuData):
     copyMem(pointerAddOffset(gpuData.buffer.rawPointer, gpuData.offset), gpuData.rawPointer, gpuData.size)
     if flush:
-      FlushBuffer(gpuData.buffer)
+      flushBuffer(gpuData.buffer)
   else:
-    WithStagingBuffer((gpuData.buffer.vk, gpuData.offset), gpuData.size, stagingPtr):
+    withStagingBuffer((gpuData.buffer.vk, gpuData.offset), gpuData.size, stagingPtr):
       copyMem(stagingPtr, gpuData.rawPointer, gpuData.size)
 
-proc UpdateAllGPUBuffers*[T](value: T, flush = false, allFrames = false) =
+proc updateAllGPUBuffers*[T](value: T, flush = false, allFrames = false) =
   for name, fieldvalue in value.fieldPairs():
     when typeof(fieldvalue) is GPUData:
-      UpdateGPUBuffer(fieldvalue, flush = flush, allFrames = allFrames)
+      updateGPUBuffer(fieldvalue, flush = flush, allFrames = allFrames)
     when typeof(fieldvalue) is array:
       when elementType(fieldvalue) is GPUData:
         for entry in fieldvalue:
-          UpdateGPUBuffer(entry, flush = flush, allFrames = allFrames)
+          updateGPUBuffer(entry, flush = flush, allFrames = allFrames)
 
-proc AllocateGPUData(
+proc allocateGPUData(
   renderdata: var RenderData,
   bufferType: BufferType,
   size: uint64,
@@ -317,7 +317,7 @@
   # otherwise create new buffer
   if selectedBufferI < 0:
     selectedBufferI = renderdata.buffers[bufferType].len
-    renderdata.buffers[bufferType].add renderdata.AllocateNewBuffer(
+    renderdata.buffers[bufferType].add renderdata.allocateNewBuffer(
       size = max(size, BUFFER_ALLOCATION_SIZE),
       bufferType = bufferType,
     )
@@ -333,27 +333,27 @@
   result[1] = renderdata.buffers[bufferType][selectedBufferI].offsetNextFree
   renderdata.buffers[bufferType][selectedBufferI].offsetNextFree += size
 
-proc AssignBuffers*[T](renderdata: var RenderData, data: var T, uploadData = true) =
+proc assignBuffers*[T](renderdata: var RenderData, data: var T, uploadData = true) =
   for name, value in fieldPairs(data):
 
     when typeof(value) is GPUData:
-      (value.buffer, value.offset) = AllocateGPUData(renderdata, value.bufferType, value.size)
+      (value.buffer, value.offset) = allocateGPUData(renderdata, value.bufferType, value.size)
 
     elif typeof(value) is DescriptorSet:
-      AssignBuffers(renderdata, value.data, uploadData = uploadData)
+      assignBuffers(renderdata, value.data, uploadData = uploadData)
 
     elif typeof(value) is array:
       when elementType(value) is GPUValue:
         for v in value.mitems:
-          (v.buffer, v.offset) = AllocateGPUData(renderdata, v.bufferType, v.size)
+          (v.buffer, v.offset) = allocateGPUData(renderdata, v.bufferType, v.size)
 
   if uploadData:
-    UpdateAllGPUBuffers(data, flush = true, allFrames = true)
+    updateAllGPUBuffers(data, flush = true, allFrames = true)
 
-proc AssignBuffers*(renderdata: var RenderData, descriptorSet: var DescriptorSet, uploadData = true) =
-  AssignBuffers(renderdata, descriptorSet.data, uploadData = uploadData)
+proc assignBuffers*(renderdata: var RenderData, descriptorSet: var DescriptorSet, uploadData = true) =
+  assignBuffers(renderdata, descriptorSet.data, uploadData = uploadData)
 
-proc InitRenderData*(descriptorPoolLimit = 1024'u32): RenderData =
+proc initRenderData*(descriptorPoolLimit = 1024'u32): RenderData =
   # allocate descriptor pools
   var poolSizes = [
     VkDescriptorPoolSize(thetype: VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, descriptorCount: descriptorPoolLimit),
@@ -367,7 +367,7 @@
   )
   checkVkResult vkCreateDescriptorPool(vulkan.device, addr(poolInfo), nil, addr(result.descriptorPool))
 
-proc DestroyRenderData*(renderData: RenderData) =
+proc destroyRenderData*(renderData: RenderData) =
   vkDestroyDescriptorPool(vulkan.device, renderData.descriptorPool, nil)
 
   for buffers in renderData.buffers:
@@ -387,7 +387,7 @@
     for memory in memoryBlocks:
       vkFreeMemory(vulkan.device, memory.vk, nil)
 
-proc TransitionImageLayout(image: VkImage, oldLayout, newLayout: VkImageLayout) =
+proc transitionImageLayout(image: VkImage, oldLayout, newLayout: VkImageLayout) =
   var
     barrier = VkImageMemoryBarrier(
       sType: VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,
@@ -420,7 +420,7 @@
   else:
     raise newException(Exception, "Unsupported layout transition!")
 
-  WithSingleUseCommandBuffer(commandBuffer):
+  withSingleUseCommandBuffer(commandBuffer):
     vkCmdPipelineBarrier(
       commandBuffer,
       srcStageMask = [srcStage].toBits,
@@ -466,7 +466,7 @@
   var usage = @[VK_IMAGE_USAGE_TRANSFER_DST_BIT, VK_IMAGE_USAGE_SAMPLED_BIT]
   if image.isRenderTarget:
     usage.add VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT
-  let format = GetVkFormat(grayscale = elementType(image.data) is Gray, usage = usage)
+  let format = getVkFormat(grayscale = elementType(image.data) is Gray, usage = usage)
 
   image.vk = svkCreate2DImage(image.width, image.height, format, usage, image.samples)
   renderData.images.add image.vk
@@ -479,7 +479,7 @@
   renderData.samplers.add image.sampler
 
   let memoryRequirements = image.vk.svkGetImageMemoryRequirements()
-  let memoryType = BestMemory(mappable = false, filter = memoryRequirements.memoryTypes)
+  let memoryType = bestMemory(mappable = false, filter = memoryRequirements.memoryTypes)
   # check if there is an existing allocated memory block that is large enough to be used
   var selectedBlockI = -1
   for i in 0 ..< renderData.memory[memoryType].len:
@@ -490,7 +490,7 @@
   # otherwise, allocate a new block of memory and use that
   if selectedBlockI < 0:
     selectedBlockI = renderData.memory[memoryType].len
-    renderData.memory[memoryType].add AllocateNewMemoryBlock(
+    renderData.memory[memoryType].add allocateNewMemoryBlock(
       size = max(memoryRequirements.size, MEMORY_BLOCK_ALLOCATION_SIZE),
       mType = memoryType
     )
@@ -513,18 +513,18 @@
   renderData.imageViews.add image.imageview
 
   # data transfer and layout transition
-  TransitionImageLayout(image.vk, VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL)
+  transitionImageLayout(image.vk, VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL)
   if image.data.len > 0:
-    WithStagingBuffer(
+    withStagingBuffer(
       (image.vk, image.width, image.height),
       memoryRequirements.size,
       stagingPtr
     ):
       copyMem(stagingPtr, image.data.ToCPointer, image.size)
-  TransitionImageLayout(image.vk, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL)
+  transitionImageLayout(image.vk, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL)
 
 
-proc UploadImages*(renderdata: var RenderData, descriptorSet: var DescriptorSet) =
+proc uploadImages*(renderdata: var RenderData, descriptorSet: var DescriptorSet) =
   for name, value in fieldPairs(descriptorSet.data):
     when typeof(value) is Image:
       renderdata.createVulkanImage(value)
@@ -548,58 +548,58 @@
 var hasBoundDescriptorSets {.compileTime.} = false # okay, I am not sure if this is clean, unproblematic or sane. Just trying to get some comptime-validation
 var hasDescriptorSets {.compileTime} = false
 
-template WithBind*[A, B, C, D, TShader](commandBuffer: VkCommandBuffer, sets: (DescriptorSet[A], DescriptorSet[B], DescriptorSet[C], DescriptorSet[D]), pipeline: Pipeline[TShader], body: untyped): untyped =
+template withBind*[A, B, C, D, TShader](commandBuffer: VkCommandBuffer, sets: (DescriptorSet[A], DescriptorSet[B], DescriptorSet[C], DescriptorSet[D]), pipeline: Pipeline[TShader], body: untyped): untyped =
   static: assertAllDescriptorsBound(A, B, C, D, TShader)
   block:
     var descriptorSets: seq[VkDescriptorSet]
     for dSet in sets.fields:
-      assert dSet.vk[currentFiF()].Valid, "DescriptorSet not initialized, maybe forgot to call InitDescriptorSet"
+      assert dSet.vk[currentFiF()].Valid, "DescriptorSet not initialized, maybe forgot to call initDescriptorSet"
       descriptorSets.add dSet.vk[currentFiF()]
     svkCmdBindDescriptorSets(commandBuffer, descriptorSets, pipeline.layout)
     static:
-      assert not hasBoundDescriptorSets, "Cannot call WithBind nested"
+      assert not hasBoundDescriptorSets, "Cannot call withBind nested"
       hasBoundDescriptorSets = true
     body
     static:
       hasBoundDescriptorSets = false
-template WithBind*[A, B, C, TShader](commandBuffer: VkCommandBuffer, sets: (DescriptorSet[A], DescriptorSet[B], DescriptorSet[C]), pipeline: Pipeline[TShader], body: untyped): untyped =
+template withBind*[A, B, C, TShader](commandBuffer: VkCommandBuffer, sets: (DescriptorSet[A], DescriptorSet[B], DescriptorSet[C]), pipeline: Pipeline[TShader], body: untyped): untyped =
   static: assertAllDescriptorsBound(A, B, C, EMPTY, TShader)
   block:
     var descriptorSets: seq[VkDescriptorSet]
     for dSet in sets.fields:
-      assert dSet.vk[currentFiF()].Valid, "DescriptorSet not initialized, maybe forgot to call InitDescriptorSet"
+      assert dSet.vk[currentFiF()].Valid, "DescriptorSet not initialized, maybe forgot to call initDescriptorSet"
       descriptorSets.add dSet.vk[currentFiF()]
     svkCmdBindDescriptorSets(commandBuffer, descriptorSets, pipeline.layout)
     static:
-      assert not hasBoundDescriptorSets, "Cannot call WithBind nested"
+      assert not hasBoundDescriptorSets, "Cannot call withBind nested"
       hasBoundDescriptorSets = true
     body
     static:
       hasBoundDescriptorSets = false
-template WithBind*[A, B, TShader](commandBuffer: VkCommandBuffer, sets: (DescriptorSet[A], DescriptorSet[B]), pipeline: Pipeline[TShader], body: untyped): untyped =
+template withBind*[A, B, TShader](commandBuffer: VkCommandBuffer, sets: (DescriptorSet[A], DescriptorSet[B]), pipeline: Pipeline[TShader], body: untyped): untyped =
   static: assertAllDescriptorsBound(A, B, EMPTY, EMPTY, TShader)
   block:
     var descriptorSets: seq[VkDescriptorSet]
     for dSet in sets.fields:
-      assert dSet.vk[currentFiF()].Valid, "DescriptorSet not initialized, maybe forgot to call InitDescriptorSet"
+      assert dSet.vk[currentFiF()].Valid, "DescriptorSet not initialized, maybe forgot to call initDescriptorSet"
       descriptorSets.add dSet.vk[currentFiF()]
     svkCmdBindDescriptorSets(commandBuffer, descriptorSets, pipeline.layout)
     static:
-      assert not hasBoundDescriptorSets, "Cannot call WithBind nested"
+      assert not hasBoundDescriptorSets, "Cannot call withBind nested"
       hasBoundDescriptorSets = true
     body
     static:
       hasBoundDescriptorSets = false
-template WithBind*[A, TShader](commandBuffer: VkCommandBuffer, sets: (DescriptorSet[A], ), pipeline: Pipeline[TShader], body: untyped): untyped =
+template withBind*[A, TShader](commandBuffer: VkCommandBuffer, sets: (DescriptorSet[A], ), pipeline: Pipeline[TShader], body: untyped): untyped =
   static: assertAllDescriptorsBound(A, EMPTY, EMPTY, EMPTY, TShader)
   block:
     var descriptorSets: seq[VkDescriptorSet]
     for dSet in sets.fields:
-      assert dSet.vk[currentFiF()].Valid, "DescriptorSet not initialized, maybe forgot to call InitDescriptorSet"
+      assert dSet.vk[currentFiF()].Valid, "DescriptorSet not initialized, maybe forgot to call initDescriptorSet"
       descriptorSets.add dSet.vk[currentFiF()]
     svkCmdBindDescriptorSets(commandBuffer, descriptorSets, pipeline.layout)
     static:
-      assert not hasBoundDescriptorSets, "Cannot call WithBind nested"
+      assert not hasBoundDescriptorSets, "Cannot call withBind nested"
       hasBoundDescriptorSets = true
     body
     static:
@@ -625,7 +625,7 @@
           foundAttr = true
       assert foundAttr, "Attribute '" & attrName & "' is not provided in instance type '" & name(TInstance) & "'"
 
-proc Render*[TShader, TMesh, TInstance](
+proc render*[TShader, TMesh, TInstance](
   commandBuffer: VkCommandBuffer,
   pipeline: Pipeline[TShader],
   mesh: TMesh,
@@ -716,12 +716,12 @@
       firstInstance = 0
     )
 
-proc Render*[TShader, TMesh](
+proc render*[TShader, TMesh](
   commandBuffer: VkCommandBuffer,
   pipeline: Pipeline[TShader],
   mesh: TMesh,
 ) =
-  Render(commandBuffer, pipeline, mesh, EMPTY())
+  render(commandBuffer, pipeline, mesh, EMPTY())
 
 proc assertValidPushConstantType(TShader, TPushConstant: typedesc) =
   assert sizeof(TPushConstant) <= PUSH_CONSTANT_SIZE, "Push constant values must be <= 128 bytes"
@@ -733,7 +733,7 @@
       foundPushConstant = true
   assert foundPushConstant == true, "No push constant found in shader"
 
-proc RenderWithPushConstant*[TShader, TMesh, TInstance, TPushConstant](
+proc renderWithPushConstant*[TShader, TMesh, TInstance, TPushConstant](
   commandBuffer: VkCommandBuffer,
   pipeline: Pipeline[TShader],
   mesh: TMesh,
@@ -749,8 +749,8 @@
     size = PUSH_CONSTANT_SIZE,
     pValues = addr(pushConstant)
   );
-  Render(commandBuffer, pipeline, mesh, instances)
-proc RenderWithPushConstant*[TShader, TMesh, TPushConstant](
+  render(commandBuffer, pipeline, mesh, instances)
+proc renderWithPushConstant*[TShader, TMesh, TPushConstant](
   commandBuffer: VkCommandBuffer,
   pipeline: Pipeline[TShader],
   mesh: TMesh,
@@ -765,7 +765,7 @@
     size = PUSH_CONSTANT_SIZE,
     pValues = addr(pushConstant)
   );
-  Render(commandBuffer, pipeline, mesh, EMPTY())
+  render(commandBuffer, pipeline, mesh, EMPTY())
 
 proc asGPUArray*[T](data: openArray[T], bufferType: static BufferType): auto =
   GPUArray[T, bufferType](data: @data)
--- a/semicongine/rendering/renderpasses.nim	Mon Jul 29 16:05:09 2024 +0700
+++ b/semicongine/rendering/renderpasses.nim	Mon Jul 29 16:50:50 2024 +0700
@@ -1,4 +1,4 @@
-proc CreateDirectPresentationRenderPass*(depthBuffer: bool, samples = VK_SAMPLE_COUNT_1_BIT): RenderPass =
+proc createDirectPresentationRenderPass*(depthBuffer: bool, samples = VK_SAMPLE_COUNT_1_BIT): RenderPass =
   assert vulkan.instance.Valid, "Vulkan not initialized"
   result = RenderPass(depthBuffer: depthBuffer, samples: samples)
 
@@ -66,7 +66,7 @@
     dependencies = dependencies,
   )
 
-proc CreateIndirectPresentationRenderPass*(depthBuffer: bool, samples = VK_SAMPLE_COUNT_1_BIT): (RenderPass, RenderPass) =
+proc createIndirectPresentationRenderPass*(depthBuffer: bool, samples = VK_SAMPLE_COUNT_1_BIT): (RenderPass, RenderPass) =
   assert vulkan.instance.Valid, "Vulkan not initialized"
 
   result[0] = RenderPass(depthBuffer: depthBuffer, samples: samples)
@@ -188,7 +188,7 @@
     dependencies = presentDependencies
   )
 
-template WithRenderPass*(
+template withRenderPass*(
   theRenderPass: RenderPass,
   theFramebuffer: VkFramebuffer,
   commandbuffer: VkCommandBuffer,
--- a/semicongine/rendering/shaders.nim	Mon Jul 29 16:05:09 2024 +0700
+++ b/semicongine/rendering/shaders.nim	Mon Jul 29 16:50:50 2024 +0700
@@ -1,4 +1,4 @@
-func GlslType[T: SupportedGPUType|Image](value: T): string =
+func glslType[T: SupportedGPUType|Image](value: T): string =
   when T is float32: "float"
   elif T is float64: "double"
   elif T is int8 or T is int16 or T is int32 or T is int64: "int"
@@ -40,7 +40,7 @@
     const n = typetraits.name(T)
     {.error: "Unsupported data type on GPU: " & n.}
 
-func VkType[T: SupportedGPUType](value: T): VkFormat =
+func vkType[T: SupportedGPUType](value: T): VkFormat =
   when T is float32: VK_FORMAT_R32_SFLOAT
   elif T is float64: VK_FORMAT_R64_SFLOAT
   elif T is int8: VK_FORMAT_R8_SINT
@@ -86,7 +86,7 @@
   else: {.error: "Unsupported data type on GPU".}
 
 
-func NumberOfVertexInputAttributeDescriptors[T: SupportedGPUType|Image](value: T): uint32 =
+func numberOfVertexInputAttributeDescriptors[T: SupportedGPUType|Image](value: T): uint32 =
   when T is TMat2[float32] or T is TMat2[float64] or T is TMat23[float32] or T is TMat23[float64]:
     2
   elif T is TMat32[float32] or T is TMat32[float64] or T is TMat3[float32] or T is TMat3[float64] or T is TMat34[float32] or T is TMat34[float64]:
@@ -96,7 +96,7 @@
   else:
     1
 
-func NLocationSlots[T: SupportedGPUType|Image](value: T): uint32 =
+func nLocationSlots[T: SupportedGPUType|Image](value: T): uint32 =
   #[
   single location:
     - any scalar
@@ -142,20 +142,20 @@
     # vertex shader inputs
     when hasCustomPragma(value, VertexAttribute) or hasCustomPragma(value, InstanceAttribute):
       assert typeof(value) is SupportedGPUType
-      vsInput.add "layout(location = " & $vsInputLocation & ") in " & GlslType(value) & " " & fieldname & ";"
-      for j in 0 ..< NumberOfVertexInputAttributeDescriptors(value):
-        vsInputLocation += NLocationSlots(value)
+      vsInput.add "layout(location = " & $vsInputLocation & ") in " & glslType(value) & " " & fieldname & ";"
+      for j in 0 ..< numberOfVertexInputAttributeDescriptors(value):
+        vsInputLocation += nLocationSlots(value)
 
     # intermediate values, passed between shaders
     elif hasCustomPragma(value, Pass) or hasCustomPragma(value, PassFlat):
       let flat = if hasCustomPragma(value, PassFlat): "flat " else: ""
-      vsOutput.add "layout(location = " & $passLocation & ") " & flat & "out " & GlslType(value) & " " & fieldname & ";"
-      fsInput.add "layout(location = " & $passLocation & ") " & flat & "in " & GlslType(value) & " " & fieldname & ";"
+      vsOutput.add "layout(location = " & $passLocation & ") " & flat & "out " & glslType(value) & " " & fieldname & ";"
+      fsInput.add "layout(location = " & $passLocation & ") " & flat & "in " & glslType(value) & " " & fieldname & ";"
       passLocation.inc
 
     # fragment shader output
     elif hasCustomPragma(value, ShaderOutput):
-      fsOutput.add &"layout(location = " & $fsOutputLocation & ") out " & GlslType(value) & " " & fieldname & ";"
+      fsOutput.add &"layout(location = " & $fsOutputLocation & ") out " & glslType(value) & " " & fieldname & ";"
       fsOutputLocation.inc
 
     # descriptor sets
@@ -173,7 +173,7 @@
         for descriptorName, descriptorValue in fieldPairs(descriptor):
 
           when typeof(descriptorValue) is Image:
-            samplers.add "layout(set=" & $descriptorSetIndex & ", binding = " & $descriptorBinding & ") uniform " & GlslType(descriptorValue) & " " & descriptorName & ";"
+            samplers.add "layout(set=" & $descriptorSetIndex & ", binding = " & $descriptorBinding & ") uniform " & glslType(descriptorValue) & " " & descriptorName & ";"
             descriptorBinding.inc
 
           elif typeof(descriptorValue) is GPUValue:
@@ -183,7 +183,7 @@
 
               for blockFieldName, blockFieldValue in descriptorValue.data.fieldPairs():
                 assert typeof(blockFieldValue) is SupportedGPUType, "uniform block field '" & blockFieldName & "' is not a SupportedGPUType"
-                uniforms.add "  " & GlslType(blockFieldValue) & " " & blockFieldName & ";"
+                uniforms.add "  " & glslType(blockFieldValue) & " " & blockFieldName & ";"
               uniforms.add "} " & descriptorName & ";"
 
             else:
@@ -195,7 +195,7 @@
             when elementType(descriptorValue) is Image:
 
               let arrayDecl = "[" & $typeof(descriptorValue).len & "]"
-              samplers.add "layout(set=" & $descriptorSetIndex & ", binding = " & $descriptorBinding & ") uniform " & GlslType(default(elementType(descriptorValue))) & " " & descriptorName & "" & arrayDecl & ";"
+              samplers.add "layout(set=" & $descriptorSetIndex & ", binding = " & $descriptorBinding & ") uniform " & glslType(default(elementType(descriptorValue))) & " " & descriptorName & "" & arrayDecl & ";"
               descriptorBinding.inc
 
             elif elementType(descriptorValue) is GPUValue:
@@ -204,7 +204,7 @@
 
               for blockFieldName, blockFieldValue in default(elementType(descriptorValue)).data.fieldPairs():
                 assert typeof(blockFieldValue) is SupportedGPUType, "uniform block field '" & blockFieldName & "' is not a SupportedGPUType"
-                uniforms.add "  " & GlslType(blockFieldValue) & " " & blockFieldName & ";"
+                uniforms.add "  " & glslType(blockFieldValue) & " " & blockFieldName & ";"
               uniforms.add "} " & descriptorName & "[" & $descriptorValue.len & "];"
               descriptorBinding.inc
 
@@ -221,7 +221,7 @@
       pushConstants.add "{"
       for constFieldName, constFieldValue in value.fieldPairs():
         assert typeof(constFieldValue) is SupportedGPUType, "push constant field '" & constFieldName & "' is not a SupportedGPUType"
-        pushConstants.add "  " & GlslType(constFieldValue) & " " & constFieldName & ";"
+        pushConstants.add "  " & glslType(constFieldValue) & " " & constFieldName & ";"
       pushConstants.add "} " & fieldname & ";"
     else:
       {.error: "Unsupported shader field '" & typetraits.name(TShader) & "." & fieldname & "' of type " & typetraits.name(typeof(value)).}
@@ -293,7 +293,7 @@
     i += 4
 
 
-proc CompileShader[TShader](shader: static TShader): (VkShaderModule, VkShaderModule) =
+proc compileShader[TShader](shader: static TShader): (VkShaderModule, VkShaderModule) =
   const (vertexShaderSource, fragmentShaderSource) = generateShaderSource(shader)
 
   let vertexBinary = compileGlslToSPIRV(VK_SHADER_STAGE_VERTEX_BIT, vertexShaderSource)
@@ -325,18 +325,18 @@
         const `isinstancename` {.inject.} = hasCustomPragma(value, InstanceAttribute)
         body
 
-proc GetDescriptorSetCount[TShader](): uint32 =
+proc getDescriptorSetCount[TShader](): uint32 =
   for _, value in fieldPairs(default(TShader)):
     when hasCustomPragma(value, DescriptorSets):
       return tupleLen(typeof(value)).uint32
 
-proc CreateDescriptorSetLayouts[TShader](): array[MAX_DESCRIPTORSETS, VkDescriptorSetLayout] =
+proc createDescriptorSetLayouts[TShader](): array[MAX_DESCRIPTORSETS, VkDescriptorSetLayout] =
   var setNumber: int
   for _, value in fieldPairs(default(TShader)):
     when hasCustomPragma(value, DescriptorSets):
       for descriptorSet in value.fields:
         var layoutbindings: seq[VkDescriptorSetLayoutBinding]
-        ForDescriptorFields(descriptorSet, fieldName, fieldValue, descriptorType, descriptorCount, descriptorBindingNumber):
+        forDescriptorFields(descriptorSet, fieldName, fieldValue, descriptorType, descriptorCount, descriptorBindingNumber):
           layoutbindings.add VkDescriptorSetLayoutBinding(
             binding: descriptorBindingNumber,
             descriptorType: descriptorType,
@@ -357,7 +357,7 @@
         )
         inc setNumber
 
-proc CreatePipeline*[TShader](
+proc createPipeline*[TShader](
   renderPass: RenderPass,
   topology: VkPrimitiveTopology = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST,
   polygonMode: VkPolygonMode = VK_POLYGON_MODE_FILL,
@@ -369,10 +369,10 @@
   # create pipeline
 
   const shader = default(TShader)
-  (result.vertexShaderModule, result.fragmentShaderModule) = CompileShader(shader)
+  (result.vertexShaderModule, result.fragmentShaderModule) = compileShader(shader)
 
-  var nSets = GetDescriptorSetCount[TShader]()
-  result.descriptorSetLayouts = CreateDescriptorSetLayouts[TShader]()
+  var nSets = getDescriptorSetCount[TShader]()
+  result.descriptorSetLayouts = createDescriptorSetLayouts[TShader]()
 
   let pushConstant = VkPushConstantRange(
     stageFlags: VkShaderStageFlags(VK_SHADER_STAGE_ALL_GRAPHICS),
@@ -415,15 +415,15 @@
       inputRate: if isInstanceAttr: VK_VERTEX_INPUT_RATE_INSTANCE else: VK_VERTEX_INPUT_RATE_VERTEX,
     )
     # allows to submit larger data structures like Mat44, for most other types will be 1
-    let perDescriptorSize = sizeof(value).uint32 div NumberOfVertexInputAttributeDescriptors(value)
-    for i in 0'u32 ..< NumberOfVertexInputAttributeDescriptors(value):
+    let perDescriptorSize = sizeof(value).uint32 div numberOfVertexInputAttributeDescriptors(value)
+    for i in 0'u32 ..< numberOfVertexInputAttributeDescriptors(value):
       attributes.add VkVertexInputAttributeDescription(
         binding: inputBindingNumber,
         location: location,
-        format: VkType(value),
+        format: vkType(value),
         offset: i * perDescriptorSize,
       )
-      location += NLocationSlots(value)
+      location += nLocationSlots(value)
     inc inputBindingNumber
 
   let
@@ -528,12 +528,12 @@
     addr(result.vk)
   )
 
-template WithPipeline*(commandbuffer: VkCommandBuffer, pipeline: Pipeline, body: untyped): untyped =
+template withPipeline*(commandbuffer: VkCommandBuffer, pipeline: Pipeline, body: untyped): untyped =
   block:
     vkCmdBindPipeline(commandbuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, pipeline.vk)
     body
 
-proc DestroyPipeline*(pipeline: Pipeline) =
+proc destroyPipeline*(pipeline: Pipeline) =
 
   for descriptorSetLayout in pipeline.descriptorSetLayouts:
     vkDestroyDescriptorSetLayout(vulkan.device, descriptorSetLayout, nil)
--- a/semicongine/rendering/swapchain.nim	Mon Jul 29 16:05:09 2024 +0700
+++ b/semicongine/rendering/swapchain.nim	Mon Jul 29 16:50:50 2024 +0700
@@ -1,6 +1,6 @@
 const N_FRAMEBUFFERS = 3'u32
 
-proc InitSwapchain(
+proc initSwapchain(
   renderPass: RenderPass,
   vSync: bool = false,
   oldSwapchain: Swapchain = nil,
@@ -66,7 +66,7 @@
     let requirements = svkGetImageMemoryRequirements(swapchain.depthImage)
     swapchain.depthMemory = svkAllocateMemory(
       requirements.size,
-      BestMemory(mappable = false, filter = requirements.memoryTypes)
+      bestMemory(mappable = false, filter = requirements.memoryTypes)
     )
     checkVkResult vkBindImageMemory(
       vulkan.device,
@@ -92,7 +92,7 @@
     let requirements = svkGetImageMemoryRequirements(swapchain.msaaImage)
     swapchain.msaaMemory = svkAllocateMemory(
       requirements.size,
-      BestMemory(mappable = false, filter = requirements.memoryTypes)
+      bestMemory(mappable = false, filter = requirements.memoryTypes)
     )
     checkVkResult vkBindImageMemory(
       vulkan.device,
@@ -152,9 +152,9 @@
 
   return swapchain
 
-proc DestroySwapchain*(swapchain: Swapchain) =
+proc destroySwapchain*(swapchain: Swapchain) =
   if swapchain.oldSwapchain != nil:
-    DestroySwapchain(swapchain.oldSwapchain)
+    destroySwapchain(swapchain.oldSwapchain)
 
   if swapchain.msaaImage.Valid:
     vkDestroyImageView(vulkan.device, swapchain.msaaImageView, nil)
@@ -185,8 +185,8 @@
 
   vkDestroySwapchainKHR(vulkan.device, swapchain.vk, nil)
 
-proc TryAcquireNextImage(swapchain: Swapchain): Option[VkFramebuffer] =
-  if not swapchain.queueFinishedFence[swapchain.currentFiF].Await(100_000_000):
+proc tryAcquireNextImage(swapchain: Swapchain): Option[VkFramebuffer] =
+  if not swapchain.queueFinishedFence[swapchain.currentFiF].await(100_000_000):
     return none(VkFramebuffer)
 
   let nextImageResult = vkAcquireNextImageKHR(
@@ -204,7 +204,7 @@
     return none(VkFramebuffer)
   return some(swapchain.framebuffers[swapchain.currentFramebufferIndex])
 
-proc Swap(swapchain: Swapchain, commandBuffer: VkCommandBuffer): bool =
+proc swap(swapchain: Swapchain, commandBuffer: VkCommandBuffer): bool =
   var
     waitStage = VkPipelineStageFlags(VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT)
     submitInfo = VkSubmitInfo(
@@ -238,7 +238,7 @@
   if swapchain.oldSwapchain != nil:
     dec swapchain.oldSwapchainCounter
     if swapchain.oldSwapchainCounter <= 0:
-      DestroySwapchain(swapchain.oldSwapchain)
+      destroySwapchain(swapchain.oldSwapchain)
       swapchain.oldSwapchain = nil
 
   if presentResult != VK_SUCCESS:
@@ -247,16 +247,16 @@
   swapchain.currentFiF = (uint32(swapchain.currentFiF) + 1) mod INFLIGHTFRAMES
   return true
 
-proc Recreate(swapchain: Swapchain): Swapchain =
-  InitSwapchain(
+proc recreate(swapchain: Swapchain): Swapchain =
+  initSwapchain(
     renderPass = swapchain.renderPass,
     vSync = swapchain.vSync,
     oldSwapchain = swapchain,
   )
 
-template WithNextFrame*(framebufferName, commandBufferName, body: untyped): untyped =
+template withNextFrame*(framebufferName, commandBufferName, body: untyped): untyped =
   assert vulkan.swapchain != nil, "Swapchain has not been initialized yet"
-  var maybeFramebuffer = TryAcquireNextImage(vulkan.swapchain)
+  var maybeFramebuffer = tryAcquireNextImage(vulkan.swapchain)
   if maybeFramebuffer.isSome:
     block:
       let `framebufferName` {.inject.} = maybeFramebuffer.get
@@ -271,8 +271,8 @@
       body
 
       checkVkResult vkEndCommandBuffer(`commandBufferName`)
-      discard Swap(swapchain = vulkan.swapchain, commandBuffer = `commandBufferName`)
+      discard swap(swapchain = vulkan.swapchain, commandBuffer = `commandBufferName`)
   else:
-    let newSwapchain = Recreate(vulkan.swapchain)
+    let newSwapchain = recreate(vulkan.swapchain)
     if newSwapchain != nil:
       vulkan.swapchain = newSwapchain
--- a/semicongine/rendering/vulkan_wrappers.nim	Mon Jul 29 16:05:09 2024 +0700
+++ b/semicongine/rendering/vulkan_wrappers.nim	Mon Jul 29 16:50:50 2024 +0700
@@ -1,4 +1,4 @@
-proc GetBestPhysicalDevice(instance: VkInstance): VkPhysicalDevice =
+proc getBestPhysicalDevice(instance: VkInstance): VkPhysicalDevice =
   var nDevices: uint32
   checkVkResult vkEnumeratePhysicalDevices(instance, addr(nDevices), nil)
   var devices = newSeq[VkPhysicalDevice](nDevices)
@@ -29,7 +29,7 @@
   checkVkResult vkGetPhysicalDeviceSurfaceSupportKHR(vulkan.physicalDevice, queueFamily, vulkan.surface, addr(presentation))
   return bool(presentation)
 
-proc GetQueueFamily(pDevice: VkPhysicalDevice, qType: VkQueueFlagBits): uint32 =
+proc getQueueFamily(pDevice: VkPhysicalDevice, qType: VkQueueFlagBits): uint32 =
   var nQueuefamilies: uint32
   vkGetPhysicalDeviceQueueFamilyProperties(pDevice, addr nQueuefamilies, nil)
   var queuFamilies = newSeq[VkQueueFamilyProperties](nQueuefamilies)
@@ -199,7 +199,7 @@
   var semaphoreInfo = VkSemaphoreCreateInfo(sType: VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO)
   checkVkResult vkCreateSemaphore(vulkan.device, addr(semaphoreInfo), nil, addr(result))
 
-proc Await*(fence: VkFence, timeout = high(uint64)): bool =
+proc await*(fence: VkFence, timeout = high(uint64)): bool =
   let waitResult = vkWaitForFences(vulkan.device, 1, addr(fence), false, timeout)
   if waitResult == VK_TIMEOUT:
     return false
@@ -253,7 +253,7 @@
     )
   checkVkResult vkCreateRenderPass(vulkan.device, addr(createInfo), nil, addr(result))
 
-proc BestMemory*(mappable: bool, filter: seq[uint32] = @[]): uint32 =
+proc bestMemory*(mappable: bool, filter: seq[uint32] = @[]): uint32 =
   var physicalProperties: VkPhysicalDeviceMemoryProperties
   vkGetPhysicalDeviceMemoryProperties(vulkan.physicalDevice, addr(physicalProperties))
 
@@ -273,7 +273,7 @@
   assert maxScore > 0, &"Unable to find memory type (mappable: {mappable}, filter: {filter})"
   return maxIndex
 
-template WithSingleUseCommandBuffer*(cmd, body: untyped): untyped =
+template withSingleUseCommandBuffer*(cmd, body: untyped): untyped =
   block:
     var
       commandBufferPool: VkCommandPool
@@ -309,11 +309,11 @@
 
     var fence = svkCreateFence()
     checkVkResult vkQueueSubmit(vulkan.graphicsQueue, 1, addr(submitInfo), fence)
-    discard fence.Await()
+    discard fence.await()
     vkDestroyFence(vulkan.device, fence, nil)
     vkDestroyCommandPool(vulkan.device, commandBufferPool, nil)
 
-template WithStagingBuffer*[T: (VkBuffer, uint64)|(VkImage, uint32, uint32)](
+template withStagingBuffer*[T: (VkBuffer, uint64)|(VkImage, uint32, uint32)](
   target: T,
   bufferSize: uint64,
   dataPointer,
@@ -322,7 +322,7 @@
   var `dataPointer` {.inject.}: pointer
   let stagingBuffer = svkCreateBuffer(bufferSize, [VK_BUFFER_USAGE_TRANSFER_SRC_BIT])
   let memoryRequirements = svkGetBufferMemoryRequirements(stagingBuffer)
-  let memoryType = BestMemory(mappable = true, filter = memoryRequirements.memoryTypes)
+  let memoryType = bestMemory(mappable = true, filter = memoryRequirements.memoryTypes)
   let stagingMemory = svkAllocateMemory(memoryRequirements.size, memoryType)
   checkVkResult vkMapMemory(
     device = vulkan.device,
@@ -345,7 +345,7 @@
   )
   checkVkResult vkFlushMappedMemoryRanges(vulkan.device, 1, addr(stagingRange))
 
-  WithSingleUseCommandBuffer(commandBuffer):
+  withSingleUseCommandBuffer(commandBuffer):
     when T is (VkBuffer, uint64):
       # first make sure memory has been made available with a memory barrier
       # we are just waiting for the vertex input stage, but I think that is fine for most buffer copies (for now at least)
--- a/semicongine/resources.nim	Mon Jul 29 16:05:09 2024 +0700
+++ b/semicongine/resources.nim	Mon Jul 29 16:50:50 2024 +0700
@@ -138,25 +138,25 @@
             yield (kind: pcDir, path: components[0])
         yielded.incl components[0]
 
-proc LoadResource*(path: string, package = DEFAULT_PACKAGE): Stream =
+proc loadResource*(path: string, package = DEFAULT_PACKAGE): Stream =
   loadResource_intern(path, package = package)
 
-proc LoadJson*(path: string, package = DEFAULT_PACKAGE): JsonNode =
+proc loadJson*(path: string, package = DEFAULT_PACKAGE): JsonNode =
   path.loadResource_intern(package = package).readAll().parseJson()
 
-proc LoadConfig*(path: string, package = DEFAULT_PACKAGE): Config =
+proc loadConfig*(path: string, package = DEFAULT_PACKAGE): Config =
   path.loadResource_intern(package = package).loadConfig(filename = path)
 
-proc Packages*(): seq[string] =
+proc packages*(): seq[string] =
   modList_intern()
 
-proc WalkResources*(dir = "", package = DEFAULT_PACKAGE): seq[string] =
+proc walkResources*(dir = "", package = DEFAULT_PACKAGE): seq[string] =
   for i in walkResources_intern(dir, package = package):
     if i.startsWith(dir):
       result.add i
   result.sort()
 
-proc List*(dir: string, package = DEFAULT_PACKAGE): seq[tuple[kind: PathComponent, path: string]] =
+proc list*(dir: string, package = DEFAULT_PACKAGE): seq[tuple[kind: PathComponent, path: string]] =
   for i in ls_intern(dir = dir, package = package):
     result.add i
   result.sort()
--- a/semicongine/storage.nim	Mon Jul 29 16:05:09 2024 +0700
+++ b/semicongine/storage.nim	Mon Jul 29 16:50:50 2024 +0700
@@ -31,23 +31,23 @@
     value TEXT NOT NULL
   )"""))
 
-proc Store*[T](storageType: StorageType, key: string, value: T, table = DEFAULT_KEY_VALUE_TABLE_NAME) =
+proc store*[T](storageType: StorageType, key: string, value: T, table = DEFAULT_KEY_VALUE_TABLE_NAME) =
   storageType.ensureExists(table)
   db[storageType].exec(sql(&"""INSERT INTO {table} VALUES(?, ?)
   ON CONFLICT(key) DO UPDATE SET value=excluded.value
   """), key, $$value)
 
-proc Load*[T](storageType: StorageType, key: string, default: T, table = DEFAULT_KEY_VALUE_TABLE_NAME): T =
+proc load*[T](storageType: StorageType, key: string, default: T, table = DEFAULT_KEY_VALUE_TABLE_NAME): T =
   storageType.ensureExists(table)
   let dbResult = db[storageType].getValue(sql(&"""SELECT value FROM {table} WHERE key = ? """), key)
   if dbResult == "":
     return default
   return to[T](dbResult)
 
-proc List*[T](storageType: StorageType, table = DEFAULT_KEY_VALUE_TABLE_NAME): seq[string] =
+proc list*[T](storageType: StorageType, table = DEFAULT_KEY_VALUE_TABLE_NAME): seq[string] =
   storageType.ensureExists(table)
   for row in db[storageType].fastRows(sql(&"""SELECT key FROM {table}""")):
     result.add row[0]
 
-proc Purge*(storageType: StorageType) =
+proc purge*(storageType: StorageType) =
   storageType.path().string.removeFile()
--- a/semicongine/text/textbox.nim	Mon Jul 29 16:05:09 2024 +0700
+++ b/semicongine/text/textbox.nim	Mon Jul 29 16:50:50 2024 +0700
@@ -14,18 +14,18 @@
     lastRenderedText: seq[Rune] # stores the last rendered text, to prevent unnecessary updates
 
     # rendering data
-    position*: GPUArray[Vec3f, VertexBuffer]
-    uv*: GPUArray[Vec2f, VertexBuffer]
-    indices*: GPUArray[uint16, IndexBuffer]
-    shaderdata*: DescriptorSet[TextboxDescriptorSet]
+    position: GPUArray[Vec3f, VertexBuffer]
+    uv: GPUArray[Vec2f, VertexBuffer]
+    indices: GPUArray[uint16, IndexBuffer]
+    shaderdata: DescriptorSet[TextboxDescriptorSet]
 
 func `$`*(textbox: Textbox): string =
   "\"" & $textbox.text[0 ..< min(textbox.text.len, 16)] & "\""
 
-proc RefreshShaderdata(textbox: Textbox) =
-  textbox.shaderdata.data.textbox.UpdateGPUBuffer(flush = true)
+proc refreshShaderdata(textbox: Textbox) =
+  textbox.shaderdata.data.textbox.updateGPUBuffer(flush = true)
 
-proc RefreshGeometry(textbox: var Textbox) =
+proc refreshGeometry(textbox: var Textbox) =
   # pre-calculate text-width
   var width = 0'f32
   var lineWidths: seq[float32]
@@ -98,8 +98,8 @@
       textbox.position.data[vertexOffset + 1] = vec3(0, 0, 0)
       textbox.position.data[vertexOffset + 2] = vec3(0, 0, 0)
       textbox.position.data[vertexOffset + 3] = vec3(0, 0, 0)
-  UpdateGPUBuffer(textbox.position)
-  UpdateGPUBuffer(textbox.uv)
+  updateGPUBuffer(textbox.position)
+  updateGPUBuffer(textbox.uv)
   textbox.lastRenderedText = textbox.processedText
 
 func text*(textbox: Textbox): seq[Rune] =
@@ -122,26 +122,26 @@
 proc `text=`*(textbox: var Textbox, newText: string) =
   `text=`(textbox, newText.toRunes)
 
-proc Color*(textbox: Textbox): Vec4f =
+proc color*(textbox: Textbox): Vec4f =
   textbox.shaderdata.data.textbox.data.color
 
-proc `Color=`*(textbox: var Textbox, value: Vec4f) =
+proc `color=`*(textbox: var Textbox, value: Vec4f) =
   if textbox.shaderdata.data.textbox.data.color != value:
     textbox.dirtyShaderdata = true
     textbox.shaderdata.data.textbox.data.color = value
 
-proc Scale*(textbox: Textbox): float32 =
+proc scale*(textbox: Textbox): float32 =
   textbox.shaderdata.data.textbox.data.scale
 
-proc `Scale=`*(textbox: var Textbox, value: float32) =
+proc `scale=`*(textbox: var Textbox, value: float32) =
   if textbox.shaderdata.data.textbox.data.scale != value:
     textbox.dirtyShaderdata = true
     textbox.shaderdata.data.textbox.data.scale = value
 
-proc Position*(textbox: Textbox): Vec3f =
+proc position*(textbox: Textbox): Vec3f =
   textbox.shaderdata.data.textbox.data.position
 
-proc `Position=`*(textbox: var Textbox, value: Vec3f) =
+proc `position=`*(textbox: var Textbox, value: Vec3f) =
   if textbox.shaderdata.data.textbox.data.position != value:
     textbox.dirtyShaderdata = true
     textbox.shaderdata.data.textbox.data.position = value
@@ -160,24 +160,24 @@
     textbox.verticalAlignment = value
     textbox.dirtyGeometry = true
 
-proc Refresh*(textbox: var Textbox) =
-  if textbox.shaderdata.data.textbox.data.aspectratio != GetAspectRatio():
+proc refresh*(textbox: var Textbox) =
+  if textbox.shaderdata.data.textbox.data.aspectratio != getAspectRatio():
     textbox.dirtyShaderdata = true
-    textbox.shaderdata.data.textbox.data.aspectratio = GetAspectRatio()
+    textbox.shaderdata.data.textbox.data.aspectratio = getAspectRatio()
 
   if textbox.dirtyShaderdata:
-    textbox.RefreshShaderdata()
+    textbox.refreshShaderdata()
     textbox.dirtyShaderdata = false
 
   if textbox.dirtyGeometry or textbox.processedText != textbox.lastRenderedText:
-    textbox.RefreshGeometry()
+    textbox.refreshGeometry()
     textbox.dirtyGeometry = false
 
-proc Render*(textbox: Textbox, commandbuffer: VkCommandBuffer, pipeline: Pipeline) =
-  WithBind(commandbuffer, (textbox.shaderdata, ), pipeline):
-    Render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = textbox)
+proc render*(textbox: Textbox, commandbuffer: VkCommandBuffer, pipeline: Pipeline) =
+  withBind(commandbuffer, (textbox.shaderdata, ), pipeline):
+    render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = textbox)
 
-proc InitTextbox*[T: string | seq[Rune]](
+proc initTextbox*[T: string | seq[Rune]](
   renderdata: var RenderData,
   descriptorSetLayout: VkDescriptorSetLayout,
   font: Font,
@@ -229,10 +229,10 @@
   else:
     `text=`(result, text)
 
-  AssignBuffers(renderdata, result, uploadData = false)
-  UploadImages(renderdata, result.shaderdata)
-  InitDescriptorSet(renderdata, descriptorSetLayout, result.shaderdata)
+  assignBuffers(renderdata, result, uploadData = false)
+  uploadImages(renderdata, result.shaderdata)
+  initDescriptorSet(renderdata, descriptorSetLayout, result.shaderdata)
 
-  result.Refresh()
-  UpdateAllGPUBuffers(result, flush = true, allFrames = true)
-  UpdateAllGPUBuffers(result.shaderdata.data, flush = true)
+  result.refresh()
+  updateAllGPUBuffers(result, flush = true, allFrames = true)
+  updateAllGPUBuffers(result.shaderdata.data, flush = true)
--- a/tests/test_gltf.nim	Mon Jul 29 16:05:09 2024 +0700
+++ b/tests/test_gltf.nim	Mon Jul 29 16:50:50 2024 +0700
@@ -8,7 +8,7 @@
 import ../semicongine
 
 proc test_gltf(time: float32) =
-  var renderdata = InitRenderData()
+  var renderdata = initRenderData()
 
   type
     ObjectData = object
@@ -90,7 +90,7 @@
       indices: GPUArray[uint32, IndexBuffer]
       material: int32
 
-  var gltfData = LoadMeshes[Mesh, Material](
+  var gltfData = loadMeshes[Mesh, Material](
     "town.glb",
     # "forest.glb",
     MeshAttributeNames(
@@ -126,19 +126,19 @@
   for mesh in mitems(gltfData.meshes):
     for primitive in mitems(mesh):
       primitive[0].color = asGPUArray(newSeqWith(primitive[0].position.data.len, vec4(1, 1, 1, 1)), VertexBuffer)
-      renderdata.AssignBuffers(primitive[0])
-  renderdata.AssignBuffers(descriptors)
+      renderdata.assignBuffers(primitive[0])
+  renderdata.assignBuffers(descriptors)
 
-  var pipeline = CreatePipeline[Shader](renderPass = vulkan.swapchain.renderPass, cullMode=[])
-  InitDescriptorSet(renderdata, pipeline.descriptorSetLayouts[0], descriptors)
+  var pipeline = createPipeline[Shader](renderPass = vulkan.swapchain.renderPass, cullMode=[])
+  initDescriptorSet(renderdata, pipeline.descriptorSetLayouts[0], descriptors)
 
-  renderdata.FlushAllMemory()
+  renderdata.flushAllMemory()
 
   proc drawNode(commandbuffer: VkCommandBuffer, pipeline: Pipeline, nodeId: int, transform: Mat4) =
     let nodeTransform = gltfData.nodes[nodeId].transform * transform
     if gltfData.nodes[nodeId].mesh >= 0:
       for primitive in gltfData.meshes[gltfData.nodes[nodeId].mesh]:
-        RenderWithPushConstant(
+        renderWithPushConstant(
           commandbuffer = commandbuffer,
           pipeline = pipeline,
           mesh = primitive[0],
@@ -151,23 +151,23 @@
   var camYaw: float32
   var camPitch: float32
 
-  discard UpdateInputs() # clear inputs, otherwise MouseMove will have stuff
+  discard updateInputs() # clear inputs, otherwise MouseMove will have stuff
 
   var start = getMonoTime()
   var lastT = getMonoTime()
-  while ((getMonoTime() - start).inMilliseconds().int / 1000) < time and UpdateInputs():
+  while ((getMonoTime() - start).inMilliseconds().int / 1000) < time and updateInputs():
     let dt = ((getMonoTime() - lastT).inNanoseconds().int / 1_000_000_000).float32
     lastT = getMonoTime()
 
-    camYaw  -= MouseMove().x / 1000
-    camPitch -= MouseMove().y / 1000
+    camYaw  -= mouseMove().x / 1000
+    camPitch -= mouseMove().y / 1000
     var
       forward = 0'f32
       sideward = 0'f32
-    if KeyIsDown(W): forward += 2
-    if KeyIsDown(S): forward -= 2
-    if KeyIsDown(A): sideward -= 2
-    if KeyIsDown(D): sideward += 2
+    if keyIsDown(W): forward += 2
+    if keyIsDown(S): forward -= 2
+    if keyIsDown(A): sideward -= 2
+    if keyIsDown(D): sideward += 2
 
     let camDir = (rotate(camYaw, Y) * rotate(camPitch, X)) * Z
     let camDirSide = camDir.cross(-Y).normalized
@@ -177,16 +177,16 @@
     let view = rotate(-camPitch, X) * rotate(-camYaw, Y) * translate(-camPos)
     descriptors.data.camera.data.view = view
     descriptors.data.camera.data.normal = view
-    descriptors.data.camera.data.projection = projection(PI / 2, aspect = GetAspectRatio(), zNear = 0.01, zFar = 20)
+    descriptors.data.camera.data.projection = projection(PI / 2, aspect = getAspectRatio(), zNear = 0.01, zFar = 20)
 
-    UpdateGPUBuffer(descriptors.data.camera)
+    updateGPUBuffer(descriptors.data.camera)
 
-    WithNextFrame(framebuffer, commandbuffer):
+    withNextFrame(framebuffer, commandbuffer):
 
-      WithRenderPass(vulkan.swapchain.renderPass, framebuffer, commandbuffer, vulkan.swapchain.width, vulkan.swapchain.height, vec4(0, 0, 0, 0)):
+      withRenderPass(vulkan.swapchain.renderPass, framebuffer, commandbuffer, vulkan.swapchain.width, vulkan.swapchain.height, vec4(0, 0, 0, 0)):
 
-        WithPipeline(commandbuffer, pipeline):
-          WithBind(commandbuffer, (descriptors, ), pipeline):
+        withPipeline(commandbuffer, pipeline):
+          withBind(commandbuffer, (descriptors, ), pipeline):
             for nodeId in gltfData.scenes[0]:
               drawNode(
                 commandbuffer = commandbuffer,
@@ -197,23 +197,23 @@
 
   # cleanup
   checkVkResult vkDeviceWaitIdle(vulkan.device)
-  DestroyPipeline(pipeline)
-  DestroyRenderData(renderdata)
+  destroyPipeline(pipeline)
+  destroyRenderData(renderdata)
 
 when isMainModule:
   var time = 1000'f32
-  InitVulkan()
+  initVulkan()
 
-  var renderpass = CreateDirectPresentationRenderPass(depthBuffer = true, samples = VK_SAMPLE_COUNT_4_BIT)
-  SetupSwapchain(renderpass = renderpass)
-  LockMouse(true)
-  ShowSystemCursor(false)
+  var renderpass = createDirectPresentationRenderPass(depthBuffer = true, samples = VK_SAMPLE_COUNT_4_BIT)
+  setupSwapchain(renderpass = renderpass)
+  lockMouse(true)
+  showSystemCursor(false)
 
   # tests a simple triangle with minimalistic shader and vertex format
   test_gltf(time)
 
   checkVkResult vkDeviceWaitIdle(vulkan.device)
   vkDestroyRenderPass(vulkan.device, renderpass.vk, nil)
-  ClearSwapchain()
+  clearSwapchain()
 
-  DestroyVulkan()
+  destroyVulkan()
--- a/tests/test_rendering.nim	Mon Jul 29 16:05:09 2024 +0700
+++ b/tests/test_rendering.nim	Mon Jul 29 16:50:50 2024 +0700
@@ -8,7 +8,7 @@
 import ../semicongine
 
 proc test_01_triangle(time: float32) =
-  var renderdata = InitRenderData()
+  var renderdata = initRenderData()
 
   type
     PushConstant = object
@@ -32,30 +32,30 @@
     position: asGPUArray([vec3(-0.5, -0.5, 0), vec3(0, 0.5, 0), vec3(0.5, -0.5, 0)], VertexBuffer),
     color: asGPUArray([vec3(0, 0, 1), vec3(0, 1, 0), vec3(1, 0, 0)], VertexBuffer),
   )
-  AssignBuffers(renderdata, mesh)
-  renderdata.FlushAllMemory()
+  assignBuffers(renderdata, mesh)
+  renderdata.flushAllMemory()
 
-  var pipeline = CreatePipeline[Shader](renderPass = vulkan.swapchain.renderPass)
+  var pipeline = createPipeline[Shader](renderPass = vulkan.swapchain.renderPass)
 
   var start = getMonoTime()
   while ((getMonoTime() - start).inMilliseconds().int / 1000) < time:
 
-    WithNextFrame(framebuffer, commandbuffer):
+    withNextFrame(framebuffer, commandbuffer):
 
-      WithRenderPass(vulkan.swapchain.renderPass, framebuffer, commandbuffer, vulkan.swapchain.width, vulkan.swapchain.height, vec4(0, 0, 0, 0)):
+      withRenderPass(vulkan.swapchain.renderPass, framebuffer, commandbuffer, vulkan.swapchain.width, vulkan.swapchain.height, vec4(0, 0, 0, 0)):
 
-        WithPipeline(commandbuffer, pipeline):
+        withPipeline(commandbuffer, pipeline):
 
-          RenderWithPushConstant(commandbuffer = commandbuffer, pipeline = pipeline, mesh = mesh, pushConstant = PushConstant(scale: 0.3 + ((getMonoTime() - start).inMilliseconds().int / 1000)))
+          renderWithPushConstant(commandbuffer = commandbuffer, pipeline = pipeline, mesh = mesh, pushConstant = PushConstant(scale: 0.3 + ((getMonoTime() - start).inMilliseconds().int / 1000)))
 
   # cleanup
   checkVkResult vkDeviceWaitIdle(vulkan.device)
-  DestroyPipeline(pipeline)
-  DestroyRenderData(renderdata)
+  destroyPipeline(pipeline)
+  destroyRenderData(renderdata)
 
 
 proc test_02_triangle_quad_instanced(time: float32) =
-  var renderdata = InitRenderData()
+  var renderdata = initRenderData()
 
   type
     SomeShader = object
@@ -100,35 +100,35 @@
     instancesB.pos.data.add vec3(rand(-0.8'f32 .. 0.8'f32), rand(0'f32 .. 0.8'f32), 0)
     instancesB.scale.data.add rand(0.1'f32 .. 0.2'f32)
 
-  AssignBuffers(renderdata, tri)
-  AssignBuffers(renderdata, quad)
-  AssignBuffers(renderdata, instancesA)
-  AssignBuffers(renderdata, instancesB)
-  renderdata.FlushAllMemory()
+  assignBuffers(renderdata, tri)
+  assignBuffers(renderdata, quad)
+  assignBuffers(renderdata, instancesA)
+  assignBuffers(renderdata, instancesB)
+  renderdata.flushAllMemory()
 
-  var pipeline = CreatePipeline[SomeShader](renderPass = vulkan.swapchain.renderPass)
+  var pipeline = createPipeline[SomeShader](renderPass = vulkan.swapchain.renderPass)
 
   var start = getMonoTime()
   while ((getMonoTime() - start).inMilliseconds().int / 1000) < time:
 
-    WithNextFrame(framebuffer, commandbuffer):
+    withNextFrame(framebuffer, commandbuffer):
 
-      WithRenderPass(vulkan.swapchain.renderPass, framebuffer, commandbuffer, vulkan.swapchain.width, vulkan.swapchain.height, vec4(0, 0, 0, 0)):
+      withRenderPass(vulkan.swapchain.renderPass, framebuffer, commandbuffer, vulkan.swapchain.width, vulkan.swapchain.height, vec4(0, 0, 0, 0)):
 
-        WithPipeline(commandbuffer, pipeline):
+        withPipeline(commandbuffer, pipeline):
 
-          Render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = quad, instances = instancesA)
-          Render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = quad, instances = instancesB)
-          Render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = tri, instances = instancesA)
-          Render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = tri, instances = instancesB)
+          render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = quad, instances = instancesA)
+          render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = quad, instances = instancesB)
+          render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = tri, instances = instancesA)
+          render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = tri, instances = instancesB)
 
   # cleanup
   checkVkResult vkDeviceWaitIdle(vulkan.device)
-  DestroyPipeline(pipeline)
-  DestroyRenderData(renderdata)
+  destroyPipeline(pipeline)
+  destroyRenderData(renderdata)
 
 proc test_03_simple_descriptorset(time: float32) =
-  var renderdata = InitRenderData()
+  var renderdata = initRenderData()
 
   type
     Material = object
@@ -179,40 +179,40 @@
     )
     )
 
-  AssignBuffers(renderdata, quad)
-  AssignBuffers(renderdata, uniforms1)
-  AssignBuffers(renderdata, uniforms2)
-  UploadImages(renderdata, uniforms1)
-  UploadImages(renderdata, uniforms2)
-  renderdata.FlushAllMemory()
+  assignBuffers(renderdata, quad)
+  assignBuffers(renderdata, uniforms1)
+  assignBuffers(renderdata, uniforms2)
+  uploadImages(renderdata, uniforms1)
+  uploadImages(renderdata, uniforms2)
+  renderdata.flushAllMemory()
 
-  var pipeline = CreatePipeline[QuadShader](renderPass = vulkan.swapchain.renderPass)
+  var pipeline = createPipeline[QuadShader](renderPass = vulkan.swapchain.renderPass)
 
-  InitDescriptorSet(renderdata, pipeline.descriptorSetLayouts[0], uniforms1)
-  InitDescriptorSet(renderdata, pipeline.descriptorSetLayouts[0], uniforms2)
+  initDescriptorSet(renderdata, pipeline.descriptorSetLayouts[0], uniforms1)
+  initDescriptorSet(renderdata, pipeline.descriptorSetLayouts[0], uniforms2)
 
   var start = getMonoTime()
   while ((getMonoTime() - start).inMilliseconds().int / 1000) < time:
 
-    WithNextFrame(framebuffer, commandbuffer):
+    withNextFrame(framebuffer, commandbuffer):
 
-      WithRenderPass(vulkan.swapchain.renderPass, framebuffer, commandbuffer, vulkan.swapchain.width, vulkan.swapchain.height, vec4(0, 0, 0, 0)):
+      withRenderPass(vulkan.swapchain.renderPass, framebuffer, commandbuffer, vulkan.swapchain.width, vulkan.swapchain.height, vec4(0, 0, 0, 0)):
 
-        WithPipeline(commandbuffer, pipeline):
+        withPipeline(commandbuffer, pipeline):
 
-          WithBind(commandbuffer, (uniforms1, ), pipeline):
-            Render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = quad)
+          withBind(commandbuffer, (uniforms1, ), pipeline):
+            render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = quad)
 
-          WithBind(commandbuffer, (uniforms2, ), pipeline):
-            Render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = quad)
+          withBind(commandbuffer, (uniforms2, ), pipeline):
+            render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = quad)
 
   # cleanup
   checkVkResult vkDeviceWaitIdle(vulkan.device)
-  DestroyPipeline(pipeline)
-  DestroyRenderData(renderdata)
+  destroyPipeline(pipeline)
+  destroyRenderData(renderdata)
 
 proc test_04_multiple_descriptorsets(time: float32) =
-  var renderdata = InitRenderData()
+  var renderdata = initRenderData()
 
   type
     RenderSettings = object
@@ -290,46 +290,46 @@
     )
   )
 
-  AssignBuffers(renderdata, quad)
-  AssignBuffers(renderdata, constset)
-  AssignBuffers(renderdata, mainset)
-  AssignBuffers(renderdata, otherset1)
-  AssignBuffers(renderdata, otherset2)
-  UploadImages(renderdata, mainset)
-  renderdata.FlushAllMemory()
+  assignBuffers(renderdata, quad)
+  assignBuffers(renderdata, constset)
+  assignBuffers(renderdata, mainset)
+  assignBuffers(renderdata, otherset1)
+  assignBuffers(renderdata, otherset2)
+  uploadImages(renderdata, mainset)
+  renderdata.flushAllMemory()
 
-  var pipeline = CreatePipeline[QuadShader](renderPass = vulkan.swapchain.renderPass)
+  var pipeline = createPipeline[QuadShader](renderPass = vulkan.swapchain.renderPass)
 
-  InitDescriptorSet(renderdata, pipeline.descriptorSetLayouts[0], constset)
-  InitDescriptorSet(renderdata, pipeline.descriptorSetLayouts[1], mainset)
-  InitDescriptorSet(renderdata, pipeline.descriptorSetLayouts[2], otherset1)
-  InitDescriptorSet(renderdata, pipeline.descriptorSetLayouts[2], otherset2)
+  initDescriptorSet(renderdata, pipeline.descriptorSetLayouts[0], constset)
+  initDescriptorSet(renderdata, pipeline.descriptorSetLayouts[1], mainset)
+  initDescriptorSet(renderdata, pipeline.descriptorSetLayouts[2], otherset1)
+  initDescriptorSet(renderdata, pipeline.descriptorSetLayouts[2], otherset2)
 
   var start = getMonoTime()
   while ((getMonoTime() - start).inMilliseconds().int / 1000) < time:
 
-    WithNextFrame(framebuffer, commandbuffer):
+    withNextFrame(framebuffer, commandbuffer):
 
-      WithRenderPass(vulkan.swapchain.renderPass, framebuffer, commandbuffer, vulkan.swapchain.width, vulkan.swapchain.height, vec4(0, 0, 0, 0)):
+      withRenderPass(vulkan.swapchain.renderPass, framebuffer, commandbuffer, vulkan.swapchain.width, vulkan.swapchain.height, vec4(0, 0, 0, 0)):
 
-        WithPipeline(commandbuffer, pipeline):
+        withPipeline(commandbuffer, pipeline):
 
-          WithBind(commandbuffer, (constset, mainset, otherset1), pipeline):
-            Render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = quad)
+          withBind(commandbuffer, (constset, mainset, otherset1), pipeline):
+            render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = quad)
 
-          WithBind(commandbuffer, (constset, mainset, otherset2), pipeline):
-            Render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = quad)
+          withBind(commandbuffer, (constset, mainset, otherset2), pipeline):
+            render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = quad)
 
     mainset.data.renderSettings.data.brigthness = ((getMonoTime() - start).inMilliseconds().int / 1000) / time
     otherset1.data.objectSettings.data.scale = 0.5 + ((getMonoTime() - start).inMilliseconds().int / 1000) / time
-    UpdateGPUBuffer(mainset.data.renderSettings)
-    UpdateGPUBuffer(otherset1.data.objectSettings)
-    renderdata.FlushAllMemory()
+    updateGPUBuffer(mainset.data.renderSettings)
+    updateGPUBuffer(otherset1.data.objectSettings)
+    renderdata.flushAllMemory()
 
   # cleanup
   checkVkResult vkDeviceWaitIdle(vulkan.device)
-  DestroyPipeline(pipeline)
-  DestroyRenderData(renderdata)
+  destroyPipeline(pipeline)
+  destroyRenderData(renderdata)
 
 proc test_05_cube(time: float32) =
   type
@@ -400,33 +400,33 @@
   colors.add newSeqWith(6, vec4(1, 1, 0, 1))
   normals.add newSeqWith(6, vec3(0, 1, 0))
 
-  var renderdata = InitRenderData()
+  var renderdata = initRenderData()
 
   var mesh = Mesh(
     position: asGPUArray(vertices, VertexBuffer),
     color: asGPUArray(colors, VertexBuffer),
     normals: asGPUArray(normals, VertexBuffer),
   )
-  AssignBuffers(renderdata, mesh)
+  assignBuffers(renderdata, mesh)
 
   var floor = Mesh(
     position: asGPUArray(quad.transf(scale(10, 10, 10) * rotate(-PI / 2, X) * translate(0, 0, 0.05)), VertexBuffer),
     color: asGPUArray(newSeqWith(6, vec4(0.1, 0.1, 0.1, 1)), VertexBuffer),
     normals: asGPUArray(newSeqWith(6, Y), VertexBuffer),
   )
-  AssignBuffers(renderdata, floor)
+  assignBuffers(renderdata, floor)
 
   var uniforms1 = asDescriptorSet(
     Uniforms(
       data: asGPUValue(UniformData(mvp: Unit4), UniformBufferMapped)
     )
   )
-  AssignBuffers(renderdata, uniforms1)
+  assignBuffers(renderdata, uniforms1)
 
-  renderdata.FlushAllMemory()
+  renderdata.flushAllMemory()
 
-  var pipeline = CreatePipeline[CubeShader](renderPass = vulkan.swapchain.renderPass)
-  InitDescriptorSet(renderdata, pipeline.descriptorSetLayouts[0], uniforms1)
+  var pipeline = createPipeline[CubeShader](renderPass = vulkan.swapchain.renderPass)
+  initDescriptorSet(renderdata, pipeline.descriptorSetLayouts[0], uniforms1)
 
   var tStart = getMonoTime()
   var t = tStart
@@ -436,21 +436,21 @@
     let tStartLoop = getMonoTime() - tStart
 
     uniforms1.data.data.data.mvp = (
-      projection(-PI / 2, GetAspectRatio(), 0.01, 100) *
+      projection(-PI / 2, getAspectRatio(), 0.01, 100) *
       translate(0, 0, 2) *
       rotate(PI / 4, X) *
       rotate(PI * 0.1 * (tStartLoop.inMicroseconds() / 1_000_000), Y)
     )
-    UpdateGPUBuffer(uniforms1.data.data, flush = true)
+    updateGPUBuffer(uniforms1.data.data, flush = true)
 
-    WithNextFrame(framebuffer, commandbuffer):
+    withNextFrame(framebuffer, commandbuffer):
 
-      WithRenderPass(vulkan.swapchain.renderPass, framebuffer, commandbuffer, vulkan.swapchain.width, vulkan.swapchain.height, vec4(0, 0, 0, 0)):
-        WithPipeline(commandbuffer, pipeline):
+      withRenderPass(vulkan.swapchain.renderPass, framebuffer, commandbuffer, vulkan.swapchain.width, vulkan.swapchain.height, vec4(0, 0, 0, 0)):
+        withPipeline(commandbuffer, pipeline):
 
-          WithBind(commandbuffer, (uniforms1, ), pipeline):
-            Render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = mesh)
-            Render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = floor)
+          withBind(commandbuffer, (uniforms1, ), pipeline):
+            render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = mesh)
+            render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = floor)
 
     let tEndLoop = getMonoTime() - tStart
     let looptime = tEndLoop - tStartLoop
@@ -460,11 +460,11 @@
 
   # cleanup
   checkVkResult vkDeviceWaitIdle(vulkan.device)
-  DestroyPipeline(pipeline)
-  DestroyRenderData(renderdata)
+  destroyPipeline(pipeline)
+  destroyRenderData(renderdata)
 
 proc test_06_different_draw_modes(time: float32) =
-  var renderdata = InitRenderData()
+  var renderdata = initRenderData()
 
   type
     Shader = object
@@ -490,38 +490,38 @@
     position: asGPUArray([vec3(-0.9, 0, 0), vec3(-0.05, -0.9, 0), vec3(0.05, -0.9, 0), vec3(0.9, 0, 0)], VertexBuffer),
     color: asGPUArray([vec3(1, 1, 0), vec3(1, 1, 0), vec3(0, 1, 0), vec3(0, 1, 0)], VertexBuffer),
   )
-  AssignBuffers(renderdata, triangle)
-  AssignBuffers(renderdata, lines)
-  renderdata.FlushAllMemory()
+  assignBuffers(renderdata, triangle)
+  assignBuffers(renderdata, lines)
+  renderdata.flushAllMemory()
 
-  var pipeline1 = CreatePipeline[Shader](renderPass = vulkan.swapchain.renderPass, polygonMode = VK_POLYGON_MODE_LINE, lineWidth = 20'f32)
-  var pipeline2 = CreatePipeline[Shader](renderPass = vulkan.swapchain.renderPass, polygonMode = VK_POLYGON_MODE_POINT)
-  var pipeline3 = CreatePipeline[Shader](renderPass = vulkan.swapchain.renderPass, topology = VK_PRIMITIVE_TOPOLOGY_LINE_LIST, lineWidth = 5)
-  var pipeline4 = CreatePipeline[Shader](renderPass = vulkan.swapchain.renderPass, topology = VK_PRIMITIVE_TOPOLOGY_POINT_LIST)
+  var pipeline1 = createPipeline[Shader](renderPass = vulkan.swapchain.renderPass, polygonMode = VK_POLYGON_MODE_LINE, lineWidth = 20'f32)
+  var pipeline2 = createPipeline[Shader](renderPass = vulkan.swapchain.renderPass, polygonMode = VK_POLYGON_MODE_POINT)
+  var pipeline3 = createPipeline[Shader](renderPass = vulkan.swapchain.renderPass, topology = VK_PRIMITIVE_TOPOLOGY_LINE_LIST, lineWidth = 5)
+  var pipeline4 = createPipeline[Shader](renderPass = vulkan.swapchain.renderPass, topology = VK_PRIMITIVE_TOPOLOGY_POINT_LIST)
 
   var start = getMonoTime()
   while ((getMonoTime() - start).inMilliseconds().int / 1000) < time:
-    WithNextFrame(framebuffer, commandbuffer):
-      WithRenderPass(vulkan.swapchain.renderPass, framebuffer, commandbuffer, vulkan.swapchain.width, vulkan.swapchain.height, vec4(0, 0, 0, 0)):
-        WithPipeline(commandbuffer, pipeline1):
-          Render(commandbuffer = commandbuffer, pipeline = pipeline1, mesh = triangle)
-        WithPipeline(commandbuffer, pipeline2):
-          Render(commandbuffer = commandbuffer, pipeline = pipeline2, mesh = triangle)
-        WithPipeline(commandbuffer, pipeline3):
-          Render(commandbuffer = commandbuffer, pipeline = pipeline3, mesh = lines)
-        WithPipeline(commandbuffer, pipeline4):
-          Render(commandbuffer = commandbuffer, pipeline = pipeline4, mesh = lines)
+    withNextFrame(framebuffer, commandbuffer):
+      withRenderPass(vulkan.swapchain.renderPass, framebuffer, commandbuffer, vulkan.swapchain.width, vulkan.swapchain.height, vec4(0, 0, 0, 0)):
+        withPipeline(commandbuffer, pipeline1):
+          render(commandbuffer = commandbuffer, pipeline = pipeline1, mesh = triangle)
+        withPipeline(commandbuffer, pipeline2):
+          render(commandbuffer = commandbuffer, pipeline = pipeline2, mesh = triangle)
+        withPipeline(commandbuffer, pipeline3):
+          render(commandbuffer = commandbuffer, pipeline = pipeline3, mesh = lines)
+        withPipeline(commandbuffer, pipeline4):
+          render(commandbuffer = commandbuffer, pipeline = pipeline4, mesh = lines)
 
   # cleanup
   checkVkResult vkDeviceWaitIdle(vulkan.device)
-  DestroyPipeline(pipeline1)
-  DestroyPipeline(pipeline2)
-  DestroyPipeline(pipeline3)
-  DestroyPipeline(pipeline4)
-  DestroyRenderData(renderdata)
+  destroyPipeline(pipeline1)
+  destroyPipeline(pipeline2)
+  destroyPipeline(pipeline3)
+  destroyPipeline(pipeline4)
+  destroyRenderData(renderdata)
 
 proc test_07_png_texture(time: float32) =
-  var renderdata = InitRenderData()
+  var renderdata = initRenderData()
 
   type
     Uniforms = object
@@ -555,41 +555,41 @@
       vec2(1, 0), vec2(1, 1), vec2(0, 1),
     ], VertexBuffer),
   )
-  AssignBuffers(renderdata, mesh)
-  renderdata.FlushAllMemory()
+  assignBuffers(renderdata, mesh)
+  renderdata.flushAllMemory()
 
-  var pipeline = CreatePipeline[Shader](renderPass = vulkan.swapchain.renderPass)
+  var pipeline = createPipeline[Shader](renderPass = vulkan.swapchain.renderPass)
   var uniforms1 = asDescriptorSet(
     Uniforms(
-      texture1: LoadImage[BGRA]("art.png"),
+      texture1: loadImage[BGRA]("art.png"),
     )
   )
-  UploadImages(renderdata, uniforms1)
-  InitDescriptorSet(renderdata, pipeline.descriptorSetLayouts[0], uniforms1)
+  uploadImages(renderdata, uniforms1)
+  initDescriptorSet(renderdata, pipeline.descriptorSetLayouts[0], uniforms1)
 
   var start = getMonoTime()
   while ((getMonoTime() - start).inMilliseconds().int / 1000) < time:
 
-    WithNextFrame(framebuffer, commandbuffer):
+    withNextFrame(framebuffer, commandbuffer):
 
-      WithRenderPass(vulkan.swapchain.renderPass, framebuffer, commandbuffer, vulkan.swapchain.width, vulkan.swapchain.height, vec4(0, 0, 0, 0)):
+      withRenderPass(vulkan.swapchain.renderPass, framebuffer, commandbuffer, vulkan.swapchain.width, vulkan.swapchain.height, vec4(0, 0, 0, 0)):
 
-        WithPipeline(commandbuffer, pipeline):
+        withPipeline(commandbuffer, pipeline):
 
-          WithBind(commandbuffer, (uniforms1, ), pipeline):
-            Render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = mesh)
+          withBind(commandbuffer, (uniforms1, ), pipeline):
+            render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = mesh)
 
   # cleanup
   checkVkResult vkDeviceWaitIdle(vulkan.device)
-  DestroyPipeline(pipeline)
-  DestroyRenderData(renderdata)
+  destroyPipeline(pipeline)
+  destroyRenderData(renderdata)
 
 proc test_08_triangle_2pass(time: float32, depthBuffer: bool, samples: VkSampleCountFlagBits) =
-  var (offscreenRP, presentRP) = CreateIndirectPresentationRenderPass(depthBuffer = depthBuffer, samples = samples)
+  var (offscreenRP, presentRP) = createIndirectPresentationRenderPass(depthBuffer = depthBuffer, samples = samples)
 
-  SetupSwapchain(renderpass = presentRP)
+  setupSwapchain(renderpass = presentRP)
 
-  var renderdata = InitRenderData()
+  var renderdata = initRenderData()
 
   type
     Uniforms = object
@@ -645,16 +645,16 @@
       frameTexture: Image[BGRA](width: vulkan.swapchain.width, height: vulkan.swapchain.height, isRenderTarget: true),
     )
   )
-  AssignBuffers(renderdata, mesh)
-  AssignBuffers(renderdata, quad)
-  UploadImages(renderdata, uniforms1)
-  renderdata.FlushAllMemory()
+  assignBuffers(renderdata, mesh)
+  assignBuffers(renderdata, quad)
+  uploadImages(renderdata, uniforms1)
+  renderdata.flushAllMemory()
 
   var
-    drawPipeline = CreatePipeline[TriangleShader](renderPass = offscreenRP)
-    presentPipeline = CreatePipeline[PresentShader](renderPass = presentRP)
+    drawPipeline = createPipeline[TriangleShader](renderPass = offscreenRP)
+    presentPipeline = createPipeline[PresentShader](renderPass = presentRP)
 
-  InitDescriptorSet(renderdata, presentPipeline.descriptorSetLayouts[0], uniforms1)
+  initDescriptorSet(renderdata, presentPipeline.descriptorSetLayouts[0], uniforms1)
 
   # create depth buffer images (will not use the one in the swapchain
   var
@@ -672,7 +672,7 @@
     let requirements = svkGetImageMemoryRequirements(depthImage)
     depthMemory = svkAllocateMemory(
       requirements.size,
-      BestMemory(mappable = false, filter = requirements.memoryTypes)
+      bestMemory(mappable = false, filter = requirements.memoryTypes)
     )
     checkVkResult vkBindImageMemory(
       vulkan.device,
@@ -702,7 +702,7 @@
     let requirements = svkGetImageMemoryRequirements(msaaImage)
     msaaMemory = svkAllocateMemory(
       requirements.size,
-      BestMemory(mappable = false, filter = requirements.memoryTypes)
+      bestMemory(mappable = false, filter = requirements.memoryTypes)
     )
     checkVkResult vkBindImageMemory(
       vulkan.device,
@@ -733,24 +733,24 @@
   var start = getMonoTime()
   while ((getMonoTime() - start).inMilliseconds().int / 1000) < time:
 
-    WithNextFrame(framebuffer, commandbuffer):
+    withNextFrame(framebuffer, commandbuffer):
 
-      WithRenderPass(offscreenRP, offscreenFB, commandbuffer, vulkan.swapchain.width, vulkan.swapchain.height, vec4(0, 0, 0, 0)):
-        WithPipeline(commandbuffer, drawPipeline):
-          Render(commandbuffer = commandbuffer, pipeline = drawPipeline, mesh = mesh)
+      withRenderPass(offscreenRP, offscreenFB, commandbuffer, vulkan.swapchain.width, vulkan.swapchain.height, vec4(0, 0, 0, 0)):
+        withPipeline(commandbuffer, drawPipeline):
+          render(commandbuffer = commandbuffer, pipeline = drawPipeline, mesh = mesh)
 
-      WithRenderPass(presentRP, framebuffer, commandbuffer, vulkan.swapchain.width, vulkan.swapchain.height, vec4(0, 0, 0, 0)):
+      withRenderPass(presentRP, framebuffer, commandbuffer, vulkan.swapchain.width, vulkan.swapchain.height, vec4(0, 0, 0, 0)):
 
-        WithPipeline(commandbuffer, presentPipeline):
+        withPipeline(commandbuffer, presentPipeline):
 
-          WithBind(commandbuffer, (uniforms1, ), presentPipeline):
-            Render(commandbuffer = commandbuffer, pipeline = presentPipeline, mesh = quad)
+          withBind(commandbuffer, (uniforms1, ), presentPipeline):
+            render(commandbuffer = commandbuffer, pipeline = presentPipeline, mesh = quad)
 
   # cleanup
   checkVkResult vkDeviceWaitIdle(vulkan.device)
-  DestroyPipeline(presentPipeline)
-  DestroyPipeline(drawPipeline)
-  DestroyRenderData(renderdata)
+  destroyPipeline(presentPipeline)
+  destroyPipeline(drawPipeline)
+  destroyRenderData(renderdata)
   if depthImage.Valid:
     vkDestroyImageView(vulkan.device, depthImageView, nil)
     vkDestroyImage(vulkan.device, depthImage, nil)
@@ -762,11 +762,11 @@
   vkDestroyRenderPass(vulkan.device, offscreenRP.vk, nil)
   vkDestroyRenderPass(vulkan.device, presentRP.vk, nil)
   vkDestroyFramebuffer(vulkan.device, offscreenFB, nil)
-  ClearSwapchain()
+  clearSwapchain()
 
 when isMainModule:
   var time = 1'f32
-  InitVulkan()
+  initVulkan()
 
   var mainRenderpass: RenderPass
   var renderPasses = [
@@ -779,8 +779,8 @@
 
   # test normal
   for i, (depthBuffer, samples) in renderPasses:
-    var renderpass = CreateDirectPresentationRenderPass(depthBuffer = depthBuffer, samples = samples)
-    SetupSwapchain(renderpass = renderpass)
+    var renderpass = createDirectPresentationRenderPass(depthBuffer = depthBuffer, samples = samples)
+    setupSwapchain(renderpass = renderpass)
 
     # tests a simple triangle with minimalistic shader and vertex format
     test_01_triangle(time)
@@ -805,10 +805,10 @@
 
     checkVkResult vkDeviceWaitIdle(vulkan.device)
     vkDestroyRenderPass(vulkan.device, renderpass.vk, nil)
-    ClearSwapchain()
+    clearSwapchain()
 
   # test multiple render passes
   for i, (depthBuffer, samples) in renderPasses:
     test_08_triangle_2pass(time, depthBuffer, samples)
 
-  DestroyVulkan()
+  destroyVulkan()
--- a/tests/test_text.nim	Mon Jul 29 16:05:09 2024 +0700
+++ b/tests/test_text.nim	Mon Jul 29 16:50:50 2024 +0700
@@ -10,12 +10,12 @@
 import ../semicongine
 
 proc test_01_static_label(time: float32) =
-  var renderdata = InitRenderData()
+  var renderdata = initRenderData()
 
-  var pipeline = CreatePipeline[DefaultFontShader](renderPass = vulkan.swapchain.renderPass)
+  var pipeline = createPipeline[DefaultFontShader](renderPass = vulkan.swapchain.renderPass)
 
   var font = loadFont("Overhaul.ttf", lineHeightPixels = 160)
-  var label1 = InitTextbox(
+  var label1 = initTextbox(
     renderdata,
     pipeline.descriptorSetLayouts[0],
     font,
@@ -26,27 +26,27 @@
 
   var start = getMonoTime()
   while ((getMonoTime() - start).inMilliseconds().int / 1000) < time:
-    label1.Refresh()
-    WithNextFrame(framebuffer, commandbuffer):
-      WithRenderPass(vulkan.swapchain.renderPass, framebuffer, commandbuffer, vulkan.swapchain.width, vulkan.swapchain.height, vec4(0, 0, 0, 0)):
-        WithPipeline(commandbuffer, pipeline):
-          Render(label1, commandbuffer, pipeline)
+    label1.refresh()
+    withNextFrame(framebuffer, commandbuffer):
+      withRenderPass(vulkan.swapchain.renderPass, framebuffer, commandbuffer, vulkan.swapchain.width, vulkan.swapchain.height, vec4(0, 0, 0, 0)):
+        withPipeline(commandbuffer, pipeline):
+          render(label1, commandbuffer, pipeline)
 
         # cleanup
   checkVkResult vkDeviceWaitIdle(vulkan.device)
-  DestroyPipeline(pipeline)
-  DestroyRenderData(renderdata)
+  destroyPipeline(pipeline)
+  destroyRenderData(renderdata)
 
 proc test_02_multiple_animated(time: float32) =
-  var renderdata = InitRenderData()
+  var renderdata = initRenderData()
 
-  var pipeline = CreatePipeline[DefaultFontShader](renderPass = vulkan.swapchain.renderPass)
+  var pipeline = createPipeline[DefaultFontShader](renderPass = vulkan.swapchain.renderPass)
 
   var font1 = loadFont("Overhaul.ttf", lineHeightPixels = 40)
   var font2 = loadFont("Overhaul.ttf", lineHeightPixels = 160)
   var font3 = loadFont("DejaVuSans.ttf", lineHeightPixels = 160)
   var labels = [
-    InitTextbox(
+    initTextbox(
       renderdata,
       pipeline.descriptorSetLayouts[0],
       font1,
@@ -55,7 +55,7 @@
       scale = 0.004,
       position = vec3(-0.3, 0.5)
     ),
-    InitTextbox(
+    initTextbox(
       renderdata,
       pipeline.descriptorSetLayouts[0],
       font2,
@@ -64,7 +64,7 @@
       scale = 0.001,
       position = vec3(0, 0)
     ),
-    InitTextbox(
+    initTextbox(
       renderdata,
       pipeline.descriptorSetLayouts[0],
       font3,
@@ -80,35 +80,35 @@
   while ((getMonoTime() - start).inMilliseconds().int / 1000) < time:
     let progress = ((getMonoTime() - start).inMilliseconds().int / 1000) / time
     for i in 0 ..< labels.len:
-      var c = labels[i].Color
+      var c = labels[i].color
       c[i] = progress
-      labels[i].Color = c
-      labels[i].Scale = labels[i].Scale * (1.0 + (i + 1).float * 0.001)
-      labels[i].Position = labels[i].Position + vec3(0.001 * (i.float - 1'f))
+      labels[i].color = c
+      labels[i].scale = labels[i].scale * (1.0 + (i + 1).float * 0.001)
+      labels[i].position = labels[i].position + vec3(0.001 * (i.float - 1'f))
       labels[i].text = $(p + i)
-      labels[i].Refresh()
+      labels[i].refresh()
     inc p
-    WithNextFrame(framebuffer, commandbuffer):
-      WithRenderPass(vulkan.swapchain.renderPass, framebuffer, commandbuffer, vulkan.swapchain.width, vulkan.swapchain.height, vec4(0, 0, 0, 0)):
-        WithPipeline(commandbuffer, pipeline):
+    withNextFrame(framebuffer, commandbuffer):
+      withRenderPass(vulkan.swapchain.renderPass, framebuffer, commandbuffer, vulkan.swapchain.width, vulkan.swapchain.height, vec4(0, 0, 0, 0)):
+        withPipeline(commandbuffer, pipeline):
           for label in labels:
-            Render(label, commandbuffer, pipeline)
+            render(label, commandbuffer, pipeline)
 
       # cleanup
   checkVkResult vkDeviceWaitIdle(vulkan.device)
-  DestroyPipeline(pipeline)
-  DestroyRenderData(renderdata)
+  destroyPipeline(pipeline)
+  destroyRenderData(renderdata)
 
 proc test_03_layouting(time: float32) =
-  var renderdata = InitRenderData()
+  var renderdata = initRenderData()
 
-  var pipeline = CreatePipeline[DefaultFontShader](renderPass = vulkan.swapchain.renderPass)
+  var pipeline = createPipeline[DefaultFontShader](renderPass = vulkan.swapchain.renderPass)
 
   var font = loadFont("DejaVuSans.ttf", lineHeightPixels = 40)
   var labels: seq[Textbox]
 
   for horizontal in HorizontalAlignment:
-    labels.add InitTextbox(
+    labels.add initTextbox(
       renderdata,
       pipeline.descriptorSetLayouts[0],
       font,
@@ -119,7 +119,7 @@
       horizontalAlignment = horizontal,
     )
   for vertical in VerticalAlignment:
-    labels.add InitTextbox(
+    labels.add initTextbox(
       renderdata,
       pipeline.descriptorSetLayouts[0],
       font,
@@ -129,7 +129,7 @@
       position = vec3(-0.35 + (vertical.float * 0.35), 0.3),
       verticalAlignment = vertical,
     )
-  labels.add InitTextbox(
+  labels.add initTextbox(
     renderdata,
     pipeline.descriptorSetLayouts[0],
     font,
@@ -149,26 +149,26 @@
   var start = getMonoTime()
   while ((getMonoTime() - start).inMilliseconds().int / 1000) < time:
     let progress = ((getMonoTime() - start).inMilliseconds().int / 1000) / time
-    WithNextFrame(framebuffer, commandbuffer):
-      WithRenderPass(vulkan.swapchain.renderPass, framebuffer, commandbuffer, vulkan.swapchain.width, vulkan.swapchain.height, vec4(0, 0, 0, 0)):
-        WithPipeline(commandbuffer, pipeline):
+    withNextFrame(framebuffer, commandbuffer):
+      withRenderPass(vulkan.swapchain.renderPass, framebuffer, commandbuffer, vulkan.swapchain.width, vulkan.swapchain.height, vec4(0, 0, 0, 0)):
+        withPipeline(commandbuffer, pipeline):
           for label in labels:
-            Render(label, commandbuffer, pipeline)
+            render(label, commandbuffer, pipeline)
 
       # cleanup
   checkVkResult vkDeviceWaitIdle(vulkan.device)
-  DestroyPipeline(pipeline)
-  DestroyRenderData(renderdata)
+  destroyPipeline(pipeline)
+  destroyRenderData(renderdata)
 
 proc test_04_lots_of_texts(time: float32) =
-  var renderdata = InitRenderData()
+  var renderdata = initRenderData()
 
-  var pipeline = CreatePipeline[DefaultFontShader](renderPass = vulkan.swapchain.renderPass)
+  var pipeline = createPipeline[DefaultFontShader](renderPass = vulkan.swapchain.renderPass)
 
   var font = loadFont("DejaVuSans.ttf", lineHeightPixels = 160)
   var labels: seq[Textbox]
   for i in 0 ..< 100:
-    labels.add InitTextbox(
+    labels.add initTextbox(
       renderdata,
       pipeline.descriptorSetLayouts[0],
       font,
@@ -177,30 +177,30 @@
       scale = rand(0.0002 .. 0.002),
       position = vec3(rand(-0.5 .. 0.5), rand(-0.5 .. 0.5), rand(-0.1 .. 0.1))
     )
-  labels = labels.sortedByIt(-it.Position.z)
+  labels = labels.sortedByIt(-it.position.z)
 
   var start = getMonoTime()
   while ((getMonoTime() - start).inMilliseconds().int / 1000) < time:
     for l in labels.mitems:
-      l.Refresh()
-    WithNextFrame(framebuffer, commandbuffer):
-      WithRenderPass(vulkan.swapchain.renderPass, framebuffer, commandbuffer, vulkan.swapchain.width, vulkan.swapchain.height, vec4(0, 0, 0, 0)):
-        WithPipeline(commandbuffer, pipeline):
+      l.refresh()
+    withNextFrame(framebuffer, commandbuffer):
+      withRenderPass(vulkan.swapchain.renderPass, framebuffer, commandbuffer, vulkan.swapchain.width, vulkan.swapchain.height, vec4(0, 0, 0, 0)):
+        withPipeline(commandbuffer, pipeline):
           for l in labels:
-            Render(l, commandbuffer, pipeline)
+            render(l, commandbuffer, pipeline)
 
         # cleanup
   checkVkResult vkDeviceWaitIdle(vulkan.device)
-  DestroyPipeline(pipeline)
-  DestroyRenderData(renderdata)
+  destroyPipeline(pipeline)
+  destroyRenderData(renderdata)
 
 when isMainModule:
   var time = 1'f32
-  InitVulkan()
+  initVulkan()
 
   for depthBuffer in [true, false]:
-    var renderpass = CreateDirectPresentationRenderPass(depthBuffer = depthBuffer)
-    SetupSwapchain(renderpass = renderpass)
+    var renderpass = createDirectPresentationRenderPass(depthBuffer = depthBuffer)
+    setupSwapchain(renderpass = renderpass)
 
     # tests a simple triangle with minimalistic shader and vertex format
     test_01_static_label(time)
@@ -210,6 +210,6 @@
 
     checkVkResult vkDeviceWaitIdle(vulkan.device)
     vkDestroyRenderPass(vulkan.device, renderpass.vk, nil)
-    ClearSwapchain()
+    clearSwapchain()
 
-  DestroyVulkan()
+  destroyVulkan()