module DearImGui.Impl.SDLGPU3
( InitArgs (..)
, init
, withInit
, prepareDrawData
, renderDrawData
, Raw.ImGui_ImplSDLGPU3_RenderState (..)
, Raw.getRenderState
, Raw.createDeviceObjects
, Raw.destroyDeviceObjects
, Raw.newFrame
, Raw.shutdown
, Raw.updateTexture
) where
import Prelude hiding (init)
import Control.Monad.IO.Unlift (MonadUnliftIO)
import Data.Coerce (coerce)
import Foreign.Marshal.Utils (toBool, with)
import Foreign.Ptr (Ptr, castPtr)
import SDL3.Sys qualified as SDL3
import DearImGui.Impl.Init (withInitOrFail)
import DearImGui.Raw.ImDrawData (ImDrawData)
import DearImGui.Raw.Impl.SDLGPU3 (ImGui_ImplSDLGPU3_InitInfo (..))
import DearImGui.Raw.Impl.SDLGPU3 qualified as Raw
data InitArgs = InitArgs
{ device :: Ptr SDL3.SDL_GPUDevice
, colorTargetFormat :: SDL3.SDL_GPUTextureFormat
, msaaSamples :: SDL3.SDL_GPUSampleCount
, swapchainComposition :: SDL3.SDL_GPUSwapchainComposition
, presentMode :: SDL3.SDL_GPUPresentMode
}
init :: InitArgs -> IO Bool
init args =
toBool <$> with (initInfo args) Raw.init
withInit :: (MonadUnliftIO m) => InitArgs -> m a -> m a
withInit args = withInitOrFail "ImGui_ImplSDLGPU3_Init" (init args) Raw.shutdown
prepareDrawData :: Ptr ImDrawData -> Ptr SDL3.SDL_GPUCommandBuffer -> IO ()
prepareDrawData drawData commandBuffer =
Raw.prepareDrawData drawData (castPtr commandBuffer)
renderDrawData
:: Ptr ImDrawData
-> Ptr SDL3.SDL_GPUCommandBuffer
-> Ptr SDL3.SDL_GPURenderPass
-> Ptr SDL3.SDL_GPUGraphicsPipeline
-> IO ()
renderDrawData drawData commandBuffer renderPass pipeline =
Raw.renderDrawData drawData (castPtr commandBuffer) (castPtr renderPass) (castPtr pipeline)
initInfo :: InitArgs -> ImGui_ImplSDLGPU3_InitInfo
initInfo args =
ImGui_ImplSDLGPU3_InitInfo
{ device = castPtr args.device
, colorTargetFormat = coerce args.colorTargetFormat
, mSAASamples = coerce args.msaaSamples
, swapchainComposition = coerce args.swapchainComposition
, presentMode = coerce args.presentMode
}