module Graphics.UI.Gtk.OpenGL.General (
initGL,
glQueryExtension,
glQueryExtensionForDisplay,
glQueryGLExtension,
glQueryVersion,
glQueryVersionForDisplay,
) where
import Control.Monad (liftM)
import System.Environment (getProgName, getArgs)
import System.Glib.FFI
import System.Glib.UTFString
import System.Glib.GObject (makeNewGObject)
import Graphics.Rendering.Pango.Types
import Graphics.Rendering.Pango.BasicTypes
import Graphics.UI.Gtk.OpenGL.Types
initGL :: IO [String]
initGL = do
prog <- getProgName
args <- getArgs
let allArgs = (prog:args)
withMany withUTFString allArgs $ \addrs ->
withArrayLen addrs $ \argc argv ->
with argv $ \argvp ->
with argc $ \argcp -> do
res <- gtk_gl_init_check (castPtr argcp) (castPtr argvp)
if (toBool res) then do
argc' <- peek argcp
argv' <- peek argvp
_:addrs' <- peekArray argc' argv'
mapM peekUTFString addrs'
else error "Cannot initialize OpenGL."
glQueryExtension :: IO Bool
glQueryExtension =
liftM toBool $
gdk_gl_query_extension
glQueryExtensionForDisplay :: Display -> IO Bool
glQueryExtensionForDisplay display =
liftM toBool $
(\(Display arg1) -> withForeignPtr arg1 $ \argPtr1 ->gdk_gl_query_extension_for_display argPtr1)
display
glQueryGLExtension :: String -> IO Bool
glQueryGLExtension extension =
liftM toBool $
withUTFString extension $ \extensionPtr ->
gdk_gl_query_gl_extension
extensionPtr
glQueryVersion :: IO (Maybe (Int, Int))
glQueryVersion =
alloca $ \majorPtr ->
alloca $ \minorPtr ->
gdk_gl_query_version
majorPtr
minorPtr
>>= \ok ->
if toBool ok
then peek majorPtr >>= \major ->
peek minorPtr >>= \minor ->
return (Just (fromIntegral major, fromIntegral minor))
else return Nothing
glQueryVersionForDisplay :: Display -> IO (Maybe (Int, Int))
glQueryVersionForDisplay display =
alloca $ \majorPtr ->
alloca $ \minorPtr ->
(\(Display arg1) arg2 arg3 -> withForeignPtr arg1 $ \argPtr1 ->gdk_gl_query_version_for_display argPtr1 arg2 arg3)
display
majorPtr
minorPtr
>>= \ok ->
if toBool ok
then peek majorPtr >>= \major ->
peek minorPtr >>= \minor ->
return (Just (fromIntegral major, fromIntegral minor))
else return Nothing
foreign import ccall safe "gtk_gl_init_check"
gtk_gl_init_check :: ((Ptr CInt) -> ((Ptr (Ptr (Ptr CChar))) -> (IO CInt)))
foreign import ccall safe "gdk_gl_query_extension"
gdk_gl_query_extension :: (IO CInt)
foreign import ccall safe "gdk_gl_query_extension_for_display"
gdk_gl_query_extension_for_display :: ((Ptr Display) -> (IO CInt))
foreign import ccall safe "gdk_gl_query_gl_extension"
gdk_gl_query_gl_extension :: ((Ptr CChar) -> (IO CInt))
foreign import ccall safe "gdk_gl_query_version"
gdk_gl_query_version :: ((Ptr CInt) -> ((Ptr CInt) -> (IO CInt)))
foreign import ccall safe "gdk_gl_query_version_for_display"
gdk_gl_query_version_for_display :: ((Ptr Display) -> ((Ptr CInt) -> ((Ptr CInt) -> (IO CInt))))