mirror of
				https://github.com/Drezil/dear-imgui.hs.git
				synced 2025-11-04 07:01:06 +01:00 
			
		
		
		
	Add a README
This commit is contained in:
		
							
								
								
									
										78
									
								
								examples/Readme.hs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										78
									
								
								examples/Readme.hs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,78 @@
 | 
			
		||||
-- NOTE: If this is file is edited, please also copy and paste it into
 | 
			
		||||
-- README.md.
 | 
			
		||||
 | 
			
		||||
{-# language BlockArguments #-}
 | 
			
		||||
{-# language LambdaCase #-}
 | 
			
		||||
{-# language OverloadedStrings #-}
 | 
			
		||||
 | 
			
		||||
module Main ( main ) where
 | 
			
		||||
 | 
			
		||||
import Control.Exception
 | 
			
		||||
import Control.Monad.IO.Class
 | 
			
		||||
import Control.Monad.Managed
 | 
			
		||||
import DearImGui
 | 
			
		||||
import DearImGui.OpenGL
 | 
			
		||||
import DearImGui.SDL
 | 
			
		||||
import DearImGui.SDL.OpenGL
 | 
			
		||||
import Graphics.GL
 | 
			
		||||
import SDL
 | 
			
		||||
 | 
			
		||||
main :: IO ()
 | 
			
		||||
main = do
 | 
			
		||||
  -- Initialize SDL
 | 
			
		||||
  initializeAll
 | 
			
		||||
 | 
			
		||||
  runManaged do
 | 
			
		||||
    -- Create a window using SDL. As we're using OpenGL, we need to enable OpenGL too.
 | 
			
		||||
    w <- do
 | 
			
		||||
      let title = "Hello, Dear ImGui!"
 | 
			
		||||
      let config = defaultWindow { windowGraphicsContext = OpenGLContext defaultOpenGL }
 | 
			
		||||
      managed $ bracket (createWindow title config) destroyWindow
 | 
			
		||||
 | 
			
		||||
    -- Create an OpenGL context
 | 
			
		||||
    glContext <- managed $ bracket (glCreateContext w) glDeleteContext
 | 
			
		||||
 | 
			
		||||
    -- Create an ImGui context
 | 
			
		||||
    _ <- managed $ bracket createContext destroyContext
 | 
			
		||||
 | 
			
		||||
    -- Initialize ImGui's SDL2 backend
 | 
			
		||||
    _ <- managed_ $ bracket_ (sdl2InitForOpenGL w glContext) sdl2Shutdown
 | 
			
		||||
 | 
			
		||||
    -- Initialize ImGui's OpenGL backend
 | 
			
		||||
    _ <- managed_ $ bracket_ openGL2Init openGL2Shutdown
 | 
			
		||||
 | 
			
		||||
    liftIO $ mainLoop w
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
mainLoop :: Window -> IO ()
 | 
			
		||||
mainLoop w = do
 | 
			
		||||
  -- Process the event loop
 | 
			
		||||
  untilNothingM pollEventWithImGui
 | 
			
		||||
 | 
			
		||||
  -- Tell ImGui we're starting a new frame
 | 
			
		||||
  openGL2NewFrame
 | 
			
		||||
  sdl2NewFrame w
 | 
			
		||||
  newFrame
 | 
			
		||||
 | 
			
		||||
  -- Build the GUI
 | 
			
		||||
  bracket_ (begin "Hello, ImGui!") end do
 | 
			
		||||
    -- Add a text widget
 | 
			
		||||
    text "Hello, ImGui!"
 | 
			
		||||
 | 
			
		||||
    -- Add a button widget, and call 'putStrLn' when it's clicked
 | 
			
		||||
    button "Clickety Click" >>= \case
 | 
			
		||||
      False -> return ()
 | 
			
		||||
      True  -> putStrLn "Ow!"
 | 
			
		||||
 | 
			
		||||
  -- Render
 | 
			
		||||
  glClear GL_COLOR_BUFFER_BIT
 | 
			
		||||
 | 
			
		||||
  render
 | 
			
		||||
  openGL2RenderDrawData =<< getDrawData
 | 
			
		||||
 | 
			
		||||
  glSwapWindow w
 | 
			
		||||
 | 
			
		||||
  mainLoop w
 | 
			
		||||
 | 
			
		||||
  where
 | 
			
		||||
    untilNothingM m = m >>= maybe (return ()) (\_ -> untilNothingM m)
 | 
			
		||||
		Reference in New Issue
	
	Block a user