packages feed

keid-core-0.1.8.0: src/Resource/Vulkan/Named.hs

module Resource.Vulkan.Named
  ( object
  , objectOrigin
  ) where

import RIO

import GHC.Stack (callStack, getCallStack, srcLocModule, withFrozenCallStack)
import RIO.List qualified as List
import Vulkan.Core10 qualified as Vk
import Vulkan.Utils.Debug qualified as Debug

import Engine.Vulkan.Types (MonadVulkan, getDevice)

object
  :: ( MonadVulkan env m
    , Vk.HasObjectType a
    )
  => a
  -> Text
  -> m ()
object o name = do
  device <- asks getDevice
  Debug.nameObject device o $
    encodeUtf8 name

objectOrigin
  :: ( MonadVulkan env m
    , Vk.HasObjectType a
    , HasCallStack
    )
  => a
  -> m ()
objectOrigin o =
  withFrozenCallStack $
    object o $
      fromString . List.intercalate "|" $
        map (srcLocModule . snd) (getCallStack callStack)