packages feed

dear-imgui-impl-sdlrenderer3-1.0.0: src/DearImGui/Impl/SDLRenderer3.hs

module DearImGui.Impl.SDLRenderer3
  ( rendererPtr
  , init
  , withInit
  , renderDrawData
  , Raw.ImGui_ImplSDLRenderer3_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 Foreign.Marshal.Utils (toBool)
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.SDLRenderer3 (SDL_Renderer)
import DearImGui.Raw.Impl.SDLRenderer3 qualified as Raw

rendererPtr :: Ptr SDL3.SDL_Renderer -> Ptr SDL_Renderer
rendererPtr = castPtr

init :: Ptr SDL3.SDL_Renderer -> IO Bool
init renderer =
  toBool <$> Raw.init (rendererPtr renderer)

withInit :: (MonadUnliftIO m) => Ptr SDL3.SDL_Renderer -> m a -> m a
withInit renderer = withInitOrFail "ImGui_ImplSDLRenderer3_Init" (init renderer) Raw.shutdown

renderDrawData :: Ptr ImDrawData -> Ptr SDL3.SDL_Renderer -> IO ()
renderDrawData drawData renderer =
  Raw.renderDrawData drawData (rendererPtr renderer)