packages feed

dear-imgui-impl-opengl3-1.0.0: src/DearImGui/Impl/OpenGL3.hs

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