-- | "DearImGui.Raw.Impl.SDLRenderer2" over the @sdl2@ 'SDL.Renderer' handle.
module DearImGui.Impl.SDLRenderer2
( rendererPtr
, init
, withInit
, renderDrawData
, Raw.createDeviceObjects
, Raw.destroyDeviceObjects
, Raw.newFrame
, Raw.shutdown
, Raw.updateTexture
) where
import Prelude hiding (init)
import Control.Monad.IO.Unlift (MonadUnliftIO)
import Foreign.Marshal.Utils (toBool)
import Foreign.Ptr (Ptr, castPtr)
import SDL qualified
import SDL.Internal.Types (Renderer (..))
import DearImGui.Impl.Init (withInitOrFail)
import DearImGui.Raw.ImDrawData (ImDrawData)
import DearImGui.Raw.Impl.SDLRenderer2 (SDL_Renderer)
import DearImGui.Raw.Impl.SDLRenderer2 qualified as Raw
rendererPtr :: SDL.Renderer -> Ptr SDL_Renderer
rendererPtr (Renderer raw) = castPtr raw
init :: SDL.Renderer -> IO Bool
init renderer =
toBool <$> Raw.init (rendererPtr renderer)
-- | 'init'-or-'InitFailed' before the body, 'Raw.shutdown' after it.
withInit :: (MonadUnliftIO m) => SDL.Renderer -> m a -> m a
withInit renderer = withInitOrFail "ImGui_ImplSDLRenderer2_Init" (init renderer) Raw.shutdown
renderDrawData :: Ptr ImDrawData -> SDL.Renderer -> IO ()
renderDrawData drawData renderer =
Raw.renderDrawData drawData (rendererPtr renderer)