dear-imgui.hs/src/DearImGui/OpenGL2.hs
2021-02-06 14:44:58 +00:00

66 lines
1.5 KiB
Haskell

{-# LANGUAGE BlockArguments #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE PatternSynonyms #-}
{-# LANGUAGE QuasiQuotes #-}
{-# LANGUAGE TemplateHaskell #-}
{-|
Module: DearImGui.OpenGL
OpenGL 2 backend for Dear ImGui.
-}
module DearImGui.OpenGL2
( openGL2Init
, openGL2Shutdown
, openGL2NewFrame
, openGL2RenderDrawData
)
where
-- inline-c
import qualified Language.C.Inline as C
-- inline-c-cpp
import qualified Language.C.Inline.Cpp as Cpp
-- transformers
import Control.Monad.IO.Class
( MonadIO, liftIO )
-- DearImGui
import DearImGui
( DrawData(..) )
C.context (Cpp.cppCtx <> C.bsCtx)
C.include "imgui.h"
C.include "backends/imgui_impl_opengl2.h"
Cpp.using "namespace ImGui"
-- | Wraps @ImGui_ImplOpenGL2_Init@.
openGL2Init :: MonadIO m => m Bool
openGL2Init = liftIO do
( 0 /= ) <$> [C.exp| bool { ImGui_ImplOpenGL2_Init() } |]
-- | Wraps @ImGui_ImplOpenGL2_Shutdown@.
openGL2Shutdown :: MonadIO m => m ()
openGL2Shutdown = liftIO do
[C.exp| void { ImGui_ImplOpenGL2_Shutdown(); } |]
-- | Wraps @ImGui_ImplOpenGL2_NewFrame@.
openGL2NewFrame :: MonadIO m => m ()
openGL2NewFrame = liftIO do
[C.exp| void { ImGui_ImplOpenGL2_NewFrame(); } |]
-- | Wraps @ImGui_ImplOpenGL2_RenderDrawData@.
openGL2RenderDrawData :: MonadIO m => DrawData -> m ()
openGL2RenderDrawData (DrawData ptr) = liftIO do
[C.exp| void { ImGui_ImplOpenGL2_RenderDrawData((ImDrawData*) $( void* ptr )) } |]