packages feed

gpu-vulkan-middle-khr-surface-glfw-0.1.0.0: src/Gpu/Vulkan/Khr/Surface/Glfw/Middle.hs

{-# LANGUAGE ImportQualifiedPost #-}
{-# LANGUAGE BlockArguments #-}
{-# LANGUAGE MonoLocalBinds #-}
{-# OPTIONS_GHC -Wall -fno-warn-tabs #-}

module Gpu.Vulkan.Khr.Surface.Glfw.Middle where

import Foreign.Marshal
import Foreign.Storable
import Data.TypeLevel.ParMaybe qualified as TPMaybe

import Gpu.Vulkan.Exception.Middle

import qualified Graphics.UI.GLFW as GlfwB
import Gpu.Vulkan.AllocationCallbacks.Middle.Internal
	qualified as AllocationCallbacks
import qualified Gpu.Vulkan.Instance.Middle.Internal as Instance
import qualified Gpu.Vulkan.Khr.Surface.Middle.Internal as Surface

createWindowSurface :: Instance.I ->
	GlfwB.Window -> TPMaybe.M AllocationCallbacks.A mn -> IO Surface.S
createWindowSurface (Instance.I ist) win mac = Surface.S <$>
	alloca \psfc -> do
		AllocationCallbacks.mToCore mac \pac -> do
			r <- GlfwB.createWindowSurface ist win pac psfc
			throwUnlessSuccess r
		peek psfc