packages feed

dear-imgui-impl-sdlrenderer2-1.0.0: src/DearImGui/Impl/SDLRenderer2.hs

-- | "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)