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 :: forall env (m :: * -> *) a. (MonadVulkan env m, HasObjectType a) => a -> Text -> m () object a o Text name = do Device device <- forall r (m :: * -> *) a. MonadReader r m => (r -> a) -> m a asks forall a. HasVulkan a => a -> Device getDevice forall a (m :: * -> *). (HasObjectType a, MonadIO m) => Device -> a -> ByteString -> m () Debug.nameObject Device device a o forall a b. (a -> b) -> a -> b $ Text -> ByteString encodeUtf8 Text name objectOrigin :: ( MonadVulkan env m , Vk.HasObjectType a , HasCallStack ) => a -> m () objectOrigin :: forall env (m :: * -> *) a. (MonadVulkan env m, HasObjectType a, HasCallStack) => a -> m () objectOrigin a o = forall a. HasCallStack => (HasCallStack => a) -> a withFrozenCallStack forall a b. (a -> b) -> a -> b $ forall env (m :: * -> *) a. (MonadVulkan env m, HasObjectType a) => a -> Text -> m () object a o forall a b. (a -> b) -> a -> b $ forall a. IsString a => [Char] -> a fromString forall b c a. (b -> c) -> (a -> b) -> a -> c . forall a. [a] -> [[a]] -> [a] List.intercalate [Char] "|" forall a b. (a -> b) -> a -> b $ forall a b. (a -> b) -> [a] -> [b] map (SrcLoc -> [Char] srcLocModule forall b c a. (b -> c) -> (a -> b) -> a -> c . forall a b. (a, b) -> b snd) (CallStack -> [([Char], SrcLoc)] getCallStack HasCallStack => CallStack callStack)