Skip to content

Commit

Permalink
feat: split Raylib.Internal.Native
Browse files Browse the repository at this point in the history
  • Loading branch information
Anut-py committed Feb 17, 2024
1 parent ffc5d84 commit 9cd6c1c
Show file tree
Hide file tree
Showing 13 changed files with 895 additions and 1,553 deletions.
4 changes: 2 additions & 2 deletions ROADMAP.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,13 @@ Items which have not yet been worked on. Feel free to work on one of these.
## In progress

- Add web build support \[[#4](https://github.com/Anut-py/h-raylib/issues/4)\]
- Move Raylib.Internal.Native functions into the modules where they are called
- Use Template Haskell to clean up boilerplate

## Implemented

Items which have been completed but not published to hackage.

- Move Raylib.Internal.Native functions into the modules where they are called
- Use Template Haskell to clean up boilerplate
- Split Raylib.Types into multiple modules
- Bind `raygui` \[[#34](https://github.com/Anut-py/h-raylib/issues/34)\]

Expand Down
1 change: 0 additions & 1 deletion h-raylib.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -210,7 +210,6 @@ library
other-modules:
Raylib.Internal
Raylib.Internal.Foreign
Raylib.Internal.Native
Raylib.Internal.TH
Raylib.Internal.Web.Native
Raylib.Internal.Web.Processable
Expand Down
397 changes: 207 additions & 190 deletions src/Raylib/Core.hs

Large diffs are not rendered by default.

149 changes: 81 additions & 68 deletions src/Raylib/Core/Audio.hs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
{-# OPTIONS -Wall #-}
{-# LANGUAGE ForeignFunctionInterface #-}
{-# LANGUAGE TemplateHaskell #-}

-- | Bindings to @raudio@
module Raylib.Core.Audio
Expand Down Expand Up @@ -70,82 +71,24 @@ module Raylib.Core.Audio
)
where

import Foreign
( Ptr,
Storable (peek, sizeOf),
castPtr,
toBool,
import Foreign (Ptr, Storable (peek, sizeOf), castPtr, toBool)
import Foreign.C
( CBool (..),
CFloat (..),
CInt (..),
CString,
CUChar (..),
CUInt (..),
withCString,
)
import Foreign.C (CUChar, CUInt (..), withCString)
import Raylib.Internal (WindowResources, addAudioBuffer, addAudioBufferAlias, addCtxData, unloadAudioBuffers, unloadCtxData, unloadSingleAudioBuffer, unloadSingleAudioBufferAlias, unloadSingleCtxDataPtr)
import Raylib.Internal.Foreign
( pop,
popCArray,
withFreeable,
withFreeableArrayLen,
)
import Raylib.Internal.Native
( c'attachAudioMixedProcessor,
c'attachAudioStreamProcessor,
c'closeAudioDevice,
c'detachAudioMixedProcessor,
c'detachAudioStreamProcessor,
c'exportWave,
c'exportWaveAsCode,
c'getMasterVolume,
c'getMusicTimeLength,
c'getMusicTimePlayed,
c'initAudioDevice,
c'isAudioDeviceReady,
c'isAudioStreamPlaying,
c'isAudioStreamProcessed,
c'isAudioStreamReady,
c'isMusicReady,
c'isMusicStreamPlaying,
c'isSoundPlaying,
c'isSoundReady,
c'isWaveReady,
c'loadAudioStream,
c'loadMusicStream,
c'loadMusicStreamFromMemory,
c'loadSound,
c'loadSoundAlias,
c'loadSoundFromWave,
c'loadWave,
c'loadWaveFromMemory,
c'loadWaveSamples,
c'pauseAudioStream,
c'pauseMusicStream,
c'pauseSound,
c'playAudioStream,
c'playMusicStream,
c'playSound,
c'resumeAudioStream,
c'resumeMusicStream,
c'resumeSound,
c'seekMusicStream,
c'setAudioStreamBufferSizeDefault,
c'setAudioStreamCallback,
c'setAudioStreamPan,
c'setAudioStreamPitch,
c'setAudioStreamVolume,
c'setMasterVolume,
c'setMusicPan,
c'setMusicPitch,
c'setMusicVolume,
c'setSoundPan,
c'setSoundPitch,
c'setSoundVolume,
c'stopAudioStream,
c'stopMusicStream,
c'stopSound,
c'updateAudioStream,
c'updateMusicStream,
c'updateSound,
c'waveCopy,
c'waveCrop,
c'waveFormat,
)
import Raylib.Internal.TH (genNative)
import Raylib.Types
( AudioCallback,
AudioStream (audioStream'buffer),
Expand All @@ -155,6 +98,76 @@ import Raylib.Types
Wave (wave'channels, wave'frameCount),
)

$( genNative
[ ("c'initAudioDevice", "InitAudioDevice_", "rl_bindings.h", [t|IO ()|]),
("c'closeAudioDevice", "CloseAudioDevice_", "rl_bindings.h", [t|IO ()|]),
("c'isAudioDeviceReady", "IsAudioDeviceReady_", "rl_bindings.h", [t|IO CBool|]),
("c'setMasterVolume", "SetMasterVolume_", "rl_bindings.h", [t|CFloat -> IO ()|]),
("c'getMasterVolume", "GetMasterVolume_", "rl_bindings.h", [t|IO CFloat|]),
("c'loadWave", "LoadWave_", "rl_bindings.h", [t|CString -> IO (Ptr Wave)|]),
("c'loadWaveFromMemory", "LoadWaveFromMemory_", "rl_bindings.h", [t|CString -> Ptr CUChar -> CInt -> IO (Ptr Wave)|]),
("c'loadSound", "LoadSound_", "rl_bindings.h", [t|CString -> IO (Ptr Sound)|]),
("c'loadSoundFromWave", "LoadSoundFromWave_", "rl_bindings.h", [t|Ptr Wave -> IO (Ptr Sound)|]),
("c'loadSoundAlias", "LoadSoundAlias_", "rl_bindings.h", [t|Ptr Sound -> IO (Ptr Sound)|]),
("c'updateSound", "UpdateSound_", "rl_bindings.h", [t|Ptr Sound -> Ptr () -> CInt -> IO ()|]),
("c'isWaveReady", "IsWaveReady_", "rl_bindings.h", [t|Ptr Wave -> IO CBool|]),
-- ("c'unloadWave", "UnloadWave_", "rl_bindings.h", [t|Ptr Wave -> IO ()|]),
("c'isSoundReady", "IsSoundReady_", "rl_bindings.h", [t|Ptr Sound -> IO CBool|]),
-- ("c'unloadSound", "UnloadSound_", "rl_bindings.h", [t|Ptr Sound -> IO ()|]),
-- ("c'unloadSoundAlias", "UnloadSoundAlias_", "rl_bindings.h", [t|Ptr Sound -> IO ()|]),
("c'exportWave", "ExportWave_", "rl_bindings.h", [t|Ptr Wave -> CString -> IO CBool|]),
("c'exportWaveAsCode", "ExportWaveAsCode_", "rl_bindings.h", [t|Ptr Wave -> CString -> IO CBool|]),
("c'playSound", "PlaySound_", "rl_bindings.h", [t|Ptr Sound -> IO ()|]),
("c'stopSound", "StopSound_", "rl_bindings.h", [t|Ptr Sound -> IO ()|]),
("c'pauseSound", "PauseSound_", "rl_bindings.h", [t|Ptr Sound -> IO ()|]),
("c'resumeSound", "ResumeSound_", "rl_bindings.h", [t|Ptr Sound -> IO ()|]),
("c'isSoundPlaying", "IsSoundPlaying_", "rl_bindings.h", [t|Ptr Sound -> IO CBool|]),
("c'setSoundVolume", "SetSoundVolume_", "rl_bindings.h", [t|Ptr Sound -> CFloat -> IO ()|]),
("c'setSoundPitch", "SetSoundPitch_", "rl_bindings.h", [t|Ptr Sound -> CFloat -> IO ()|]),
("c'setSoundPan", "SetSoundPan_", "rl_bindings.h", [t|Ptr Sound -> CFloat -> IO ()|]),
("c'waveCopy", "WaveCopy_", "rl_bindings.h", [t|Ptr Wave -> IO (Ptr Wave)|]),
("c'waveCrop", "WaveCrop_", "rl_bindings.h", [t|Ptr Wave -> CInt -> CInt -> IO ()|]),
("c'waveFormat", "WaveFormat_", "rl_bindings.h", [t|Ptr Wave -> CInt -> CInt -> CInt -> IO ()|]),
("c'loadWaveSamples", "LoadWaveSamples_", "rl_bindings.h", [t|Ptr Wave -> IO (Ptr CFloat)|]),
-- ("c'unloadWaveSamples", "UnloadWaveSamples_", "rl_bindings.h", [t|Ptr CFloat -> IO ()|]),
("c'loadMusicStream", "LoadMusicStream_", "rl_bindings.h", [t|CString -> IO (Ptr Music)|]),
("c'loadMusicStreamFromMemory", "LoadMusicStreamFromMemory_", "rl_bindings.h", [t|CString -> Ptr CUChar -> CInt -> IO (Ptr Music)|]),
("c'isMusicReady", "IsMusicReady_", "rl_bindings.h", [t|Ptr Music -> IO CBool|]),
-- ("c'unloadMusicStream", "UnloadMusicStream_", "rl_bindings.h", [t|Ptr Music -> IO ()|]),
("c'playMusicStream", "PlayMusicStream_", "rl_bindings.h", [t|Ptr Music -> IO ()|]),
("c'isMusicStreamPlaying", "IsMusicStreamPlaying_", "rl_bindings.h", [t|Ptr Music -> IO CBool|]),
("c'updateMusicStream", "UpdateMusicStream_", "rl_bindings.h", [t|Ptr Music -> IO ()|]),
("c'stopMusicStream", "StopMusicStream_", "rl_bindings.h", [t|Ptr Music -> IO ()|]),
("c'pauseMusicStream", "PauseMusicStream_", "rl_bindings.h", [t|Ptr Music -> IO ()|]),
("c'resumeMusicStream", "ResumeMusicStream_", "rl_bindings.h", [t|Ptr Music -> IO ()|]),
("c'seekMusicStream", "SeekMusicStream_", "rl_bindings.h", [t|Ptr Music -> CFloat -> IO ()|]),
("c'setMusicVolume", "SetMusicVolume_", "rl_bindings.h", [t|Ptr Music -> CFloat -> IO ()|]),
("c'setMusicPitch", "SetMusicPitch_", "rl_bindings.h", [t|Ptr Music -> CFloat -> IO ()|]),
("c'setMusicPan", "SetMusicPan_", "rl_bindings.h", [t|Ptr Music -> CFloat -> IO ()|]),
("c'getMusicTimeLength", "GetMusicTimeLength_", "rl_bindings.h", [t|Ptr Music -> IO CFloat|]),
("c'getMusicTimePlayed", "GetMusicTimePlayed_", "rl_bindings.h", [t|Ptr Music -> IO CFloat|]),
("c'loadAudioStream", "LoadAudioStream_", "rl_bindings.h", [t|CUInt -> CUInt -> CUInt -> IO (Ptr AudioStream)|]),
("c'isAudioStreamReady", "IsAudioStreamReady_", "rl_bindings.h", [t|Ptr AudioStream -> IO CBool|]),
-- ("c'unloadAudioStream", "UnloadAudioStream_", "rl_bindings.h", [t|Ptr AudioStream -> IO ()|]),
("c'updateAudioStream", "UpdateAudioStream_", "rl_bindings.h", [t|Ptr AudioStream -> Ptr () -> CInt -> IO ()|]),
("c'isAudioStreamProcessed", "IsAudioStreamProcessed_", "rl_bindings.h", [t|Ptr AudioStream -> IO CBool|]),
("c'playAudioStream", "PlayAudioStream_", "rl_bindings.h", [t|Ptr AudioStream -> IO ()|]),
("c'pauseAudioStream", "PauseAudioStream_", "rl_bindings.h", [t|Ptr AudioStream -> IO ()|]),
("c'resumeAudioStream", "ResumeAudioStream_", "rl_bindings.h", [t|Ptr AudioStream -> IO ()|]),
("c'isAudioStreamPlaying", "IsAudioStreamPlaying_", "rl_bindings.h", [t|Ptr AudioStream -> IO CBool|]),
("c'stopAudioStream", "StopAudioStream_", "rl_bindings.h", [t|Ptr AudioStream -> IO ()|]),
("c'setAudioStreamVolume", "SetAudioStreamVolume_", "rl_bindings.h", [t|Ptr AudioStream -> CFloat -> IO ()|]),
("c'setAudioStreamPitch", "SetAudioStreamPitch_", "rl_bindings.h", [t|Ptr AudioStream -> CFloat -> IO ()|]),
("c'setAudioStreamPan", "SetAudioStreamPan_", "rl_bindings.h", [t|Ptr AudioStream -> CFloat -> IO ()|]),
("c'setAudioStreamBufferSizeDefault", "SetAudioStreamBufferSizeDefault_", "rl_bindings.h", [t|CInt -> IO ()|]),
("c'setAudioStreamCallback", "SetAudioStreamCallback_", "rl_bindings.h", [t|Ptr AudioStream -> C'AudioCallback -> IO ()|]),
("c'attachAudioStreamProcessor", "AttachAudioStreamProcessor_", "rl_bindings.h", [t|Ptr AudioStream -> C'AudioCallback -> IO ()|]),
("c'detachAudioStreamProcessor", "DetachAudioStreamProcessor_", "rl_bindings.h", [t|Ptr AudioStream -> C'AudioCallback -> IO ()|]),
("c'attachAudioMixedProcessor", "AttachAudioMixedProcessor_", "rl_bindings.h", [t|C'AudioCallback -> IO ()|]),
("c'detachAudioMixedProcessor", "DetachAudioMixedProcessor_", "rl_bindings.h", [t|C'AudioCallback -> IO ()|])
]
)

initAudioDevice :: IO ()
initAudioDevice = c'initAudioDevice

Expand Down
12 changes: 10 additions & 2 deletions src/Raylib/Core/Camera.hs
Original file line number Diff line number Diff line change
@@ -1,14 +1,22 @@
{-# OPTIONS -Wall #-}
{-# LANGUAGE TemplateHaskell #-}

-- | Bindings to @rcamera@ (raylib.h)
module Raylib.Core.Camera (updateCamera, updateCameraPro) where

import Foreign (Storable (peek))
import Foreign (Ptr, Storable (peek))
import Foreign.C (CFloat (..), CInt (..))
import GHC.IO (unsafePerformIO)
import Raylib.Internal.Foreign (withFreeable)
import Raylib.Internal.Native (c'updateCamera, c'updateCameraPro)
import Raylib.Internal.TH (genNative)
import Raylib.Types (Camera3D, CameraMode, Vector3)

$( genNative
[ ("c'updateCamera", "UpdateCamera_", "rl_bindings.h", [t|Ptr Camera3D -> CInt -> IO ()|]),
("c'updateCameraPro", "UpdateCameraPro_", "rl_bindings.h", [t|Ptr Camera3D -> Ptr Vector3 -> Ptr Vector3 -> CFloat -> IO ()|])
]
)

updateCamera :: Camera3D -> CameraMode -> IO Camera3D
updateCamera camera mode =
withFreeable
Expand Down
Loading

0 comments on commit 9cd6c1c

Please sign in to comment.