module Sound.OpenAL.AL.QueryUtils (
GetPName(..), marshalGetPName,
StringName(..), getString
) where
import Foreign.Ptr ( Ptr )
import Sound.OpenAL.AL.BasicTypes ( ALchar, ALenum )
import Sound.OpenAL.AL.String ( peekALString )
import Sound.OpenAL.Constants (
al_DISTANCE_MODEL, al_DOPPLER_FACTOR, al_SPEED_OF_SOUND, al_POSITION,
al_VELOCITY, al_GAIN, al_ORIENTATION, al_SOURCE_RELATIVE, al_SOURCE_TYPE,
al_LOOPING, al_BUFFER, al_BUFFERS_QUEUED, al_BUFFERS_PROCESSED, al_MIN_GAIN,
al_MAX_GAIN, al_REFERENCE_DISTANCE, al_ROLLOFF_FACTOR, al_MAX_DISTANCE,
al_PITCH, al_DIRECTION, al_CONE_INNER_ANGLE, al_CONE_OUTER_ANGLE,
al_CONE_OUTER_GAIN, al_SEC_OFFSET, al_SAMPLE_OFFSET, al_BYTE_OFFSET,
al_SOURCE_STATE, al_VENDOR, al_RENDERER, al_VERSION, al_EXTENSIONS )
data GetPName =
GetDistanceModel
| GetDopplerFactor
| GetSpeedOfSound
| GetPosition
| GetVelocity
| GetGain
| GetOrientation
| GetSourceRelative
| GetSourceType
| GetLooping
| GetBuffer
| GetBuffersQueued
| GetBuffersProcessed
| GetMinGain
| GetMaxGain
| GetReferenceDistance
| GetRolloffFactor
| GetMaxDistance
| GetPitch
| GetDirection
| GetConeInnerAngle
| GetConeOuterAngle
| GetConeOuterGain
| GetSecOffset
| GetSampleOffset
| GetByteOffset
| GetSourceState
marshalGetPName :: GetPName -> ALenum
marshalGetPName x = case x of
GetDistanceModel -> al_DISTANCE_MODEL
GetDopplerFactor -> al_DOPPLER_FACTOR
GetSpeedOfSound -> al_SPEED_OF_SOUND
GetPosition -> al_POSITION
GetVelocity -> al_VELOCITY
GetGain -> al_GAIN
GetOrientation -> al_ORIENTATION
GetSourceRelative -> al_SOURCE_RELATIVE
GetSourceType -> al_SOURCE_TYPE
GetLooping -> al_LOOPING
GetBuffer -> al_BUFFER
GetBuffersQueued -> al_BUFFERS_QUEUED
GetBuffersProcessed -> al_BUFFERS_PROCESSED
GetMinGain -> al_MIN_GAIN
GetMaxGain -> al_MAX_GAIN
GetReferenceDistance -> al_REFERENCE_DISTANCE
GetRolloffFactor -> al_ROLLOFF_FACTOR
GetMaxDistance -> al_MAX_DISTANCE
GetPitch -> al_PITCH
GetDirection -> al_DIRECTION
GetConeInnerAngle -> al_CONE_INNER_ANGLE
GetConeOuterAngle -> al_CONE_OUTER_ANGLE
GetConeOuterGain -> al_CONE_OUTER_GAIN
GetSecOffset -> al_SEC_OFFSET
GetSampleOffset -> al_SAMPLE_OFFSET
GetByteOffset -> al_BYTE_OFFSET
GetSourceState -> al_SOURCE_STATE
data StringName =
Vendor
| Renderer
| Version
| Extensions
| ALErrorCategory ALenum
marshalStringName :: StringName -> ALenum
marshalStringName x = case x of
Vendor -> al_VENDOR
Renderer -> al_RENDERER
Version -> al_VERSION
Extensions -> al_EXTENSIONS
ALErrorCategory e -> e
getString :: StringName -> IO String
getString n = alGetString (marshalStringName n) >>= peekALString
foreign import CALLCONV unsafe "alGetString"
alGetString :: ALenum -> IO (Ptr ALchar)