{-# LANGUAGE BlockArguments #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE PatternSynonyms #-}
{-# LANGUAGE QuasiQuotes #-}
{-# LANGUAGE TemplateHaskell #-}
module DearImGui.OpenGL3
( openGL3Init
, openGL3Shutdown
, openGL3NewFrame
, openGL3RenderDrawData
)
where
import qualified Language.C.Inline as C
import qualified Language.C.Inline.Cpp as Cpp
import Control.Monad.IO.Class
( MonadIO, liftIO )
import DearImGui
( DrawData(..) )
C.context (Cpp.cppCtx <> C.bsCtx)
C.include "imgui.h"
C.include "GL/glew.h"
C.include "backends/imgui_impl_opengl3.h"
Cpp.using "namespace ImGui"
openGL3Init :: MonadIO m => m Bool
openGL3Init :: forall (m :: * -> *). MonadIO m => m Bool
openGL3Init = IO Bool -> m Bool
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Bool -> m Bool) -> IO Bool -> m Bool
forall a b. (a -> b) -> a -> b
$
( CBool
0 CBool -> CBool -> Bool
forall a. Eq a => a -> a -> Bool
/= ) (CBool -> Bool) -> IO CBool -> IO Bool
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IO CBool
[C.block| bool {
glewInit();
return ImGui_ImplOpenGL3_Init();
} |]
openGL3Shutdown :: MonadIO m => m ()
openGL3Shutdown :: forall (m :: * -> *). MonadIO m => m ()
openGL3Shutdown = IO () -> m ()
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO do
IO ()
[C.exp| void { ImGui_ImplOpenGL3_Shutdown(); } |]
openGL3NewFrame :: MonadIO m => m ()
openGL3NewFrame :: forall (m :: * -> *). MonadIO m => m ()
openGL3NewFrame = IO () -> m ()
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO do
IO ()
[C.exp| void { ImGui_ImplOpenGL3_NewFrame(); } |]
openGL3RenderDrawData :: MonadIO m => DrawData -> m ()
openGL3RenderDrawData :: forall (m :: * -> *). MonadIO m => DrawData -> m ()
openGL3RenderDrawData (DrawData Ptr ()
ptr) = IO () -> m ()
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO do
[C.exp| void { ImGui_ImplOpenGL3_RenderDrawData((ImDrawData*) $( void* ptr )) } |]