-- | "DearImGui.Raw.Impl.OpenGL3" over idiomatic 'Text' and 'Bool' types.
module DearImGui.Impl.OpenGL3
( init
, withInit
, createDeviceObjects
, Raw.destroyDeviceObjects
, Raw.newFrame
, Raw.renderDrawData
, Raw.shutdown
, Raw.updateTexture
) where
import Prelude hiding (init)
import Control.Monad.IO.Unlift (MonadUnliftIO)
import Data.Text (Text)
import Data.Text.Foreign qualified as Text
import Foreign.Marshal.Utils (toBool)
import Foreign.Ptr (nullPtr)
import DearImGui.Impl.Init (withInitOrFail)
import DearImGui.Raw.Impl.OpenGL3 qualified as Raw
-- | 'Nothing' lets the backend pick a GLSL version for the current GL context.
init :: Maybe Text -> IO Bool
init glslVersion =
toBool <$> case glslVersion of
Nothing ->
Raw.init nullPtr
Just version ->
Text.withCString version Raw.init
-- | 'init'-or-'InitFailed' before the body, 'Raw.shutdown' after it.
withInit :: (MonadUnliftIO m) => Maybe Text -> m a -> m a
withInit glslVersion = withInitOrFail "ImGui_ImplOpenGL3_Init" (init glslVersion) Raw.shutdown
createDeviceObjects :: IO Bool
createDeviceObjects = toBool <$> Raw.createDeviceObjects