9430 lines
328 KiB
Diff
9430 lines
328 KiB
Diff
diff -uNr --exclude=autom4te.cache --exclude=.cvsignore hugs98-Mar2005-patched/fptools/libraries/OpenAL/LICENSE ghc-6.4.2/libraries/OpenAL/LICENSE
|
|
--- hugs98-Mar2005-patched/fptools/libraries/OpenAL/LICENSE 2004-01-03 04:03:07.000000000 +0900
|
|
+++ ghc-6.4.2/libraries/OpenAL/LICENSE 2006-03-22 00:58:03.000000000 +0900
|
|
@@ -1,4 +1,4 @@
|
|
-Copyright (c) 2003-2004, Sven Panne
|
|
+Copyright (c) 2003-2005, Sven Panne
|
|
All rights reserved.
|
|
|
|
Redistribution and use in source and binary forms, with or without
|
|
diff -uNr --exclude=autom4te.cache --exclude=.cvsignore hugs98-Mar2005-patched/fptools/libraries/OpenAL/Makefile ghc-6.4.2/libraries/OpenAL/Makefile
|
|
--- hugs98-Mar2005-patched/fptools/libraries/OpenAL/Makefile 2005-03-03 01:39:55.000000000 +0900
|
|
+++ ghc-6.4.2/libraries/OpenAL/Makefile 2006-03-22 00:58:03.000000000 +0900
|
|
@@ -4,6 +4,12 @@
|
|
include $(TOP)/mk/boilerplate.mk
|
|
-include config.mk
|
|
|
|
+ifneq "$(findstring clean, $(MAKECMDGOALS))" ""
|
|
+# if we're cleaning, then config.mk might have been cleaned already
|
|
+AL_BUILD_PACKAGE=yes
|
|
+PACKAGE=OpenAL
|
|
+endif
|
|
+
|
|
ifneq "$(AL_BUILD_PACKAGE)" "no"
|
|
|
|
# -----------------------------------------------------------------------------
|
|
@@ -18,19 +24,17 @@
|
|
Sound \
|
|
Sound/OpenAL \
|
|
Sound/OpenAL/AL \
|
|
- Sound/OpenAL/ALC \
|
|
- Sound/OpenAL/ALUT
|
|
+ Sound/OpenAL/ALC
|
|
|
|
PACKAGE_DEPS = base OpenGL
|
|
|
|
SRC_HC_OPTS += -Wall -fffi -Iinclude '-\#include "HsOpenAL.h"' -cpp
|
|
|
|
# WinDoze DLL hell
|
|
+# NOTE: For some obscure/unknown reason, OpenAL uses ccall, even on WinDoze...
|
|
+SRC_HC_OPTS += -DCALLCONV=ccall
|
|
ifeq "$(TARGETPLATFORM)" "i386-unknown-mingw32"
|
|
-SRC_HC_OPTS += -DCALLCONV=stdcall
|
|
SRC_HC_OPTS := $(subst -mno-cygwin,,$(SRC_HC_OPTS))
|
|
-else
|
|
-SRC_HC_OPTS += -DCALLCONV=ccall
|
|
endif
|
|
|
|
PACKAGE_CPP_OPTS += -DMAINTAINER=$(MAINTAINER)
|
|
@@ -41,18 +45,14 @@
|
|
|
|
package.conf.inplace \
|
|
package.conf.installed \
|
|
-Sound/OpenAL/AL/BasicTypes.$(way_)o \
|
|
-Sound/OpenAL/AL/Format.$(way_)o \
|
|
-Sound/OpenAL/ALC/BasicTypes.$(way_)o \
|
|
-Sound/OpenAL/ALC/Errors.$(way_)o \
|
|
-Sound/OpenAL/ALC/Queries.$(way_)o : include/HsOpenALConfig.h
|
|
+Sound/OpenAL/Config.$(way_)o \
|
|
+Sound/OpenAL/Constants.$(way_)o : include/HsOpenALConfig.h
|
|
|
|
endif
|
|
|
|
# -----------------------------------------------------------------------------
|
|
|
|
-DIST_CLEAN_FILES += OpenAL.buildinfo config.cache config.status
|
|
-LATE_DIST_CLEAN_FILES += config.mk
|
|
+DIST_CLEAN_FILES += OpenAL.buildinfo config.cache config.status config.mk
|
|
|
|
extraclean::
|
|
$(RM) -rf autom4te.cache
|
|
diff -uNr --exclude=autom4te.cache --exclude=.cvsignore hugs98-Mar2005-patched/fptools/libraries/OpenAL/OpenAL.buildinfo.in ghc-6.4.2/libraries/OpenAL/OpenAL.buildinfo.in
|
|
--- hugs98-Mar2005-patched/fptools/libraries/OpenAL/OpenAL.buildinfo.in 2005-01-16 22:13:05.000000000 +0900
|
|
+++ ghc-6.4.2/libraries/OpenAL/OpenAL.buildinfo.in 2006-03-22 00:58:03.000000000 +0900
|
|
@@ -2,6 +2,7 @@
|
|
-- System-dependent values used by Distribution.Simple.defaultUserHooks
|
|
--
|
|
buildable: @BUILD_PACKAGE_BOOL@
|
|
+ghc-options: -DCALLCONV=@CALLCONV@
|
|
cc-options: -DCALLCONV=@CALLCONV@
|
|
ld-options: @AL_LIBS@
|
|
frameworks: @AL_FRAMEWORKS@
|
|
diff -uNr --exclude=autom4te.cache --exclude=.cvsignore hugs98-Mar2005-patched/fptools/libraries/OpenAL/OpenAL.cabal ghc-6.4.2/libraries/OpenAL/OpenAL.cabal
|
|
--- hugs98-Mar2005-patched/fptools/libraries/OpenAL/OpenAL.cabal 2005-02-11 10:55:55.000000000 +0900
|
|
+++ ghc-6.4.2/libraries/OpenAL/OpenAL.cabal 2006-03-22 00:58:03.000000000 +0900
|
|
@@ -1,5 +1,5 @@
|
|
name: OpenAL
|
|
-version: 1.0
|
|
+version: 1.2
|
|
license: BSD3
|
|
license-file: LICENSE
|
|
maintainer: Sven Panne <sven.panne@aedion.de>
|
|
@@ -10,27 +10,36 @@
|
|
exposed-modules:
|
|
Sound.OpenAL,
|
|
Sound.OpenAL.AL,
|
|
+ Sound.OpenAL.AL.ALboolean,
|
|
+ Sound.OpenAL.AL.Attenuation,
|
|
Sound.OpenAL.AL.BasicTypes,
|
|
Sound.OpenAL.AL.Buffer,
|
|
+ Sound.OpenAL.AL.BufferInternal,
|
|
+ Sound.OpenAL.AL.Doppler,
|
|
+ Sound.OpenAL.AL.Errors,
|
|
+ Sound.OpenAL.AL.Extensions,
|
|
+ Sound.OpenAL.AL.Format,
|
|
Sound.OpenAL.AL.Listener,
|
|
Sound.OpenAL.AL.Source,
|
|
+ Sound.OpenAL.AL.StringQueries,
|
|
Sound.OpenAL.ALC,
|
|
+ Sound.OpenAL.ALC.BasicTypes,
|
|
+ Sound.OpenAL.ALC.Capture,
|
|
Sound.OpenAL.ALC.Context,
|
|
Sound.OpenAL.ALC.Device,
|
|
Sound.OpenAL.ALC.Errors,
|
|
- Sound.OpenAL.ALC.Extensions,
|
|
- Sound.OpenAL.ALUT,
|
|
- Sound.OpenAL.ALUT.Initialization,
|
|
- Sound.OpenAL.ALUT.WAV
|
|
+ Sound.OpenAL.ALC.Extensions
|
|
other-modules:
|
|
- Sound.OpenAL.AL.ALboolean,
|
|
- Sound.OpenAL.AL.Format,
|
|
Sound.OpenAL.AL.PeekPoke,
|
|
Sound.OpenAL.AL.QueryUtils,
|
|
- Sound.OpenAL.ALC.BasicTypes,
|
|
- Sound.OpenAL.ALC.Queries,
|
|
- Sound.OpenAL.ALUT.Exception
|
|
+ Sound.OpenAL.AL.SourceState,
|
|
+ Sound.OpenAL.AL.String,
|
|
+ Sound.OpenAL.ALC.ALCboolean,
|
|
+ Sound.OpenAL.ALC.QueryUtils,
|
|
+ Sound.OpenAL.ALC.String,
|
|
+ Sound.OpenAL.Config,
|
|
+ Sound.OpenAL.Constants
|
|
include-dirs: include
|
|
includes: "HsOpenAL.h"
|
|
build-depends: base, OpenGL
|
|
-extensions: CPP
|
|
+extensions: CPP, ForeignFunctionInterface
|
|
diff -uNr --exclude=autom4te.cache --exclude=.cvsignore hugs98-Mar2005-patched/fptools/libraries/OpenAL/Sound/OpenAL/AL/ALboolean.hs ghc-6.4.2/libraries/OpenAL/Sound/OpenAL/AL/ALboolean.hs
|
|
--- hugs98-Mar2005-patched/fptools/libraries/OpenAL/Sound/OpenAL/AL/ALboolean.hs 2004-01-03 04:03:08.000000000 +0900
|
|
+++ ghc-6.4.2/libraries/OpenAL/Sound/OpenAL/AL/ALboolean.hs 2006-03-22 00:58:03.000000000 +0900
|
|
@@ -2,7 +2,7 @@
|
|
--------------------------------------------------------------------------------
|
|
-- |
|
|
-- Module : Sound.OpenAL.AL.ALboolean
|
|
--- Copyright : (c) Sven Panne 2003-2004
|
|
+-- Copyright : (c) Sven Panne 2003-2005
|
|
-- License : BSD-style (see the file libraries/OpenAL/LICENSE)
|
|
--
|
|
-- Maintainer : sven.panne@aedion.de
|
|
@@ -14,16 +14,17 @@
|
|
--------------------------------------------------------------------------------
|
|
|
|
module Sound.OpenAL.AL.ALboolean (
|
|
- ALboolean, marshalALboolean, unmarshalALboolean
|
|
+ marshalALboolean, unmarshalALboolean
|
|
) where
|
|
|
|
import Sound.OpenAL.AL.BasicTypes ( ALboolean )
|
|
+import Sound.OpenAL.Constants ( al_FALSE, al_TRUE )
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
marshalALboolean :: Bool -> ALboolean
|
|
-marshalALboolean False = 0
|
|
-marshalALboolean True = 1
|
|
+marshalALboolean False = al_FALSE
|
|
+marshalALboolean True = al_TRUE
|
|
|
|
unmarshalALboolean :: ALboolean -> Bool
|
|
-unmarshalALboolean = (/= 0)
|
|
+unmarshalALboolean = (/= al_FALSE)
|
|
diff -uNr --exclude=autom4te.cache --exclude=.cvsignore hugs98-Mar2005-patched/fptools/libraries/OpenAL/Sound/OpenAL/AL/Attenuation.hs ghc-6.4.2/libraries/OpenAL/Sound/OpenAL/AL/Attenuation.hs
|
|
--- hugs98-Mar2005-patched/fptools/libraries/OpenAL/Sound/OpenAL/AL/Attenuation.hs 1970-01-01 09:00:00.000000000 +0900
|
|
+++ ghc-6.4.2/libraries/OpenAL/Sound/OpenAL/AL/Attenuation.hs 2006-03-22 00:58:03.000000000 +0900
|
|
@@ -0,0 +1,211 @@
|
|
+--------------------------------------------------------------------------------
|
|
+-- |
|
|
+-- Module : Sound.OpenAL.AL.Attenuation
|
|
+-- Copyright : (c) Sven Panne 2005
|
|
+-- License : BSD-style (see the file libraries/OpenAL/LICENSE)
|
|
+--
|
|
+-- Maintainer : sven.panne@aedion.de
|
|
+-- Stability : provisional
|
|
+-- Portability : portable
|
|
+--
|
|
+-- This module corresponds to section 3.4 (Attenuation By Distance) of the
|
|
+-- OpenAL Specification and Reference (version 1.1).
|
|
+--
|
|
+--------------------------------------------------------------------------------
|
|
+
|
|
+module Sound.OpenAL.AL.Attenuation (
|
|
+ -- * Introduction
|
|
+ -- $Introduction
|
|
+
|
|
+ -- * Handling the Distance Model
|
|
+ DistanceModel(..), distanceModel
|
|
+
|
|
+ -- * Evaluation of Gain\/Attenuation Related State
|
|
+ -- $EvaluationOfGainAttenuationRelatedState
|
|
+
|
|
+ -- * No Culling By Distance
|
|
+ -- $NoCullingByDistance
|
|
+) where
|
|
+
|
|
+import Foreign.Marshal.Alloc ( alloca )
|
|
+import Foreign.Ptr ( Ptr )
|
|
+import Graphics.Rendering.OpenGL.GL.StateVar ( StateVar, makeStateVar )
|
|
+import Sound.OpenAL.AL.BasicTypes ( ALint, ALenum )
|
|
+import Sound.OpenAL.AL.PeekPoke ( peek1 )
|
|
+import Sound.OpenAL.AL.QueryUtils (
|
|
+ GetPName(GetDistanceModel), marshalGetPName )
|
|
+import Sound.OpenAL.Constants (
|
|
+ al_NONE, al_INVERSE_DISTANCE, al_INVERSE_DISTANCE_CLAMPED,
|
|
+ al_LINEAR_DISTANCE, al_LINEAR_DISTANCE_CLAMPED, al_EXPONENT_DISTANCE,
|
|
+ al_EXPONENT_DISTANCE_CLAMPED )
|
|
+
|
|
+#ifdef __HADDOCK__
|
|
+import Sound.OpenAL.AL.Source (
|
|
+ sourceGain, gainBounds, coneAngles, coneOuterGain, referenceDistance,
|
|
+ rolloffFactor, maxDistance )
|
|
+#endif
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+-- $Introduction
|
|
+-- Samples usually use the entire dynamic range of the chosen format\/encoding,
|
|
+-- independent of their real world intensity. In other words, a jet engine and a
|
|
+-- clockwork both will have samples with full amplitude. The application will
|
|
+-- then have to adjust source gain accordingly to account for relative
|
|
+-- differences.
|
|
+--
|
|
+-- Source gain is then attenuated by distance. The effective attenuation of a
|
|
+-- source depends on many factors, among which distance attenuation and source
|
|
+-- and listener gain are only some of the contributing factors. Even if the
|
|
+-- source and listener gain exceed 1 (amplification beyond the guaranteed
|
|
+-- dynamic range), distance and other attenuation might ultimately limit the
|
|
+-- overall gain to a value below 1.
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+-- $EvaluationOfGainAttenuationRelatedState
|
|
+-- While amplification\/attenuation commute (multiplication of scaling factors),
|
|
+-- clamping operations do not. The order in which various gain related
|
|
+-- operations are applied is:
|
|
+--
|
|
+-- 1. Distance attenuation is calculated first, including minimum
|
|
+-- ('referenceDistance') and maximum ('maxDistance') thresholds.
|
|
+--
|
|
+-- 2. The result is then multiplied by source gain.
|
|
+--
|
|
+-- 3. If the source is directional (the inner cone angle is less than the outer
|
|
+-- cone angle, see 'coneAngles'), an angle-dependent attenuation is calculated
|
|
+-- depending on 'coneOuterGain', and multiplied with the distance-dependent
|
|
+-- attenuation. The resulting attenuation factor for the given angle and
|
|
+-- distance between listener and source is multiplied with 'sourceGain'.
|
|
+--
|
|
+-- 4. The effective gain computed this way is compared against 'gainBounds'.
|
|
+--
|
|
+-- 5. The result is guaranteed to be clamped to 'gainBounds', and subsequently
|
|
+-- multiplied by listener gain which serves as an overall volume control.
|
|
+--
|
|
+-- The implementation is free to clamp listener gain if necessary due to
|
|
+-- hardware or implementation constraints.
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+-- $NoCullingByDistance
|
|
+-- With the DS3D compatible inverse clamped distance model, OpenAL provides a
|
|
+-- per-source 'maxDistance' attribute that can be used to define a distance
|
|
+-- beyond which the source will not be further attenuated by distance. The DS3D
|
|
+-- distance attenuation model and its clamping of volume is also extended by a
|
|
+-- mechanism to cull (mute) sources from processing, based on distance. However,
|
|
+-- the OpenAL does not support culling a source from processing based on a
|
|
+-- distance threshold.
|
|
+--
|
|
+-- At this time OpenAL is not meant to support culling at all. Culling based on
|
|
+-- distance, or bounding volumes, or other criteria, is best left to the
|
|
+-- application. For example, the application might employ sophisticated
|
|
+-- techniques to determine whether sources are audible that are beyond the scope
|
|
+-- of OpenAL. In particular, rule based culling inevitably introduces acoustic
|
|
+-- artifacts. E.g. if the listener-source distance is nearly equal to the culling
|
|
+-- threshold distance, but varies above and below, there will be popping
|
|
+-- artifacts in the absence of hysteresis.
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+
|
|
+-- | OpenAL currently supports six modes of operation with respect to distance
|
|
+-- attenuation, including one that is similar to the IASIG I3DL2 model. The
|
|
+-- application chooses one of these models (or chooses to disable
|
|
+-- distance-dependent attenuation) on a per-context basis.
|
|
+--
|
|
+-- The distance used in the formulas for the \"clamped\" modes below is clamped
|
|
+-- to be in the range between 'referenceDistance' and 'maxDistance':
|
|
+--
|
|
+-- /clamped distance/ =
|
|
+-- max('referenceDistance', min(/distance/, 'maxDistance'))
|
|
+--
|
|
+-- The linear models are not physically realistic, but do allow full attenuation
|
|
+-- of a source beyond a specified distance. The OpenAL implementation is still
|
|
+-- free to apply any range clamping as necessary.
|
|
+--
|
|
+-- With all the distance models, if the formula can not be evaluated then the
|
|
+-- source will not be attenuated. For example, if a linear model is being used
|
|
+-- with 'referenceDistance' equal to 'maxDistance', then the gain equation will
|
|
+-- have a divide-by-zero error in it. In this case, there is no attenuation for
|
|
+-- that source.
|
|
+
|
|
+data DistanceModel =
|
|
+ NoAttenuation
|
|
+ -- ^ Bypass all distance attenuation calculation for all sources. The
|
|
+ -- implementation is expected to optimize this situation.
|
|
+ | InverseDistance
|
|
+ -- ^ Inverse distance rolloff model, which is equivalent to the IASIG I3DL2
|
|
+ -- model with the exception that 'referenceDistance' does not imply any
|
|
+ -- clamping.
|
|
+ --
|
|
+ -- /gain/ = 'referenceDistance' \/ ('referenceDistance' +
|
|
+ -- 'rolloffFactor' \* (/distance/ - 'referenceDistance'))
|
|
+ --
|
|
+ -- The 'referenceDistance' parameter used here is a per-source attribute
|
|
+ -- which is the distance at which the listener will experience gain
|
|
+ -- (unless the implementation had to clamp effective gain to the available
|
|
+ -- dynamic range). 'rolloffFactor' is per-source parameter the application
|
|
+ -- can use to increase or decrease the range of a source by decreasing or
|
|
+ -- increasing the attenuation, respectively. The default value is 1. The
|
|
+ -- implementation is free to optimize for a 'rolloffFactor' value of 0,
|
|
+ -- which indicates that the application does not wish any distance
|
|
+ -- attenuation on the respective source.
|
|
+ | InverseDistanceClamped
|
|
+ -- ^ Inverse Distance clamped model, which is essentially the inverse
|
|
+ -- distance rolloff model, extended to guarantee that for distances below
|
|
+ -- 'referenceDistance', gain is clamped. This mode is equivalent to the
|
|
+ -- IASIG I3DL2 distance model.
|
|
+ | LinearDistance
|
|
+ -- ^ Linear distance rolloff model, modeling a linear dropoff in gain as
|
|
+ -- distance increases between the source and listener.
|
|
+ --
|
|
+ -- /gain/ = (1 - 'rolloffFactor' \* (/distance/ - 'referenceDistance') \/
|
|
+ -- ('maxDistance' - 'referenceDistance'))
|
|
+ | LinearDistanceClamped
|
|
+ -- ^ Linear Distance clamped model, which is the linear model, extended to
|
|
+ -- guarantee that for distances below 'referenceDistance', gain is clamped.
|
|
+ | ExponentDistance
|
|
+ -- ^ Exponential distance rolloff model, modeling an exponential dropoff in
|
|
+ -- gain as distance increases between the source and listener.
|
|
+ --
|
|
+ -- /gain/ = (/distance/ \/ 'referenceDistance') \*\* (- 'rolloffFactor')
|
|
+ | ExponentDistanceClamped
|
|
+ -- ^ Exponential Distance clamped model, which is the exponential model,
|
|
+ -- extended to guarantee that for distances below 'referenceDistance',
|
|
+ -- gain is clamped.
|
|
+ deriving ( Eq, Ord, Show )
|
|
+
|
|
+marshalDistanceModel :: DistanceModel -> ALenum
|
|
+marshalDistanceModel x = case x of
|
|
+ NoAttenuation -> al_NONE
|
|
+ InverseDistance -> al_INVERSE_DISTANCE
|
|
+ InverseDistanceClamped -> al_INVERSE_DISTANCE_CLAMPED
|
|
+ LinearDistance -> al_LINEAR_DISTANCE
|
|
+ LinearDistanceClamped -> al_LINEAR_DISTANCE_CLAMPED
|
|
+ ExponentDistance -> al_EXPONENT_DISTANCE
|
|
+ ExponentDistanceClamped -> al_EXPONENT_DISTANCE_CLAMPED
|
|
+
|
|
+unmarshalDistanceModel :: ALenum -> DistanceModel
|
|
+unmarshalDistanceModel x
|
|
+ | x == al_NONE = NoAttenuation
|
|
+ | x == al_INVERSE_DISTANCE = InverseDistance
|
|
+ | x == al_INVERSE_DISTANCE_CLAMPED = InverseDistanceClamped
|
|
+ | x == al_LINEAR_DISTANCE = LinearDistance
|
|
+ | x == al_LINEAR_DISTANCE_CLAMPED = LinearDistanceClamped
|
|
+ | x == al_EXPONENT_DISTANCE = ExponentDistance
|
|
+ | x == al_EXPONENT_DISTANCE_CLAMPED = ExponentDistanceClamped
|
|
+ | otherwise = error ("unmarshalDistanceModel: illegal value " ++ show x)
|
|
+
|
|
+-- | Contains the current per-context distance model.
|
|
+
|
|
+distanceModel :: StateVar DistanceModel
|
|
+distanceModel =
|
|
+ makeStateVar
|
|
+ (alloca $ \buf -> do
|
|
+ alGetIntegerv (marshalGetPName GetDistanceModel) buf
|
|
+ peek1 (unmarshalDistanceModel . fromIntegral) buf)
|
|
+ (alDistanceModel . marshalDistanceModel)
|
|
+
|
|
+foreign import CALLCONV unsafe "alGetIntegerv"
|
|
+ alGetIntegerv :: ALenum -> Ptr ALint -> IO ()
|
|
+
|
|
+foreign import CALLCONV unsafe "alDistanceModel"
|
|
+ alDistanceModel :: ALenum -> IO ()
|
|
diff -uNr --exclude=autom4te.cache --exclude=.cvsignore hugs98-Mar2005-patched/fptools/libraries/OpenAL/Sound/OpenAL/AL/BasicTypes.hs ghc-6.4.2/libraries/OpenAL/Sound/OpenAL/AL/BasicTypes.hs
|
|
--- hugs98-Mar2005-patched/fptools/libraries/OpenAL/Sound/OpenAL/AL/BasicTypes.hs 2004-01-03 04:03:08.000000000 +0900
|
|
+++ ghc-6.4.2/libraries/OpenAL/Sound/OpenAL/AL/BasicTypes.hs 2006-03-22 00:58:03.000000000 +0900
|
|
@@ -1,72 +1,49 @@
|
|
--------------------------------------------------------------------------------
|
|
-- |
|
|
-- Module : Sound.OpenAL.AL.BasicTypes
|
|
--- Copyright : (c) Sven Panne 2003-2004
|
|
+-- Copyright : (c) Sven Panne 2003-2005
|
|
-- License : BSD-style (see the file libraries/OpenAL/LICENSE)
|
|
--
|
|
-- Maintainer : sven.panne@aedion.de
|
|
-- Stability : provisional
|
|
-- Portability : portable
|
|
--
|
|
--- This module corresponds to section 2.1.1 (Primitive Types) of the OpenAL
|
|
--- Specification and Reference (version 1.0).
|
|
+-- This module corresponds to section 2.2 (Primitive Types) of the OpenAL
|
|
+-- Specification and Reference (version 1.1).
|
|
--
|
|
--------------------------------------------------------------------------------
|
|
|
|
module Sound.OpenAL.AL.BasicTypes (
|
|
- ALboolean, ALbyte, ALshort, ALint, ALubyte, ALushort, ALuint, ALsizei,
|
|
- ALenum, ALbitfield, ALfloat, ALclampf, ALdouble, ALclampd
|
|
-) where
|
|
-
|
|
---------------------------------------------------------------------------------
|
|
+ -- * Primitive Types
|
|
+ -- $PrimitiveTypes
|
|
|
|
-import Data.Int
|
|
-import Data.Word
|
|
+ -- * Floating-Point Computation
|
|
+ -- $FloatingPointComputation
|
|
|
|
---------------------------------------------------------------------------------
|
|
+ ALboolean, ALchar, ALbyte, ALubyte, ALshort, ALushort, ALint, ALuint,
|
|
+ ALsizei, ALenum, ALfloat, ALdouble
|
|
+) where
|
|
|
|
-#include "HsOpenALConfig.h"
|
|
+import Sound.OpenAL.Config
|
|
|
|
--------------------------------------------------------------------------------
|
|
-
|
|
--- | Boolean (min. 1 bit)
|
|
-type ALboolean = HTYPE_ALBOOLEAN
|
|
-
|
|
--- | Signed 2\'s complement binary integer (min. 8 bits)
|
|
-type ALbyte = HTYPE_ALBYTE
|
|
-
|
|
--- | Unsigned binary integer (min. 8 bits)
|
|
-type ALubyte = HTYPE_ALUBYTE
|
|
-
|
|
--- | Signed 2\'s complement binary integer (min. 16 bits)
|
|
-type ALshort = HTYPE_ALSHORT
|
|
-
|
|
--- | Unsigned binary integer (min. 16 bits)
|
|
-type ALushort = HTYPE_ALUSHORT
|
|
-
|
|
--- | Signed 2\'s complement binary integer (min. 32 bits)
|
|
-type ALint = HTYPE_ALINT
|
|
-
|
|
--- | Unsigned binary integer (min. 32 bits)
|
|
-type ALuint = HTYPE_ALUINT
|
|
-
|
|
--- | Non-negatitve binary integer size (min. 32 bits)
|
|
-type ALsizei = HTYPE_ALSIZEI
|
|
-
|
|
--- | Enumerated binary integer value (min. 32 bits)
|
|
-type ALenum = HTYPE_ALENUM
|
|
-
|
|
--- | Bit field (min. 32 bits)
|
|
-type ALbitfield = HTYPE_ALBITFIELD
|
|
-
|
|
--- | Floating-point value (min. 32 bits)
|
|
-type ALfloat = HTYPE_ALFLOAT
|
|
-
|
|
--- | Floating-point value clamped to [0,1] (min. 32 bits)
|
|
-type ALclampf = HTYPE_ALCLAMPF
|
|
-
|
|
--- | Floating-point value (min. 64 bits)
|
|
-type ALdouble = HTYPE_ALDOUBLE
|
|
-
|
|
--- | Floating-point value clamped to [0,1] (min. 64 bits)
|
|
-type ALclampd = HTYPE_ALCLAMPD
|
|
+-- $PrimitiveTypes
|
|
+-- As OpenAL is meant to allow for seamless integration with OpenGL code if
|
|
+-- needed, the OpenAL library primitive (scalar) data types mimic the OpenGL
|
|
+-- data types. Guaranteed minimum sizes are stated for OpenGL data types, but
|
|
+-- the actual choice of C data type is left to the implementation. All
|
|
+-- implementations on a given binary architecture, however, must use a common
|
|
+-- definition of these data types.
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+-- $FloatingPointComputation
|
|
+-- Any representable floating-point value is legal as input to an OpenAL command
|
|
+-- that requires floating point data. The result of providing a value that is
|
|
+-- not a floating point number to such a command is unspecified, but must not
|
|
+-- lead to OpenAL being interrupted or terminated. In IEEE arithmetic, for
|
|
+-- example, providing a negative zero or a denormalized number to an OpenAL
|
|
+-- command yields predictable results, while providing a NaN or infinity yields
|
|
+-- unspecified results. Some calculations require division. In such cases
|
|
+-- (including implied divisions required by vector normalizations), a division
|
|
+-- by zero produces an unspecified result but must not lead to OpenAL
|
|
+-- interruption or termination.
|
|
diff -uNr --exclude=autom4te.cache --exclude=.cvsignore hugs98-Mar2005-patched/fptools/libraries/OpenAL/Sound/OpenAL/AL/Buffer.hs ghc-6.4.2/libraries/OpenAL/Sound/OpenAL/AL/Buffer.hs
|
|
--- hugs98-Mar2005-patched/fptools/libraries/OpenAL/Sound/OpenAL/AL/Buffer.hs 2004-05-12 04:31:01.000000000 +0900
|
|
+++ ghc-6.4.2/libraries/OpenAL/Sound/OpenAL/AL/Buffer.hs 2006-03-22 00:58:03.000000000 +0900
|
|
@@ -1,34 +1,101 @@
|
|
--------------------------------------------------------------------------------
|
|
-- |
|
|
-- Module : Sound.OpenAL.AL.Buffer
|
|
--- Copyright : (c) Sven Panne 2003-2004
|
|
+-- Copyright : (c) Sven Panne 2003-2005
|
|
-- License : BSD-style (see the file libraries/OpenAL/LICENSE)
|
|
--
|
|
-- Maintainer : sven.panne@aedion.de
|
|
-- Stability : provisional
|
|
-- Portability : portable
|
|
--
|
|
+-- This module corresponds to chapter 6 (Buffers) of the OpenAL Specification
|
|
+-- and Reference (version 1.1).
|
|
+--
|
|
+-- A buffer encapsulates OpenAL state related to storing sample data. The
|
|
+-- application can request and release buffer objects, and fill them with
|
|
+-- data. Data can be supplied compressed and encoded as long as the format is
|
|
+-- supported. Buffers can, internally, contain waveform data as uncompressed or
|
|
+-- compressed samples.
|
|
+--
|
|
+-- Unlike source (see "Sound.OpenAL.AL.Source") and listener (see
|
|
+-- "Sound.OpenAL.AL.Listener") objects, buffer objects can be shared among AL
|
|
+-- contexts. Buffers are referenced by sources. A single buffer can be referred
|
|
+-- to by multiple sources. This separation allows drivers and hardware to
|
|
+-- optimize storage and processing where applicable.
|
|
+--
|
|
+-- The simplest supported format for buffer data is PCM. PCM data is assumed to
|
|
+-- use the processor\'s native byte order. Other formats use the byte order
|
|
+-- native to that format.
|
|
+--
|
|
+-- At this time, buffer states are defined for purposes of discussion. The
|
|
+-- states described in this section are not exposed through the API (can not be
|
|
+-- queried, or be set directly), and the state description used in the
|
|
+-- implementation might differ from this.
|
|
+--
|
|
+-- A buffer is considered to be in one of the following states, with respect to
|
|
+-- all sources:
|
|
+--
|
|
+-- [/unused/] The buffer is not included in any queue for any source. In
|
|
+-- particular, the buffer is neither pending nor current for any source. The
|
|
+-- buffer name can be deleted at this time.
|
|
+--
|
|
+-- [/processed/] The buffer is listed in the queue of at least one source, but
|
|
+-- is neither pending nor current for any source. The buffer can be deleted as
|
|
+-- soon as it has been unqueued for all sources it is queued with.
|
|
+--
|
|
+-- [/pending/] There is at least one source for which the buffer has been queued,
|
|
+-- for which the buffer data has not yet been dereferenced. The buffer can only
|
|
+-- be unqueued for those sources that have dereferenced the data in the buffer
|
|
+-- in its entirety, and cannot be deleted or changed.
|
|
+--
|
|
+-- The buffer state is dependent on the state of all sources that is has been
|
|
+-- queued for. A single queue occurrence of a buffer propagates the buffer state
|
|
+-- (over all sources) from /unused/ to /processed/ or higher. Sources that are
|
|
+-- in the 'Stopped' or 'Initial' states still have queue entries that cause
|
|
+-- buffers to be /processed/.
|
|
+--
|
|
+-- A single queue entry with a single source for which the buffer is not yet
|
|
+-- /processed/ propagates the buffer\'s queuing state to /pending/.
|
|
+--
|
|
+-- Buffers that are /processed/ for a given source can be unqueued from that
|
|
+-- source\'s queue. Buffers that have been unqueued from all sources are
|
|
+-- /unused/. Buffers that are /unused/ can be deleted, or changed by writing
|
|
+-- 'bufferData'.
|
|
+--
|
|
--------------------------------------------------------------------------------
|
|
|
|
module Sound.OpenAL.AL.Buffer (
|
|
- Format(..), BufferSize, Frequency, BufferData(..),
|
|
- Buffer, bufferData
|
|
+ Buffer, MemoryRegion(..), Format(..), BufferData(..), bufferData
|
|
) where
|
|
|
|
-import Control.Monad ( liftM )
|
|
import Foreign.Marshal.Alloc ( alloca )
|
|
-import Foreign.Marshal.Array ( withArrayLen, peekArray, allocaArray )
|
|
import Foreign.Ptr ( Ptr, nullPtr )
|
|
-import Foreign.Storable ( Storable(peek) )
|
|
-import Graphics.Rendering.OpenGL.GL.BufferObjects ( ObjectName(..) )
|
|
import Graphics.Rendering.OpenGL.GL.StateVar ( StateVar, makeStateVar )
|
|
-import Sound.OpenAL.AL.BasicTypes
|
|
+import Sound.OpenAL.AL.BufferInternal ( Buffer )
|
|
+import Sound.OpenAL.AL.BasicTypes ( ALint, ALsizei, ALenum )
|
|
import Sound.OpenAL.AL.Format ( Format(..), marshalFormat )
|
|
-import Sound.OpenAL.AL.ALboolean ( unmarshalALboolean )
|
|
+import Sound.OpenAL.AL.PeekPoke ( peek1 )
|
|
+import Sound.OpenAL.ALC.Context ( Frequency )
|
|
+import Sound.OpenAL.Constants ( al_FREQUENCY, al_SIZE, al_BITS, al_CHANNELS )
|
|
+
|
|
+#ifdef __HADDOCK__
|
|
+import Sound.OpenAL.AL.SourceState ( SourceState(..) )
|
|
+import Sound.OpenAL.AL.Errors ( ALErrorCategory(..) )
|
|
+#endif
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
-data BufferData a = BufferData Format (Ptr a) BufferSize Frequency
|
|
+data MemoryRegion a = MemoryRegion (Ptr a) ALsizei
|
|
+#ifdef __HADDOCK__
|
|
+-- Help Haddock a bit, because it doesn't do any instance inference.
|
|
+instance Eq (MemoryRegion a)
|
|
+instance Ord (MemoryRegion a)
|
|
+instance Show (MemoryRegion a)
|
|
+#else
|
|
+ deriving ( Eq, Ord, Show )
|
|
+#endif
|
|
+
|
|
+data BufferData a = BufferData (MemoryRegion a) Format Frequency
|
|
#ifdef __HADDOCK__
|
|
-- Help Haddock a bit, because it doesn't do any instance inference.
|
|
instance Eq (BufferData a)
|
|
@@ -38,37 +105,25 @@
|
|
deriving ( Eq, Ord, Show )
|
|
#endif
|
|
|
|
-type BufferSize = ALsizei
|
|
-
|
|
-type Frequency = ALsizei -- or Float???
|
|
-
|
|
--------------------------------------------------------------------------------
|
|
|
|
-newtype Buffer = Buffer { bufferID :: ALuint }
|
|
- deriving ( Eq, Ord, Show )
|
|
-
|
|
-instance ObjectName Buffer where
|
|
- genObjectNames n =
|
|
- allocaArray n $ \buf -> do
|
|
- alGenBuffers (fromIntegral n) buf
|
|
- liftM (map Buffer) $ peekArray n buf
|
|
-
|
|
- deleteObjectNames buffers =
|
|
- withArrayLen (map bufferID buffers) $
|
|
- alDeleteBuffers . fromIntegral
|
|
-
|
|
- isObjectName = liftM unmarshalALboolean . alIsBuffer . bufferID
|
|
-
|
|
-foreign import CALLCONV unsafe "alGenBuffers"
|
|
- alGenBuffers :: ALsizei -> Ptr ALuint -> IO ()
|
|
-
|
|
-foreign import CALLCONV unsafe "alDeleteBuffers"
|
|
- alDeleteBuffers :: ALsizei -> Ptr ALuint -> IO ()
|
|
-
|
|
-foreign import CALLCONV unsafe "alIsBuffer"
|
|
- alIsBuffer :: ALuint -> IO ALboolean
|
|
-
|
|
---------------------------------------------------------------------------------
|
|
+-- | A special case of buffer state is the actual sound sample data stored in
|
|
+-- association with the buffer. Applications can specify sample data using
|
|
+-- 'bufferData'.
|
|
+--
|
|
+-- The data specified is copied to an internal software, or if possible,
|
|
+-- hardware buffer. The implementation is free to apply decompression,
|
|
+-- conversion, resampling, and filtering as needed. The internal format of the
|
|
+-- buffer is not exposed to the application, and not accessible.
|
|
+--
|
|
+-- Buffers containing audio data with more than one channel will be played
|
|
+-- without 3D spatialization features, these formats are normally used for
|
|
+-- background music. Applications should always check for an error condition
|
|
+-- after attempting to specify buffer data in case an implementation has to
|
|
+-- generate an 'ALOutOfMemory' or a conversion related 'ALInvalidValue' error.
|
|
+-- The application is free to reuse the memory specified by the data pointer
|
|
+-- once 'bufferData' is set. The implementation has to dereference, e.g. copy,
|
|
+-- the data while accessing 'bufferData' execution.
|
|
|
|
bufferData :: Buffer -> StateVar (BufferData a)
|
|
bufferData buffer = makeStateVar (getBufferData buffer) (setBufferData buffer)
|
|
@@ -80,11 +135,11 @@
|
|
raw <- return nullPtr -- ToDo: AL_DATA query missing!!!
|
|
size <- getBufferi buffer Size
|
|
frequency <- getBufferi buffer Frequency
|
|
- return $ BufferData (makeFormat channels bits) raw size frequency
|
|
+ return $ BufferData (MemoryRegion raw size) (makeFormat channels bits) frequency
|
|
|
|
setBufferData :: Buffer -> BufferData a -> IO ()
|
|
-setBufferData buffer (BufferData format raw size frequency) =
|
|
- alBufferData buffer (marshalFormat format) raw size frequency
|
|
+setBufferData buffer (BufferData (MemoryRegion raw size) format frequency) =
|
|
+ alBufferData buffer (marshalFormat format) raw size (round frequency)
|
|
|
|
foreign import CALLCONV unsafe "alBufferData"
|
|
alBufferData :: Buffer -> ALenum -> Ptr a -> ALsizei -> ALsizei -> IO ()
|
|
@@ -95,10 +150,8 @@
|
|
makeFormat :: ALint -> ALint -> Format
|
|
makeFormat 1 8 = Mono8
|
|
makeFormat 2 8 = Stereo8
|
|
-makeFormat 4 8 = Quad8
|
|
makeFormat 1 16 = Mono16
|
|
makeFormat 2 16 = Stereo16
|
|
-makeFormat 4 16 = Quad16
|
|
makeFormat channels bits =
|
|
error ("makeFormat: illegal values " ++ show (channels, bits))
|
|
|
|
@@ -106,17 +159,16 @@
|
|
|
|
data BufferQuery =
|
|
Frequency
|
|
+ | Size
|
|
| Bits
|
|
| Channels
|
|
- | Size
|
|
- -- AL_DATA ???
|
|
|
|
marshalBufferQuery :: BufferQuery -> ALenum
|
|
marshalBufferQuery x = case x of
|
|
- Frequency -> 0x2001
|
|
- Bits -> 0x2002
|
|
- Channels -> 0x2003
|
|
- Size -> 0x2004
|
|
+ Frequency -> al_FREQUENCY
|
|
+ Size -> al_SIZE
|
|
+ Bits -> al_BITS
|
|
+ Channels -> al_CHANNELS
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
@@ -124,7 +176,7 @@
|
|
getBufferi buffer query =
|
|
alloca $ \buf -> do
|
|
alGetBufferi buffer (marshalBufferQuery query) buf
|
|
- liftM fromIntegral $ peek buf
|
|
+ peek1 fromIntegral buf
|
|
|
|
foreign import CALLCONV unsafe "alGetBufferi"
|
|
alGetBufferi :: Buffer -> ALenum -> Ptr ALint -> IO ()
|
|
diff -uNr --exclude=autom4te.cache --exclude=.cvsignore hugs98-Mar2005-patched/fptools/libraries/OpenAL/Sound/OpenAL/AL/BufferInternal.hs ghc-6.4.2/libraries/OpenAL/Sound/OpenAL/AL/BufferInternal.hs
|
|
--- hugs98-Mar2005-patched/fptools/libraries/OpenAL/Sound/OpenAL/AL/BufferInternal.hs 1970-01-01 09:00:00.000000000 +0900
|
|
+++ ghc-6.4.2/libraries/OpenAL/Sound/OpenAL/AL/BufferInternal.hs 2006-03-22 00:58:03.000000000 +0900
|
|
@@ -0,0 +1,75 @@
|
|
+-- #hide
|
|
+--------------------------------------------------------------------------------
|
|
+-- |
|
|
+-- Module : Sound.OpenAL.AL.BufferInternal
|
|
+-- Copyright : (c) Sven Panne 2003-2005
|
|
+-- License : BSD-style (see the file libraries/OpenAL/LICENSE)
|
|
+--
|
|
+-- Maintainer : sven.panne@aedion.de
|
|
+-- Stability : provisional
|
|
+-- Portability : portable
|
|
+--
|
|
+-- This is a purely internal module for (un-)marshaling Buffer.
|
|
+--
|
|
+--------------------------------------------------------------------------------
|
|
+
|
|
+module Sound.OpenAL.AL.BufferInternal (
|
|
+ Buffer, marshalBuffer, unmarshalBuffer
|
|
+) where
|
|
+
|
|
+import Foreign.Marshal.Array ( withArrayLen, peekArray, allocaArray )
|
|
+import Foreign.Ptr ( Ptr, castPtr )
|
|
+import Foreign.Storable ( Storable(..) )
|
|
+import Graphics.Rendering.OpenGL.GL.BufferObjects ( ObjectName(..) )
|
|
+import Sound.OpenAL.AL.ALboolean ( unmarshalALboolean )
|
|
+import Sound.OpenAL.AL.BasicTypes ( ALboolean, ALuint, ALsizei )
|
|
+import Sound.OpenAL.AL.PeekPoke ( peek1, poke1 )
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+
|
|
+-- | The abstract buffer type.
|
|
+
|
|
+newtype Buffer = Buffer { bufferID :: ALuint }
|
|
+ deriving ( Eq, Ord, Show )
|
|
+
|
|
+-- | A dummy buffer.
|
|
+
|
|
+nullBuffer :: Buffer
|
|
+nullBuffer = Buffer 0
|
|
+
|
|
+marshalBuffer :: Maybe Buffer -> ALuint
|
|
+marshalBuffer = bufferID . maybe nullBuffer id
|
|
+
|
|
+unmarshalBuffer :: ALuint -> Maybe Buffer
|
|
+unmarshalBuffer b =
|
|
+ if b == bufferID nullBuffer then Nothing else Just (Buffer b)
|
|
+
|
|
+instance Storable Buffer where
|
|
+ sizeOf ~(Buffer b) = sizeOf b
|
|
+ alignment ~(Buffer b) = alignment b
|
|
+ peek = peek1 Buffer . castPtr
|
|
+ poke ptr (Buffer b) = poke1 (castPtr ptr) b
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+-- This should really be in Sound.OpenAL.AL.Buffer, but we have it here to
|
|
+-- avoid an orphan module.
|
|
+
|
|
+instance ObjectName Buffer where
|
|
+ genObjectNames n =
|
|
+ allocaArray n $ \buf -> do
|
|
+ alGenBuffers (fromIntegral n) buf
|
|
+ peekArray n buf
|
|
+
|
|
+ deleteObjectNames buffers =
|
|
+ withArrayLen buffers $ alDeleteBuffers . fromIntegral
|
|
+
|
|
+ isObjectName = fmap unmarshalALboolean . alIsBuffer
|
|
+
|
|
+foreign import CALLCONV unsafe "alGenBuffers"
|
|
+ alGenBuffers :: ALsizei -> Ptr Buffer -> IO ()
|
|
+
|
|
+foreign import CALLCONV unsafe "alDeleteBuffers"
|
|
+ alDeleteBuffers :: ALsizei -> Ptr Buffer -> IO ()
|
|
+
|
|
+foreign import CALLCONV unsafe "alIsBuffer"
|
|
+ alIsBuffer :: Buffer -> IO ALboolean
|
|
diff -uNr --exclude=autom4te.cache --exclude=.cvsignore hugs98-Mar2005-patched/fptools/libraries/OpenAL/Sound/OpenAL/AL/Doppler.hs ghc-6.4.2/libraries/OpenAL/Sound/OpenAL/AL/Doppler.hs
|
|
--- hugs98-Mar2005-patched/fptools/libraries/OpenAL/Sound/OpenAL/AL/Doppler.hs 1970-01-01 09:00:00.000000000 +0900
|
|
+++ ghc-6.4.2/libraries/OpenAL/Sound/OpenAL/AL/Doppler.hs 2006-03-22 00:58:03.000000000 +0900
|
|
@@ -0,0 +1,92 @@
|
|
+--------------------------------------------------------------------------------
|
|
+-- |
|
|
+-- Module : Sound.OpenAL.AL.Doppler
|
|
+-- Copyright : (c) Sven Panne 2005
|
|
+-- License : BSD-style (see the file libraries/OpenAL/LICENSE)
|
|
+--
|
|
+-- Maintainer : sven.panne@aedion.de
|
|
+-- Stability : provisional
|
|
+-- Portability : portable
|
|
+--
|
|
+-- This module corresponds to section 3.5.2. (Velocity Dependent Doppler Effect)
|
|
+-- of the OpenAL Specification and Reference (version 1.1).
|
|
+--
|
|
+--------------------------------------------------------------------------------
|
|
+
|
|
+module Sound.OpenAL.AL.Doppler (
|
|
+ -- * Introduction
|
|
+ -- $Introduction
|
|
+ dopplerFactor, speedOfSound
|
|
+) where
|
|
+
|
|
+import Foreign.Ptr ( FunPtr )
|
|
+import Graphics.Rendering.OpenGL.GL.StateVar (
|
|
+ HasGetter(get), StateVar, makeStateVar )
|
|
+import Sound.OpenAL.AL.BasicTypes ( ALenum, ALfloat )
|
|
+import Sound.OpenAL.AL.Extensions ( alProcAddress )
|
|
+import Sound.OpenAL.AL.QueryUtils (
|
|
+ GetPName(GetDopplerFactor,GetSpeedOfSound), marshalGetPName )
|
|
+
|
|
+#ifdef __HADDOCK__
|
|
+import Sound.OpenAL.AL.Errors ( ALError(ALInvalidValue) )
|
|
+#endif
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+
|
|
+-- | 'dopplerFactor' is a simple scaling of source and listener velocities to
|
|
+-- exaggerate or deemphasize the Doppler (pitch) shift resulting from the
|
|
+-- calculation. Setting 'dopplerFactor' to a negative value will result in an
|
|
+-- 'ALInvalidValue' error, the command is then ignored. The default value is 1.
|
|
+-- The implementation is free to optimize the case of 'dopplerFactor' containing
|
|
+-- zero, as this effectively disables the effect.
|
|
+
|
|
+dopplerFactor :: StateVar ALfloat
|
|
+dopplerFactor = makeDopplerVar GetDopplerFactor "alDopplerFactor"
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+
|
|
+-- | 'speedOfSound' allows the application to change the reference (propagation)
|
|
+-- speed used in the Doppler calculation. The source and listener velocities
|
|
+-- should be expressed in the same units as the speed of sound. Setting
|
|
+-- 'speedOfSound' to a negative or zero value will result in an 'ALInvalidValue'
|
|
+-- error, the command is ignored then. The default value is 343.3 (appropriate
|
|
+-- for velocity units of meters and air as the propagation medium).
|
|
+
|
|
+speedOfSound :: StateVar ALfloat
|
|
+speedOfSound = makeDopplerVar GetSpeedOfSound "alSpeedOfSound"
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+
|
|
+makeDopplerVar :: GetPName -> String -> StateVar ALfloat
|
|
+makeDopplerVar p apiEntryName =
|
|
+ makeStateVar
|
|
+ (alGetFloat (marshalGetPName p))
|
|
+ (\value -> do
|
|
+ -- ToDo: Should we check alcVersion or alIsExtensionPresent here?
|
|
+ funPtr <- get (alProcAddress apiEntryName)
|
|
+ invokeWithFloat funPtr value)
|
|
+
|
|
+foreign import CALLCONV unsafe "alGetFloat"
|
|
+ alGetFloat :: ALenum -> IO ALfloat
|
|
+
|
|
+type Invoker a = FunPtr a -> a
|
|
+
|
|
+foreign import CALLCONV unsafe "dynamic"
|
|
+ invokeWithFloat :: Invoker (ALfloat -> IO ())
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+-- $Introduction
|
|
+-- The Doppler Effect depends on the velocities of source and listener relative
|
|
+-- to the medium, and the propagation speed of sound in that medium. The
|
|
+-- application might want to emphasize or de-emphasize the Doppler Effect as
|
|
+-- physically accurate calculation might not give the desired results.
|
|
+-- The amount of frequency shift (pitch change) is proportional to the speed of
|
|
+-- listener and source along their line of sight.
|
|
+--
|
|
+-- The Doppler Effect as implemented by OpenAL is described in detail in section
|
|
+-- 3.5.2 of the OpenAL 1.1 specification. Note that effects of the medium (air,
|
|
+-- water) moving with respect to listener and source are ignored. There are two
|
|
+-- API calls global to the current context that provide control of the Doppler
|
|
+-- factor and the speed of sound. Distance and velocity units are completely
|
|
+-- independent of one another (so you could use different units for each if
|
|
+-- desired).
|
|
diff -uNr --exclude=autom4te.cache --exclude=.cvsignore hugs98-Mar2005-patched/fptools/libraries/OpenAL/Sound/OpenAL/AL/Errors.hs ghc-6.4.2/libraries/OpenAL/Sound/OpenAL/AL/Errors.hs
|
|
--- hugs98-Mar2005-patched/fptools/libraries/OpenAL/Sound/OpenAL/AL/Errors.hs 1970-01-01 09:00:00.000000000 +0900
|
|
+++ ghc-6.4.2/libraries/OpenAL/Sound/OpenAL/AL/Errors.hs 2006-03-22 00:58:03.000000000 +0900
|
|
@@ -0,0 +1,88 @@
|
|
+--------------------------------------------------------------------------------
|
|
+-- |
|
|
+-- Module : Sound.OpenAL.AL.Errors
|
|
+-- Copyright : (c) Sven Panne 2003-2005
|
|
+-- License : BSD-style (see the file libraries/OpenAL/LICENSE)
|
|
+--
|
|
+-- Maintainer : sven.panne@aedion.de
|
|
+-- Stability : provisional
|
|
+-- Portability : portable
|
|
+--
|
|
+-- This module corresponds to section 2.7 (AL Errors) of the OpenAL
|
|
+-- Specification and Reference (version 1.1).
|
|
+--
|
|
+--------------------------------------------------------------------------------
|
|
+
|
|
+module Sound.OpenAL.AL.Errors (
|
|
+ ALError(..), ALErrorCategory(..), alErrors
|
|
+) where
|
|
+
|
|
+import Graphics.Rendering.OpenGL.GL.StateVar (
|
|
+ GettableStateVar, makeGettableStateVar )
|
|
+import Sound.OpenAL.AL.BasicTypes ( ALenum )
|
|
+import Sound.OpenAL.Constants (
|
|
+ al_NO_ERROR, al_INVALID_NAME, al_INVALID_ENUM, al_INVALID_VALUE,
|
|
+ al_INVALID_OPERATION, al_OUT_OF_MEMORY )
|
|
+import Sound.OpenAL.AL.QueryUtils ( StringName(..), getString )
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+
|
|
+-- | AL errors consist of a general error category and a description of what
|
|
+-- went wrong.
|
|
+
|
|
+data ALError = ALError ALErrorCategory String
|
|
+ deriving ( Eq, Ord, Show )
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+
|
|
+-- | General AL error categories.
|
|
+
|
|
+data ALErrorCategory =
|
|
+ ALInvalidEnum
|
|
+ | ALInvalidValue
|
|
+ | ALInvalidOperation
|
|
+ | ALInvalidName
|
|
+ | ALOutOfMemory
|
|
+ deriving ( Eq, Ord, Show )
|
|
+
|
|
+unmarshalALErrorCategory :: ALenum -> ALErrorCategory
|
|
+unmarshalALErrorCategory x
|
|
+ | x == al_INVALID_ENUM = ALInvalidEnum
|
|
+ | x == al_INVALID_VALUE = ALInvalidValue
|
|
+ | x == al_INVALID_OPERATION = ALInvalidOperation
|
|
+ | x == al_INVALID_NAME = ALInvalidName
|
|
+ | x == al_OUT_OF_MEMORY = ALOutOfMemory
|
|
+ | otherwise = error ("unmarshalALErrorCategory: illegal value " ++ show x)
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+
|
|
+-- | OpenAL detects only a subset of those conditions that could be considered
|
|
+-- errors. This is because in many cases error checking would adversely impact
|
|
+-- the performance of an error-free program. The state variable 'alErrors' is
|
|
+-- used to obtain error information. When an error is detected by AL, a flag is
|
|
+-- set and the error code is recorded. Further errors, if they occur, do not
|
|
+-- affect this recorded code. When 'alErrors' is read, the error is returned and
|
|
+-- the flag is cleared, so that a further error will again record its code. If
|
|
+-- reading 'alErrors' returns @\[\]@ then there has been no detectable error
|
|
+-- since the last time 'alErrors' (or since the AL was initialized).
|
|
+--
|
|
+-- When an error flag is set, results of AL operations are undefined only if
|
|
+-- 'ALOutOfMemory' has occurred. In other cases, the command generating the
|
|
+-- error is ignored so that it has no effect on AL state or output buffer
|
|
+-- contents. If the error generating command returns a value, it returns zero.
|
|
+-- If the generating command modifies values through a pointer argument, no
|
|
+-- change is made to these values. These error semantics apply only to AL
|
|
+-- errors, not to system errors such as memory access errors.
|
|
+
|
|
+alErrors :: GettableStateVar [ALError]
|
|
+alErrors =
|
|
+ makeGettableStateVar $ do
|
|
+ c <- alGetError
|
|
+ if c == al_NO_ERROR
|
|
+ then return []
|
|
+ else do
|
|
+ s <- getString (ALErrorCategory c)
|
|
+ return [ ALError (unmarshalALErrorCategory c) s ]
|
|
+
|
|
+foreign import CALLCONV unsafe "alGetError"
|
|
+ alGetError :: IO ALenum
|
|
diff -uNr --exclude=autom4te.cache --exclude=.cvsignore hugs98-Mar2005-patched/fptools/libraries/OpenAL/Sound/OpenAL/AL/Extensions.hs ghc-6.4.2/libraries/OpenAL/Sound/OpenAL/AL/Extensions.hs
|
|
--- hugs98-Mar2005-patched/fptools/libraries/OpenAL/Sound/OpenAL/AL/Extensions.hs 1970-01-01 09:00:00.000000000 +0900
|
|
+++ ghc-6.4.2/libraries/OpenAL/Sound/OpenAL/AL/Extensions.hs 2006-03-22 00:58:03.000000000 +0900
|
|
@@ -0,0 +1,102 @@
|
|
+--------------------------------------------------------------------------------
|
|
+-- |
|
|
+-- Module : Sound.OpenAL.AL.Extensions
|
|
+-- Copyright : (c) Sven Panne 2003-2005
|
|
+-- License : BSD-style (see the file libraries/OpenAL/LICENSE)
|
|
+--
|
|
+-- Maintainer : sven.panne@aedion.de
|
|
+-- Stability : provisional
|
|
+-- Portability : portable
|
|
+--
|
|
+-- This module corresponds to section 3.1.2 (String Queries) and chapter 7
|
|
+-- (Appendix: Extensions) of the OpenAL Specification and Reference (version
|
|
+-- 1.1).
|
|
+--
|
|
+--------------------------------------------------------------------------------
|
|
+
|
|
+module Sound.OpenAL.AL.Extensions (
|
|
+ alExtensions, alIsExtensionPresent, alProcAddress, alEnumValue, alVersion
|
|
+) where
|
|
+
|
|
+import Foreign.Ptr ( Ptr, FunPtr )
|
|
+import Graphics.Rendering.OpenGL.GL.StateVar (
|
|
+ GettableStateVar, makeGettableStateVar )
|
|
+import Sound.OpenAL.AL.ALboolean ( unmarshalALboolean )
|
|
+import Sound.OpenAL.AL.BasicTypes ( ALboolean, ALchar, ALenum )
|
|
+import Sound.OpenAL.AL.QueryUtils ( StringName(..), getString )
|
|
+import Sound.OpenAL.AL.String ( withALString )
|
|
+
|
|
+#ifdef __HADDOCK__
|
|
+import Foreign.Ptr ( nullFunPtr )
|
|
+#endif
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+
|
|
+-- | Contains the list of available extensions.
|
|
+
|
|
+alExtensions :: GettableStateVar [String]
|
|
+alExtensions = makeGettableStateVar (fmap words $ getString Extensions)
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+
|
|
+-- | Contains a version string in the format @\"/\<spec major number\>/./\<spec
|
|
+-- minor number\>/ /\<optional vendor version information\>/\"@.
|
|
+
|
|
+alVersion :: GettableStateVar String
|
|
+alVersion = makeGettableStateVar (getString Version)
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+
|
|
+-- | To verify that a given extension is available for the current context, use
|
|
+-- 'alIsExtensionPresent'. For invalid and unsupported string tokens it contains
|
|
+-- 'False'. The extension name is not case sensitive: The implementation will
|
|
+-- convert the name to all upper-case internally (and will express extension
|
|
+-- names in upper-case).
|
|
+
|
|
+alIsExtensionPresent :: String -> GettableStateVar Bool
|
|
+alIsExtensionPresent extensionName =
|
|
+ makeGettableStateVar $
|
|
+ fmap unmarshalALboolean $
|
|
+ withALString extensionName alIsExtensionPresent_
|
|
+
|
|
+foreign import CALLCONV unsafe "alIsExtensionPresent"
|
|
+ alIsExtensionPresent_ :: Ptr ALchar -> IO ALboolean
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+
|
|
+-- | To retrieving function entry addresses, applications can use
|
|
+-- 'alProcAddress'. It contains 'nullFunPtr' if no entry point with the given
|
|
+-- name can be found. Implementations are free to use 'nullFunPtr' if an
|
|
+-- entry point is present, but not applicable for the current context. However
|
|
+-- the specification does not guarantee this behavior. Applications can use
|
|
+-- 'alProcAddress' to obtain core API entry points, not just extensions. This
|
|
+-- is the recommended way to dynamically load and unload OpenAL DLLs as sound
|
|
+-- drivers.
|
|
+
|
|
+alProcAddress :: String -> GettableStateVar (FunPtr a)
|
|
+alProcAddress funcName = makeGettableStateVar $
|
|
+ withALString funcName alGetProcAddress
|
|
+
|
|
+foreign import CALLCONV unsafe "alGetProcAddress"
|
|
+ alGetProcAddress :: Ptr ALchar -> IO (FunPtr a)
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+
|
|
+-- | To obtain enumeration values for extensions, the application has to use
|
|
+-- 'alEnumValue' of an extension token. Enumeration values are defined within
|
|
+-- the OpenAL name space and allocated according to specification of the core
|
|
+-- API and the extensions, thus they are context-independent.
|
|
+--
|
|
+-- 'alEnumValue' contains 0 if the enumeration can not be found. The presence of
|
|
+-- an enum value does not guarantee the applicability of an extension to the
|
|
+-- current context. A non-zero value indicates merely that the implementation is
|
|
+-- aware of the existence of this extension. Implementations should not attempt
|
|
+-- to use 0 to indicate that the extensions is not supported for the current
|
|
+-- context.
|
|
+
|
|
+alEnumValue :: String -> GettableStateVar ALenum
|
|
+alEnumValue enumName = makeGettableStateVar $
|
|
+ withALString enumName alGetEnumValue
|
|
+
|
|
+foreign import CALLCONV unsafe "alGetEnumValue"
|
|
+ alGetEnumValue :: Ptr ALchar -> IO ALenum
|
|
diff -uNr --exclude=autom4te.cache --exclude=.cvsignore hugs98-Mar2005-patched/fptools/libraries/OpenAL/Sound/OpenAL/AL/Format.hs ghc-6.4.2/libraries/OpenAL/Sound/OpenAL/AL/Format.hs
|
|
--- hugs98-Mar2005-patched/fptools/libraries/OpenAL/Sound/OpenAL/AL/Format.hs 2004-04-05 21:55:40.000000000 +0900
|
|
+++ ghc-6.4.2/libraries/OpenAL/Sound/OpenAL/AL/Format.hs 2006-03-22 00:58:03.000000000 +0900
|
|
@@ -2,13 +2,15 @@
|
|
--------------------------------------------------------------------------------
|
|
-- |
|
|
-- Module : Sound.OpenAL.AL.Format
|
|
--- Copyright : (c) Sven Panne 2003-2004
|
|
+-- Copyright : (c) Sven Panne 2003-2005
|
|
-- License : BSD-style (see the file libraries/OpenAL/LICENSE)
|
|
--
|
|
-- Maintainer : sven.panne@aedion.de
|
|
-- Stability : provisional
|
|
-- Portability : portable
|
|
--
|
|
+-- This is a purely internal module for (un-)marshaling Format.
|
|
+--
|
|
--------------------------------------------------------------------------------
|
|
|
|
module Sound.OpenAL.AL.Format (
|
|
@@ -16,49 +18,33 @@
|
|
) where
|
|
|
|
import Sound.OpenAL.AL.BasicTypes ( ALenum )
|
|
+import Sound.OpenAL.Constants (
|
|
+ al_FORMAT_MONO8, al_FORMAT_MONO16, al_FORMAT_STEREO8, al_FORMAT_STEREO16 )
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
-#include "HsOpenALConfig.h"
|
|
-
|
|
---------------------------------------------------------------------------------
|
|
+-- | Valid sound formats. An implementation may expose other formats, see
|
|
+-- "Sound.OpenAL.ALC.Extensions" for information on determining if additional
|
|
+-- formats are supported.
|
|
|
|
data Format =
|
|
Mono8
|
|
| Mono16
|
|
| Stereo8
|
|
| Stereo16
|
|
- | IMAADPCMMono16
|
|
- | IMAADPCMStereo16
|
|
- | Wave
|
|
- | Vorbis
|
|
- | Quad8
|
|
- | Quad16
|
|
deriving ( Eq, Ord, Show )
|
|
|
|
marshalFormat :: Format -> ALenum
|
|
marshalFormat x = case x of
|
|
- Mono8 -> 0x1100
|
|
- Mono16 -> 0x1101
|
|
- Stereo8 -> 0x1102
|
|
- Stereo16 -> 0x1103
|
|
- IMAADPCMMono16 -> 0x10000
|
|
- IMAADPCMStereo16 -> 0x10001
|
|
- Wave -> 0x10002
|
|
- Vorbis -> CONST_AL_FORMAT_VORBIS_EXT
|
|
- Quad8 -> 0x10004
|
|
- Quad16 -> 0x10005
|
|
+ Mono8 -> al_FORMAT_MONO8
|
|
+ Mono16 -> al_FORMAT_MONO16
|
|
+ Stereo8 -> al_FORMAT_STEREO8
|
|
+ Stereo16 -> al_FORMAT_STEREO16
|
|
|
|
unmarshalFormat :: ALenum -> Format
|
|
unmarshalFormat x
|
|
- | x == 0x1100 = Mono8
|
|
- | x == 0x1101 = Mono16
|
|
- | x == 0x1102 = Stereo8
|
|
- | x == 0x1103 = Stereo16
|
|
- | x == 0x10000 = IMAADPCMMono16
|
|
- | x == 0x10001 = IMAADPCMStereo16
|
|
- | x == 0x10002 = Wave
|
|
- | x == CONST_AL_FORMAT_VORBIS_EXT = Vorbis
|
|
- | x == 0x10004 = Quad8
|
|
- | x == 0x10005 = Quad16
|
|
+ | x == al_FORMAT_MONO8 = Mono8
|
|
+ | x == al_FORMAT_MONO16 = Mono16
|
|
+ | x == al_FORMAT_STEREO8 = Stereo8
|
|
+ | x == al_FORMAT_STEREO16 = Stereo16
|
|
| otherwise = error ("unmarshalFormat: illegal value " ++ show x)
|
|
diff -uNr --exclude=autom4te.cache --exclude=.cvsignore hugs98-Mar2005-patched/fptools/libraries/OpenAL/Sound/OpenAL/AL/Listener.hs ghc-6.4.2/libraries/OpenAL/Sound/OpenAL/AL/Listener.hs
|
|
--- hugs98-Mar2005-patched/fptools/libraries/OpenAL/Sound/OpenAL/AL/Listener.hs 2004-01-03 04:03:09.000000000 +0900
|
|
+++ ghc-6.4.2/libraries/OpenAL/Sound/OpenAL/AL/Listener.hs 2006-03-22 00:58:03.000000000 +0900
|
|
@@ -1,70 +1,112 @@
|
|
--------------------------------------------------------------------------------
|
|
-- |
|
|
-- Module : Sound.OpenAL.AL.Listener
|
|
--- Copyright : (c) Sven Panne 2003-2004
|
|
+-- Copyright : (c) Sven Panne 2003-2005
|
|
-- License : BSD-style (see the file libraries/OpenAL/LICENSE)
|
|
--
|
|
-- Maintainer : sven.panne@aedion.de
|
|
-- Stability : provisional
|
|
-- Portability : portable
|
|
--
|
|
---------------------------------------------------------------------------------
|
|
+-- This module corresponds to sections 4.1 (Basic Listener and Source
|
|
+-- Attributes) and 4.2 (Listener Object) of the OpenAL Specification and
|
|
+-- Reference (version 1.1).
|
|
+--
|
|
+-- The listener object defines various properties that affect processing of the
|
|
+-- sound for the actual output. The listener is unique for an OpenAL Context,
|
|
+-- and has no name. By controlling the listener, the application controls the
|
|
+-- way the user experiences the virtual world, as the listener defines the
|
|
+-- sampling\/pickup point and orientation, and other parameters that affect the
|
|
+-- output stream.
|
|
+--
|
|
+-- It is entirely up to the driver and hardware configuration, i.e. the
|
|
+-- installation of OpenAL as part of the operating system and hardware setup,
|
|
+-- whether the output stream is generated for headphones or 2 speakers, 4.1
|
|
+-- speakers, or other arrangements, whether (and which) HRTFs are applied,
|
|
+-- etc...
|
|
+--
|
|
+---------------------------------------------------------------------------------
|
|
|
|
module Sound.OpenAL.AL.Listener (
|
|
- listenerGain, listenerPosition, listenerVelocity, orientation
|
|
+ listenerPosition, listenerVelocity, Gain, listenerGain, orientation
|
|
) where
|
|
|
|
-import Foreign.Marshal.Alloc ( alloca )
|
|
import Foreign.Marshal.Array ( allocaArray, withArray )
|
|
import Foreign.Marshal.Utils ( with )
|
|
import Foreign.Ptr ( Ptr )
|
|
+import Foreign.Storable ( Storable )
|
|
import Graphics.Rendering.OpenGL.GL.CoordTrans ( Vector3(..) )
|
|
import Graphics.Rendering.OpenGL.GL.VertexSpec ( Vertex3(..) )
|
|
import Graphics.Rendering.OpenGL.GL.StateVar ( StateVar, makeStateVar )
|
|
import Sound.OpenAL.AL.BasicTypes ( ALenum, ALfloat )
|
|
import Sound.OpenAL.AL.PeekPoke ( peek1, peek3, peek6 )
|
|
import Sound.OpenAL.AL.QueryUtils (
|
|
- GetPName(GetGain,GetPosition,GetVelocity,GetOrientation), marshalGetPName )
|
|
+ GetPName(GetPosition,GetVelocity,GetGain,GetOrientation), marshalGetPName )
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
-listenerGain :: StateVar ALfloat
|
|
-listenerGain =
|
|
- makeStateVar
|
|
- (do alloca $ \buf -> do
|
|
- getListenerfv GetGain buf
|
|
- peek1 id buf)
|
|
- (listenerf GetGain)
|
|
-
|
|
---------------------------------------------------------------------------------
|
|
+-- | 'listenerPosition' contains the current location of the listener in the
|
|
+-- world coordinate system. Any 3-tuple of valid float values is allowed.
|
|
+-- Implementation behavior on encountering NaN and infinity is not defined. The
|
|
+-- initial position is ('Vertex3' 0 0 0).
|
|
|
|
listenerPosition :: StateVar (Vertex3 ALfloat)
|
|
-listenerPosition =
|
|
- makeStateVar
|
|
- (do allocaArray 3 $ \buf -> do
|
|
- getListenerfv GetPosition buf
|
|
- peek3 Vertex3 buf)
|
|
- (\pos -> with pos $ listenerVertex3 GetPosition)
|
|
+listenerPosition = makeListenerVar GetPosition 3 (peek3 Vertex3) listener3f
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
+-- | 'listenerVelocity' contains current velocity (speed and direction) of the
|
|
+-- listener in the world coordinate system. Any 3-tuple of valid float
|
|
+-- values is allowed, and the initial velocity is ('Vector3' 0 0 0).
|
|
+-- 'listenerVelocity' does not affect 'listenerPosition'. OpenAL does not
|
|
+-- calculate the velocity from subsequent position updates, nor does it
|
|
+-- adjust the position over time based on the specified velocity. Any
|
|
+-- such calculation is left to the application. For the purposes of sound
|
|
+-- processing, position and velocity are independent parameters affecting
|
|
+-- different aspects of the sounds.
|
|
+--
|
|
+-- 'listenerVelocity' is taken into account by the driver to synthesize the
|
|
+-- Doppler effect perceived by the listener for each source, based on the
|
|
+-- velocity of both source and listener, and the Doppler related parameters.
|
|
+
|
|
listenerVelocity :: StateVar (Vector3 ALfloat)
|
|
-listenerVelocity =
|
|
- makeStateVar
|
|
- (do allocaArray 3 $ \buf -> do
|
|
- getListenerfv GetVelocity buf
|
|
- peek3 Vector3 buf)
|
|
- (\vel -> with vel $ listenerVector3 GetVelocity)
|
|
+listenerVelocity = makeListenerVar GetVelocity 3 (peek3 Vector3) listener3f
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+
|
|
+-- | A scalar amplitude multiplier.
|
|
+type Gain = ALfloat
|
|
+
|
|
+-- | 'listenerGain' contains a scalar amplitude multiplier, which is effectively
|
|
+-- applied to all sources in the current context. The initial value 1 means
|
|
+-- that the sound is unattenuated. A 'listenerGain' value of 0.5 is equivalent
|
|
+-- to an attenuation of 6dB. The value zero equals silence (no output). Driver
|
|
+-- implementations are free to optimize this case and skip mixing and processing
|
|
+-- stages where applicable. The implementation is in charge of ensuring
|
|
+-- artifact-free (click-free) changes of gain values and is free to defer actual
|
|
+-- modification of the sound samples, within the limits of acceptable latencies.
|
|
+--
|
|
+-- A 'listenerGain' larger than 1 (amplification) is permitted. However, the
|
|
+-- implementation is free to clamp the total gain (effective gain per source
|
|
+-- times listener gain) to 1 to prevent overflow.
|
|
+
|
|
+listenerGain :: StateVar Gain
|
|
+listenerGain = makeListenerVar GetGain 1 (peek1 id) listenerf
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
+-- | 'orientation' contains an \"at\" vector and an \"up\" vector, where the
|
|
+-- \"at\" vector represents the \"forward\" direction of the listener and the
|
|
+-- orthogonal projection of the \"up\" vector into the subspace perpendicular to
|
|
+-- the \"at\" vector represents the \"up\" direction for the listener. OpenAL
|
|
+-- expects two vectors that are linearly independent. These vectors are not
|
|
+-- expected to be normalized. If the two vectors are linearly dependent,
|
|
+-- behavior is undefined. The initial orientation is ('Vector3' 0 0 (-1),
|
|
+-- 'Vector3' 0 1 0), i.e. looking down the Z axis with the Y axis pointing
|
|
+-- upwards.
|
|
+
|
|
orientation :: StateVar (Vector3 ALfloat, Vector3 ALfloat)
|
|
-orientation =
|
|
- makeStateVar
|
|
- (do allocaArray 6 $ \buf -> do
|
|
- getListenerfv GetOrientation buf
|
|
- peek6 Vector3 buf)
|
|
- (\(at, up) -> withArray [at, up] $ listenerVector3 GetOrientation)
|
|
+orientation = makeListenerVar GetOrientation 6 (peek6 Vector3) listenerVector6
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
@@ -74,31 +116,35 @@
|
|
foreign import CALLCONV unsafe "alListenerf"
|
|
alListenerf :: ALenum -> ALfloat -> IO ()
|
|
|
|
-listenerVertex3 :: GetPName -> Ptr (Vertex3 ALfloat) -> IO ()
|
|
-listenerVertex3 = alListenerfv . marshalGetPName
|
|
+--------------------------------------------------------------------------------
|
|
+
|
|
+listener3f :: Storable a => GetPName -> a -> IO ()
|
|
+listener3f n x = with x $ listenerfv n
|
|
|
|
-listenerVector3 :: GetPName -> Ptr (Vector3 ALfloat) -> IO ()
|
|
-listenerVector3 = alListenerfv . marshalGetPName
|
|
+listenerVector6 :: GetPName -> (Vector3 ALfloat, Vector3 ALfloat) -> IO ()
|
|
+listenerVector6 n (x, y) = withArray [x, y] $ listenerfv n
|
|
+
|
|
+listenerfv :: GetPName -> Ptr a -> IO ()
|
|
+listenerfv = alListenerfv . marshalGetPName
|
|
|
|
foreign import CALLCONV unsafe "alListenerfv"
|
|
alListenerfv :: ALenum -> Ptr a -> IO ()
|
|
|
|
+--------------------------------------------------------------------------------
|
|
+
|
|
getListenerfv :: GetPName -> Ptr ALfloat -> IO ()
|
|
getListenerfv = alGetListenerfv . marshalGetPName
|
|
|
|
foreign import CALLCONV unsafe "alGetListenerfv"
|
|
alGetListenerfv :: ALenum -> Ptr ALfloat -> IO ()
|
|
|
|
-{-
|
|
-listenerf:
|
|
-AL_GAIN_LINEAR_LOKI
|
|
-AL_GAIN
|
|
-
|
|
-listenerfv:
|
|
-AL_POSITION
|
|
-AL_VELOCITY
|
|
-AL_ORIENTATION (6: at + up)
|
|
-
|
|
-getlistenerfv:
|
|
-all above
|
|
--}
|
|
+--------------------------------------------------------------------------------
|
|
+
|
|
+makeListenerVar :: GetPName -> Int -> (Ptr ALfloat -> IO a)
|
|
+ -> (GetPName -> a -> IO ()) -> StateVar a
|
|
+makeListenerVar pname size reader writer =
|
|
+ makeStateVar
|
|
+ (allocaArray size $ \buf -> do
|
|
+ getListenerfv pname buf
|
|
+ reader buf)
|
|
+ (writer pname)
|
|
diff -uNr --exclude=autom4te.cache --exclude=.cvsignore hugs98-Mar2005-patched/fptools/libraries/OpenAL/Sound/OpenAL/AL/PeekPoke.hs ghc-6.4.2/libraries/OpenAL/Sound/OpenAL/AL/PeekPoke.hs
|
|
--- hugs98-Mar2005-patched/fptools/libraries/OpenAL/Sound/OpenAL/AL/PeekPoke.hs 2004-01-03 04:03:09.000000000 +0900
|
|
+++ ghc-6.4.2/libraries/OpenAL/Sound/OpenAL/AL/PeekPoke.hs 2006-03-22 00:58:03.000000000 +0900
|
|
@@ -2,7 +2,7 @@
|
|
--------------------------------------------------------------------------------
|
|
-- |
|
|
-- Module : Sound.OpenAL.AL.PeekPoke
|
|
--- Copyright : (c) Sven Panne 2003-2004
|
|
+-- Copyright : (c) Sven Panne 2003-2005
|
|
-- License : BSD-style (see the file libraries/OpenGL/LICENSE)
|
|
--
|
|
-- Maintainer : sven.panne@aedion.de
|
|
@@ -14,8 +14,7 @@
|
|
--------------------------------------------------------------------------------
|
|
|
|
module Sound.OpenAL.AL.PeekPoke (
|
|
- poke1, poke3, poke6,
|
|
- peek1, peek3, peek6
|
|
+ poke1, peek1, peek3, peek6
|
|
) where
|
|
|
|
import Foreign.Ptr ( Ptr )
|
|
@@ -32,23 +31,6 @@
|
|
poke1 ptr x =
|
|
pokeElemOff ptr 0 x
|
|
|
|
-{-# INLINE poke3 #-}
|
|
-poke3 :: Storable a => Ptr a -> a -> a -> a -> IO ()
|
|
-poke3 ptr x y z = do
|
|
- pokeElemOff ptr 0 x
|
|
- pokeElemOff ptr 1 y
|
|
- pokeElemOff ptr 2 z
|
|
-
|
|
-{-# INLINE poke6 #-}
|
|
-poke6 :: Storable a => Ptr a -> (a, a, a) -> (a, a, a) -> IO ()
|
|
-poke6 ptr (x, y, z) (u, v, w) = do
|
|
- pokeElemOff ptr 0 x
|
|
- pokeElemOff ptr 1 y
|
|
- pokeElemOff ptr 2 z
|
|
- pokeElemOff ptr 3 u
|
|
- pokeElemOff ptr 4 v
|
|
- pokeElemOff ptr 5 w
|
|
-
|
|
--------------------------------------------------------------------------------
|
|
|
|
{-# INLINE peek1 #-}
|
|
diff -uNr --exclude=autom4te.cache --exclude=.cvsignore hugs98-Mar2005-patched/fptools/libraries/OpenAL/Sound/OpenAL/AL/QueryUtils.hs ghc-6.4.2/libraries/OpenAL/Sound/OpenAL/AL/QueryUtils.hs
|
|
--- hugs98-Mar2005-patched/fptools/libraries/OpenAL/Sound/OpenAL/AL/QueryUtils.hs 2004-01-03 04:03:09.000000000 +0900
|
|
+++ ghc-6.4.2/libraries/OpenAL/Sound/OpenAL/AL/QueryUtils.hs 2006-03-22 00:58:03.000000000 +0900
|
|
@@ -2,7 +2,7 @@
|
|
--------------------------------------------------------------------------------
|
|
-- |
|
|
-- Module : Sound.OpenAL.AL.QueryUtils
|
|
--- Copyright : (c) Sven Panne 2003-2004
|
|
+-- Copyright : (c) Sven Panne 2003-2005
|
|
-- License : BSD-style (see the file libraries/OpenGL/LICENSE)
|
|
--
|
|
-- Maintainer : sven.panne@aedion.de
|
|
@@ -15,124 +15,108 @@
|
|
|
|
module Sound.OpenAL.AL.QueryUtils (
|
|
GetPName(..), marshalGetPName,
|
|
- getFloat1, getFloat3, getFloat6
|
|
+ StringName(..), getString
|
|
) where
|
|
|
|
-import Control.Monad ( liftM )
|
|
-import Foreign.Marshal.Array ( allocaArray )
|
|
import Foreign.Ptr ( Ptr )
|
|
-import Sound.OpenAL.AL.BasicTypes ( ALenum, ALfloat )
|
|
-import Sound.OpenAL.AL.PeekPoke ( peek3, peek6 )
|
|
+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 =
|
|
- GetSourceType
|
|
- | GetSourceRelative
|
|
- | GetConeInnerAngle
|
|
- | GetConeOuterAngle
|
|
- | GetPitch
|
|
+ GetDistanceModel
|
|
+ | GetDopplerFactor
|
|
+ | GetSpeedOfSound
|
|
+
|
|
| GetPosition
|
|
- | GetDirection
|
|
+
|
|
| GetVelocity
|
|
- | GetLooping
|
|
- | GetStreaming
|
|
- | GetBuffer
|
|
| GetGain
|
|
- | GetByte
|
|
- | GetMinGain
|
|
- | GetMaxGain
|
|
+
|
|
| GetOrientation
|
|
- | GetSourceState
|
|
+
|
|
+ | GetSourceRelative
|
|
+ | GetSourceType
|
|
+ | GetLooping
|
|
+ | GetBuffer
|
|
| GetBuffersQueued
|
|
| GetBuffersProcessed
|
|
- | GetPending
|
|
- | GetProcessed
|
|
+ | GetMinGain
|
|
+ | GetMaxGain
|
|
| GetReferenceDistance
|
|
| GetRolloffFactor
|
|
- | GetConeOuterGain
|
|
| GetMaxDistance
|
|
- | GetFrequency
|
|
- | GetBits
|
|
- | GetChannels
|
|
- | GetSize
|
|
- | GetVendor
|
|
- | GetVersion
|
|
- | GetRenderer
|
|
- | GetExtensions
|
|
- | GetDopplerFactor
|
|
- | GetDopplerVelocity
|
|
- | GetDistanceScale
|
|
- | GetDistanceModel
|
|
- | GetInverseDistance
|
|
- | GetInverseDistanceClamped
|
|
+ | GetPitch
|
|
+ | GetDirection
|
|
+ | GetConeInnerAngle
|
|
+ | GetConeOuterAngle
|
|
+ | GetConeOuterGain
|
|
+ | GetSecOffset
|
|
+ | GetSampleOffset
|
|
+ | GetByteOffset
|
|
+ | GetSourceState
|
|
|
|
marshalGetPName :: GetPName -> ALenum
|
|
marshalGetPName x = case x of
|
|
- GetSourceType -> 0x0200
|
|
- GetSourceRelative -> 0x0202
|
|
- GetConeInnerAngle -> 0x1001
|
|
- GetConeOuterAngle -> 0x1002
|
|
- GetPitch -> 0x1003
|
|
- GetPosition -> 0x1004
|
|
- GetDirection -> 0x1005
|
|
- GetVelocity -> 0x1006
|
|
- GetLooping -> 0x1007
|
|
- GetStreaming -> 0x1008
|
|
- GetBuffer -> 0x1009
|
|
- GetGain -> 0x100A
|
|
- GetByte -> 0x100C
|
|
- GetMinGain -> 0x100D
|
|
- GetMaxGain -> 0x100E
|
|
- GetOrientation -> 0x100F
|
|
- GetSourceState -> 0x1010
|
|
- GetBuffersQueued -> 0x1015
|
|
- GetBuffersProcessed -> 0x1016
|
|
- GetPending -> 0x1017
|
|
- GetProcessed -> 0x1018
|
|
- GetReferenceDistance -> 0x1020
|
|
- GetRolloffFactor -> 0x1021
|
|
- GetConeOuterGain -> 0x1022
|
|
- GetMaxDistance -> 0x1023
|
|
- GetFrequency -> 0x2001
|
|
- GetBits -> 0x2002
|
|
- GetChannels -> 0x2003
|
|
- GetSize -> 0x2004
|
|
- GetVendor -> 0xB001
|
|
- GetVersion -> 0xB002
|
|
- GetRenderer -> 0xB003
|
|
- GetExtensions -> 0xB004
|
|
- GetDopplerFactor -> 0xC000
|
|
- GetDopplerVelocity -> 0xC001
|
|
- GetDistanceScale -> 0xC002
|
|
- GetDistanceModel -> 0xD000
|
|
- GetInverseDistance -> 0xD001
|
|
- GetInverseDistanceClamped -> 0xD002
|
|
+ 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
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
--- Note: OpenAL is not yet orthogonal enough to use getFloatv here, too.
|
|
-
|
|
-getFloat1 :: (ALfloat -> a) -> GetPName -> IO a
|
|
-getFloat1 f = liftM f . alGetFloat . marshalGetPName
|
|
-
|
|
-foreign import CALLCONV unsafe "alGetFloat"
|
|
- alGetFloat :: ALenum -> IO ALfloat
|
|
-
|
|
-getFloat3 :: (ALfloat -> ALfloat -> ALfloat -> a) -> GetPName -> IO a
|
|
-getFloat3 f n = allocaArray 3 $ \buf -> do
|
|
- getFloatv n buf
|
|
- peek3 f buf
|
|
-
|
|
-getFloat6 ::
|
|
- (ALfloat -> ALfloat -> ALfloat -> a)
|
|
- -> GetPName -> IO (a, a)
|
|
-getFloat6 f n = allocaArray 6 $ \buf -> do
|
|
- getFloatv n buf
|
|
- peek6 f buf
|
|
+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
|
|
|
|
-getFloatv :: GetPName -> Ptr ALfloat -> IO ()
|
|
-getFloatv = alGetFloatv . marshalGetPName
|
|
+getString :: StringName -> IO String
|
|
+getString n = alGetString (marshalStringName n) >>= peekALString
|
|
|
|
-foreign import CALLCONV unsafe "alGetFloatv"
|
|
- alGetFloatv :: ALenum -> Ptr ALfloat -> IO ()
|
|
+foreign import CALLCONV unsafe "alGetString"
|
|
+ alGetString :: ALenum -> IO (Ptr ALchar)
|
|
diff -uNr --exclude=autom4te.cache --exclude=.cvsignore hugs98-Mar2005-patched/fptools/libraries/OpenAL/Sound/OpenAL/AL/Source.hs ghc-6.4.2/libraries/OpenAL/Sound/OpenAL/AL/Source.hs
|
|
--- hugs98-Mar2005-patched/fptools/libraries/OpenAL/Sound/OpenAL/AL/Source.hs 2004-03-30 16:07:15.000000000 +0900
|
|
+++ ghc-6.4.2/libraries/OpenAL/Sound/OpenAL/AL/Source.hs 2006-03-22 00:58:03.000000000 +0900
|
|
@@ -1,119 +1,775 @@
|
|
--------------------------------------------------------------------------------
|
|
-- |
|
|
-- Module : Sound.OpenAL.AL.Source
|
|
--- Copyright : (c) Sven Panne 2003-2004
|
|
+-- Copyright : (c) Sven Panne 2003-2005
|
|
-- License : BSD-style (see the file libraries/OpenAL/LICENSE)
|
|
--
|
|
-- Maintainer : sven.panne@aedion.de
|
|
-- Stability : provisional
|
|
-- Portability : portable
|
|
--
|
|
+-- This module corresponds to sections 4.1 (Basic Listener and Source
|
|
+-- Attributes) and 4.3 (Source Objects) of the OpenAL Specification and
|
|
+-- Reference (version 1.1).
|
|
+--
|
|
+-- Sources specify attributes like position, velocity, and a buffer with sample
|
|
+-- data. By controlling a source\'s attributes the application can modify and
|
|
+-- parameterize the static sample data provided by the buffer referenced by the
|
|
+-- source. Sources define a localized sound, and encapsulate a set of attributes
|
|
+-- applied to a sound at its origin, i.e. in the very first stage of the
|
|
+-- processing on the way to the listener. Source related effects have to be
|
|
+-- applied before listener related effects unless the output is invariant to any
|
|
+-- collapse or reversal of order. OpenAL also provides additional functions to
|
|
+-- manipulate and query the execution state of sources: the current playing
|
|
+-- status of a source, including access to the current sampling position within
|
|
+-- the associated buffer.
|
|
+--
|
|
--------------------------------------------------------------------------------
|
|
|
|
module Sound.OpenAL.AL.Source (
|
|
- Source
|
|
+ -- * The Source Type
|
|
+ Source,
|
|
+
|
|
+ -- * Source Attributes
|
|
+
|
|
+ -- ** Basic Source Attributes
|
|
+ sourcePosition, sourceVelocity, sourceGain,
|
|
+
|
|
+ -- ** Source Positioning
|
|
+ SourceRelative(..), sourceRelative,
|
|
+
|
|
+ -- ** Source Type
|
|
+ SourceType(..), sourceType,
|
|
+
|
|
+ -- ** Buffer Looping
|
|
+ LoopingMode(..), loopingMode,
|
|
+
|
|
+ -- ** Current Buffer
|
|
+ buffer,
|
|
+
|
|
+ -- ** Queue State Queries
|
|
+ buffersQueued, buffersProcessed,
|
|
+
|
|
+ -- ** Bounds on Gain
|
|
+ gainBounds,
|
|
+
|
|
+ -- ** Distance Model Attributes
|
|
+ referenceDistance, rolloffFactor, maxDistance,
|
|
+
|
|
+ -- ** Frequency Shift by Pitch
|
|
+ pitch,
|
|
+
|
|
+ -- ** Direction and Cone
|
|
+ -- $DirectionAndCone
|
|
+ direction, coneAngles, coneOuterGain,
|
|
+
|
|
+ -- ** Offset
|
|
+ secOffset, sampleOffset, byteOffset,
|
|
+
|
|
+ -- * Queuing Buffers with a Source
|
|
+ -- $QueuingBuffersWithASource
|
|
+ queueBuffers, unqueueBuffers,
|
|
+
|
|
+ -- * Managing Source Execution
|
|
+ -- $ManagingSourceExecution
|
|
+ SourceState(..), sourceState, play, pause, stop, rewind
|
|
) where
|
|
|
|
-import Control.Monad ( liftM )
|
|
+import Control.Monad ( liftM2 )
|
|
import Foreign.Marshal.Array ( withArrayLen, peekArray, allocaArray )
|
|
-import Foreign.Ptr ( Ptr )
|
|
+import Foreign.Marshal.Utils ( with )
|
|
+import Foreign.Ptr ( Ptr, castPtr )
|
|
+import Foreign.Storable ( Storable(..) )
|
|
import Graphics.Rendering.OpenGL.GL.BufferObjects ( ObjectName(..) )
|
|
+import Graphics.Rendering.OpenGL.GL.CoordTrans ( Vector3(..) )
|
|
+import Graphics.Rendering.OpenGL.GL.VertexSpec ( Vertex3(..) )
|
|
+import Graphics.Rendering.OpenGL.GL.StateVar (
|
|
+ HasGetter(get), HasSetter(($=)), makeStateVar, StateVar, GettableStateVar,
|
|
+ makeGettableStateVar )
|
|
+import Sound.OpenAL.AL.ALboolean ( marshalALboolean, unmarshalALboolean )
|
|
import Sound.OpenAL.AL.BasicTypes
|
|
-import Sound.OpenAL.AL.ALboolean ( unmarshalALboolean )
|
|
+import Sound.OpenAL.AL.Buffer ( Buffer )
|
|
+import Sound.OpenAL.AL.BufferInternal ( marshalBuffer, unmarshalBuffer )
|
|
+import Sound.OpenAL.AL.Listener ( Gain )
|
|
+import Sound.OpenAL.AL.PeekPoke ( peek1, poke1, peek3 )
|
|
+import Sound.OpenAL.AL.SourceState ( SourceState(..), unmarshalSourceState )
|
|
+import Sound.OpenAL.AL.QueryUtils (
|
|
+ GetPName(GetPosition,GetVelocity,GetGain,GetSourceRelative,GetSourceType,
|
|
+ GetLooping,GetBuffer,GetBuffersQueued,GetBuffersProcessed,
|
|
+ GetMinGain,GetMaxGain,GetReferenceDistance,GetRolloffFactor,
|
|
+ GetMaxDistance,GetPitch,GetDirection,GetConeInnerAngle,
|
|
+ GetConeOuterAngle,GetConeOuterGain,GetSecOffset,GetSampleOffset,
|
|
+ GetByteOffset,GetSourceState),
|
|
+ marshalGetPName )
|
|
+import Sound.OpenAL.Constants ( al_UNDETERMINED, al_STATIC, al_STREAMING )
|
|
+
|
|
+#ifdef __HADDOCK__
|
|
+import Sound.OpenAL.AL.Listener ( listenerGain )
|
|
+import Sound.OpenAL.AL.Errors ( ALErrorCategory(..) )
|
|
+#endif
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
-newtype Source = Source { sourceID :: ALuint }
|
|
+-- | The abstract buffer type.
|
|
+
|
|
+newtype Source = Source ALuint
|
|
deriving ( Eq, Ord, Show )
|
|
|
|
+instance Storable Source where
|
|
+ sizeOf ~(Source b) = sizeOf b
|
|
+ alignment ~(Source b) = alignment b
|
|
+ peek = peek1 Source . castPtr
|
|
+ poke ptr (Source b) = poke1 (castPtr ptr) b
|
|
+
|
|
instance ObjectName Source where
|
|
genObjectNames n =
|
|
allocaArray n $ \buf -> do
|
|
alGenSources (fromIntegral n) buf
|
|
- liftM (map Source) $ peekArray n buf
|
|
+ peekArray n buf
|
|
|
|
- deleteObjectNames sources =
|
|
- withArrayLen (map sourceID sources) $
|
|
- alDeleteSources . fromIntegral
|
|
+ deleteObjectNames = withArraySizei alDeleteSources
|
|
|
|
- isObjectName = liftM unmarshalALboolean . alIsSource . sourceID
|
|
+ isObjectName = fmap unmarshalALboolean . alIsSource
|
|
|
|
foreign import CALLCONV unsafe "alGenSources"
|
|
- alGenSources :: ALsizei -> Ptr ALuint -> IO ()
|
|
+ alGenSources :: ALsizei -> Ptr Source -> IO ()
|
|
|
|
foreign import CALLCONV unsafe "alDeleteSources"
|
|
- alDeleteSources :: ALsizei -> Ptr ALuint -> IO ()
|
|
+ alDeleteSources :: ALsizei -> Ptr Source -> IO ()
|
|
|
|
foreign import CALLCONV unsafe "alIsSource"
|
|
- alIsSource :: ALuint -> IO ALboolean
|
|
+ alIsSource :: Source -> IO ALboolean
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+
|
|
+-- | 'sourcePosition' contains the current location of the source in the world
|
|
+-- coordinate system. Any 3-tuple of valid float values is allowed.
|
|
+-- Implementation behavior on encountering NaN and infinity is not defined. The
|
|
+-- initial position is ('Vertex3' 0 0 0).
|
|
+
|
|
+sourcePosition :: Source -> StateVar (Vertex3 ALfloat)
|
|
+sourcePosition = makeSourceStateVar dictVertex3ALfloat GetPosition
|
|
+
|
|
+-- | 'sourceVelocity' contains current velocity (speed and direction) of the
|
|
+-- source in the world coordinate system. Any 3-tuple of valid float values is
|
|
+-- allowed, and the initial velocity is ('Vector3' 0 0 0). 'sourceVelocity' does
|
|
+-- not affect 'sourcePosition'. OpenAL does not calculate the velocity from
|
|
+-- subsequent position updates, nor does it adjust the position over time based
|
|
+-- on the specified velocity. Any such calculation is left to the application.
|
|
+-- For the purposes of sound processing, position and velocity are independent
|
|
+-- parameters affecting different aspects of the sounds.
|
|
+--
|
|
+-- 'sourceVelocity' is taken into account by the driver to synthesize the
|
|
+-- Doppler effect perceived by the listener for each source, based on the
|
|
+-- velocity of both source and listener, and the Doppler related parameters.
|
|
+
|
|
+sourceVelocity :: Source -> StateVar (Vector3 ALfloat)
|
|
+sourceVelocity = makeSourceStateVar dictVector3ALfloat GetVelocity
|
|
+
|
|
+-- | 'sourceGain' contains a scalar amplitude multiplier for the given source.
|
|
+-- The initial value 1 means that the sound is unattenuated. A 'sourceGain'
|
|
+-- value of 0.5 is equivalent to an attenuation of 6dB. The value zero equals
|
|
+-- silence (no output). Driver implementations are free to optimize this case
|
|
+-- and skip mixing and processing stages where applicable. The implementation is
|
|
+-- in charge of ensuring artifact-free (click-free) changes of gain values and
|
|
+-- is free to defer actual modification of the sound samples, within the limits
|
|
+-- of acceptable latencies.
|
|
+--
|
|
+-- A 'sourceGain' larger than 1 (amplification) is permitted. However, the
|
|
+-- implementation is free to clamp the total gain (effective gain per source
|
|
+-- times listener gain) to 1 to prevent overflow.
|
|
+
|
|
+sourceGain :: Source -> StateVar Gain
|
|
+sourceGain = makeSourceStateVar dictALfloat GetGain
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+
|
|
+-- | The entity to which the source attributes 'sourcePosition',
|
|
+-- 'sourceVelocity' and 'direction' are to be interpreted.
|
|
+
|
|
+data SourceRelative =
|
|
+ World
|
|
+ | Listener
|
|
+ deriving ( Eq, Ord, Show )
|
|
+
|
|
+marshalSourceRelative :: SourceRelative -> Bool
|
|
+marshalSourceRelative = (== Listener)
|
|
+
|
|
+unmarshalSourceRelative :: Bool -> SourceRelative
|
|
+unmarshalSourceRelative x = if x then Listener else World
|
|
+
|
|
+-- | If 'sourceRelative' contains 'Listener', it indicates indicates that the
|
|
+-- values specified by 'sourcePosition', 'sourceVelocity' and 'direction' are to
|
|
+-- be interpreted relative to the listener position. The initial value is
|
|
+-- 'World', indicating that those source attributes are to be interpreted
|
|
+-- relative to the world, i.e. they are considered absolute.
|
|
|
|
+sourceRelative :: Source -> StateVar SourceRelative
|
|
+sourceRelative = makeSourceStateVar dictSourceRelative GetSourceRelative
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+
|
|
+-- | When first created, a source will be in the 'Undetermined' state. If a
|
|
+-- buffer is then attached using 'buffer', then the source will enter the
|
|
+-- 'Static' state. If the first buffer attached to a source is attached using
|
|
+-- 'queueBuffers', then the source will enter the 'Streaming' state. A source of
|
|
+-- either state will be reset to state 'Undetermined' by setting its 'buffer' to
|
|
+-- 'Nothing', and attaching any buffer to a streaming source will change the
|
|
+-- state to 'Static'. Attempting to queue a buffer on a static source will
|
|
+-- result in an 'ALInvalidOperation' error.
|
|
+
|
|
+data SourceType =
|
|
+ Undetermined
|
|
+ | Static
|
|
+ | Streaming
|
|
+ deriving ( Eq, Ord, Show )
|
|
+
|
|
+unmarshalSourceType :: ALint -> SourceType
|
|
+unmarshalSourceType x
|
|
+ | x == al_UNDETERMINED = Undetermined
|
|
+ | x == al_STATIC = Static
|
|
+ | x == al_STREAMING = Streaming
|
|
+ | otherwise = error ("unmarshalSourceType: illegal value " ++ show x)
|
|
+
|
|
+-- | 'sourceType' indicates whether a source is ready to queue buffers, ready to
|
|
+-- use a static buffer, or is in an undetermined state where it can be used for
|
|
+-- either streaming or static playback.
|
|
+
|
|
+sourceType :: Source -> GettableStateVar SourceType
|
|
+sourceType = makeSourceGettableStateVar dictSourceType GetSourceType
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+
|
|
+-- | Specifies what should happen when the end of a buffer queue is reached.
|
|
+
|
|
+data LoopingMode =
|
|
+ OneShot
|
|
+ | Looping
|
|
+ deriving ( Eq, Ord, Show )
|
|
+
|
|
+marshalLoopingMode :: LoopingMode -> Bool
|
|
+marshalLoopingMode = (== Looping)
|
|
+
|
|
+unmarshalLoopingMode :: Bool -> LoopingMode
|
|
+unmarshalLoopingMode x = if x then Looping else OneShot
|
|
+
|
|
+-- | If 'loopingMode' contains 'Looping', it indicates that the source will not
|
|
+-- be in the 'Stopped' state once it reaches the end of last buffer in the
|
|
+-- buffer queue. Instead, the source will immediately promote to 'Initial' and
|
|
+-- 'Playing'. The initial value is 'OneShot'. 'loopingMode' can be changed on a
|
|
+-- source in any execution state. In particular, it can be changed on a
|
|
+-- 'Playing' source.
|
|
+
|
|
+loopingMode :: Source -> StateVar LoopingMode
|
|
+loopingMode = makeSourceStateVar dictLoopingMode GetLooping
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+
|
|
+-- | 'buffer' contains the current buffer object. Setting 'buffer' to 'Just' a
|
|
+-- buffer object makes it the head entry in the source\'s queue. Setting
|
|
+-- 'buffer'for a source in the 'Stopped' or 'Initial' state empties the entire
|
|
+-- queue, then appends the one buffer specified (or none at all if 'Nothing'
|
|
+-- was specified).
|
|
+--
|
|
+-- For a source in the 'Playing' or 'Paused' state, setting 'buffer' will result
|
|
+-- in the 'ALInvalidOperation' error state being set. 'buffer' can be applied only
|
|
+-- to sources in the 'Initial' and 'Stopped' states. Specifying an invalid
|
|
+-- buffer name (either because the buffer name doesn\'t exist or because that
|
|
+-- buffer can\'t be attached to the specified source) will result in an
|
|
+-- 'ALInvalidValue' error while specifying an invalid source name results in an
|
|
+-- 'ALInvalidName' error. Setting 'buffer' to 'Nothing' is a legal way to release
|
|
+-- the current buffer queue on a source in the 'Initial' or 'Stopped' state,
|
|
+-- whether the source has just one entry (current buffer) or more. Setting
|
|
+-- 'buffer' to 'Nothing' still causes an 'ALInvalidOperation' for any source in
|
|
+-- the 'Playing' or 'Paused' state, consequently it cannot be used to mute or
|
|
+-- stop a source. The initial value is 'Nothing'.
|
|
+
|
|
+buffer :: Source -> StateVar (Maybe Buffer)
|
|
+buffer = makeSourceStateVar dictMaybeBuffer GetBuffer
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+
|
|
+-- | 'buffersQueued' contains the number of buffers in the queue of a given
|
|
+-- source. This includes those not yet played, the one currently playing, and
|
|
+-- the ones that have been played already. It will contain 0 if 'buffer' has
|
|
+-- been set to 'Nothing'.
|
|
+
|
|
+buffersQueued :: Source -> GettableStateVar ALint
|
|
+buffersQueued = makeSourceGettableStateVar dictALint GetBuffersQueued
|
|
+
|
|
+-- | 'buffersProcessed' contains the number of buffers that have been played
|
|
+-- by a given source. Indirectly, this gives the index of the buffer currently
|
|
+-- playing. It can be used to determine how much slots are needed for unqueuing
|
|
+-- them. On a source in the 'Stopped' state, all buffers are processed. On a
|
|
+-- source in the 'Initial' state, no buffers are processed, all buffers are
|
|
+-- pending. It will contain 0 if 'buffer' has been set to 'Nothing'.
|
|
+
|
|
+buffersProcessed :: Source -> GettableStateVar ALint
|
|
+buffersProcessed = makeSourceGettableStateVar dictALint GetBuffersProcessed
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+
|
|
+-- | 'gainBounds' contains two scalar amplitude thresholds between 0 and 1
|
|
+-- (included): The minimum guaranteed gain for this source and the maximum gain
|
|
+-- permitted, with initial values 0 and 1, respectively At the end of the
|
|
+-- processing of various attenuation factors such as distance based attenuation
|
|
+-- and 'sourceGain', the effective gain calculated is compared to these values:
|
|
+--
|
|
+-- If the effective gain is lower than the minimum gain, the minimum gain is
|
|
+-- applied. This happens before the 'listenerGain' is applied. If a zero minimum
|
|
+-- gain is set, then the effective gain will not be corrected.
|
|
+--
|
|
+-- If the effective gain is higher than the maximum gain, the maximum gain is
|
|
+-- applied. This happens before the 'listenerGain' is applied. If the
|
|
+-- 'listenerGain' times the maximum gain still exceeds the maximum gain the
|
|
+-- implementation can handle, the implementation is free to clamp. If a zero
|
|
+-- maximum gain is set, then the source is effectively muted. The implementation
|
|
+-- is free to optimize for this situation, but no optimization is required or
|
|
+-- recommended as setting 'sourceGain' to zero is the proper way to mute a
|
|
+-- source.
|
|
+
|
|
+gainBounds :: Source -> StateVar (Gain, Gain)
|
|
+gainBounds source =
|
|
+ pairStateVars
|
|
+ (makeSourceStateVar dictALfloat GetMinGain source)
|
|
+ (makeSourceStateVar dictALfloat GetMaxGain source)
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
|
|
+-- | 'referenceDistance' is used for distance attenuation calculations based on
|
|
+-- inverse distance with rolloff. Depending on the distance model it will also
|
|
+-- act as a distance threshold below which gain is clamped. See
|
|
+-- "Sound.OpenAL.AL.Attenuation" for details. The initial value is 1.
|
|
+
|
|
+referenceDistance :: Source -> StateVar ALfloat
|
|
+referenceDistance = makeSourceStateVar dictALfloat GetReferenceDistance
|
|
+
|
|
+-- | 'rolloffFactor' is used for distance attenuation calculations based on
|
|
+-- inverse distance with rolloff. For distances smaller than 'maxDistance' (and,
|
|
+-- depending on the distance model, larger than 'referenceDistance'), this will
|
|
+-- scale the distance attenuation over the applicable range. See
|
|
+-- "Sound.OpenAL.AL.Attenuation" for details how the attenuation is computed as
|
|
+-- a function of the distance. The initial value is 1.
|
|
+--
|
|
+-- In particular, 'rolloffFactor' can be set to zero for those sources that are
|
|
+-- supposed to be exempt from distance attenuation. The implementation is
|
|
+-- encouraged to optimize this case, bypassing distance attenuation calculation
|
|
+-- entirely on a persource basis.
|
|
+
|
|
+rolloffFactor :: Source -> StateVar ALfloat
|
|
+rolloffFactor = makeSourceStateVar dictALfloat GetRolloffFactor
|
|
+
|
|
+-- | 'maxDistance' is used for distance attenuation calculations based on
|
|
+-- inverse distance with rolloff, if the inverse clamped distance model is
|
|
+-- used. In this case, distances greater than 'maxDistance' will be clamped to
|
|
+-- 'maxDistance'. 'maxDistance' based clamping is applied before minimum gain
|
|
+-- clamping (see 'gainBounds'), so if the effective gain at 'maxDistance' is
|
|
+-- larger than the minimum gain, the minimum gain will have no effect. No
|
|
+-- culling is supported. The initial value is the largest representable
|
|
+-- 'ALfloat'.
|
|
+
|
|
+maxDistance :: Source -> StateVar ALfloat
|
|
+maxDistance = makeSourceStateVar dictALfloat GetMaxDistance
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+
|
|
+-- | 'pitch' contains the desired pitch shift, where 1 (the initial value)
|
|
+-- equals identity. Each reduction by 50 percent equals a pitch shift of -12
|
|
+-- semitones (one octave reduction). Each doubling equals a pitch shift of 12
|
|
+-- semitones (one octave increase). Zero is not a legal value. Implementations
|
|
+-- may clamp the actual output pitch range to any values subject to the
|
|
+-- implementation's own limits.
|
|
+
|
|
+pitch :: Source -> StateVar ALfloat
|
|
+pitch = makeSourceStateVar dictALfloat GetPitch
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+-- $DirectionAndCone
|
|
+-- Each source can be directional, depending on the settings for 'coneAngles'.
|
|
+-- There are three zones defined: the inner cone, the outside zone, and the
|
|
+-- transitional zone in between. The angle-dependent gain for a directional
|
|
+-- source is constant inside the inner cone, and changes over the transitional
|
|
+-- zone to the value specified outside the outer cone. 'sourceGain' is applied
|
|
+-- for the inner cone, with an application selectable 'coneOuterGain' factor to
|
|
+-- define the gain in the outer zone. In the transitional zone
|
|
+-- implementation-dependent interpolation between 'sourceGain' and 'sourceGain'
|
|
+-- times 'coneOuterGain' is applied.
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+
|
|
+-- | If 'direction' does not contain the zero vector ('Vector3' 0 0 0), the
|
|
+-- source is directional. The sound emission is presumed to be symmetric around
|
|
+-- the direction vector (cylinder symmetry). Sources are not oriented in full 3
|
|
+-- degrees of freedom, only two angles are effectively needed.
|
|
+--
|
|
+-- The zero vector is the initial value, indicating that a source is not
|
|
+-- directional. Specifying a non-zero vector will make the source directional.
|
|
+-- Specifying a zero vector for a directional source will effectively mark it as
|
|
+-- nondirectional.
|
|
+
|
|
+direction :: Source -> StateVar (Vector3 ALfloat)
|
|
+direction = makeSourceStateVar dictVector3ALfloat GetDirection
|
|
+
|
|
+-- | 'coneAngles' contains the inner and outer angles of the sound cone, in
|
|
+-- degrees. The default of 360 for the inner cone angle means that it covers the
|
|
+-- entire world, which is equivalent to an omni-directional source. The default
|
|
+-- of 360 for the outer cone angle means that it covers the entire world. If the
|
|
+-- inner angle is also 360, then the zone for angle-dependent attenuation is
|
|
+-- zero.
|
|
+
|
|
+coneAngles :: Source -> StateVar (ALfloat, ALfloat)
|
|
+coneAngles source =
|
|
+ pairStateVars
|
|
+ (makeSourceStateVar dictALfloat GetConeInnerAngle source)
|
|
+ (makeSourceStateVar dictALfloat GetConeOuterAngle source)
|
|
+
|
|
+-- | 'coneOuterGain' contains the factor with which 'sourceGain' is multiplied
|
|
+-- to determine the effective gain outside the cone defined by the outer angle.
|
|
+-- The effective gain applied outside the outer cone is 'sourceGain' times
|
|
+-- 'coneOuterGain'. Changing 'sourceGain' affects all directions, i.e. the
|
|
+-- source is attenuated in all directions, for any position of the listener. The
|
|
+-- application has to change 'coneOuterGain' as well if a different behavior is
|
|
+-- desired.
|
|
+
|
|
+coneOuterGain :: Source -> StateVar Gain
|
|
+coneOuterGain = makeSourceStateVar dictALfloat GetConeOuterGain
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+
|
|
+-- | 'secOffset' contains the playback position, expressed in seconds (the value
|
|
+-- will loop back to zero for looping sources).
|
|
+--
|
|
+-- When setting 'secOffset' on a source which is already playing, the playback
|
|
+-- will jump to the new offset unless the new offset is out of range, in which
|
|
+-- case an 'ALInvalidValue' error is set. If the source is not playing, then the
|
|
+-- offset will be applied on the next 'play' call.
|
|
+--
|
|
+-- The position is relative to the beginning of all the queued buffers for the
|
|
+-- source, and any queued buffers traversed by a set call will be marked as
|
|
+-- processed.
|
|
+--
|
|
+-- This value is based on byte position, so a pitch-shifted source will have an
|
|
+-- exaggerated playback speed. For example, you can be 0.5 seconds into a buffer
|
|
+-- having taken only 0.25 seconds to get there if the pitch is set to 2.
|
|
+
|
|
+secOffset :: Source -> StateVar ALfloat
|
|
+secOffset = makeSourceStateVar dictALfloat GetSecOffset
|
|
+
|
|
+-- | 'sampleOffset' contains the playback position, expressed in samples (the
|
|
+-- value will loop back to zero for looping sources). For a compressed format,
|
|
+-- this value will represent an exact offset within the uncompressed data.
|
|
+--
|
|
+-- When setting 'sampleOffset' on a source which is already playing, the
|
|
+-- playback will jump to the new offset unless the new offset is out of range,
|
|
+-- in which case an 'ALInvalidValue' error is set. If the source is not playing,
|
|
+-- then the offset will be applied on the next 'play' call. A 'stop', 'rewind',
|
|
+-- or a second 'play' call will reset the offset to the beginning of the buffer.
|
|
+--
|
|
+-- The position is relative to the beginning of all the queued buffers for the
|
|
+-- source, and any queued buffers traversed by a set call will be marked as
|
|
+-- processed.
|
|
+
|
|
+sampleOffset :: Source -> StateVar ALint
|
|
+sampleOffset = makeSourceStateVar dictALint GetSampleOffset
|
|
+
|
|
+-- | 'byteOffset' contains the playback position, expressed in bytes (the value
|
|
+-- will loop back to zero for looping sources). For a compressed format, this
|
|
+-- value may represent an approximate offset within the compressed data buffer.
|
|
+--
|
|
+-- When setting 'byteOffset' on a source which is already playing, the playback
|
|
+-- will jump to the new offset unless the new offset is out of range, in which
|
|
+-- case an 'ALInvalidValue' error is set. If the source is not playing, then the
|
|
+-- offset will be applied on the next 'play' call. A 'stop', 'rewind', or a
|
|
+-- second 'play' call will reset the offset to the beginning of the buffer.
|
|
+--
|
|
+-- The position is relative to the beginning of all the queued buffers for the
|
|
+-- source, and any queued buffers traversed by a set call will be marked as
|
|
+-- processed.
|
|
+
|
|
+byteOffset :: Source -> StateVar ALint
|
|
+byteOffset = makeSourceStateVar dictALint GetByteOffset
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+
|
|
+pairStateVars :: StateVar a -> StateVar b -> StateVar (a,b)
|
|
+pairStateVars var1 var2 =
|
|
+ makeStateVar
|
|
+ (liftM2 (,) (get var1) (get var2))
|
|
+ (\(val1,val2) -> do var1 $= val1; var2 $= val2)
|
|
+
|
|
+data Dictionary a b c = Dictionary {
|
|
+ alGetter :: Source -> ALenum -> Ptr b -> IO (),
|
|
+ alSetter :: Source -> ALenum -> Ptr b -> IO (),
|
|
+ size :: Int,
|
|
+ peekSize :: Ptr b -> IO a,
|
|
+ marshal :: a -> c }
|
|
+
|
|
+dictALint :: Dictionary ALint ALint ALint
|
|
+dictALint = Dictionary {
|
|
+ alGetter = alGetSourceiv,
|
|
+ alSetter = alSourceiv,
|
|
+ size = 1,
|
|
+ peekSize = peek1 id,
|
|
+ marshal = id }
|
|
+
|
|
+dictALfloat :: Dictionary ALfloat ALfloat ALfloat
|
|
+dictALfloat = Dictionary {
|
|
+ alGetter = alGetSourcefv,
|
|
+ alSetter = alSourcefv,
|
|
+ size = 1,
|
|
+ peekSize = peek1 id,
|
|
+ marshal = id }
|
|
+
|
|
+dictSourceRelative :: Dictionary SourceRelative ALint ALint
|
|
+dictSourceRelative = Dictionary {
|
|
+ alGetter = alGetSourceiv,
|
|
+ alSetter = alSourceiv,
|
|
+ size = 1,
|
|
+ peekSize = peek1 (unmarshalSourceRelative . unmarshalALboolean . fromIntegral),
|
|
+ marshal = fromIntegral . marshalALboolean . marshalSourceRelative }
|
|
+
|
|
+dictSourceType :: Dictionary SourceType ALint ALint
|
|
+dictSourceType = Dictionary {
|
|
+ alGetter = alGetSourceiv,
|
|
+ alSetter = undefined,
|
|
+ size = 1,
|
|
+ peekSize = peek1 unmarshalSourceType,
|
|
+ marshal = undefined }
|
|
+
|
|
+dictLoopingMode :: Dictionary LoopingMode ALint ALint
|
|
+dictLoopingMode = Dictionary {
|
|
+ alGetter = alGetSourceiv,
|
|
+ alSetter = alSourceiv,
|
|
+ size = 1,
|
|
+ peekSize = peek1 (unmarshalLoopingMode . unmarshalALboolean . fromIntegral),
|
|
+ marshal = fromIntegral . marshalALboolean . marshalLoopingMode }
|
|
+
|
|
+dictSourceState :: Dictionary SourceState ALint ALint
|
|
+dictSourceState = Dictionary {
|
|
+ alGetter = alGetSourceiv,
|
|
+ alSetter = undefined,
|
|
+ size = 1,
|
|
+ peekSize = peek1 unmarshalSourceState,
|
|
+ marshal = undefined }
|
|
+
|
|
+dictVertex3ALfloat :: Dictionary (Vertex3 ALfloat) ALfloat (Vertex3 ALfloat)
|
|
+dictVertex3ALfloat = Dictionary {
|
|
+ alGetter = alGetSourcefv,
|
|
+ alSetter = alSourcefv,
|
|
+ size = 3,
|
|
+ peekSize = peek3 Vertex3,
|
|
+ marshal = id }
|
|
+
|
|
+dictVector3ALfloat :: Dictionary (Vector3 ALfloat) ALfloat (Vector3 ALfloat)
|
|
+dictVector3ALfloat = Dictionary {
|
|
+ alGetter = alGetSourcefv,
|
|
+ alSetter = alSourcefv,
|
|
+ size = 3,
|
|
+ peekSize = peek3 Vector3,
|
|
+ marshal = id }
|
|
+
|
|
+dictMaybeBuffer :: Dictionary (Maybe Buffer) ALint ALint
|
|
+dictMaybeBuffer = Dictionary {
|
|
+ alGetter = alGetSourceiv,
|
|
+ alSetter = alSourceiv,
|
|
+ size = 1,
|
|
+ peekSize = peek1 (unmarshalBuffer . fromIntegral),
|
|
+ marshal = fromIntegral . marshalBuffer }
|
|
+
|
|
+makeGetter :: Storable b => Dictionary a b c -> GetPName -> Source -> IO a
|
|
+makeGetter dict name source =
|
|
+ allocaArray (size dict) $ \buf -> do
|
|
+ alGetter dict source (marshalGetPName name) buf
|
|
+ peekSize dict buf
|
|
+
|
|
+makeSetter :: Storable c => Dictionary a b c -> GetPName -> Source -> a -> IO ()
|
|
+makeSetter dict name source value =
|
|
+ with (marshal dict value) $
|
|
+ alSetter dict source (marshalGetPName name) . castPtr
|
|
+
|
|
+makeSourceStateVar ::
|
|
+ (Storable b, Storable c) =>
|
|
+ Dictionary a b c -> GetPName -> Source -> StateVar a
|
|
+makeSourceStateVar dict name source =
|
|
+ makeStateVar
|
|
+ (makeGetter dict name source)
|
|
+ (makeSetter dict name source)
|
|
+
|
|
+makeSourceGettableStateVar ::
|
|
+ (Storable b, Storable c) =>
|
|
+ Dictionary a b c -> GetPName -> Source -> GettableStateVar a
|
|
+makeSourceGettableStateVar dict name source =
|
|
+ makeGettableStateVar
|
|
+ (makeGetter dict name source)
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+
|
|
+foreign import CALLCONV unsafe "alGetSourcefv"
|
|
+ alGetSourcefv :: Source -> ALenum -> Ptr ALfloat -> IO ()
|
|
+
|
|
+foreign import CALLCONV unsafe "alSourcefv"
|
|
+ alSourcefv :: Source -> ALenum -> Ptr ALfloat -> IO ()
|
|
+
|
|
+foreign import CALLCONV unsafe "alGetSourceiv"
|
|
+ alGetSourceiv :: Source -> ALenum -> Ptr ALint -> IO ()
|
|
+
|
|
+-- Note: Older OpenAL implementations have no alSourceiv, so we emulate it here.
|
|
+alSourceiv :: Source -> ALenum -> Ptr ALint -> IO ()
|
|
+alSourceiv source n buf = peek buf >>= alSourcei source n
|
|
+
|
|
+foreign import CALLCONV unsafe "alSourcei"
|
|
+ alSourcei :: Source -> ALenum -> ALint -> IO ()
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+-- $QueuingBuffersWithASource
|
|
+-- OpenAL does not specify a built-in streaming mechanism. There is no mechanism
|
|
+-- to stream data into a buffer object. Instead, the API has a more flexible and
|
|
+-- versatile mechanism to queue buffers for sources. There are many ways to use
|
|
+-- this feature, with streaming being only one of them.
|
|
+--
|
|
+-- Streaming is replaced by queuing static buffers. This effectively moves any
|
|
+-- multi-buffer caching into the application and allows the application to
|
|
+-- select how many buffers it wants to use, the size of the buffers, and whether
|
|
+-- these are re-used in cycle, pooled, or thrown away.
|
|
+--
|
|
+-- Looping (over a finite number of repetitions) can be implemented by
|
|
+-- explicitly repeating buffers in the queue. Infinite loops can (theoretically)
|
|
+-- be accomplished by sufficiently large repetition counters. If only a single
|
|
+-- buffer is supposed to be repeated infinitely, using the respective source
|
|
+-- attribute 'loopingMode' is recommended.
|
|
+--
|
|
+-- Loop Points for restricted looping inside a buffer can in many cases be
|
|
+-- replaced by splitting the sample into several buffers and queuing the sample
|
|
+-- fragments (including repetitions) accordingly.
|
|
+--
|
|
+-- Buffers can be queued, unqueued after they have been used, and either be
|
|
+-- deleted, or refilled and queued again. Splitting large samples over several
|
|
+-- buffers maintained in a queue has distinct advantages over approaches that
|
|
+-- require explicit management of samples and sample indices.
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+
|
|
+-- | The application can queue up one or multiple buffer names using
|
|
+-- 'queueBuffers'. The buffers will be queued in the sequence in which they
|
|
+-- appear in the list.
|
|
+--
|
|
+-- This command is legal on a source in any playback state (to allow for
|
|
+-- streaming, queuing has to be possible on a 'Playing' source).
|
|
+--
|
|
+-- All buffers in a queue must have the same format and attributes. An attempt
|
|
+-- to mix formats or other buffer attributes will result in a failure and an
|
|
+-- 'ALInvalidValue' error will be thrown. If the queue operation fails, the source
|
|
+-- queue will remain unchanged (even if some of the buffers could have been
|
|
+-- queued).
|
|
+
|
|
+queueBuffers :: Source -> [Buffer] -> IO ()
|
|
+queueBuffers = withArraySizei . alSourceQueueBuffers
|
|
+
|
|
+withArraySizei :: Storable a => (ALsizei -> Ptr a -> IO ()) -> [a] -> IO ()
|
|
+withArraySizei f xs = withArrayLen xs $ f . fromIntegral
|
|
+
|
|
+foreign import CALLCONV unsafe "alSourceQueueBuffers"
|
|
+ alSourceQueueBuffers :: Source -> ALsizei -> Ptr Buffer -> IO ()
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+
|
|
+-- | Once a queue entry for a buffer has been appended to a queue and is pending
|
|
+-- processing, it should not be changed. Removal of a given queue entry is not
|
|
+-- possible unless either the source is stopped (in which case then entire queue
|
|
+-- is considered processed), or if the queue entry has already been processed
|
|
+-- ('Playing' or 'Paused' source). A playing source will enter the 'Stopped'
|
|
+-- state if it completes playback of the last buffer in its queue (the same
|
|
+-- behavior as when a single buffer has been attached to a source and has
|
|
+-- finished playback).
|
|
+--
|
|
+-- The 'unqueueBuffers' command removes a number of buffers entries that have
|
|
+-- finished processing, in the order of appearance, from the queue. The
|
|
+-- operation will fail with an 'ALInvalidValue' error if more buffers are
|
|
+-- requested than available, leaving the destination arguments unchanged.
|
|
+
|
|
+unqueueBuffers :: Source -> [Buffer] -> IO ()
|
|
+unqueueBuffers = withArraySizei . alSourceUnqueueBuffers
|
|
+
|
|
+foreign import CALLCONV unsafe "alSourceUnqueueBuffers"
|
|
+ alSourceUnqueueBuffers :: Source -> ALsizei -> Ptr Buffer -> IO ()
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+-- $ManagingSourceExecution
|
|
+-- The execution state of a source can be queried. OpenAL provides a set of
|
|
+-- functions that initiate state transitions causing sources to start and stop
|
|
+-- execution.
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+
|
|
+-- | Contains the current execution state of the given source. The initial state
|
|
+-- of any source is 'Initial'.
|
|
+--
|
|
+-- Note that the 'Initial' state is not necessarily identical to the initial
|
|
+-- state in which a source is created, because the other source attributes are
|
|
+-- not automatically reset to their initial values. 'Initial' merely indicates
|
|
+-- that the source can be executed using the 'play' command. A 'Stopped' or
|
|
+-- 'Initial' source can be reset into the default configuration by using a
|
|
+-- sequence of source commands as necessary. As the application has to specify
|
|
+-- all relevant state anyway to create a useful source configuration, no reset
|
|
+-- command is provided.
|
|
+
|
|
+sourceState :: Source -> GettableStateVar SourceState
|
|
+sourceState source =
|
|
+ makeGettableStateVar
|
|
+ (makeGetter dictSourceState GetSourceState source)
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
|
|
-{-
|
|
-sourcei/sourcef/sourcefv:
|
|
-AL_BUFFER
|
|
-AL_CONE_INNER_ANGLE
|
|
-AL_CONE_OUTER_ANGLE
|
|
-AL_CONE_OUTER_GAIN
|
|
-AL_DIRECTION
|
|
-AL_GAIN
|
|
-AL_GAIN_LINEAR_LOKI
|
|
-AL_LOOPING
|
|
-AL_MAX_DISTANCE
|
|
-AL_MAX_GAIN
|
|
-AL_MIN_GAIN
|
|
-AL_PITCH
|
|
-AL_POSITION
|
|
-AL_REFERENCE_DISTANCE
|
|
-AL_ROLLOFF_FACTOR
|
|
-AL_SOURCE_RELATIVE
|
|
-AL_STREAMING
|
|
-AL_VELOCITY
|
|
-
|
|
-getsourceiv
|
|
-AL_BUFFERS_PROCESSED
|
|
-AL_BUFFERS_QUEUED
|
|
-AL_BYTE_LOKI
|
|
-AL_CONE_INNER_ANGLE
|
|
-AL_CONE_OUTER_ANGLE
|
|
-AL_CONE_OUTER_GAIN
|
|
-AL_DIRECTION
|
|
-AL_GAIN
|
|
-AL_GAIN_LINEAR_LOKI
|
|
-AL_LOOPING
|
|
-AL_MAX_DISTANCE
|
|
-AL_PITCH
|
|
-AL_POSITION
|
|
-AL_REFERENCE_DISTANCE
|
|
-AL_ROLLOFF_FACTOR
|
|
-AL_SOURCE_RELATIVE
|
|
-AL_SOURCE_STATE
|
|
-AL_STREAMING
|
|
-AL_VELOCITY
|
|
-
|
|
-getsourcefv
|
|
-*AL_BUFFER
|
|
-AL_BUFFERS_PROCESSED
|
|
-AL_BUFFERS_QUEUED
|
|
-AL_BYTE_LOKI
|
|
-AL_CONE_INNER_ANGLE
|
|
-AL_CONE_OUTER_ANGLE
|
|
-AL_CONE_OUTER_GAIN
|
|
-AL_DIRECTION
|
|
-AL_GAIN
|
|
-AL_GAIN_LINEAR_LOKI
|
|
-AL_LOOPING
|
|
-AL_MAX_DISTANCE
|
|
-*AL_MAX_GAIN
|
|
-*AL_MIN_GAIN
|
|
-AL_PITCH
|
|
-AL_POSITION
|
|
-AL_REFERENCE_DISTANCE
|
|
-AL_ROLLOFF_FACTOR
|
|
-AL_SOURCE_RELATIVE
|
|
-AL_SOURCE_STATE
|
|
-AL_STREAMING
|
|
-AL_VELOCITY
|
|
+-- | 'play' applied to an 'Initial' source will promote the source to 'Playing',
|
|
+-- thus the data found in the buffer will be fed into the processing, starting
|
|
+-- at the beginning. 'play' applied to a 'Playing' source will restart the
|
|
+-- source from the beginning. It will not affect the configuration, and will
|
|
+-- leave the source in 'Playing' state, but reset the sampling offset to the
|
|
+-- beginning. 'play' applied to a 'Paused' source will resume processing using
|
|
+-- the source state as preserved at the 'pause' operation. 'play' applied to a
|
|
+-- 'Stopped' source will propagate it to 'Initial' then to 'Playing'
|
|
+-- immediately.
|
|
+
|
|
+play :: [Source] -> IO ()
|
|
+play = withArraySizei alSourcePlayv
|
|
+
|
|
+foreign import CALLCONV unsafe "alSourcePlayv"
|
|
+ alSourcePlayv :: ALsizei -> Ptr Source -> IO ()
|
|
+
|
|
+-- | 'pause' applied to an 'Initial' source is a legal NOP. 'pause' applied to a
|
|
+-- 'Playing' source will change its state to 'Paused'. The source is exempt from
|
|
+-- processing, its current state is preserved. 'pause' applied to a 'Paused'
|
|
+-- source is a legal NOP. 'pause' applied to a 'Stopped' source is a legal NOP.
|
|
+
|
|
+pause :: [Source] -> IO ()
|
|
+pause = withArraySizei alSourcePausev
|
|
+
|
|
+foreign import CALLCONV unsafe "alSourcePausev"
|
|
+ alSourcePausev :: ALsizei -> Ptr Source -> IO ()
|
|
+
|
|
+-- | 'stop' applied to an 'Initial' source is a legal NOP. 'stop' applied to a
|
|
+-- 'Playing' source will change its state to 'Stopped'. The source is exempt
|
|
+-- from processing, its current state is preserved. 'stop' applied to a 'Paused'
|
|
+-- source will change its state to 'Stopped', with the same consequences as on a
|
|
+-- 'Playing' source. 'stop' applied to a 'Stopped' source is a legal NOP.
|
|
+
|
|
+stop :: [Source] -> IO ()
|
|
+stop = withArraySizei alSourceStopv
|
|
+
|
|
+foreign import CALLCONV unsafe "alSourceStopv"
|
|
+ alSourceStopv :: ALsizei -> Ptr Source -> IO ()
|
|
+
|
|
+-- | 'rewind' applied to an 'Initial' source is a legal NOP. 'rewind' applied to
|
|
+-- a 'Playing' source will change its state to 'Stopped' then 'Initial'. The
|
|
+-- source is exempt from processing: its current state is preserved, with the
|
|
+-- exception of the sampling offset, which is reset to the beginning. 'rewind'
|
|
+-- applied to a 'Paused' source will change its state to 'Initial', with the
|
|
+-- same consequences as on a 'Playing' source. 'rewind' applied to an 'Stopped'
|
|
+-- source promotes the source to 'Initial', resetting the sampling offset to the
|
|
+-- beginning.
|
|
|
|
+rewind :: [Source] -> IO ()
|
|
+rewind = withArraySizei alSourceRewindv
|
|
|
|
--}
|
|
+foreign import CALLCONV unsafe "alSourceRewindv"
|
|
+ alSourceRewindv :: ALsizei -> Ptr Source -> IO ()
|
|
diff -uNr --exclude=autom4te.cache --exclude=.cvsignore hugs98-Mar2005-patched/fptools/libraries/OpenAL/Sound/OpenAL/AL/SourceState.hs ghc-6.4.2/libraries/OpenAL/Sound/OpenAL/AL/SourceState.hs
|
|
--- hugs98-Mar2005-patched/fptools/libraries/OpenAL/Sound/OpenAL/AL/SourceState.hs 1970-01-01 09:00:00.000000000 +0900
|
|
+++ ghc-6.4.2/libraries/OpenAL/Sound/OpenAL/AL/SourceState.hs 2006-03-22 00:58:03.000000000 +0900
|
|
@@ -0,0 +1,46 @@
|
|
+-- #hide
|
|
+--------------------------------------------------------------------------------
|
|
+-- |
|
|
+-- Module : Sound.OpenAL.AL.SourceState
|
|
+-- Copyright : (c) Sven Panne 2003-2005
|
|
+-- License : BSD-style (see the file libraries/OpenAL/LICENSE)
|
|
+--
|
|
+-- Maintainer : sven.panne@aedion.de
|
|
+-- Stability : provisional
|
|
+-- Portability : portable
|
|
+--
|
|
+--------------------------------------------------------------------------------
|
|
+
|
|
+module Sound.OpenAL.AL.SourceState (
|
|
+ SourceState(..), unmarshalSourceState
|
|
+) where
|
|
+
|
|
+import Sound.OpenAL.AL.BasicTypes ( ALint )
|
|
+import Sound.OpenAL.Constants ( al_INITIAL, al_PLAYING, al_PAUSED, al_STOPPED )
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+
|
|
+-- | Each source can be in one of four possible execution states: 'Initial',
|
|
+-- 'Playing', 'Paused', 'Stopped'. Sources that are either 'Playing' or 'Paused'
|
|
+-- are considered active. Sources that are 'Stopped' or 'Initial' are considered
|
|
+-- inactive. Only 'Playing' sources are included in the processing. The
|
|
+-- implementation is free to skip those processing stages for sources that have
|
|
+-- no effect on the output (e.g. mixing for a source muted by zero gain, but not
|
|
+-- sample offset increments). Depending on the current state of a source certain
|
|
+-- (e.g. repeated) state transition commands are legal NOPs: they will be
|
|
+-- ignored, no error is generated.
|
|
+
|
|
+data SourceState =
|
|
+ Initial
|
|
+ | Playing
|
|
+ | Paused
|
|
+ | Stopped
|
|
+ deriving ( Eq, Ord, Show )
|
|
+
|
|
+unmarshalSourceState :: ALint -> SourceState
|
|
+unmarshalSourceState x
|
|
+ | x == al_INITIAL = Initial
|
|
+ | x == al_PLAYING = Playing
|
|
+ | x == al_PAUSED = Paused
|
|
+ | x == al_STOPPED = Stopped
|
|
+ | otherwise = error ("unmarshalSourceState: illegal value " ++ show x)
|
|
diff -uNr --exclude=autom4te.cache --exclude=.cvsignore hugs98-Mar2005-patched/fptools/libraries/OpenAL/Sound/OpenAL/AL/String.hs ghc-6.4.2/libraries/OpenAL/Sound/OpenAL/AL/String.hs
|
|
--- hugs98-Mar2005-patched/fptools/libraries/OpenAL/Sound/OpenAL/AL/String.hs 1970-01-01 09:00:00.000000000 +0900
|
|
+++ ghc-6.4.2/libraries/OpenAL/Sound/OpenAL/AL/String.hs 2006-03-22 00:58:03.000000000 +0900
|
|
@@ -0,0 +1,31 @@
|
|
+-- #hide
|
|
+--------------------------------------------------------------------------------
|
|
+-- |
|
|
+-- Module : Sound.OpenAL.AL.String
|
|
+-- Copyright : (c) Sven Panne 2005
|
|
+-- License : BSD-style (see the file libraries/OpenAL/LICENSE)
|
|
+--
|
|
+-- Maintainer : sven.panne@aedion.de
|
|
+-- Stability : provisional
|
|
+-- Portability : portable
|
|
+--
|
|
+--------------------------------------------------------------------------------
|
|
+
|
|
+module Sound.OpenAL.AL.String (
|
|
+ withALString, peekALString
|
|
+) where
|
|
+
|
|
+import Foreign.C.String ( withCString, peekCString )
|
|
+import Foreign.Ptr ( Ptr, castPtr )
|
|
+import Sound.OpenAL.AL.BasicTypes ( ALchar )
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+
|
|
+-- AL uses "Ptr ALchar" instead of "CString" for strings, so some wrappers
|
|
+-- are quite handy.
|
|
+
|
|
+withALString :: String -> (Ptr ALchar -> IO a) -> IO a
|
|
+withALString str action = withCString str (action . castPtr)
|
|
+
|
|
+peekALString :: Ptr ALchar -> IO String
|
|
+peekALString = peekCString . castPtr
|
|
diff -uNr --exclude=autom4te.cache --exclude=.cvsignore hugs98-Mar2005-patched/fptools/libraries/OpenAL/Sound/OpenAL/AL/StringQueries.hs ghc-6.4.2/libraries/OpenAL/Sound/OpenAL/AL/StringQueries.hs
|
|
--- hugs98-Mar2005-patched/fptools/libraries/OpenAL/Sound/OpenAL/AL/StringQueries.hs 1970-01-01 09:00:00.000000000 +0900
|
|
+++ ghc-6.4.2/libraries/OpenAL/Sound/OpenAL/AL/StringQueries.hs 2006-03-22 00:58:03.000000000 +0900
|
|
@@ -0,0 +1,34 @@
|
|
+--------------------------------------------------------------------------------
|
|
+-- |
|
|
+-- Module : Sound.OpenAL.AL.StringQueries
|
|
+-- Copyright : (c) Sven Panne 2003-2005
|
|
+-- License : BSD-style (see the file libraries/OpenAL/LICENSE)
|
|
+--
|
|
+-- Maintainer : sven.panne@aedion.de
|
|
+-- Stability : provisional
|
|
+-- Portability : portable
|
|
+--
|
|
+-- This module corresponds to section 3.1.2 (String Queries) of the OpenAL
|
|
+-- Specification and Reference (version 1.1).
|
|
+--
|
|
+--------------------------------------------------------------------------------
|
|
+
|
|
+module Sound.OpenAL.AL.StringQueries (
|
|
+ alVendor, alRenderer
|
|
+) where
|
|
+
|
|
+import Graphics.Rendering.OpenGL.GL.StateVar (
|
|
+ GettableStateVar, makeGettableStateVar )
|
|
+import Sound.OpenAL.AL.QueryUtils ( StringName(..), getString )
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+
|
|
+-- | Contains the name of the vendor.
|
|
+
|
|
+alVendor :: GettableStateVar String
|
|
+alVendor = makeGettableStateVar (getString Vendor)
|
|
+
|
|
+-- | Contains information about the specific renderer.
|
|
+
|
|
+alRenderer :: GettableStateVar String
|
|
+alRenderer = makeGettableStateVar (getString Renderer)
|
|
diff -uNr --exclude=autom4te.cache --exclude=.cvsignore hugs98-Mar2005-patched/fptools/libraries/OpenAL/Sound/OpenAL/AL.hs ghc-6.4.2/libraries/OpenAL/Sound/OpenAL/AL.hs
|
|
--- hugs98-Mar2005-patched/fptools/libraries/OpenAL/Sound/OpenAL/AL.hs 2004-01-03 04:03:07.000000000 +0900
|
|
+++ ghc-6.4.2/libraries/OpenAL/Sound/OpenAL/AL.hs 2006-03-22 00:58:03.000000000 +0900
|
|
@@ -1,23 +1,128 @@
|
|
--------------------------------------------------------------------------------
|
|
-- |
|
|
-- Module : Sound.OpenAL.AL
|
|
--- Copyright : (c) Sven Panne 2003-2004
|
|
+-- Copyright : (c) Sven Panne 2003-2005
|
|
-- License : BSD-style (see the file libraries/OpenAL/LICENSE)
|
|
--
|
|
-- Maintainer : sven.panne@aedion.de
|
|
-- Stability : provisional
|
|
-- Portability : portable
|
|
--
|
|
+-- This module corresponds to chapters 2 (OpenAL Operation), 3 (State and State
|
|
+-- Requests), 4 (Listener and Sources) and 5 (Buffers) of the OpenAL
|
|
+-- Specification and Reference (version 1.1).
|
|
+--
|
|
--------------------------------------------------------------------------------
|
|
|
|
module Sound.OpenAL.AL (
|
|
+ -- * OpenAL Fundamentals
|
|
+ -- $OpenALFundamentals
|
|
+
|
|
+ -- * Basic AL Operation
|
|
+ -- $BasicALOperation
|
|
+
|
|
+ -- * Time and Frequency
|
|
+ -- $TimeAndFrequency
|
|
+
|
|
+ -- * Space and Distance
|
|
+ -- $SpaceAndDistance
|
|
+
|
|
+ -- * Coordinate System
|
|
+ -- $CoordinateSystem
|
|
+
|
|
module Sound.OpenAL.AL.BasicTypes,
|
|
- module Sound.OpenAL.AL.Buffer,
|
|
+ module Sound.OpenAL.AL.Errors,
|
|
+ module Sound.OpenAL.AL.StringQueries,
|
|
+ module Sound.OpenAL.AL.Attenuation,
|
|
+ module Sound.OpenAL.AL.Doppler,
|
|
+ module Sound.OpenAL.AL.Listener,
|
|
module Sound.OpenAL.AL.Source,
|
|
- module Sound.OpenAL.AL.Listener
|
|
+ module Sound.OpenAL.AL.Buffer,
|
|
+ module Sound.OpenAL.AL.Extensions
|
|
) where
|
|
|
|
import Sound.OpenAL.AL.BasicTypes
|
|
-import Sound.OpenAL.AL.Buffer
|
|
-import Sound.OpenAL.AL.Source
|
|
+import Sound.OpenAL.AL.Errors
|
|
+import Sound.OpenAL.AL.StringQueries
|
|
+import Sound.OpenAL.AL.Attenuation
|
|
+import Sound.OpenAL.AL.Doppler
|
|
import Sound.OpenAL.AL.Listener
|
|
+import Sound.OpenAL.AL.Source
|
|
+import Sound.OpenAL.AL.Buffer
|
|
+import Sound.OpenAL.AL.Extensions
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+-- $OpenALFundamentals
|
|
+-- OpenAL is concerned with rendering audio into an output buffer and collecting
|
|
+-- audio data from an input buffer. OpenAL\'s primary use is assumed to be for
|
|
+-- spatialized audio. There is no support for MIDI.
|
|
+--
|
|
+-- OpenAL has three fundamental primitives or objects: 'Buffer's, 'Source's, and
|
|
+-- a single listener (see "Sound.OpenAL.AL.Listener"). Each object can be
|
|
+-- changed independently; the setting of one object does not affect the setting
|
|
+-- of others. The application can also set modes that affect processing. Modes
|
|
+-- are set, objects specified, and other OpenAL operations performed by sending
|
|
+-- commands in the form of function or procedure calls.
|
|
+--
|
|
+-- Sources store locations, directions, and other attributes of an object in 3D
|
|
+-- space and have a buffer associated with them for playback. When the program
|
|
+-- wants to play a sound, it controls execution through a source object. Sources
|
|
+-- are processed independently from each other.
|
|
+--
|
|
+-- Buffers store compressed or uncompressed audio data. It is common to
|
|
+-- initialize a large set of buffers when the program first starts (or at
|
|
+-- non-critical times during execution, between levels in a game, for
|
|
+-- instance). Buffers are referred to by sources. Data (audio sample data) is
|
|
+-- associated with buffers.
|
|
+--
|
|
+-- There is only one listener (per audio context). The listener attributes are
|
|
+-- similar to source attributes, but are used to represent where the user is
|
|
+-- hearing the audio from. The influence of all the sources from the perspective
|
|
+-- of the listener is mixed and played for the user.
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+-- $BasicALOperation
|
|
+-- OpenAL can be used for a variety of audio playback tasks, and is an excellent
|
|
+-- complement to OpenGL for real-time rendering, see
|
|
+-- "Graphics.Rendering.OpenGL". A programmer who is familiar with OpenGL will
|
|
+-- immediately notice the similarities between the two APIs in that they
|
|
+-- describe their 3D environments using similar methods.
|
|
+--
|
|
+-- For an OpenGL\/OpenAL program, most of the audio programming will be in two
|
|
+-- places in the code: initialization of the program, and the rendering loop. An
|
|
+-- OpenGL\/OpenAL program will typically contain a section where the graphics
|
|
+-- and audio systems are initialized, although it may be spread into multiple
|
|
+-- functions. For OpenAL, initialization normally consists of creating a
|
|
+-- context, creating the initial set of buffers, loading the buffers with sample
|
|
+-- data, creating sources, attaching buffers to sources, setting locations and
|
|
+-- directions for the listener and sources, and setting the initial values for
|
|
+-- state global to OpenAL.
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+-- $TimeAndFrequency
|
|
+-- By default, OpenAL uses seconds and Hertz as units for time and frequency,
|
|
+-- respectively. A float or integral value of one for a variable that specifies
|
|
+-- quantities like duration, latency, delay, or any other parameter measured as
|
|
+-- time, specifies 1 second. For frequency, the basic unit is 1\/second, or
|
|
+-- Hertz. In other words, sample frequencies and frequency cut-offs or filter
|
|
+-- parameters specifying frequencies are expressed in units of Hertz.
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+-- $SpaceAndDistance
|
|
+-- OpenAL does not define the units of measurement for distances. The
|
|
+-- application is free to use meters, inches, or parsecs. OpenAL provides means
|
|
+-- for simulating the natural attenuation of sound according to distance, and to
|
|
+-- exaggerate or reduce this effect. However, the resulting effects do not
|
|
+-- depend on the distance unit used by the application to express source and
|
|
+-- listener coordinates. OpenAL calculations are scale invariant. The
|
|
+-- specification assumes Euclidean calculation of distances, and mandates that
|
|
+-- if two sources are sorted with respect to the Euclidean metric, the distance
|
|
+-- calculation used by the implementation has to preserve that order.
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+-- $CoordinateSystem
|
|
+-- OpenAL - like OpenGL - uses a right-handed Cartesian coordinate system (RHS),
|
|
+-- where in a frontal default view X (thumb) points right, Y (index finger)
|
|
+-- points up, and Z (middle finger) points towards the viewer\/camera. To switch
|
|
+-- from a left handed coordinate system (LHS) to a right handed coordinate
|
|
+-- systems, flip the sign on the Z coordinate.
|
|
diff -uNr --exclude=autom4te.cache --exclude=.cvsignore hugs98-Mar2005-patched/fptools/libraries/OpenAL/Sound/OpenAL/ALC/ALCboolean.hs ghc-6.4.2/libraries/OpenAL/Sound/OpenAL/ALC/ALCboolean.hs
|
|
--- hugs98-Mar2005-patched/fptools/libraries/OpenAL/Sound/OpenAL/ALC/ALCboolean.hs 1970-01-01 09:00:00.000000000 +0900
|
|
+++ ghc-6.4.2/libraries/OpenAL/Sound/OpenAL/ALC/ALCboolean.hs 2006-03-22 00:58:03.000000000 +0900
|
|
@@ -0,0 +1,30 @@
|
|
+-- #hide
|
|
+--------------------------------------------------------------------------------
|
|
+-- |
|
|
+-- Module : Sound.OpenAL.ALC.ALCboolean
|
|
+-- Copyright : (c) Sven Panne 2005
|
|
+-- License : BSD-style (see the file libraries/OpenAL/LICENSE)
|
|
+--
|
|
+-- Maintainer : sven.panne@aedion.de
|
|
+-- Stability : provisional
|
|
+-- Portability : portable
|
|
+--
|
|
+-- This is a purely internal module for (un-)marshaling ALCboolean.
|
|
+--
|
|
+--------------------------------------------------------------------------------
|
|
+
|
|
+module Sound.OpenAL.ALC.ALCboolean (
|
|
+ marshalALCboolean, unmarshalALCboolean
|
|
+) where
|
|
+
|
|
+import Sound.OpenAL.ALC.BasicTypes ( ALCboolean )
|
|
+import Sound.OpenAL.Constants ( alc_FALSE, alc_TRUE )
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+
|
|
+marshalALCboolean :: Bool -> ALCboolean
|
|
+marshalALCboolean False = alc_FALSE
|
|
+marshalALCboolean True = alc_TRUE
|
|
+
|
|
+unmarshalALCboolean :: ALCboolean -> Bool
|
|
+unmarshalALCboolean = (/= alc_FALSE)
|
|
diff -uNr --exclude=autom4te.cache --exclude=.cvsignore hugs98-Mar2005-patched/fptools/libraries/OpenAL/Sound/OpenAL/ALC/BasicTypes.hs ghc-6.4.2/libraries/OpenAL/Sound/OpenAL/ALC/BasicTypes.hs
|
|
--- hugs98-Mar2005-patched/fptools/libraries/OpenAL/Sound/OpenAL/ALC/BasicTypes.hs 2004-01-03 04:03:09.000000000 +0900
|
|
+++ ghc-6.4.2/libraries/OpenAL/Sound/OpenAL/ALC/BasicTypes.hs 2006-03-22 00:58:03.000000000 +0900
|
|
@@ -1,82 +1,24 @@
|
|
--- #hide
|
|
--------------------------------------------------------------------------------
|
|
-- |
|
|
-- Module : Sound.OpenAL.ALC.BasicTypes
|
|
--- Copyright : (c) Sven Panne 2003-2004
|
|
+-- Copyright : (c) Sven Panne 2003-2005
|
|
-- License : BSD-style (see the file libraries/OpenAL/LICENSE)
|
|
--
|
|
-- Maintainer : sven.panne@aedion.de
|
|
-- Stability : provisional
|
|
-- Portability : portable
|
|
--
|
|
+-- This module corresponds to the introductory parts of chapter 6 (AL Contexts
|
|
+-- and the ALC API) of the OpenAL Specification and Reference (version 1.1).
|
|
+--
|
|
+-- The context API makes use of ALC types which are defined separately from the
|
|
+-- AL types - there is an 'ALCboolean', 'ALCchar', etc.
|
|
+--
|
|
--------------------------------------------------------------------------------
|
|
|
|
module Sound.OpenAL.ALC.BasicTypes (
|
|
- ALCenum,
|
|
- Device(..), isDevice, fromDevice,
|
|
- withALString, peekALString,
|
|
- ContextAttribute(..), marshalContextAttribute, unmarshalContextAttribute
|
|
+ ALCboolean, ALCchar, ALCbyte, ALCubyte, ALCshort, ALCushort, ALCint, ALCuint,
|
|
+ ALCsizei, ALCenum, ALCfloat, ALCdouble
|
|
) where
|
|
|
|
-import Foreign
|
|
-import Foreign.C.String ( withCString, peekCString )
|
|
-import Sound.OpenAL.AL.BasicTypes ( ALubyte, ALint )
|
|
-import Sound.OpenAL.AL.ALboolean ( marshalALboolean, unmarshalALboolean )
|
|
-import Sound.OpenAL.AL.Buffer ( Frequency )
|
|
-
|
|
---------------------------------------------------------------------------------
|
|
-
|
|
-#include "HsOpenALConfig.h"
|
|
-
|
|
-type ALCenum = HTYPE_ALCENUM
|
|
-
|
|
---------------------------------------------------------------------------------
|
|
-
|
|
-type ALCdevice = ()
|
|
-
|
|
-newtype Device = Device (Ptr ALCdevice)
|
|
- deriving ( Eq, Ord, Show )
|
|
-
|
|
-isDevice :: Device -> Bool
|
|
-isDevice (Device dev) = dev /= nullPtr
|
|
-
|
|
-fromDevice :: Maybe Device -> Device
|
|
-fromDevice = maybe (Device nullPtr) id
|
|
-
|
|
---------------------------------------------------------------------------------
|
|
-
|
|
--- AL uses "Ptr ALubyte" instead of "CString" for strings, so some wrappers
|
|
--- are quite handy.
|
|
-
|
|
-withALString :: String -> (Ptr ALubyte -> IO a) -> IO a
|
|
-withALString str action = withCString str (action . castPtr)
|
|
-
|
|
-peekALString :: Ptr ALubyte -> IO String
|
|
-peekALString = peekCString . castPtr
|
|
-
|
|
---------------------------------------------------------------------------------
|
|
-
|
|
-data ContextAttribute =
|
|
- Frequency Frequency
|
|
- | Refresh ALint
|
|
- | Sync Bool
|
|
- | Sources ALint
|
|
- | Buffers ALint
|
|
- deriving ( Eq, Ord, Show )
|
|
-
|
|
-marshalContextAttribute :: ContextAttribute -> (ALint,ALint)
|
|
-marshalContextAttribute a = case a of
|
|
- Frequency f -> (CONST_ALC_FREQUENCY, fromIntegral f)
|
|
- Refresh r -> (CONST_ALC_REFRESH, r)
|
|
- Sync s -> (CONST_ALC_SYNC, fromIntegral (marshalALboolean s))
|
|
- Sources s -> (0x200000, s)
|
|
- Buffers b -> (0x200001, b)
|
|
-
|
|
-unmarshalContextAttribute :: (ALint,ALint) -> ContextAttribute
|
|
-unmarshalContextAttribute a@(x,y)
|
|
- | x == CONST_ALC_FREQUENCY = Frequency (fromIntegral y)
|
|
- | x == CONST_ALC_REFRESH = Refresh y
|
|
- | x == CONST_ALC_SYNC = Sync (unmarshalALboolean (fromIntegral y))
|
|
- | x == 0x200000 = Sources y
|
|
- | x == 0x200001 = Buffers y
|
|
- | otherwise = error ("unmarshalContextAttribute: illegal value " ++ show a)
|
|
+import Sound.OpenAL.Config
|
|
diff -uNr --exclude=autom4te.cache --exclude=.cvsignore hugs98-Mar2005-patched/fptools/libraries/OpenAL/Sound/OpenAL/ALC/Capture.hs ghc-6.4.2/libraries/OpenAL/Sound/OpenAL/ALC/Capture.hs
|
|
--- hugs98-Mar2005-patched/fptools/libraries/OpenAL/Sound/OpenAL/ALC/Capture.hs 1970-01-01 09:00:00.000000000 +0900
|
|
+++ ghc-6.4.2/libraries/OpenAL/Sound/OpenAL/ALC/Capture.hs 2006-03-22 00:58:03.000000000 +0900
|
|
@@ -0,0 +1,136 @@
|
|
+--------------------------------------------------------------------------------
|
|
+-- |
|
|
+-- Module : Sound.OpenAL.ALC.Capture
|
|
+-- Copyright : (c) Sven Panne 2005
|
|
+-- License : BSD-style (see the file libraries/OpenAL/LICENSE)
|
|
+--
|
|
+-- Maintainer : sven.panne@aedion.de
|
|
+-- Stability : provisional
|
|
+-- Portability : portable
|
|
+--
|
|
+-- This module corresponds to section 6.4.2. (Capture) of the OpenAL
|
|
+-- Specification and Reference (version 1.1).
|
|
+--
|
|
+--------------------------------------------------------------------------------
|
|
+
|
|
+module Sound.OpenAL.ALC.Capture (
|
|
+ NumSamples, captureOpenDevice, captureStart, captureNumSamples,
|
|
+ captureSamples, captureStop, captureCloseDevice,
|
|
+ captureDefaultDeviceSpecifier, captureDeviceSpecifier,
|
|
+ allCaptureDeviceSpecifiers
|
|
+) where
|
|
+
|
|
+import Foreign.Ptr ( Ptr, nullPtr, FunPtr )
|
|
+import Graphics.Rendering.OpenGL.GL.StateVar (
|
|
+ GettableStateVar, makeGettableStateVar, get )
|
|
+import Sound.OpenAL.AL.Buffer ( Format )
|
|
+import Sound.OpenAL.AL.Format ( marshalFormat )
|
|
+import Sound.OpenAL.ALC.ALCboolean ( unmarshalALCboolean )
|
|
+import Sound.OpenAL.ALC.BasicTypes (
|
|
+ ALCchar, ALCuint, ALCenum, ALCsizei, ALCboolean )
|
|
+import Sound.OpenAL.ALC.Context ( Frequency )
|
|
+import Sound.OpenAL.ALC.Device ( Device )
|
|
+import Sound.OpenAL.ALC.Extensions ( alcProcAddress )
|
|
+import Sound.OpenAL.ALC.QueryUtils ( IntQuery(..), getInteger )
|
|
+import Sound.OpenAL.ALC.QueryUtils (
|
|
+ StringQuery(..), getString, getStringRaw, alcIsExtensionPresent )
|
|
+import Sound.OpenAL.ALC.String ( withALCString, peekALCStrings )
|
|
+import Sound.OpenAL.Config ( ALCdevice, marshalDevice, unmarshalDevice )
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+
|
|
+type NumSamples = ALCsizei
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+
|
|
+type Invoker a = FunPtr a -> a
|
|
+
|
|
+getCaptureFunc :: String -> IO (FunPtr a)
|
|
+getCaptureFunc = get . alcProcAddress Nothing
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+
|
|
+captureOpenDevice ::
|
|
+ Maybe String -> Frequency -> Format -> NumSamples -> IO (Maybe Device)
|
|
+captureOpenDevice maybeDeviceSpec frequency format size = do
|
|
+ funPtr <- getCaptureFunc "alcCaptureOpenDevice"
|
|
+ let open deviceSpec =
|
|
+ invokeCaptureOpenDevice funPtr deviceSpec (round frequency)
|
|
+ (fromIntegral (marshalFormat format)) size
|
|
+ fmap unmarshalDevice $
|
|
+ (maybe (open nullPtr) -- use preferred device
|
|
+ (flip withALCString open)
|
|
+ maybeDeviceSpec)
|
|
+
|
|
+foreign import CALLCONV unsafe "dynamic"
|
|
+ invokeCaptureOpenDevice :: Invoker (Ptr ALCchar -> ALCuint -> ALCenum -> ALCsizei -> IO ALCdevice)
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+
|
|
+captureStart :: Device -> IO ()
|
|
+captureStart = captureStartStop "alcCaptureStart"
|
|
+
|
|
+captureStartStop :: String -> Device -> IO ()
|
|
+captureStartStop funName device = do
|
|
+ funPtr <- getCaptureFunc funName
|
|
+ invokeCaptureStartStop funPtr (marshalDevice device)
|
|
+
|
|
+foreign import CALLCONV unsafe "dynamic"
|
|
+ invokeCaptureStartStop :: Invoker (ALCdevice -> IO ())
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+
|
|
+captureNumSamples :: Device -> GettableStateVar NumSamples
|
|
+captureNumSamples device =
|
|
+ makeGettableStateVar $ getInteger (Just device) CaptureSamples
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+
|
|
+captureSamples :: Device -> Ptr a -> NumSamples -> IO ()
|
|
+captureSamples = alcCaptureSamples . marshalDevice
|
|
+
|
|
+foreign import CALLCONV unsafe "alcCaptureSamples"
|
|
+ alcCaptureSamples :: ALCdevice -> Ptr a -> NumSamples -> IO ()
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+
|
|
+captureStop :: Device -> IO ()
|
|
+captureStop = captureStartStop "alcCaptureStop"
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+
|
|
+captureCloseDevice :: Device -> IO Bool
|
|
+captureCloseDevice device = do
|
|
+ funPtr <- getCaptureFunc "alcCaptureCloseDevice"
|
|
+ fmap unmarshalALCboolean .
|
|
+ invokeCaptureCloseDevice funPtr . marshalDevice $ device
|
|
+
|
|
+foreign import CALLCONV unsafe "dynamic"
|
|
+ invokeCaptureCloseDevice :: Invoker (ALCdevice -> IO ALCboolean)
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+
|
|
+-- | Contains the name of the default capture device.
|
|
+
|
|
+captureDefaultDeviceSpecifier :: GettableStateVar String
|
|
+captureDefaultDeviceSpecifier = makeGettableStateVar $
|
|
+ getString Nothing CaptureDefaultDeviceSpecifier
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+
|
|
+-- | Contains the specifier string for the given capture device.
|
|
+
|
|
+captureDeviceSpecifier :: Device -> GettableStateVar String
|
|
+captureDeviceSpecifier device = makeGettableStateVar $
|
|
+ getString (Just device) CaptureDeviceSpecifier
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+
|
|
+-- | Contains a list of specifiers for all available capture devices.
|
|
+
|
|
+allCaptureDeviceSpecifiers :: GettableStateVar [String]
|
|
+allCaptureDeviceSpecifiers = makeGettableStateVar $ do
|
|
+ enumExtPresent <- get (alcIsExtensionPresent Nothing "ALC_ENUMERATION_EXT")
|
|
+ if enumExtPresent
|
|
+ then peekALCStrings =<< getStringRaw Nothing CaptureDeviceSpecifier
|
|
+ else fmap (\s -> [s]) $ get captureDefaultDeviceSpecifier
|
|
diff -uNr --exclude=autom4te.cache --exclude=.cvsignore hugs98-Mar2005-patched/fptools/libraries/OpenAL/Sound/OpenAL/ALC/Context.hs ghc-6.4.2/libraries/OpenAL/Sound/OpenAL/ALC/Context.hs
|
|
--- hugs98-Mar2005-patched/fptools/libraries/OpenAL/Sound/OpenAL/ALC/Context.hs 2005-02-24 18:58:23.000000000 +0900
|
|
+++ ghc-6.4.2/libraries/OpenAL/Sound/OpenAL/ALC/Context.hs 2006-03-22 00:58:03.000000000 +0900
|
|
@@ -1,152 +1,198 @@
|
|
--------------------------------------------------------------------------------
|
|
-- |
|
|
-- Module : Sound.OpenAL.ALC.Context
|
|
--- Copyright : (c) Sven Panne 2003-2004
|
|
+-- Copyright : (c) Sven Panne 2003-2005
|
|
-- License : BSD-style (see the file libraries/OpenAL/LICENSE)
|
|
--
|
|
-- Maintainer : sven.panne@aedion.de
|
|
-- Stability : provisional
|
|
-- Portability : portable
|
|
--
|
|
--- Managing Rendering Contexts
|
|
+-- This module corresponds to section 6.2 (Managing Rendering Contexts) of the
|
|
+-- OpenAL Specification and Reference (version 1.1).
|
|
+--
|
|
+-- All operations of the AL core API affect a current AL context. Within the
|
|
+-- scope of AL, the ALC is implied - it is not visible as a handle or function
|
|
+-- parameter. Only one AL Context per process can be current at a time.
|
|
+-- Applications maintaining multiple AL Contexts, whether threaded or not,
|
|
+-- have to set the current context accordingly. Applications can have multiple
|
|
+-- threads that share one more or contexts. In other words, AL and ALC are
|
|
+-- threadsafe.
|
|
--
|
|
--------------------------------------------------------------------------------
|
|
|
|
module Sound.OpenAL.ALC.Context (
|
|
- ContextAttribute(..), Context, createContext, destroyContext, currentContext,
|
|
- processContext, suspendContext,
|
|
-
|
|
- contextsDevice, allAttributes
|
|
+ Frequency, ContextAttribute(..), Context, createContext, currentContext,
|
|
+ processContext, suspendContext, destroyContext, contextsDevice, allAttributes
|
|
) where
|
|
|
|
|
|
-import Control.Monad ( liftM )
|
|
import Foreign.Marshal.Array ( withArray0 )
|
|
-import Foreign.Ptr ( Ptr, nullPtr )
|
|
+import Foreign.Ptr ( Ptr )
|
|
import Graphics.Rendering.OpenGL.GL.StateVar (
|
|
StateVar, makeStateVar, GettableStateVar, makeGettableStateVar )
|
|
-import Sound.OpenAL.AL.BasicTypes ( ALint )
|
|
+import Sound.OpenAL.ALC.BasicTypes ( ALCint )
|
|
+import Sound.OpenAL.ALC.ALCboolean ( marshalALCboolean, unmarshalALCboolean )
|
|
import Sound.OpenAL.ALC.Device ( Device )
|
|
-import Sound.OpenAL.ALC.Queries ( IntQuery(..), getInteger, getIntegerv )
|
|
-import Sound.OpenAL.ALC.BasicTypes (
|
|
- ALCenum, isDevice,
|
|
- ContextAttribute(..), marshalContextAttribute, unmarshalContextAttribute )
|
|
-import Sound.OpenAL.ALC.Errors ( checkError )
|
|
+import Sound.OpenAL.ALC.QueryUtils ( IntQuery(..), getInteger, getIntegerv )
|
|
+import Sound.OpenAL.Config (
|
|
+ ALCdevice, marshalDevice, unmarshalDevice,
|
|
+ ALCcontext, Context, nullContext, marshalContext, unmarshalContext,
|
|
+ alcProcessContext, alcDestroyContext, alcMakeContextCurrent )
|
|
+import Sound.OpenAL.Constants (
|
|
+ alc_FREQUENCY, alc_REFRESH, alc_SYNC, alc_MONO_SOURCES, alc_STEREO_SOURCES )
|
|
|
|
---------------------------------------------------------------------------------
|
|
+#ifdef __HADDOCK__
|
|
+import Sound.OpenAL.ALC.Errors ( ALCErrorCategory(..) )
|
|
+#endif
|
|
|
|
-type ALCcontext = ()
|
|
+--------------------------------------------------------------------------------
|
|
|
|
-newtype Context = Context (Ptr ALCcontext)
|
|
- deriving ( Eq, Ord, Show )
|
|
+-- | Frequency, specified in samples per second, i.e. units of Hertz \[Hz\].
|
|
+-- Note that the underlying OpenAL API currently uses integral frequencies
|
|
+-- only, but we want to mirror physical reality here more closely.
|
|
|
|
-isContext :: Context -> Bool
|
|
-isContext (Context ctx) = ctx /= nullPtr
|
|
+type Frequency = Float
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
--- | Allocates, initializes, and returns a context for the given device with the
|
|
--- requested attributes. If any attribute cannot have the required value met or
|
|
--- exceeded, an 'IOError' is thrown. If the device is not valid, an
|
|
--- 'Sound.OpenAL.ALC.Errors.ALCInvalidDevice' error is set and an 'IOError' is
|
|
--- thrown. Note that 'createContext' does /not/ set the current context, this
|
|
--- must be done separately via 'currentContext'.
|
|
+-- | The application can choose to specify certain attributes for a context at
|
|
+-- context-creation time. Attributes not specified explicitly are set to
|
|
+-- implementation dependent defaults.
|
|
|
|
-createContext :: Device -> [ContextAttribute] -> IO Context
|
|
-createContext device attributes =
|
|
- let pairToList (key, value) = [key, value]
|
|
- attrs = concatMap (pairToList . marshalContextAttribute) attributes
|
|
- in checkError isContext . withArray0 0 attrs $ alcCreateContext device
|
|
+data ContextAttribute =
|
|
+ Frequency Frequency -- ^ Frequency for mixing output buffer, in units of
|
|
+ -- Hz
|
|
+ | Refresh Frequency -- ^ Refresh intervals, in units of Hz
|
|
+ | Sync Bool -- ^ Flag, indicating a synchronous context
|
|
+ | MonoSources Int -- ^ A hint indicating how many sources should be
|
|
+ -- capable of supporting mono data
|
|
+ | StereoSources Int -- ^ A hint indicating how many sources should be
|
|
+ -- capable of supporting stereo data
|
|
+ deriving ( Eq, Ord, Show )
|
|
|
|
-foreign import CALLCONV unsafe "alcCreateContext"
|
|
- alcCreateContext :: Device -> Ptr ALint -> IO Context
|
|
+marshalContextAttribute :: ContextAttribute -> (ALCint,ALCint)
|
|
+marshalContextAttribute a = case a of
|
|
+ Frequency f -> (alc_FREQUENCY, round f)
|
|
+ Refresh r -> (alc_REFRESH, round r)
|
|
+ Sync s -> (alc_SYNC, fromIntegral (marshalALCboolean s))
|
|
+ MonoSources m -> (alc_MONO_SOURCES, fromIntegral m)
|
|
+ StereoSources s -> (alc_STEREO_SOURCES, fromIntegral s)
|
|
+
|
|
+unmarshalContextAttribute :: (ALCint,ALCint) -> ContextAttribute
|
|
+unmarshalContextAttribute a@(x,y)
|
|
+ | x == alc_FREQUENCY = Frequency (fromIntegral y)
|
|
+ | x == alc_REFRESH = Refresh (fromIntegral y)
|
|
+ | x == alc_SYNC = Sync (unmarshalALCboolean (fromIntegral y))
|
|
+ | x == alc_MONO_SOURCES = MonoSources (fromIntegral y)
|
|
+ | x == alc_STEREO_SOURCES = StereoSources (fromIntegral y)
|
|
+ | otherwise = error ("unmarshalContextAttribute: illegal value " ++ show a)
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
--- | Destroys the given context.
|
|
+-- | Create a context for a given device and given attributes. Context creation
|
|
+-- will fail in the following cases: a) if the application requests attributes
|
|
+-- that, by themselves, can not be provided b) if the combination of specified
|
|
+-- attributes can not be provided c) if a specified attribute, or the
|
|
+-- combination of attributes, does not match the default values for unspecified
|
|
+-- attributes If context creation fails, 'Nothing' will be returned, otherwise
|
|
+-- 'Just' the new context. Note that 'createContext' does /not/ set the current
|
|
+-- context, this must be done separately via 'currentContext'.
|
|
|
|
-destroyContext :: Context -> IO ()
|
|
-destroyContext = ignore . alcDestroyContext
|
|
+createContext :: Device -> [ContextAttribute] -> IO (Maybe Context)
|
|
+createContext device attributes = do
|
|
+ let pairToList (key, value) = [key, value]
|
|
+ attrs = concatMap (pairToList . marshalContextAttribute) attributes
|
|
+ fmap unmarshalContext .
|
|
+ withArray0 0 attrs . alcCreateContext . marshalDevice $ device
|
|
|
|
-foreign import CALLCONV unsafe "alcDestroyContext"
|
|
- alcDestroyContext :: Context -> IO ALCenum
|
|
+foreign import CALLCONV unsafe "alcCreateContext"
|
|
+ alcCreateContext :: ALCdevice -> Ptr ALCint -> IO ALCcontext
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
--- | 'Just' the current context, 'Nothing' means paused.
|
|
+-- | Contains 'Just' the current context with respect to OpenAL operation, or
|
|
+-- 'Nothing' if there is no current context. Setting it to the latter is useful
|
|
+-- when shutting OpenAL down. The state variable applies to the device that the
|
|
+-- context was created for. For each OS process (usually this means for each
|
|
+-- application), only one context can be current at any given time. All AL
|
|
+-- commands apply to the current context. Commands that affect objects shared
|
|
+-- among contexts (e.g. buffers) have side effects on other contexts.
|
|
|
|
currentContext :: StateVar (Maybe Context)
|
|
currentContext = makeStateVar getCurrentContext makeContextCurrent
|
|
|
|
--- | Returns 'Just' the current context or 'Nothing' if there is none.
|
|
-
|
|
getCurrentContext :: IO (Maybe Context)
|
|
-getCurrentContext = do
|
|
- context <- alcGetCurrentContext
|
|
- return $ if isContext context then Nothing else Just context
|
|
+getCurrentContext = fmap unmarshalContext $ alcGetCurrentContext
|
|
|
|
foreign import CALLCONV unsafe "alcGetCurrentContext"
|
|
- alcGetCurrentContext :: IO Context
|
|
-
|
|
--- | Makes the given context the current context or pauses when given 'Nothing'.
|
|
+ alcGetCurrentContext :: IO ALCcontext
|
|
|
|
makeContextCurrent :: Maybe Context -> IO ()
|
|
-makeContextCurrent mbContext =
|
|
- ignore $ alcMakeContextCurrent (maybe (Context nullPtr) id mbContext)
|
|
-
|
|
-foreign import CALLCONV unsafe "alcMakeContextCurrent"
|
|
- alcMakeContextCurrent :: Context -> IO ALCenum
|
|
+makeContextCurrent =
|
|
+ fmap (const ()) . alcMakeContextCurrent . marshalContext . maybe nullContext id
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
--- | Performs processing on a synced context, nop on an asynchronous context.
|
|
+-- | The current context is the only context accessible to state changes by AL
|
|
+-- commands (aside from state changes affecting shared objects). However,
|
|
+-- multiple contexts can be processed at the same time. To indicate that a
|
|
+-- context should be processed (i.e. that internal execution state like offset
|
|
+-- increments are supposed to be performed), the application has to use
|
|
+-- 'processContext'. Repeated calls to 'processContext' are legal, and do not
|
|
+-- affect a context that is already marked as processing. The default state of a
|
|
+-- context created by 'createContext' is that it is processing.
|
|
|
|
processContext :: Context -> IO ()
|
|
-processContext = ignore . alcProcessContext
|
|
+processContext = fmap (const ()) . alcProcessContext . marshalContext
|
|
|
|
-foreign import CALLCONV unsafe "alcProcessContext"
|
|
- alcProcessContext :: Context -> IO Context
|
|
+-- | The application can suspend any context from processing (including the
|
|
+-- current one). To indicate that a context should be suspended from processing
|
|
+-- (i.e. that internal execution state like offset increments is not supposed to
|
|
+-- be changed), the application has to use 'suspendContext'. Repeated calls to
|
|
+-- 'suspendContext' are legal, and do not affect a context that is already
|
|
+-- marked as suspended.
|
|
|
|
--- | Suspends processing on an asynchronous context. This is a legal nop on a
|
|
--- synced context.
|
|
+suspendContext :: Context -> IO ()
|
|
+suspendContext = alcSuspendContext . marshalContext
|
|
|
|
foreign import CALLCONV unsafe "alcSuspendContext"
|
|
- suspendContext :: Context -> IO ()
|
|
+ alcSuspendContext :: ALCcontext -> IO ()
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
--- ALC's error handling is highly irregular: Somtimes a success/failure value is
|
|
--- returned in addition to setting the internal error state. We don't do the
|
|
--- same in our Haskell API, effectively ignoring the returned value.
|
|
+-- | Destroy the given context. Note that the the correct way to destroy a
|
|
+-- context is to first release it by setting 'currentContext' to
|
|
+-- 'Nothing'. Applications should not attempt to destroy a current context,
|
|
+-- doing so will not work and will result in an 'ALCInvalidOperation' error.
|
|
|
|
-ignore :: IO a -> IO ()
|
|
-ignore action = do
|
|
- action
|
|
- return ()
|
|
+destroyContext :: Context -> IO ()
|
|
+destroyContext = fmap (const ()) . alcDestroyContext . marshalContext
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
--- | 'Just' the device of the given context or 'Nothing' if the context is
|
|
--- invalid.
|
|
+-- | Contains 'Just' the device of the given context or 'Nothing' if the context
|
|
+-- is invalid.
|
|
|
|
contextsDevice :: Context -> GettableStateVar (Maybe Device)
|
|
-contextsDevice context = makeGettableStateVar $ do
|
|
- device <- alcGetContextsDevice context
|
|
- return $ if isDevice device then Nothing else Just device
|
|
+contextsDevice =
|
|
+ makeGettableStateVar .
|
|
+ fmap unmarshalDevice . alcGetContextsDevice . marshalContext
|
|
|
|
foreign import CALLCONV unsafe "alcGetContextsDevice"
|
|
- alcGetContextsDevice :: Context -> IO Device
|
|
+ alcGetContextsDevice :: ALCcontext -> IO ALCdevice
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
--- | Note that we need a current context here!
|
|
+-- | Contains the attribute list for the current context of the specified
|
|
+-- device.
|
|
|
|
allAttributes :: Device -> GettableStateVar [ContextAttribute]
|
|
allAttributes device = makeGettableStateVar $ do
|
|
- numALints <- liftM fromIntegral $ getInteger device AttributesSize
|
|
- liftM toContextAttributes $ getIntegerv device AllAttributes numALints
|
|
+ numALCints <- fmap fromIntegral $ getInteger (Just device) AttributesSize
|
|
+ fmap toContextAttributes $ getIntegerv (Just device) AllAttributes numALCints
|
|
|
|
-toContextAttributes :: [ALint] -> [ContextAttribute]
|
|
+toContextAttributes :: [ALCint] -> [ContextAttribute]
|
|
toContextAttributes xs = case xs of
|
|
[] -> [] -- should only happen when device and/or current context is invalid
|
|
(0:_) -> []
|
|
diff -uNr --exclude=autom4te.cache --exclude=.cvsignore hugs98-Mar2005-patched/fptools/libraries/OpenAL/Sound/OpenAL/ALC/Device.hs ghc-6.4.2/libraries/OpenAL/Sound/OpenAL/ALC/Device.hs
|
|
--- hugs98-Mar2005-patched/fptools/libraries/OpenAL/Sound/OpenAL/ALC/Device.hs 2004-04-05 23:15:54.000000000 +0900
|
|
+++ ghc-6.4.2/libraries/OpenAL/Sound/OpenAL/ALC/Device.hs 2006-03-22 00:58:03.000000000 +0900
|
|
@@ -1,79 +1,223 @@
|
|
--------------------------------------------------------------------------------
|
|
-- |
|
|
-- Module : Sound.OpenAL.ALC.Device
|
|
--- Copyright : (c) Sven Panne 2003-2004
|
|
+-- Copyright : (c) Sven Panne 2003-2005
|
|
-- License : BSD-style (see the file libraries/OpenAL/LICENSE)
|
|
--
|
|
-- Maintainer : sven.panne@aedion.de
|
|
-- Stability : provisional
|
|
-- Portability : portable
|
|
--
|
|
--- Managing Devices
|
|
+-- This module corresponds to section 6.1 (Managing Devices) of the OpenAL
|
|
+-- Specification and Reference (version 1.1).
|
|
+--
|
|
+-- ALC introduces the notion of a device. A device can be, depending on the
|
|
+-- implementation, a hardware device, or a daemon\/OS service\/actual
|
|
+-- server. This mechanism also permits different drivers (and hardware) to
|
|
+-- coexist within the same system, as well as allowing several applications to
|
|
+-- share system resources for audio, including a single hardware output
|
|
+-- device. The details are left to the implementation, which has to map the
|
|
+-- available backends to unique device specifiers.
|
|
--
|
|
--------------------------------------------------------------------------------
|
|
|
|
module Sound.OpenAL.ALC.Device (
|
|
Device, openDevice, closeDevice,
|
|
- deviceSpecifier, alcVersion,
|
|
- defaultDeviceSpecifier, allDeviceSpecifiers
|
|
+ defaultDeviceSpecifier, deviceSpecifier, allDeviceSpecifiers
|
|
) where
|
|
|
|
-import Control.Monad ( liftM, liftM2 )
|
|
import Foreign.Ptr ( Ptr, nullPtr )
|
|
+import Foreign.Marshal.Utils ( maybePeek )
|
|
import Graphics.Rendering.OpenGL.GL.StateVar (
|
|
GettableStateVar, makeGettableStateVar, get )
|
|
-import Sound.OpenAL.AL.BasicTypes ( ALubyte, ALint )
|
|
-import Sound.OpenAL.ALC.Queries(
|
|
- StringQuery(..), alcGetString, alcGetString_,
|
|
- IntQuery(..), getInteger,
|
|
- alcIsExtensionPresent )
|
|
-import Sound.OpenAL.ALC.BasicTypes ( Device, isDevice, withALString )
|
|
-import Sound.OpenAL.ALC.Errors ( checkError )
|
|
+import Sound.OpenAL.ALC.BasicTypes ( ALCchar )
|
|
+import Sound.OpenAL.ALC.QueryUtils (
|
|
+ StringQuery(..), getString, getStringRaw, alcIsExtensionPresent )
|
|
+import Sound.OpenAL.ALC.String ( withALCString, peekALCString, peekALCStrings )
|
|
+import Sound.OpenAL.Config (
|
|
+ Device, ALCdevice, unmarshalDevice, closeDevice )
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
--- | Opens a device, using an alrc expression to specify attributes for the
|
|
--- device. Throws an IOError on failure. The ALC error flag is cleared in any
|
|
--- case.
|
|
+-- | 'openDevice' allows the application (i.e. the client program) to connect to
|
|
+-- a device (i.e. the server). If the function returns 'Nothing', then no sound
|
|
+-- driver\/device has been found. The argument to 'openDevice' specifies a
|
|
+-- certain device or device configuration. If it is 'Nothing', the
|
|
+-- implementation will provide an implementation specific default, see
|
|
+-- 'defaultDeviceSpecifier'. Otherwise it is 'Just' an implementation-dependent
|
|
+-- string. You can use 'allDeviceSpecifiers' to get a list of the known OpenAL
|
|
+-- devices.
|
|
+--
|
|
+-- /Notes for Windows:/ There are 3 possible device strings, each having a
|
|
+-- deprecated equivalent for legacy applications only:
|
|
+--
|
|
+-- * @\"Generic Hardware\"@ (legacy string: @\"DirectSound3D\"@)
|
|
+--
|
|
+-- * @\"Generic Software\"@ (legacy string: @\"DirectSound\"@)
|
|
+--
|
|
+-- * @\"Generic Software Fallback\"@ (legacy string: @\"MMSYSTEM\"@)
|
|
+--
|
|
+-- /Notes for Linux\/\*nix:/ If an @.openalrc@ file is present in the user\'s
|
|
+-- home directory, it is loaded first, otherwise @\/etc\/openalrc@ is tried.
|
|
+-- The bindings (if any) of @devices@, @direction@, @sampling-rate@, and
|
|
+-- @speaker-num@ (see below) after loading one of these files take precedence
|
|
+-- over any bindings done via the argument to 'openDevice'.
|
|
+--
|
|
+-- The syntax of these files is lisp-based and a sequence of expressions, where
|
|
+-- an expression is one the following:
|
|
+--
|
|
+-- * A boolean value of the form @\#f@ or @\#t@, which evaluate to /false/ and
|
|
+-- /true/, respectively.
|
|
+--
|
|
+-- * An non-negative integer value, i.e. a sequence of decimal digits,
|
|
+-- evaluating to itself.
|
|
+--
|
|
+-- * A (signed) floating point value, as recoginzed by C\'s @atof()@, evaluating
|
|
+-- to itself.
|
|
+--
|
|
+-- * A pointer value of the form @\#p/num/@, where /num/ can be an octal,
|
|
+-- decimal or hexadecimal value, as recoginzed by C\`s @strtol()@, evaluating
|
|
+-- to itself. This kind of expression is currently unused.
|
|
+--
|
|
+-- * A string, i.e. a sequence of printable\/whitespace characters between
|
|
+-- double quotes, evaluating to itself.
|
|
+--
|
|
+-- * A symbol, i.e. a sequence of almost all characters which don\'t form a
|
|
+-- simple expression like the ones mentioned below, e.g. @foo@, @bar1@, @3baz@,
|
|
+-- ... The symbol evaluates to the value currently bound to it.
|
|
+--
|
|
+-- * A function application of the form @(/symbol/ /expression/...)@. The
|
|
+-- function bound to the symbol is applied to the evaluated arguments.
|
|
+--
|
|
+-- * A quotation of the form @(quote /expression/)@ or @\'/expression/@,
|
|
+-- evaluating to the unevaluated /expression/ itself.
|
|
+--
|
|
+-- * A definition of the form @(define /symbol/ /expression/)@, binding /symbol/
|
|
+-- to the value of /expression/. The whole expression evaluates to the value of
|
|
+-- /expression/, too.
|
|
+--
|
|
+-- * A conjunction of boolean expressions of the form @(and /expression/...)@.
|
|
+-- Each /expression/ is evaluated in turn, and if one of them evaluates to
|
|
+-- /false/, the value of the whole expression is /false/. Otherwise the value is
|
|
+-- /true/.
|
|
+--
|
|
+-- * An extension loading mechanism of the form @(load-extension
|
|
+-- /libraryName/)@, where /libraryName/ has to evaluate to a string. This tries
|
|
+-- to load the dynamic library with up to 3 special entry points:
|
|
+-- @alExtension_03282000@ (pointing to a mandatory NULL-terminated sequence of
|
|
+-- pairs of pointers to names and extension functions), @alExtInit_03282000@ (an
|
|
+-- optional initialization function), and @alExtFini_03282000@ (an optional
|
|
+-- cleanup function). If the extension could be loaded successfully, the whole
|
|
+-- expression evaluates to /true/, otherwise to /false/.
|
|
+--
|
|
+-- Some symbols have a special meaning for OpenAL:
|
|
+--
|
|
+-- [@devices@] Has the form @(/devspec/...)@, where /devspec/ is either a
|
|
+-- symbol\/string specifying a device or @(/device/ /device-param/...)@,
|
|
+-- specifying a device with additional parameters. These optional device
|
|
+-- parameters are stored in a variable @device-params@, but are currently
|
|
+-- unused. The first device which can successfully opened is used.
|
|
+--
|
|
+-- [@direction@] Type string or symbol: @\"read\"@ specifies that the device
|
|
+-- should be an input device, everything else means output device (default).
|
|
+--
|
|
+-- [@sampling-rate@] Type integer or float: Specifies the internal mixing
|
|
+-- frequency, default is 44.1kHz.
|
|
+--
|
|
+-- [@speaker-num@] Type integer or float: Specifies the number of speakers,
|
|
+-- which can be 1, 2 (default), or 4.
|
|
+--
|
|
+-- [@alsa-device@] Type string, @alsa@ backend only: Specifies both
|
|
+-- @alsa-out-device@ and @alsa-in-device@, default @\"plughw:0,0\"@.
|
|
+--
|
|
+-- [@alsa-out-device@] Type string, @alsa@ backend only: Specifies the ALSA
|
|
+-- output device, defaults to the value of @alsa-device@.
|
|
+--
|
|
+-- [@alsa-in-device@] Type string, @alsa@ backend only: Specifies the ALSA
|
|
+-- input device, defaults to the value of @alsa-device@.
|
|
+--
|
|
+-- [@native-in-device@] Type string, @native@ backend on IRIX only.
|
|
+--
|
|
+-- [@native-out-device@] Type string, @native@ backend on IRIX only.
|
|
+--
|
|
+-- [@native-rear-out-device@] Type string, @native@ backend on IRIX only.
|
|
+--
|
|
+-- [@native-use-select@] Type boolean, @native@ backend on Linux only: If @\#t@,
|
|
+-- wait up to 0.8sec for the device to become ready for writing. If @\#f@, just
|
|
+-- try to write and hope it won\'t hang forever. The latter might be necessary
|
|
+-- for some drivers which don\'t implement @select()@ , like some Aureal
|
|
+-- drivers.
|
|
+--
|
|
+-- [@lin-dsp-path@] Type string, @native@ backend on Linux only: Path to DSP
|
|
+-- device for writing, tried before @\/dev\/sound\/dsp@ and @\/dev\/sound@ if
|
|
+-- set.
|
|
+--
|
|
+-- [@lin-dsp-read-path@] Type string, @native@ backend on Linux only: Path to
|
|
+-- DSP device for reading, tried before @\/dev\/sound\/dsp@ and @\/dev\/sound@
|
|
+-- if set. Defaults to the value of @lin-dsp-path@.
|
|
+--
|
|
+-- [@native-backend-debug@] Type boolean, @native@ backend on Darwin only: If
|
|
+-- set to @\#f@, be a bit verbose on stderr about what\'s going on in the
|
|
+-- backend.
|
|
+--
|
|
+-- [@source-rolloff-factor@] Type integer or float: Value of the initial rolloff
|
|
+-- factor for sources, default is @1.0@.
|
|
+--
|
|
+-- [@listener-position@] List of 3 integers or floats: Value of the initial
|
|
+-- listener position, default is @(0 0 0)@.
|
|
+--
|
|
+-- [@listener-velocity@] List of 3 integers or floats: Value of the initial
|
|
+-- listener velocity, default is @(0 0 0)@.
|
|
+--
|
|
+-- [@listener-orientation@] List of 6 integers or floats: Value of the initial
|
|
+-- listener orientation (at\/up), default is @(0 0 -1 0 1 0)@.
|
|
+--
|
|
+-- The string given to 'openDevice' has to be of the form @\'((/symbol/
|
|
+-- /expression/) ...)@, which means basically a sequence of @define@
|
|
+-- expressions. Example:
|
|
+--
|
|
+-- @
|
|
+-- \"\'((sampling-rate 8000) (native-backend-debug \#f))\"
|
|
+-- @
|
|
+--
|
|
+-- /Note:/ The information above has been reverse-engineered from the OpenAL SI
|
|
+-- and could be inaccurate. Any corrections and\/or additions are highly
|
|
+-- welcome.
|
|
|
|
-openDevice :: Maybe String -> IO Device
|
|
+openDevice :: Maybe String -> IO (Maybe Device)
|
|
openDevice maybeDeviceSpec =
|
|
- checkError isDevice $
|
|
+ fmap unmarshalDevice $
|
|
maybe (alcOpenDevice nullPtr) -- use preferred device
|
|
- (flip withALString alcOpenDevice)
|
|
+ (flip withALCString alcOpenDevice)
|
|
maybeDeviceSpec
|
|
|
|
foreign import CALLCONV unsafe "alcOpenDevice"
|
|
- alcOpenDevice :: Ptr ALubyte -> IO Device
|
|
+ alcOpenDevice :: Ptr ALCchar -> IO ALCdevice
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
|
|
--- | Closes the given device.
|
|
+-- | Contains 'Just' the specifier string for the default device or 'Nothing' if
|
|
+-- there is no sound support at all.
|
|
|
|
-foreign import CALLCONV unsafe "alcCloseDevice"
|
|
- closeDevice :: Device -> IO ()
|
|
+defaultDeviceSpecifier :: GettableStateVar (Maybe String)
|
|
+defaultDeviceSpecifier = makeGettableStateVar $
|
|
+ getStringRaw Nothing DefaultDeviceSpecifier >>= maybePeek peekALCString
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
+-- | Contains the specifier string for the given device.
|
|
+
|
|
deviceSpecifier :: Device -> GettableStateVar String
|
|
deviceSpecifier device = makeGettableStateVar $
|
|
- alcGetString (Just device) DeviceSpecifier
|
|
-
|
|
---------------------------------------------------------------------------------
|
|
-
|
|
-alcVersion :: Device -> GettableStateVar (ALint, ALint) -- ToDo: Without Device?????
|
|
-alcVersion device = makeGettableStateVar $
|
|
- liftM2 (,) (getInteger device MajorVersion) (getInteger device MinorVersion)
|
|
+ getString (Just device) DeviceSpecifier
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
-defaultDeviceSpecifier :: GettableStateVar String
|
|
-defaultDeviceSpecifier = makeGettableStateVar $
|
|
- alcGetString Nothing DefaultDeviceSpecifier
|
|
+-- | Contains a list of specifiers for all available devices.
|
|
|
|
allDeviceSpecifiers :: GettableStateVar [String]
|
|
allDeviceSpecifiers = makeGettableStateVar $ do
|
|
- enumExtPresent <- alcIsExtensionPresent Nothing "ALC_ENUMERATION_EXT"
|
|
+ enumExtPresent <- get (alcIsExtensionPresent Nothing "ALC_ENUMERATION_EXT")
|
|
if enumExtPresent
|
|
- then do
|
|
- ptr <- alcGetString_ Nothing DeviceSpecifier
|
|
- return [] -- Todo!!!!!
|
|
- else liftM (\s -> [s]) $ get defaultDeviceSpecifier
|
|
+ then getStringRaw Nothing DeviceSpecifier >>= peekALCStrings
|
|
+ else get defaultDeviceSpecifier >>= (return . maybe [] (\s -> [s]))
|
|
diff -uNr --exclude=autom4te.cache --exclude=.cvsignore hugs98-Mar2005-patched/fptools/libraries/OpenAL/Sound/OpenAL/ALC/Errors.hs ghc-6.4.2/libraries/OpenAL/Sound/OpenAL/ALC/Errors.hs
|
|
--- hugs98-Mar2005-patched/fptools/libraries/OpenAL/Sound/OpenAL/ALC/Errors.hs 2004-01-03 04:03:09.000000000 +0900
|
|
+++ ghc-6.4.2/libraries/OpenAL/Sound/OpenAL/ALC/Errors.hs 2006-03-22 00:58:03.000000000 +0900
|
|
@@ -1,65 +1,93 @@
|
|
--------------------------------------------------------------------------------
|
|
-- |
|
|
-- Module : Sound.OpenAL.ALC.Errors
|
|
--- Copyright : (c) Sven Panne 2003-2004
|
|
+-- Copyright : (c) Sven Panne 2003-2005
|
|
-- License : BSD-style (see the file libraries/OpenAL/LICENSE)
|
|
--
|
|
-- Maintainer : sven.panne@aedion.de
|
|
-- Stability : provisional
|
|
-- Portability : portable
|
|
--
|
|
--- Errors
|
|
+-- This module corresponds to section 6.3.6 (Query for Error Conditions) of the
|
|
+-- OpenAL Specification and Reference (version 1.1).
|
|
--
|
|
--------------------------------------------------------------------------------
|
|
|
|
module Sound.OpenAL.ALC.Errors (
|
|
- ALCerror(..), alcGetError, checkError
|
|
+ ALCError(..), ALCErrorCategory(..), alcErrors
|
|
) where
|
|
|
|
-import Sound.OpenAL.ALC.BasicTypes ( ALCenum, Device, fromDevice )
|
|
+import Graphics.Rendering.OpenGL.GL.StateVar (
|
|
+ GettableStateVar, makeGettableStateVar )
|
|
+import Sound.OpenAL.ALC.BasicTypes ( ALCenum )
|
|
+import Sound.OpenAL.ALC.Device ( Device )
|
|
+import Sound.OpenAL.ALC.QueryUtils ( StringQuery(..), getString )
|
|
+import Sound.OpenAL.Constants (
|
|
+ alc_NO_ERROR, alc_INVALID_DEVICE, alc_INVALID_CONTEXT, alc_INVALID_ENUM,
|
|
+ alc_INVALID_VALUE, alc_OUT_OF_MEMORY, alc_INVALID_OPERATION )
|
|
+import Sound.OpenAL.Config ( ALCdevice, marshalDevice )
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
-#include "HsOpenALConfig.h"
|
|
+-- | ALC errors consist of a general error category and a description of what
|
|
+-- went wrong.
|
|
+
|
|
+data ALCError = ALCError ALCErrorCategory String
|
|
+ deriving ( Eq, Ord, Show )
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
-data ALCerror =
|
|
- ALCInvalidDevice
|
|
- | ALCInvalidContext
|
|
- | ALCInvalidEnum
|
|
+-- | General ALC error categories.
|
|
+
|
|
+data ALCErrorCategory =
|
|
+ ALCInvalidEnum
|
|
| ALCInvalidValue
|
|
+ | ALCInvalidOperation
|
|
+ | ALCInvalidDevice
|
|
+ | ALCInvalidContext
|
|
| ALCOutOfMemory
|
|
deriving ( Eq, Ord, Show )
|
|
|
|
-unmarshalALCerror :: ALCenum -> ALCerror
|
|
-unmarshalALCerror x
|
|
- | x == CONST_ALC_INVALID_DEVICE = ALCInvalidDevice
|
|
- | x == CONST_ALC_INVALID_CONTEXT = ALCInvalidContext
|
|
- | x == CONST_ALC_INVALID_ENUM = ALCInvalidEnum
|
|
- | x == CONST_ALC_INVALID_VALUE = ALCInvalidValue
|
|
- | x == CONST_ALC_OUT_OF_MEMORY = ALCOutOfMemory
|
|
- | otherwise = error ("unmarshalALCerror: illegal value " ++ show x)
|
|
+unmarshalALCErrorCategory :: ALCenum -> ALCErrorCategory
|
|
+unmarshalALCErrorCategory x
|
|
+ | x == alc_INVALID_ENUM = ALCInvalidEnum
|
|
+ | x == alc_INVALID_VALUE = ALCInvalidValue
|
|
+ | x == alc_INVALID_OPERATION = ALCInvalidOperation
|
|
+ | x == alc_INVALID_DEVICE = ALCInvalidDevice
|
|
+ | x == alc_INVALID_CONTEXT = ALCInvalidContext
|
|
+ | x == alc_OUT_OF_MEMORY = ALCOutOfMemory
|
|
+ | otherwise = error ("unmarshalALCErrorCategory: illegal value " ++ show x)
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
-alcGetError :: Maybe Device -> IO (Maybe ALCerror) -- ToDo: The device is always unused!
|
|
-alcGetError device = do
|
|
- e <- alcGetError_ (fromDevice device)
|
|
- return $ if e == CONST_ALC_NO_ERROR then Nothing else Just (unmarshalALCerror e)
|
|
+-- | OpenAL detects only a subset of those conditions that could be considered
|
|
+-- errors. This is because in many cases error checking would adversely impact
|
|
+-- the performance of an error-free program. The state variable 'alcErrors' is
|
|
+-- used to obtain error information. When an error is detected by ALC, a flag is
|
|
+-- set and the error code is recorded. Further errors, if they occur, do not
|
|
+-- affect this recorded code. When 'alcErrors' is read, the error for the given
|
|
+-- device is returned and the flag is cleared, so that a further error will
|
|
+-- again record its code. If reading 'alcErrors' returns @\[\]@ then there has
|
|
+-- been no detectable error since the last time 'alcErrors' (or since the ALC
|
|
+-- was initialized).
|
|
+--
|
|
+-- When an error flag is set, results of ALC operations are undefined only if
|
|
+-- 'ALCOutOfMemory' has occurred. In other cases, the command generating the
|
|
+-- error is ignored so that it has no effect on ALC state or output buffer
|
|
+-- contents. If the error generating command returns a value, it returns zero.
|
|
+-- If the generating command modifies values through a pointer argument, no
|
|
+-- change is made to these values. These error semantics apply only to ALC
|
|
+-- errors, not to system errors such as memory access errors.
|
|
+
|
|
+alcErrors :: Device -> GettableStateVar [ALCError]
|
|
+alcErrors device =
|
|
+ makeGettableStateVar $ do
|
|
+ c <- alcGetError (marshalDevice device)
|
|
+ if c == alc_NO_ERROR
|
|
+ then return []
|
|
+ else do
|
|
+ s <- getString (Just device) (ALCErrorCategory c)
|
|
+ return [ ALCError (unmarshalALCErrorCategory c) s ]
|
|
|
|
foreign import CALLCONV unsafe "alcGetError"
|
|
- alcGetError_ :: Device -> IO ALCenum
|
|
-
|
|
---------------------------------------------------------------------------------
|
|
-
|
|
--- OpenAL does not always set the error flag, especially for out of memory
|
|
--- conditions, so we hack around this fact below. *sigh*
|
|
-checkError :: (a -> Bool) -> IO a -> IO a
|
|
-checkError predicate action = do
|
|
- alcGetError Nothing -- clear error flag
|
|
- val <- action
|
|
- if predicate val
|
|
- then return val
|
|
- else do err <- alcGetError Nothing
|
|
- ioError . userError . show . maybe ALCOutOfMemory id $ err
|
|
+ alcGetError :: ALCdevice -> IO ALCenum
|
|
diff -uNr --exclude=autom4te.cache --exclude=.cvsignore hugs98-Mar2005-patched/fptools/libraries/OpenAL/Sound/OpenAL/ALC/Extensions.hs ghc-6.4.2/libraries/OpenAL/Sound/OpenAL/ALC/Extensions.hs
|
|
--- hugs98-Mar2005-patched/fptools/libraries/OpenAL/Sound/OpenAL/ALC/Extensions.hs 2004-01-03 04:03:09.000000000 +0900
|
|
+++ ghc-6.4.2/libraries/OpenAL/Sound/OpenAL/ALC/Extensions.hs 2006-03-22 00:58:03.000000000 +0900
|
|
@@ -1,51 +1,86 @@
|
|
--------------------------------------------------------------------------------
|
|
-- |
|
|
-- Module : Sound.OpenAL.ALC.Extensions
|
|
--- Copyright : (c) Sven Panne 2003-2004
|
|
+-- Copyright : (c) Sven Panne 2003-2005
|
|
-- License : BSD-style (see the file libraries/OpenAL/LICENSE)
|
|
--
|
|
-- Maintainer : sven.panne@aedion.de
|
|
-- Stability : provisional
|
|
-- Portability : portable
|
|
--
|
|
--- Extension Handling
|
|
+-- This module corresponds to the extension handling parts of section 6.3
|
|
+-- (ALC Queries) of the OpenAL Specification and Reference (version 1.1).
|
|
--
|
|
--------------------------------------------------------------------------------
|
|
|
|
module Sound.OpenAL.ALC.Extensions (
|
|
- alcExtensions, alcIsExtensionPresent, alcGetProcAddress, alcGetEnumValue
|
|
+ alcExtensions, alcIsExtensionPresent, alcProcAddress, alcEnumValue,
|
|
+ alcVersion
|
|
) where
|
|
|
|
-import Control.Monad ( liftM )
|
|
+import Control.Monad ( liftM2 )
|
|
import Foreign.Ptr ( Ptr, FunPtr )
|
|
import Graphics.Rendering.OpenGL.GL.StateVar (
|
|
GettableStateVar, makeGettableStateVar )
|
|
-import Sound.OpenAL.AL.BasicTypes
|
|
-import Sound.OpenAL.ALC.BasicTypes ( fromDevice, withALString )
|
|
+import Sound.OpenAL.ALC.BasicTypes ( ALCchar, ALCenum, ALCint )
|
|
import Sound.OpenAL.ALC.Device ( Device )
|
|
-import Sound.OpenAL.ALC.Queries (
|
|
- StringQuery(..), alcGetString, alcIsExtensionPresent )
|
|
+import Sound.OpenAL.ALC.QueryUtils (
|
|
+ StringQuery(..), getString, IntQuery(..), getInteger, alcIsExtensionPresent )
|
|
+import Sound.OpenAL.ALC.String ( withALCString )
|
|
+import Sound.OpenAL.Config ( ALCdevice, nullDevice, marshalDevice )
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
-alcExtensions :: GettableStateVar [String]
|
|
-alcExtensions = makeGettableStateVar $
|
|
- liftM words $ alcGetString Nothing Extensions
|
|
+-- | Contains a list of available context extensions.
|
|
+
|
|
+alcExtensions :: Device -> GettableStateVar [String]
|
|
+alcExtensions device = makeGettableStateVar $
|
|
+ fmap words $ getString (Just device) Extensions
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
-alcGetProcAddress :: Maybe Device -> String -> IO (FunPtr a)
|
|
-alcGetProcAddress device funcName =
|
|
- withALString funcName (alcGetProcAddress_ (fromDevice device))
|
|
+-- | The application is expected to verify the applicability of an extension or
|
|
+-- core function entry point before requesting it by name, by use of
|
|
+-- 'alcIsExtensionPresent'. Extension entry points can be retrieved using
|
|
+-- 'alcProcAddress'. Entry points can be device specific, but are not context
|
|
+-- specific. Using 'Nothing' as the device does not guarantee that the entry
|
|
+-- point is returned, even if available for one of the available devices.
|
|
+
|
|
+alcProcAddress :: Maybe Device -> String -> GettableStateVar (FunPtr a)
|
|
+alcProcAddress maybeDevice funcName =
|
|
+ makeGettableStateVar .
|
|
+ withALCString funcName .
|
|
+ alcGetProcAddress . marshalDevice . maybe nullDevice id $ maybeDevice
|
|
|
|
foreign import CALLCONV unsafe "alcGetProcAddress"
|
|
- alcGetProcAddress_ :: Device -> Ptr ALubyte -> IO (FunPtr a)
|
|
+ alcGetProcAddress :: ALCdevice -> Ptr ALCchar -> IO (FunPtr a)
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
-alcGetEnumValue :: Maybe Device -> String -> IO ALenum
|
|
-alcGetEnumValue device enumName =
|
|
- withALString enumName (alcGetEnumValue_ (fromDevice device))
|
|
+-- | Enumeration\/token values are device independent, but tokens defined for
|
|
+-- extensions might not be present for a given device. Using 'Nothing' as the
|
|
+-- device is legal, but only the tokens defined by the AL core are
|
|
+-- guaranteed. Availability of extension tokens depends on the ALC extension.
|
|
+
|
|
+alcEnumValue :: Maybe Device -> String -> GettableStateVar ALCenum
|
|
+alcEnumValue maybeDevice enumName =
|
|
+ makeGettableStateVar .
|
|
+ withALCString enumName .
|
|
+ alcGetEnumValue . marshalDevice . maybe nullDevice id $ maybeDevice
|
|
|
|
foreign import CALLCONV unsafe "alcGetEnumValue"
|
|
- alcGetEnumValue_ :: Device -> Ptr ALubyte -> IO ALenum
|
|
+ alcGetEnumValue :: ALCdevice -> Ptr ALCchar -> IO ALCenum
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+
|
|
+-- | Contains the \"/major/./minor/\" specification revision for this implementation.
|
|
+
|
|
+alcVersion :: GettableStateVar String
|
|
+alcVersion =
|
|
+ makeGettableStateVar $
|
|
+ liftM2 makeVersionString
|
|
+ (getInteger Nothing MajorVersion)
|
|
+ (getInteger Nothing MinorVersion)
|
|
+
|
|
+makeVersionString :: ALCint -> ALCint -> String
|
|
+makeVersionString major minor = show major ++ "." ++ show minor
|
|
diff -uNr --exclude=autom4te.cache --exclude=.cvsignore hugs98-Mar2005-patched/fptools/libraries/OpenAL/Sound/OpenAL/ALC/Queries.hs ghc-6.4.2/libraries/OpenAL/Sound/OpenAL/ALC/Queries.hs
|
|
--- hugs98-Mar2005-patched/fptools/libraries/OpenAL/Sound/OpenAL/ALC/Queries.hs 2004-01-03 04:03:09.000000000 +0900
|
|
+++ ghc-6.4.2/libraries/OpenAL/Sound/OpenAL/ALC/Queries.hs 1970-01-01 09:00:00.000000000 +0900
|
|
@@ -1,99 +0,0 @@
|
|
--- #hide
|
|
---------------------------------------------------------------------------------
|
|
--- |
|
|
--- Module : Sound.OpenAL.ALC.Queries
|
|
--- Copyright : (c) Sven Panne 2003-2004
|
|
--- License : BSD-style (see the file libraries/OpenAL/LICENSE)
|
|
---
|
|
--- Maintainer : sven.panne@aedion.de
|
|
--- Stability : provisional
|
|
--- Portability : portable
|
|
---
|
|
---------------------------------------------------------------------------------
|
|
-
|
|
-module Sound.OpenAL.ALC.Queries (
|
|
- StringQuery(..), alcGetString, alcGetString_,
|
|
- IntQuery(..), marshalIntQuery, getInteger, getIntegerv,
|
|
- alcIsExtensionPresent
|
|
-) where
|
|
-
|
|
-import Control.Monad ( liftM, when )
|
|
-import Foreign
|
|
-import Sound.OpenAL.AL.BasicTypes ( ALubyte, ALint, ALenum, ALsizei )
|
|
-import Sound.OpenAL.AL.ALboolean ( ALboolean, unmarshalALboolean )
|
|
-import Sound.OpenAL.ALC.BasicTypes (
|
|
- Device, fromDevice, withALString, peekALString )
|
|
-
|
|
---------------------------------------------------------------------------------
|
|
-
|
|
-#include "HsOpenALConfig.h"
|
|
-
|
|
---------------------------------------------------------------------------------
|
|
-
|
|
-data StringQuery =
|
|
- DefaultDeviceSpecifier
|
|
- | DeviceSpecifier
|
|
- | Extensions
|
|
-
|
|
-marshalStringQuery :: StringQuery -> ALenum
|
|
-marshalStringQuery x = case x of
|
|
- DefaultDeviceSpecifier -> CONST_ALC_DEFAULT_DEVICE_SPECIFIER
|
|
- DeviceSpecifier -> CONST_ALC_DEVICE_SPECIFIER
|
|
- Extensions -> CONST_ALC_EXTENSIONS
|
|
-
|
|
---------------------------------------------------------------------------------
|
|
-
|
|
-alcGetString :: Maybe Device -> StringQuery -> IO String
|
|
-alcGetString device query = alcGetString_ device query >>= peekALString
|
|
-
|
|
-alcGetString_ :: Maybe Device -> StringQuery -> IO (Ptr ALubyte)
|
|
-alcGetString_ device = alcGetString__ (fromDevice device) . marshalStringQuery
|
|
-
|
|
-foreign import CALLCONV unsafe "alcGetString"
|
|
- alcGetString__ :: Device -> ALenum -> IO (Ptr ALubyte)
|
|
-
|
|
---------------------------------------------------------------------------------
|
|
-
|
|
-data IntQuery =
|
|
- MajorVersion
|
|
- | MinorVersion
|
|
- | AttributesSize
|
|
- | AllAttributes
|
|
-
|
|
-marshalIntQuery :: IntQuery -> ALenum
|
|
-marshalIntQuery x = case x of
|
|
- MajorVersion -> CONST_ALC_MAJOR_VERSION
|
|
- MinorVersion -> CONST_ALC_MINOR_VERSION
|
|
- AttributesSize -> CONST_ALC_ATTRIBUTES_SIZE
|
|
- AllAttributes -> CONST_ALC_ALL_ATTRIBUTES
|
|
-
|
|
---------------------------------------------------------------------------------
|
|
-
|
|
-getInteger :: Device -> IntQuery -> IO ALint
|
|
-getInteger device query = liftM head $ getIntegerv device query 1
|
|
-
|
|
--- We are extremely careful below to avoid segfaults in case that there is no
|
|
--- current context, an invalid device, etc.
|
|
-getIntegerv :: Device -> IntQuery -> Int -> IO [ALint]
|
|
-getIntegerv device query numALints =
|
|
- withArray (replicate numALints 0) $ \buf -> do
|
|
- let numBytes = fromIntegral (numALints * sizeOf (0 :: ALint))
|
|
- when (numALints > 0) $
|
|
- alcGetIntegerv device (marshalIntQuery query) numBytes buf
|
|
- peekArray numALints buf
|
|
-
|
|
-foreign import CALLCONV unsafe "alcGetIntegerv"
|
|
- alcGetIntegerv :: Device -> ALenum -> ALsizei -> Ptr ALint -> IO ()
|
|
-
|
|
---------------------------------------------------------------------------------
|
|
-
|
|
--- | Returns 'True' if the given ALC extension is present on the given device,
|
|
--- 'False' otherwise.
|
|
-
|
|
-alcIsExtensionPresent :: Maybe Device -> String -> IO Bool
|
|
-alcIsExtensionPresent device extensionName =
|
|
- liftM unmarshalALboolean $
|
|
- withALString extensionName (alcIsExtensionPresent_ (fromDevice device))
|
|
-
|
|
-foreign import CALLCONV unsafe "alcIsExtensionPresent"
|
|
- alcIsExtensionPresent_ :: Device -> Ptr ALubyte -> IO ALboolean
|
|
diff -uNr --exclude=autom4te.cache --exclude=.cvsignore hugs98-Mar2005-patched/fptools/libraries/OpenAL/Sound/OpenAL/ALC/QueryUtils.hs ghc-6.4.2/libraries/OpenAL/Sound/OpenAL/ALC/QueryUtils.hs
|
|
--- hugs98-Mar2005-patched/fptools/libraries/OpenAL/Sound/OpenAL/ALC/QueryUtils.hs 1970-01-01 09:00:00.000000000 +0900
|
|
+++ ghc-6.4.2/libraries/OpenAL/Sound/OpenAL/ALC/QueryUtils.hs 2006-03-22 00:58:03.000000000 +0900
|
|
@@ -0,0 +1,122 @@
|
|
+-- #hide
|
|
+--------------------------------------------------------------------------------
|
|
+-- |
|
|
+-- Module : Sound.OpenAL.ALC.QueryUtils
|
|
+-- Copyright : (c) Sven Panne 2003-2005
|
|
+-- License : BSD-style (see the file libraries/OpenAL/LICENSE)
|
|
+--
|
|
+-- Maintainer : sven.panne@aedion.de
|
|
+-- Stability : provisional
|
|
+-- Portability : portable
|
|
+--
|
|
+--------------------------------------------------------------------------------
|
|
+
|
|
+module Sound.OpenAL.ALC.QueryUtils (
|
|
+ StringQuery(..), getString, getStringRaw,
|
|
+ IntQuery(..), marshalIntQuery, getInteger, getIntegerv,
|
|
+ alcIsExtensionPresent
|
|
+) where
|
|
+
|
|
+import Control.Monad ( when )
|
|
+import Foreign.Marshal.Array ( withArray, peekArray )
|
|
+import Foreign.Ptr ( Ptr )
|
|
+import Graphics.Rendering.OpenGL.GL.StateVar (
|
|
+ GettableStateVar, makeGettableStateVar )
|
|
+import Sound.OpenAL.ALC.ALCboolean ( unmarshalALCboolean )
|
|
+import Sound.OpenAL.ALC.BasicTypes (
|
|
+ ALCboolean, ALCchar, ALCint, ALCenum, ALCsizei )
|
|
+import Sound.OpenAL.ALC.String ( withALCString, peekALCString )
|
|
+import Sound.OpenAL.Config ( Device, ALCdevice, nullDevice, marshalDevice )
|
|
+import Sound.OpenAL.Constants (
|
|
+ alc_DEFAULT_DEVICE_SPECIFIER, alc_DEVICE_SPECIFIER, alc_EXTENSIONS,
|
|
+ alc_CAPTURE_DEFAULT_DEVICE_SPECIFIER, alc_CAPTURE_DEVICE_SPECIFIER,
|
|
+ alc_ATTRIBUTES_SIZE, alc_ALL_ATTRIBUTES, alc_MAJOR_VERSION,
|
|
+ alc_MINOR_VERSION, alc_CAPTURE_SAMPLES )
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+
|
|
+data StringQuery =
|
|
+ DefaultDeviceSpecifier
|
|
+ | DeviceSpecifier
|
|
+ | Extensions
|
|
+ | CaptureDefaultDeviceSpecifier
|
|
+ | CaptureDeviceSpecifier
|
|
+ | ALCErrorCategory ALCenum
|
|
+
|
|
+marshalStringQuery :: StringQuery -> ALCenum
|
|
+marshalStringQuery x = case x of
|
|
+ DefaultDeviceSpecifier -> alc_DEFAULT_DEVICE_SPECIFIER
|
|
+ DeviceSpecifier -> alc_DEVICE_SPECIFIER
|
|
+ Extensions -> alc_EXTENSIONS
|
|
+ CaptureDefaultDeviceSpecifier -> alc_CAPTURE_DEFAULT_DEVICE_SPECIFIER
|
|
+ CaptureDeviceSpecifier -> alc_CAPTURE_DEVICE_SPECIFIER
|
|
+ ALCErrorCategory e -> e
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+
|
|
+getString :: Maybe Device -> StringQuery -> IO String
|
|
+getString device query = getStringRaw device query >>= peekALCString
|
|
+
|
|
+getStringRaw :: Maybe Device -> StringQuery -> IO (Ptr ALCchar)
|
|
+getStringRaw maybeDevice =
|
|
+ alcGetString (marshalMaybeDevice maybeDevice) . marshalStringQuery
|
|
+
|
|
+marshalMaybeDevice :: Maybe Device -> ALCdevice
|
|
+marshalMaybeDevice = marshalDevice . maybe nullDevice id
|
|
+
|
|
+foreign import CALLCONV unsafe "alcGetString"
|
|
+ alcGetString :: ALCdevice -> ALCenum -> IO (Ptr ALCchar)
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+
|
|
+data IntQuery =
|
|
+ AttributesSize
|
|
+ | AllAttributes
|
|
+ | MajorVersion
|
|
+ | MinorVersion
|
|
+ | CaptureSamples
|
|
+
|
|
+marshalIntQuery :: IntQuery -> ALCenum
|
|
+marshalIntQuery x = case x of
|
|
+ AttributesSize -> alc_ATTRIBUTES_SIZE
|
|
+ AllAttributes -> alc_ALL_ATTRIBUTES
|
|
+ MajorVersion -> alc_MAJOR_VERSION
|
|
+ MinorVersion -> alc_MINOR_VERSION
|
|
+ CaptureSamples -> alc_CAPTURE_SAMPLES
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+
|
|
+getInteger :: Maybe Device -> IntQuery -> IO ALCint
|
|
+getInteger maybeDevice query = fmap head $ getIntegerv maybeDevice query 1
|
|
+
|
|
+-- We are extremely careful below to avoid segfaults in case that there is no
|
|
+-- current context, an invalid device, etc.
|
|
+getIntegerv :: Maybe Device -> IntQuery -> ALCsizei -> IO [ALCint]
|
|
+getIntegerv maybeDevice query numALCints =
|
|
+ let n = fromIntegral numALCints
|
|
+ in withArray (replicate n 0) $ \buf -> do
|
|
+ when (numALCints > 0) $
|
|
+ alcGetIntegerv (marshalMaybeDevice maybeDevice)
|
|
+ (marshalIntQuery query) numALCints buf
|
|
+ peekArray n buf
|
|
+
|
|
+foreign import CALLCONV unsafe "alcGetIntegerv"
|
|
+ alcGetIntegerv :: ALCdevice -> ALCenum -> ALCsizei -> Ptr ALCint -> IO ()
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+
|
|
+-- | To verify that a given extension is available for the current context and
|
|
+-- the device it is associated with, use 'alcIsExtensionPresent'. For invalid
|
|
+-- and unsupported string tokens it contains 'False'. Using 'Nothing' as the
|
|
+-- device is acceptable. The extension name is not case sensitive: The
|
|
+-- implementation will convert the name to all upper-case internally (and will
|
|
+-- express extension names in upper-case).
|
|
+
|
|
+alcIsExtensionPresent :: Maybe Device -> String -> GettableStateVar Bool
|
|
+alcIsExtensionPresent maybeDevice extensionName = makeGettableStateVar $
|
|
+ fmap unmarshalALCboolean $
|
|
+ withALCString extensionName $
|
|
+ alcIsExtensionPresent_ (marshalMaybeDevice maybeDevice)
|
|
+
|
|
+foreign import CALLCONV unsafe "alcIsExtensionPresent"
|
|
+ alcIsExtensionPresent_ :: ALCdevice -> Ptr ALCchar -> IO ALCboolean
|
|
diff -uNr --exclude=autom4te.cache --exclude=.cvsignore hugs98-Mar2005-patched/fptools/libraries/OpenAL/Sound/OpenAL/ALC/String.hs ghc-6.4.2/libraries/OpenAL/Sound/OpenAL/ALC/String.hs
|
|
--- hugs98-Mar2005-patched/fptools/libraries/OpenAL/Sound/OpenAL/ALC/String.hs 1970-01-01 09:00:00.000000000 +0900
|
|
+++ ghc-6.4.2/libraries/OpenAL/Sound/OpenAL/ALC/String.hs 2006-03-22 00:58:03.000000000 +0900
|
|
@@ -0,0 +1,42 @@
|
|
+-- #hide
|
|
+--------------------------------------------------------------------------------
|
|
+-- |
|
|
+-- Module : Sound.OpenAL.ALC.String
|
|
+-- Copyright : (c) Sven Panne 2005
|
|
+-- License : BSD-style (see the file libraries/OpenAL/LICENSE)
|
|
+--
|
|
+-- Maintainer : sven.panne@aedion.de
|
|
+-- Stability : provisional
|
|
+-- Portability : portable
|
|
+--
|
|
+--------------------------------------------------------------------------------
|
|
+
|
|
+module Sound.OpenAL.ALC.String (
|
|
+ withALCString, peekALCString, peekALCStrings
|
|
+) where
|
|
+
|
|
+import Foreign.C.String ( withCString, peekCString )
|
|
+import Foreign.Marshal.Array ( lengthArray0 )
|
|
+import Foreign.Ptr ( Ptr, castPtr, plusPtr )
|
|
+import Sound.OpenAL.ALC.BasicTypes ( ALCchar )
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+
|
|
+-- AL uses "Ptr ALCchar" instead of "CString" for strings, so some wrappers
|
|
+-- are quite handy.
|
|
+
|
|
+withALCString :: String -> (Ptr ALCchar -> IO a) -> IO a
|
|
+withALCString str action = withCString str (action . castPtr)
|
|
+
|
|
+peekALCString :: Ptr ALCchar -> IO String
|
|
+peekALCString = peekCString . castPtr
|
|
+
|
|
+peekALCStrings :: Ptr ALCchar -> IO [String]
|
|
+peekALCStrings ptr = loop ptr []
|
|
+ where loop p strs = do
|
|
+ str <- peekALCString p
|
|
+ if str == ""
|
|
+ then return (reverse strs)
|
|
+ else do
|
|
+ len <- lengthArray0 0 p
|
|
+ loop (p `plusPtr` (len + 1)) (str : strs)
|
|
diff -uNr --exclude=autom4te.cache --exclude=.cvsignore hugs98-Mar2005-patched/fptools/libraries/OpenAL/Sound/OpenAL/ALC.hs ghc-6.4.2/libraries/OpenAL/Sound/OpenAL/ALC.hs
|
|
--- hugs98-Mar2005-patched/fptools/libraries/OpenAL/Sound/OpenAL/ALC.hs 2004-01-03 04:03:07.000000000 +0900
|
|
+++ ghc-6.4.2/libraries/OpenAL/Sound/OpenAL/ALC.hs 2006-03-22 00:58:03.000000000 +0900
|
|
@@ -1,7 +1,7 @@
|
|
--------------------------------------------------------------------------------
|
|
-- |
|
|
-- Module : Sound.OpenAL.ALC
|
|
--- Copyright : (c) Sven Panne 2003-2004
|
|
+-- Copyright : (c) Sven Panne 2003-2005
|
|
-- License : BSD-style (see the file libraries/OpenAL/LICENSE)
|
|
--
|
|
-- Maintainer : sven.panne@aedion.de
|
|
@@ -9,18 +9,27 @@
|
|
-- Portability : portable
|
|
--
|
|
-- This module corresponds to chapter 6 (AL Contexts and the ALC API) of the
|
|
--- OpenAL Specification and Reference (version 1.0).
|
|
+-- OpenAL Specification and Reference (version 1.1).
|
|
+--
|
|
+-- ALC is a portable API for managing OpenAL contexts, including resource
|
|
+-- sharing, locking, and unlocking. Within the core AL API the existence of a
|
|
+-- context is implied, but the context is not exposed. The context encapsulates
|
|
+-- the state of a given instance of the AL state machine.
|
|
--
|
|
--------------------------------------------------------------------------------
|
|
|
|
module Sound.OpenAL.ALC (
|
|
+ module Sound.OpenAL.ALC.BasicTypes,
|
|
module Sound.OpenAL.ALC.Device,
|
|
module Sound.OpenAL.ALC.Context,
|
|
module Sound.OpenAL.ALC.Extensions,
|
|
- module Sound.OpenAL.ALC.Errors
|
|
+ module Sound.OpenAL.ALC.Errors,
|
|
+ module Sound.OpenAL.ALC.Capture
|
|
) where
|
|
|
|
+import Sound.OpenAL.ALC.BasicTypes
|
|
import Sound.OpenAL.ALC.Device
|
|
import Sound.OpenAL.ALC.Context
|
|
import Sound.OpenAL.ALC.Extensions
|
|
import Sound.OpenAL.ALC.Errors
|
|
+import Sound.OpenAL.ALC.Capture
|
|
diff -uNr --exclude=autom4te.cache --exclude=.cvsignore hugs98-Mar2005-patched/fptools/libraries/OpenAL/Sound/OpenAL/ALUT/Exception.hs ghc-6.4.2/libraries/OpenAL/Sound/OpenAL/ALUT/Exception.hs
|
|
--- hugs98-Mar2005-patched/fptools/libraries/OpenAL/Sound/OpenAL/ALUT/Exception.hs 2004-11-28 00:39:32.000000000 +0900
|
|
+++ ghc-6.4.2/libraries/OpenAL/Sound/OpenAL/ALUT/Exception.hs 1970-01-01 09:00:00.000000000 +0900
|
|
@@ -1,37 +0,0 @@
|
|
--- #hide
|
|
---------------------------------------------------------------------------------
|
|
--- |
|
|
--- Module : Sound.OpenAL.ALUT.Exception
|
|
--- Copyright : (c) Sven Panne 2003-2004
|
|
--- License : BSD-style (see the file libraries/OpenGL/LICENSE)
|
|
---
|
|
--- Maintainer : sven.panne@aedion.de
|
|
--- Stability : provisional
|
|
--- Portability : portable
|
|
---
|
|
--- This is a purely internal module to compensate for differences between
|
|
--- Haskell implementations.
|
|
---
|
|
---------------------------------------------------------------------------------
|
|
-
|
|
-module Sound.OpenAL.ALUT.Exception (
|
|
- bracket_, finally
|
|
-) where
|
|
-
|
|
-#ifdef __NHC__
|
|
-finally :: IO a -> IO b -> IO a
|
|
-a `finally` sequel = do
|
|
- r <- a
|
|
- sequel
|
|
- return r
|
|
-
|
|
-{-# INLINE bracket_ #-}
|
|
-bracket_ :: IO a -> IO b -> IO c -> IO c
|
|
-bracket_ before after thing = do
|
|
- before
|
|
- r <- thing
|
|
- after
|
|
- return r
|
|
-#else
|
|
-import Control.Exception ( bracket_, finally )
|
|
-#endif
|
|
diff -uNr --exclude=autom4te.cache --exclude=.cvsignore hugs98-Mar2005-patched/fptools/libraries/OpenAL/Sound/OpenAL/ALUT/Initialization.hs ghc-6.4.2/libraries/OpenAL/Sound/OpenAL/ALUT/Initialization.hs
|
|
--- hugs98-Mar2005-patched/fptools/libraries/OpenAL/Sound/OpenAL/ALUT/Initialization.hs 2004-11-28 00:39:32.000000000 +0900
|
|
+++ ghc-6.4.2/libraries/OpenAL/Sound/OpenAL/ALUT/Initialization.hs 1970-01-01 09:00:00.000000000 +0900
|
|
@@ -1,40 +0,0 @@
|
|
---------------------------------------------------------------------------------
|
|
--- |
|
|
--- Module : Sound.OpenAL.ALUT.Initialization
|
|
--- Copyright : (c) Sven Panne 2003-2004
|
|
--- License : BSD-style (see the file libraries/OpenAL/LICENSE)
|
|
---
|
|
--- Maintainer : sven.panne@aedion.de
|
|
--- Stability : provisional
|
|
--- Portability : portable
|
|
---
|
|
---------------------------------------------------------------------------------
|
|
-
|
|
-module Sound.OpenAL.ALUT.Initialization (
|
|
- runOpenAL
|
|
-) where
|
|
-
|
|
-import Graphics.Rendering.OpenGL.GL.StateVar ( HasGetter(get), HasSetter(($=)) )
|
|
-import Sound.OpenAL.ALUT.Exception ( bracket_ )
|
|
-import Sound.OpenAL.ALC.Context (
|
|
- createContext, destroyContext, currentContext, contextsDevice )
|
|
-import Sound.OpenAL.ALC.Device ( openDevice, closeDevice )
|
|
-
|
|
---------------------------------------------------------------------------------
|
|
-
|
|
-alutInit :: IO ()
|
|
-alutInit = do
|
|
- device <- openDevice Nothing
|
|
- context <- createContext device []
|
|
- currentContext $= Just context
|
|
-
|
|
-alutExit :: IO ()
|
|
-alutExit = get currentContext >>= maybe (return ()) cleanupContext
|
|
- where cleanupContext context = do
|
|
- maybeDevice <- get (contextsDevice context)
|
|
- currentContext $= Nothing
|
|
- destroyContext context
|
|
- maybe (return ()) closeDevice maybeDevice
|
|
-
|
|
-runOpenAL :: IO a -> IO a
|
|
-runOpenAL = bracket_ alutInit alutExit
|
|
diff -uNr --exclude=autom4te.cache --exclude=.cvsignore hugs98-Mar2005-patched/fptools/libraries/OpenAL/Sound/OpenAL/ALUT/WAV.hs ghc-6.4.2/libraries/OpenAL/Sound/OpenAL/ALUT/WAV.hs
|
|
--- hugs98-Mar2005-patched/fptools/libraries/OpenAL/Sound/OpenAL/ALUT/WAV.hs 2004-05-12 04:36:48.000000000 +0900
|
|
+++ ghc-6.4.2/libraries/OpenAL/Sound/OpenAL/ALUT/WAV.hs 1970-01-01 09:00:00.000000000 +0900
|
|
@@ -1,70 +0,0 @@
|
|
---------------------------------------------------------------------------------
|
|
--- |
|
|
--- Module : Sound.OpenAL.ALUT.WAV
|
|
--- Copyright : (c) Sven Panne 2003-2004
|
|
--- License : BSD-style (see the file libraries/OpenAL/LICENSE)
|
|
---
|
|
--- Maintainer : sven.panne@aedion.de
|
|
--- Stability : provisional
|
|
--- Portability : portable
|
|
---
|
|
---------------------------------------------------------------------------------
|
|
-
|
|
-module Sound.OpenAL.ALUT.WAV (
|
|
- withWAVFile, withWAVMemory
|
|
-) where
|
|
-
|
|
-import Control.Monad ( liftM )
|
|
-import Foreign.C.String ( withCString )
|
|
-import Foreign.Marshal.Alloc ( alloca )
|
|
-import Foreign.Storable ( Storable(peek) )
|
|
-import Foreign.Ptr ( Ptr, castPtr )
|
|
-import Sound.OpenAL.AL.BasicTypes ( ALbyte, ALsizei, ALenum )
|
|
-import Sound.OpenAL.AL.ALboolean ( ALboolean, unmarshalALboolean )
|
|
-import Sound.OpenAL.AL.Buffer ( BufferData(..) )
|
|
-import Sound.OpenAL.AL.Format ( marshalFormat, unmarshalFormat )
|
|
-import Sound.OpenAL.ALUT.Exception ( finally )
|
|
-
|
|
---------------------------------------------------------------------------------
|
|
-
|
|
-withWAVFile :: FilePath -> (BufferData a -> Bool -> IO b) -> IO b
|
|
-withWAVFile fileName action =
|
|
- withCString fileName $ \fileNameBuf ->
|
|
- withWAVInternal (alutLoadWAVFile (castPtr fileNameBuf)) action
|
|
-
|
|
-foreign import CALLCONV unsafe "alutLoadWAVFile"
|
|
- alutLoadWAVFile :: Ptr ALbyte -> Loader a
|
|
-
|
|
-withWAVMemory :: Ptr ALbyte -> (BufferData a -> Bool -> IO b) -> IO b
|
|
-withWAVMemory mem action = withWAVInternal (alutLoadWAVMemory mem) action
|
|
-
|
|
-foreign import CALLCONV unsafe "alutLoadWAVMemory"
|
|
- alutLoadWAVMemory :: Ptr ALbyte -> Loader a
|
|
-
|
|
-type Loader a = Ptr ALenum -> Ptr (Ptr a) -> Ptr ALsizei -> Ptr ALsizei
|
|
- -> Ptr ALboolean -> IO ()
|
|
-
|
|
-withWAVInternal :: Loader a -> (BufferData a -> Bool -> IO b) -> IO b
|
|
-withWAVInternal loader action = do
|
|
- (bufferData, loop) <- alloca $ \formatBuf ->
|
|
- alloca $ \rawBuf ->
|
|
- alloca $ \sizeBuf ->
|
|
- alloca $ \frequencyBuf ->
|
|
- alloca $ \loopBuf -> do
|
|
- loader formatBuf rawBuf sizeBuf frequencyBuf loopBuf
|
|
- format <- liftM unmarshalFormat $ peek formatBuf
|
|
- raw <- peek rawBuf
|
|
- size <- peek sizeBuf
|
|
- frequency <- peek frequencyBuf
|
|
- loop <- liftM unmarshalALboolean $ peek loopBuf
|
|
- return (BufferData format raw size frequency, loop)
|
|
- action bufferData loop `finally` unloadWAV bufferData
|
|
-
|
|
---------------------------------------------------------------------------------
|
|
-
|
|
-unloadWAV :: BufferData a -> IO ()
|
|
-unloadWAV (BufferData format raw size frequency) =
|
|
- alutUnloadWAV (marshalFormat format) raw size frequency
|
|
-
|
|
-foreign import CALLCONV unsafe "alutUnloadWAV"
|
|
- alutUnloadWAV :: ALenum -> Ptr a -> ALsizei -> ALsizei -> IO ()
|
|
diff -uNr --exclude=autom4te.cache --exclude=.cvsignore hugs98-Mar2005-patched/fptools/libraries/OpenAL/Sound/OpenAL/ALUT.hs ghc-6.4.2/libraries/OpenAL/Sound/OpenAL/ALUT.hs
|
|
--- hugs98-Mar2005-patched/fptools/libraries/OpenAL/Sound/OpenAL/ALUT.hs 2004-01-03 04:03:07.000000000 +0900
|
|
+++ ghc-6.4.2/libraries/OpenAL/Sound/OpenAL/ALUT.hs 1970-01-01 09:00:00.000000000 +0900
|
|
@@ -1,19 +0,0 @@
|
|
---------------------------------------------------------------------------------
|
|
--- |
|
|
--- Module : Sound.OpenAL.ALUT
|
|
--- Copyright : (c) Sven Panne 2003-2004
|
|
--- License : BSD-style (see the file libraries/OpenAL/LICENSE)
|
|
---
|
|
--- Maintainer : sven.panne@aedion.de
|
|
--- Stability : provisional
|
|
--- Portability : portable
|
|
---
|
|
---------------------------------------------------------------------------------
|
|
-
|
|
-module Sound.OpenAL.ALUT (
|
|
- module Sound.OpenAL.ALUT.Initialization,
|
|
- module Sound.OpenAL.ALUT.WAV
|
|
-) where
|
|
-
|
|
-import Sound.OpenAL.ALUT.Initialization
|
|
-import Sound.OpenAL.ALUT.WAV
|
|
diff -uNr --exclude=autom4te.cache --exclude=.cvsignore hugs98-Mar2005-patched/fptools/libraries/OpenAL/Sound/OpenAL/Config.hs ghc-6.4.2/libraries/OpenAL/Sound/OpenAL/Config.hs
|
|
--- hugs98-Mar2005-patched/fptools/libraries/OpenAL/Sound/OpenAL/Config.hs 1970-01-01 09:00:00.000000000 +0900
|
|
+++ ghc-6.4.2/libraries/OpenAL/Sound/OpenAL/Config.hs 2006-03-22 00:58:03.000000000 +0900
|
|
@@ -0,0 +1,233 @@
|
|
+-- #hide
|
|
+--------------------------------------------------------------------------------
|
|
+-- |
|
|
+-- Module : Sound.OpenAL.Config
|
|
+-- Copyright : (c) Sven Panne 2005
|
|
+-- License : BSD-style (see the file libraries/OpenAL/LICENSE)
|
|
+--
|
|
+-- Maintainer : sven.panne@aedion.de
|
|
+-- Stability : provisional
|
|
+-- Portability : portable
|
|
+--
|
|
+-- This purely internal module defines the platform-specific stuff which has
|
|
+-- been figured out by configure.
|
|
+--
|
|
+--------------------------------------------------------------------------------
|
|
+
|
|
+module Sound.OpenAL.Config (
|
|
+ -- AL types
|
|
+ ALboolean, ALchar, ALbyte, ALubyte, ALshort, ALushort, ALint, ALuint,
|
|
+ ALsizei, ALenum, ALfloat, ALdouble,
|
|
+
|
|
+ -- ALC types
|
|
+ ALCboolean, ALCchar, ALCbyte, ALCubyte, ALCshort, ALCushort, ALCint, ALCuint,
|
|
+ ALCsizei, ALCenum, ALCfloat, ALCdouble,
|
|
+
|
|
+ -- Device stuff
|
|
+ ALCdevice, Device, nullDevice, marshalDevice, unmarshalDevice, closeDevice,
|
|
+
|
|
+ -- Context stuff
|
|
+ ALCcontext, Context, nullContext, marshalContext, unmarshalContext,
|
|
+ alcProcessContext, alcMakeContextCurrent, alcDestroyContext
|
|
+) where
|
|
+
|
|
+import Data.Int
|
|
+import Data.Word
|
|
+import Foreign.Ptr ( Ptr, nullPtr )
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+
|
|
+#include "HsOpenALConfig.h"
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+-- AL types
|
|
+
|
|
+-- | 8-bit boolean
|
|
+type ALboolean = HTYPE_ALBOOLEAN
|
|
+
|
|
+-- | Character
|
|
+type ALchar = HTYPE_ALCHAR
|
|
+
|
|
+-- | Signed 8-bit 2\'s complement integer
|
|
+type ALbyte = HTYPE_ALBYTE
|
|
+
|
|
+-- | Unsigned 8-bit integer
|
|
+type ALubyte = HTYPE_ALUBYTE
|
|
+
|
|
+-- | Signed 16-bit 2\'s complement integer
|
|
+type ALshort = HTYPE_ALSHORT
|
|
+
|
|
+-- | Unsigned 16-bit integer
|
|
+type ALushort = HTYPE_ALUSHORT
|
|
+
|
|
+-- | Signed 32-bit 2\'s complement integer
|
|
+type ALint = HTYPE_ALINT
|
|
+
|
|
+-- | Unsigned 32-bit integer
|
|
+type ALuint = HTYPE_ALUINT
|
|
+
|
|
+-- | Non-negatitve 32-bit binary integer size
|
|
+type ALsizei = HTYPE_ALSIZEI
|
|
+
|
|
+-- | Enumerated 32-bit value
|
|
+type ALenum = HTYPE_ALENUM
|
|
+
|
|
+-- | 32-bit IEEE754 floating-point
|
|
+type ALfloat = HTYPE_ALFLOAT
|
|
+
|
|
+-- | 64-bit IEEE754 floating-point
|
|
+type ALdouble = HTYPE_ALDOUBLE
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+-- ALC types
|
|
+
|
|
+-- | 8-bit boolean
|
|
+type ALCboolean = HTYPE_ALCBOOLEAN
|
|
+
|
|
+-- | Character
|
|
+type ALCchar = HTYPE_ALCCHAR
|
|
+
|
|
+-- | Signed 8-bit 2\'s complement integer
|
|
+type ALCbyte = HTYPE_ALCBYTE
|
|
+
|
|
+-- | Unsigned 8-bit integer
|
|
+type ALCubyte = HTYPE_ALCUBYTE
|
|
+
|
|
+-- | Signed 16-bit 2\'s complement integer
|
|
+type ALCshort = HTYPE_ALCSHORT
|
|
+
|
|
+-- | Unsigned 16-bit integer
|
|
+type ALCushort = HTYPE_ALCUSHORT
|
|
+
|
|
+-- | Signed 32-bit 2\'s complement integer
|
|
+type ALCint = HTYPE_ALCINT
|
|
+
|
|
+-- | Unsigned 32-bit integer
|
|
+type ALCuint = HTYPE_ALCUINT
|
|
+
|
|
+-- | Non-negatitve 32-bit binary integer size
|
|
+type ALCsizei = HTYPE_ALCSIZEI
|
|
+
|
|
+-- | Enumerated 32-bit value
|
|
+type ALCenum = HTYPE_ALCENUM
|
|
+
|
|
+-- | 32-bit IEEE754 floating-point
|
|
+type ALCfloat = HTYPE_ALCFLOAT
|
|
+
|
|
+-- | 64-bit IEEE754 floating-point
|
|
+type ALCdouble = HTYPE_ALCDOUBLE
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+-- In OpenAL 1.1, alcCloseDevice() returns an ALCboolean, before it was void.
|
|
+-- To break a dependency cycle, we have to define the Device type here, too.
|
|
+
|
|
+-- | The abstract device type.
|
|
+
|
|
+newtype Device = Device ALCdevice
|
|
+ deriving ( Eq, Ord, Show )
|
|
+
|
|
+newtype ALCdevice = ALCdevice (Ptr ALCdevice)
|
|
+ deriving ( Eq, Ord, Show )
|
|
+
|
|
+nullDevice :: Device
|
|
+nullDevice = Device (ALCdevice nullPtr)
|
|
+
|
|
+marshalDevice :: Device -> ALCdevice
|
|
+marshalDevice (Device device) = device
|
|
+
|
|
+unmarshalDevice :: ALCdevice -> Maybe Device
|
|
+unmarshalDevice device =
|
|
+ if device == marshalDevice nullDevice then Nothing else Just (Device device)
|
|
+
|
|
+-- | 'closeDevice' allows the application (i.e. the client program) to
|
|
+-- disconnect from a device (i.e. the server). It returns 'True' for success and
|
|
+-- 'False' for failure. Once closed, the 'Device' is invalid.
|
|
+--
|
|
+-- /Note:/ Older OpenAL implementations will always report a success!
|
|
+
|
|
+closeDevice :: Device -> IO Bool
|
|
+
|
|
+#if ALCCLOSEDEVICE_VOID
|
|
+
|
|
+closeDevice = fmap (const True) . alcCloseDevice . marshalDevice
|
|
+
|
|
+foreign import CALLCONV unsafe "alcCloseDevice"
|
|
+ alcCloseDevice :: ALCdevice -> IO ()
|
|
+
|
|
+#else
|
|
+
|
|
+-- inlined unmarshalALCboolean here to break dependency cycle
|
|
+closeDevice = fmap (/= CONST_ALC_FALSE) . alcCloseDevice . marshalDevice
|
|
+
|
|
+foreign import CALLCONV unsafe "alcCloseDevice"
|
|
+ alcCloseDevice :: ALCdevice -> IO ALCboolean
|
|
+
|
|
+#endif
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+-- In OpenAL 1.1, alcProcessContext() returns void for all platforms, before it
|
|
+-- returned ALCcontext* on Linux. To break a dependency cycle, we have to define
|
|
+-- the Context type here, too.
|
|
+
|
|
+-- | The abstract context type.
|
|
+
|
|
+data Context = Context ALCcontext
|
|
+ deriving ( Eq, Ord, Show )
|
|
+
|
|
+newtype ALCcontext = ALCcontext (Ptr ALCcontext)
|
|
+ deriving ( Eq, Ord, Show )
|
|
+
|
|
+nullContext :: Context
|
|
+nullContext = Context (ALCcontext nullPtr)
|
|
+
|
|
+marshalContext :: Context -> ALCcontext
|
|
+marshalContext (Context context) = context
|
|
+
|
|
+unmarshalContext :: ALCcontext -> Maybe Context
|
|
+unmarshalContext context =
|
|
+ if context == marshalContext nullContext then Nothing else Just (Context context)
|
|
+
|
|
+#if ALCPROCESSCONTEXT_VOID
|
|
+
|
|
+foreign import CALLCONV unsafe "alcProcessContext"
|
|
+ alcProcessContext :: ALCcontext -> IO ()
|
|
+
|
|
+#else
|
|
+
|
|
+foreign import CALLCONV unsafe "alcProcessContext"
|
|
+ alcProcessContext :: ALCcontext -> IO ALCcontext
|
|
+
|
|
+#endif
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+-- In OpenAL 1.1, alcMakeContextCurrent() returns void, before it was ALCenum on
|
|
+-- Linux and ALCboolean on other platforms. Currently we default to ALCenum in
|
|
+-- the latter case.
|
|
+
|
|
+#if ALCMAKECONTEXTCURRENT_VOID
|
|
+
|
|
+foreign import CALLCONV unsafe "alcMakeContextCurrent"
|
|
+ alcMakeContextCurrent :: ALCcontext -> IO ()
|
|
+
|
|
+#else
|
|
+
|
|
+foreign import CALLCONV unsafe "alcMakeContextCurrent"
|
|
+ alcMakeContextCurrent :: ALCcontext -> IO ALCenum
|
|
+
|
|
+#endif
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+-- In OpenAL 1.1, alcDestroyContext() returns void, before it returned ALCenum
|
|
+-- on Linux.
|
|
+
|
|
+#if ALCDESTROYCONTEXT_VOID
|
|
+
|
|
+foreign import CALLCONV unsafe "alcDestroyContext"
|
|
+ alcDestroyContext :: ALCcontext -> IO ()
|
|
+
|
|
+#else
|
|
+
|
|
+foreign import CALLCONV unsafe "alcDestroyContext"
|
|
+ alcDestroyContext :: ALCcontext -> IO ALCenum
|
|
+
|
|
+#endif
|
|
diff -uNr --exclude=autom4te.cache --exclude=.cvsignore hugs98-Mar2005-patched/fptools/libraries/OpenAL/Sound/OpenAL/Constants.hs ghc-6.4.2/libraries/OpenAL/Sound/OpenAL/Constants.hs
|
|
--- hugs98-Mar2005-patched/fptools/libraries/OpenAL/Sound/OpenAL/Constants.hs 1970-01-01 09:00:00.000000000 +0900
|
|
+++ ghc-6.4.2/libraries/OpenAL/Sound/OpenAL/Constants.hs 2006-03-22 00:58:03.000000000 +0900
|
|
@@ -0,0 +1,166 @@
|
|
+-- #hide
|
|
+--------------------------------------------------------------------------------
|
|
+-- |
|
|
+-- Module : Sound.OpenAL.Constants
|
|
+-- Copyright : (c) Sven Panne 2005
|
|
+-- License : BSD-style (see the file libraries/OpenAL/LICENSE)
|
|
+--
|
|
+-- Maintainer : sven.panne@aedion.de
|
|
+-- Stability : provisional
|
|
+-- Portability : portable
|
|
+--
|
|
+-- This purely internal module defines all AL\/ALC constants, which have been
|
|
+-- figured out by configure. In contrast to OpenGL and GLUT, these constants
|
|
+-- varied on different platforms in the past and have evolved quite a bit.
|
|
+--
|
|
+--------------------------------------------------------------------------------
|
|
+
|
|
+module Sound.OpenAL.Constants where
|
|
+
|
|
+import Sound.OpenAL.Config (
|
|
+ ALboolean, ALint, ALenum, ALCboolean, ALCint, ALCenum )
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+
|
|
+#include "HsOpenALConfig.h"
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+
|
|
+al_FALSE, al_TRUE :: ALboolean
|
|
+al_FALSE = CONST_AL_FALSE
|
|
+al_TRUE = CONST_AL_TRUE
|
|
+
|
|
+al_NO_ERROR, al_INVALID_NAME, al_INVALID_ENUM, al_INVALID_VALUE,
|
|
+ al_INVALID_OPERATION, al_OUT_OF_MEMORY :: ALenum
|
|
+al_NO_ERROR = CONST_AL_NO_ERROR
|
|
+al_INVALID_NAME = CONST_AL_INVALID_NAME
|
|
+al_INVALID_ENUM = CONST_AL_INVALID_ENUM
|
|
+al_INVALID_VALUE = CONST_AL_INVALID_VALUE
|
|
+al_INVALID_OPERATION = CONST_AL_INVALID_OPERATION
|
|
+al_OUT_OF_MEMORY = CONST_AL_OUT_OF_MEMORY
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+
|
|
+al_DISTANCE_MODEL, al_DOPPLER_FACTOR, al_SPEED_OF_SOUND :: ALenum
|
|
+al_DISTANCE_MODEL = CONST_AL_DISTANCE_MODEL
|
|
+al_DOPPLER_FACTOR = CONST_AL_DOPPLER_FACTOR
|
|
+al_SPEED_OF_SOUND = CONST_AL_SPEED_OF_SOUND
|
|
+
|
|
+al_VERSION, al_RENDERER, al_VENDOR, al_EXTENSIONS :: ALenum
|
|
+al_VERSION = CONST_AL_VERSION
|
|
+al_RENDERER = CONST_AL_RENDERER
|
|
+al_VENDOR = CONST_AL_VENDOR
|
|
+al_EXTENSIONS = CONST_AL_EXTENSIONS
|
|
+
|
|
+al_NONE, al_INVERSE_DISTANCE, al_INVERSE_DISTANCE_CLAMPED, al_LINEAR_DISTANCE,
|
|
+ al_LINEAR_DISTANCE_CLAMPED, al_EXPONENT_DISTANCE,
|
|
+ al_EXPONENT_DISTANCE_CLAMPED :: ALenum
|
|
+al_NONE = CONST_AL_NONE
|
|
+al_INVERSE_DISTANCE = CONST_AL_INVERSE_DISTANCE
|
|
+al_INVERSE_DISTANCE_CLAMPED = CONST_AL_INVERSE_DISTANCE_CLAMPED
|
|
+al_LINEAR_DISTANCE = CONST_AL_LINEAR_DISTANCE
|
|
+al_LINEAR_DISTANCE_CLAMPED = CONST_AL_LINEAR_DISTANCE_CLAMPED
|
|
+al_EXPONENT_DISTANCE = CONST_AL_EXPONENT_DISTANCE
|
|
+al_EXPONENT_DISTANCE_CLAMPED = CONST_AL_EXPONENT_DISTANCE_CLAMPED
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+
|
|
+al_POSITION, al_VELOCITY, al_GAIN :: ALenum
|
|
+al_POSITION = CONST_AL_POSITION
|
|
+al_VELOCITY = CONST_AL_VELOCITY
|
|
+al_GAIN = CONST_AL_GAIN
|
|
+
|
|
+al_ORIENTATION :: ALenum
|
|
+al_ORIENTATION = CONST_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 :: ALenum
|
|
+al_SOURCE_RELATIVE = CONST_AL_SOURCE_RELATIVE
|
|
+al_SOURCE_TYPE = CONST_AL_SOURCE_TYPE
|
|
+al_LOOPING = CONST_AL_LOOPING
|
|
+al_BUFFER = CONST_AL_BUFFER
|
|
+al_BUFFERS_QUEUED = CONST_AL_BUFFERS_QUEUED
|
|
+al_BUFFERS_PROCESSED = CONST_AL_BUFFERS_PROCESSED
|
|
+al_MIN_GAIN = CONST_AL_MIN_GAIN
|
|
+al_MAX_GAIN = CONST_AL_MAX_GAIN
|
|
+al_REFERENCE_DISTANCE = CONST_AL_REFERENCE_DISTANCE
|
|
+al_ROLLOFF_FACTOR = CONST_AL_ROLLOFF_FACTOR
|
|
+al_MAX_DISTANCE = CONST_AL_MAX_DISTANCE
|
|
+al_PITCH = CONST_AL_PITCH
|
|
+al_DIRECTION = CONST_AL_DIRECTION
|
|
+al_CONE_INNER_ANGLE = CONST_AL_CONE_INNER_ANGLE
|
|
+al_CONE_OUTER_ANGLE = CONST_AL_CONE_OUTER_ANGLE
|
|
+al_CONE_OUTER_GAIN = CONST_AL_CONE_OUTER_GAIN
|
|
+al_SEC_OFFSET = CONST_AL_SEC_OFFSET
|
|
+al_SAMPLE_OFFSET = CONST_AL_SAMPLE_OFFSET
|
|
+al_BYTE_OFFSET = CONST_AL_BYTE_OFFSET
|
|
+al_SOURCE_STATE = CONST_AL_SOURCE_STATE
|
|
+
|
|
+al_UNDETERMINED, al_STATIC, al_STREAMING :: ALint
|
|
+al_UNDETERMINED = CONST_AL_UNDETERMINED
|
|
+al_STATIC = CONST_AL_STATIC
|
|
+al_STREAMING = CONST_AL_STREAMING
|
|
+
|
|
+al_INITIAL, al_PLAYING, al_PAUSED, al_STOPPED :: ALint
|
|
+al_INITIAL = CONST_AL_INITIAL
|
|
+al_PLAYING = CONST_AL_PLAYING
|
|
+al_PAUSED = CONST_AL_PAUSED
|
|
+al_STOPPED = CONST_AL_STOPPED
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+
|
|
+al_FREQUENCY, al_SIZE, al_BITS, al_CHANNELS :: ALenum
|
|
+al_FREQUENCY = CONST_AL_FREQUENCY
|
|
+al_SIZE = CONST_AL_SIZE
|
|
+al_BITS = CONST_AL_BITS
|
|
+al_CHANNELS = CONST_AL_CHANNELS
|
|
+
|
|
+al_FORMAT_MONO8, al_FORMAT_MONO16, al_FORMAT_STEREO8,
|
|
+ al_FORMAT_STEREO16 :: ALenum
|
|
+al_FORMAT_MONO8 = CONST_AL_FORMAT_MONO8
|
|
+al_FORMAT_MONO16 = CONST_AL_FORMAT_MONO16
|
|
+al_FORMAT_STEREO8 = CONST_AL_FORMAT_STEREO8
|
|
+al_FORMAT_STEREO16 = CONST_AL_FORMAT_STEREO16
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+
|
|
+alc_FALSE, alc_TRUE :: ALCboolean
|
|
+alc_FALSE = CONST_ALC_FALSE
|
|
+alc_TRUE = CONST_ALC_TRUE
|
|
+
|
|
+alc_FREQUENCY, alc_REFRESH, alc_SYNC, alc_MONO_SOURCES,
|
|
+ alc_STEREO_SOURCES :: ALCint
|
|
+alc_FREQUENCY = CONST_ALC_FREQUENCY
|
|
+alc_REFRESH = CONST_ALC_REFRESH
|
|
+alc_SYNC = CONST_ALC_SYNC
|
|
+alc_MONO_SOURCES = CONST_ALC_MONO_SOURCES
|
|
+alc_STEREO_SOURCES = CONST_ALC_STEREO_SOURCES
|
|
+
|
|
+alc_NO_ERROR, alc_INVALID_DEVICE, alc_INVALID_CONTEXT, alc_INVALID_ENUM,
|
|
+ alc_INVALID_VALUE, alc_INVALID_OPERATION, alc_OUT_OF_MEMORY :: ALCenum
|
|
+alc_NO_ERROR = CONST_ALC_NO_ERROR
|
|
+alc_INVALID_DEVICE = CONST_ALC_INVALID_DEVICE
|
|
+alc_INVALID_CONTEXT = CONST_ALC_INVALID_CONTEXT
|
|
+alc_INVALID_ENUM = CONST_ALC_INVALID_ENUM
|
|
+alc_INVALID_VALUE = CONST_ALC_INVALID_VALUE
|
|
+alc_INVALID_OPERATION = CONST_ALC_INVALID_OPERATION
|
|
+alc_OUT_OF_MEMORY = CONST_ALC_OUT_OF_MEMORY
|
|
+
|
|
+alc_DEFAULT_DEVICE_SPECIFIER, alc_DEVICE_SPECIFIER, alc_EXTENSIONS,
|
|
+ alc_CAPTURE_DEFAULT_DEVICE_SPECIFIER, alc_CAPTURE_DEVICE_SPECIFIER :: ALCenum
|
|
+alc_DEFAULT_DEVICE_SPECIFIER = CONST_ALC_DEFAULT_DEVICE_SPECIFIER
|
|
+alc_DEVICE_SPECIFIER = CONST_ALC_DEVICE_SPECIFIER
|
|
+alc_EXTENSIONS = CONST_ALC_EXTENSIONS
|
|
+alc_CAPTURE_DEFAULT_DEVICE_SPECIFIER= CONST_ALC_CAPTURE_DEFAULT_DEVICE_SPECIFIER
|
|
+alc_CAPTURE_DEVICE_SPECIFIER = CONST_ALC_CAPTURE_DEVICE_SPECIFIER
|
|
+
|
|
+alc_ATTRIBUTES_SIZE, alc_ALL_ATTRIBUTES, alc_MAJOR_VERSION, alc_MINOR_VERSION,
|
|
+ alc_CAPTURE_SAMPLES :: ALCenum
|
|
+alc_ATTRIBUTES_SIZE = CONST_ALC_ATTRIBUTES_SIZE
|
|
+alc_ALL_ATTRIBUTES = CONST_ALC_ALL_ATTRIBUTES
|
|
+alc_MAJOR_VERSION = CONST_ALC_MAJOR_VERSION
|
|
+alc_MINOR_VERSION = CONST_ALC_MINOR_VERSION
|
|
+alc_CAPTURE_SAMPLES = CONST_ALC_CAPTURE_SAMPLES
|
|
diff -uNr --exclude=autom4te.cache --exclude=.cvsignore hugs98-Mar2005-patched/fptools/libraries/OpenAL/Sound/OpenAL.hs ghc-6.4.2/libraries/OpenAL/Sound/OpenAL.hs
|
|
--- hugs98-Mar2005-patched/fptools/libraries/OpenAL/Sound/OpenAL.hs 2004-01-03 04:03:07.000000000 +0900
|
|
+++ ghc-6.4.2/libraries/OpenAL/Sound/OpenAL.hs 2006-03-22 00:58:03.000000000 +0900
|
|
@@ -1,23 +1,181 @@
|
|
--------------------------------------------------------------------------------
|
|
-- |
|
|
-- Module : Sound.OpenAL
|
|
--- Copyright : (c) Sven Panne 2003-2004
|
|
+-- Copyright : (c) Sven Panne 2003-2005
|
|
-- License : BSD-style (see the file libraries/OpenAL/LICENSE)
|
|
---
|
|
+--
|
|
-- Maintainer : sven.panne@aedion.de
|
|
-- Stability : provisional
|
|
-- Portability : portable
|
|
--
|
|
--- A convenience module, combining the Haskell bindings for AL, ALC and ALUT.
|
|
+-- A convenience module, combining the Haskell bindings for AL and ALC.
|
|
--
|
|
--------------------------------------------------------------------------------
|
|
|
|
module Sound.OpenAL (
|
|
+ -- * A Brief History of OpenAL
|
|
+ -- $ABriefHistoryOfOpenAL
|
|
+
|
|
+ -- * What is the OpenAL Audio System?
|
|
+ -- $WhatIsTheOpenALAudioSystem
|
|
+
|
|
+ -- * Different Views of OpenAL
|
|
+
|
|
+ -- ** Programmer\'s View of OpenAL
|
|
+ -- $ProgrammersViewOfOpenAL
|
|
+
|
|
+ -- ** Implementor\'s View of OpenAL
|
|
+ -- $ImplementorsViewOfOpenAL
|
|
+
|
|
+ -- ** The Specification\'s View of OpenAL
|
|
+ -- $TheSpecificationsViewOfOpenAL
|
|
+
|
|
+ -- * Legal stuff
|
|
+ -- $LegalStuff
|
|
+
|
|
module Sound.OpenAL.AL
|
|
, module Sound.OpenAL.ALC
|
|
- , module Sound.OpenAL.ALUT
|
|
+
|
|
+ -- * Convenience Re-exports from the OpenGL Package
|
|
+ , module Graphics.Rendering.OpenGL.GL.StateVar
|
|
+ , ObjectName(..), Vector3(..), Vertex3(..)
|
|
) where
|
|
|
|
import Sound.OpenAL.AL
|
|
import Sound.OpenAL.ALC
|
|
-import Sound.OpenAL.ALUT
|
|
+
|
|
+import Graphics.Rendering.OpenGL.GL.StateVar
|
|
+import Graphics.Rendering.OpenGL.GL.BufferObjects ( ObjectName(..) )
|
|
+import Graphics.Rendering.OpenGL.GL.CoordTrans ( Vector3(..) )
|
|
+import Graphics.Rendering.OpenGL.GL.VertexSpec ( Vertex3(..) )
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+-- $ABriefHistoryOfOpenAL
|
|
+-- The first discussions about implementing OpenAL as an audio API complimentary
|
|
+-- to OpenGL started around 1998. There were a few aborted attempts at creating
|
|
+-- the headers and a specification, but by late 1999 Loki Entertainment Software
|
|
+-- was in need for an API of exactly this type and pursued both a specification
|
|
+-- and a Linux implementation. At around that time, Loki started talking with
|
|
+-- Creative Labs about standardizing the API and expanding platform support. The
|
|
+-- OpenAL 1.0 specification was released in early 2000 and compliant OpenAL
|
|
+-- libraries were released in the same year for Linux, MacOS 8\/9, Windows, and
|
|
+-- BeOS. Loki Entertainment also shipped several games using OpenAL in 2000:
|
|
+-- Heavy Gear 2 and Heretic 2 (both under Linux). In 2001, Creative Labs
|
|
+-- released the first hardware-accelerated OpenAL libraries. The libraries
|
|
+-- supported the SoundBlaster Live on MacOS 8\/9 and Windows.
|
|
+--
|
|
+-- Since 2001, there has been continuous improvement in OpenAL. Some platforms
|
|
+-- are less relevant than in 2000 (BeOS and MacOS 8\/9 for instance), but more
|
|
+-- platforms have been added as well (BSD, Solaris, IRIX, Mac OS X, and the
|
|
+-- popular console gaming platforms). Hardware support is enabled for many
|
|
+-- Creative and NVIDIA audio devices under Windows as well.
|
|
+--
|
|
+-- In terms of product support, OpenAL has been used in a large number of titles
|
|
+-- over the years, on many platforms (for a list of many of the titles, see
|
|
+-- <http://www.openal.org/titles.html>).
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+-- $WhatIsTheOpenALAudioSystem
|
|
+-- OpenAL (for /Open Audio Library/) is a software interface to audio hardware.
|
|
+-- The interface consists of a number of functions that allow a programmer to
|
|
+-- specify the objects and operations in producing high-quality audio output,
|
|
+-- specifically multichannel output of 3D arrangements of sound sources around a
|
|
+-- listener.
|
|
+--
|
|
+-- The OpenAL API is designed to be cross-platform and easy to use. It resembles
|
|
+-- the OpenGL API in coding style and conventions. OpenAL uses a syntax
|
|
+-- resembling that of OpenGL where applicable. For more information on OpenGL,
|
|
+-- see <http://www.opengl.org/> and the "Graphics.Rendering.OpenGL" module.
|
|
+--
|
|
+-- OpenAL is foremost a means to generate audio in a simulated three-dimensional
|
|
+-- space. Consequently, legacy audio concepts such as panning and left\/right
|
|
+-- channels are not directly supported. OpenAL does include extensions
|
|
+-- compatible with the IA-SIG 3D Level 1 and Level 2 rendering guidelines to
|
|
+-- handle sound-source directivity and distancerelated attenuation and Doppler
|
|
+-- effects, as well as environmental effects such as reflection, obstruction,
|
|
+-- transmission, reverberation. For more information on IA-SIG 3D, see
|
|
+-- <http://www.iasig.org/wg/closed/3dwg/3dwg.shtml>.
|
|
+--
|
|
+-- Like OpenGL, the OpenAL core API has no notion of an explicit rendering
|
|
+-- context, and operates on an implied current OpenAL Context. Unlike the OpenGL
|
|
+-- specification, the OpenAL specification includes both the core API (the
|
|
+-- actual OpenAL API, see "Sound.OpenAL.AL") and the operating system bindings
|
|
+-- of the ALC API (the /Audio Library Context/, see "Sound.OpenAL.ALC"). Unlike
|
|
+-- OpenGL\'s GLX, WGL and other OS-specific bindings, the ALC API is portable
|
|
+-- across platforms as well.
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+-- $ProgrammersViewOfOpenAL
|
|
+-- To the programmer, OpenAL is a set of commands that allow the specification
|
|
+-- of sound sources and a listener in three dimensions, combined with commands
|
|
+-- that control how these sound sources are rendered into the output buffer. The
|
|
+-- effect of OpenAL commands is not guaranteed to be immediate, as there are
|
|
+-- latencies depending on the implementation, but ideally such latency should
|
|
+-- not be noticeable to the user.
|
|
+--
|
|
+-- A typical program that uses OpenAL begins with calls to open a sound device
|
|
+-- which is used to process output and play it on attached hardware (speakers or
|
|
+-- headphones). Then, calls are made to allocate an AL context and associate it
|
|
+-- with the device. Once an AL context is allocated, the programmer is free to
|
|
+-- issue AL commands. Some calls are used to render sources (point and
|
|
+-- directional sources, looping or not), while others affect the rendering of
|
|
+-- these sources including how they are attenuated by distance and relative
|
|
+-- orientation.
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+-- $ImplementorsViewOfOpenAL
|
|
+-- To the implementor, OpenAL is a set of commands that affect the operation of
|
|
+-- CPU and sound hardware. If the hardware consists only of an addressable
|
|
+-- output buffer, then OpenAL must be implemented almost entirely on the host
|
|
+-- CPU. In some cases audio hardware provides DSP-based and other acceleration
|
|
+-- in various degrees. The OpenAL implementor\'s task is to provide the CPU
|
|
+-- software interface while dividing the work for each AL command between the
|
|
+-- CPU and the audio hardware. This division should be tailored to the available
|
|
+-- audio hardware to obtain optimum performance in carrying out AL calls.
|
|
+--
|
|
+-- OpenAL maintains a considerable amount of state information. This state
|
|
+-- controls how the sources are rendered into the output buffer. Some of this
|
|
+-- state is directly available to the user: he or she can make calls to obtain
|
|
+-- its value. Some of it, however, is visible only by the effect it has on what
|
|
+-- is rendered. One of the main goals of the OpenAL specification is to make
|
|
+-- OpenAL state information explicit, to elucidate how it changes, and to
|
|
+-- indicate what its effects are.
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+-- $TheSpecificationsViewOfOpenAL
|
|
+-- The OpenAL specification (see <http://www.openal.org/documentation.html>)
|
|
+-- views OpenAL as a state machine that controls a multichannel processing
|
|
+-- system to synthesize a digital stream, passing sample data through a chain of
|
|
+-- parametrized digital audio signal processing operations. This model should
|
|
+-- engender a specification that satisfies the needs of both programmers and
|
|
+-- implementors. It does not, however, necessarily provide a model for
|
|
+-- implementation. Any proper implementation must produce results conforming to
|
|
+-- those produced by the methods specified in the OpenAL specification, but
|
|
+-- there may be ways to carry out a particular computation that are more
|
|
+-- efficient than the one specified.
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+-- $LegalStuff
|
|
+-- The documentation is more or less based upon the OpenAL 1.1 Specification and
|
|
+-- Reference, which is in turn based upon the older OpenAL Specification and
|
|
+-- Reference (1.0), published in June 2000. Both copyright notices are presented
|
|
+-- below:
|
|
+--
|
|
+-- Version 1.1: Published June 2005, Copyright (c) 2005 by authors
|
|
+--
|
|
+-- Version 1.0 Draft Edition: Published June 2000, Copyright (c) 1999-2000 by
|
|
+-- Loki Software
|
|
+--
|
|
+-- Permission is granted to make and distribute verbatim copies of this manual
|
|
+-- provided the copyright notice and this permission notice are preserved on all
|
|
+-- copies. Permission is granted to copy and distribute translations of this
|
|
+-- manual into another language, under the above conditions for modified
|
|
+-- versions, except that this permission notice may be stated in a translation
|
|
+-- approved by the copyright owners.
|
|
+--
|
|
+-- BeOS is a trademark of PalmSource, Inc. Linux is a trademark of Linus
|
|
+-- Torvalds. Macintosh and Apple are trademarks of Apple Computer, Inc. OpenAL
|
|
+-- is a trademark of Creative Labs, Inc. OpenGL is a trademark of Silicon
|
|
+-- Graphics, Inc. UNIX is a trademark of X\/Open Group. Windows is a trademark
|
|
+-- of Microsoft Corp. X Window System is a trademark of X Consortium, Inc. All
|
|
+-- other trademarks are property of their respective owners.
|
|
diff -uNr --exclude=autom4te.cache --exclude=.cvsignore hugs98-Mar2005-patched/fptools/libraries/OpenAL/aclocal.m4 ghc-6.4.2/libraries/OpenAL/aclocal.m4
|
|
--- hugs98-Mar2005-patched/fptools/libraries/OpenAL/aclocal.m4 2004-11-22 07:53:36.000000000 +0900
|
|
+++ ghc-6.4.2/libraries/OpenAL/aclocal.m4 2006-03-22 00:58:03.000000000 +0900
|
|
@@ -1,7 +1,7 @@
|
|
# FPTOOLS_CHECK_HTYPE(TYPE [, DEFAULT_VALUE, [, VALUE-FOR-CROSS-COMPILATION])
|
|
#
|
|
# This test should *really* be rewritten!!!
|
|
-AC_DEFUN(FPTOOLS_CHECK_HTYPE,
|
|
+AC_DEFUN([FPTOOLS_CHECK_HTYPE],
|
|
[changequote(<<, >>)dnl
|
|
dnl The name to #define.
|
|
define(<<AC_TYPE_NAME>>, translit(htype_$1, [a-z *], [A-Z_P]))dnl
|
|
@@ -59,6 +59,12 @@
|
|
# include <OpenGL/gl.h>
|
|
#endif
|
|
|
|
+#if defined(HAVE_AL_AL_H)
|
|
+# include <AL/al.h>
|
|
+#elif defined(HAVE_OPENAL_AL_H)
|
|
+# include <OpenAL/al.h>
|
|
+#endif
|
|
+
|
|
#if defined(HAVE_AL_ALC_H)
|
|
# include <AL/alc.h>
|
|
#elif defined(HAVE_OPENAL_ALC_H)
|
|
@@ -87,8 +93,8 @@
|
|
exit(0);
|
|
}]])],[AC_CV_NAME=`cat conftestval`],
|
|
[ifelse([$2], , [AC_CV_NAME=NotReallyAType; AC_CV_NAME_supported=no], [AC_CV_NAME=$2])],
|
|
-[ifelse([$3], , [AC_CV_NAME=NotReallyATypeCross; AC_CV_NAME_supported=no], [AC_CV_NAME=$3])])]) dnl
|
|
-CPPFLAGS="$fp_check_htype_save_cppflags"
|
|
+[ifelse([$3], , [AC_CV_NAME=NotReallyATypeCross; AC_CV_NAME_supported=no], [AC_CV_NAME=$3])])
|
|
+CPPFLAGS="$fp_check_htype_save_cppflags"]) dnl
|
|
if test "$AC_CV_NAME_supported" = yes; then
|
|
AC_MSG_RESULT($AC_CV_NAME)
|
|
AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME, [Define to Haskell type for $1])
|
|
@@ -100,6 +106,7 @@
|
|
undefine([AC_CV_NAME_supported])dnl
|
|
])
|
|
|
|
+
|
|
# FP_COMPUTE_INT(EXPRESSION, VARIABLE, INCLUDES, IF-FAILS)
|
|
# ---------------------------------------------------------
|
|
# Assign VARIABLE the value of the compile-time EXPRESSION using INCLUDES for
|
|
@@ -113,6 +120,7 @@
|
|
[_AC_COMPUTE_INT([$1], [$2], [$3], [$4])[]dnl
|
|
])# FP_COMPUTE_INT
|
|
|
|
+
|
|
# FP_CHECK_CONST(EXPRESSION, [INCLUDES = DEFAULT-INCLUDES], [VALUE-IF-FAIL = -1])
|
|
# -------------------------------------------------------------------------------
|
|
# Defines CONST_EXPRESSION to the value of the compile-time EXPRESSION, using
|
|
@@ -141,7 +149,7 @@
|
|
# FP_CHECK_CONSTS(EXPRESSION..., [INCLUDES = DEFAULT-INCLUDES], [VALUE-IF-FAIL = -1])
|
|
# -----------------------------------------------------------------------------------
|
|
# List version of FP_CHECK_CONST
|
|
-AC_DEFUN(FP_CHECK_CONSTS,
|
|
+AC_DEFUN([FP_CHECK_CONSTS],
|
|
[FP_CHECK_CONSTS_TEMPLATE([$1])dnl
|
|
for fp_const_name in $1
|
|
do
|
|
@@ -159,3 +167,119 @@
|
|
[enable_openal=$enableval],
|
|
[enable_openal=yes])
|
|
])# FP_ARG_OPENAL
|
|
+
|
|
+
|
|
+# FP_HEADER_AL
|
|
+# ------------
|
|
+# Check for an AL header, setting the variable fp_found_al_header to no/yes,
|
|
+# depending on the outcome.
|
|
+AC_DEFUN([FP_HEADER_AL],
|
|
+[if test -z "$fp_found_al_header"; then
|
|
+ fp_found_al_header=no
|
|
+ AC_CHECK_HEADERS([AL/al.h OpenAL/al.h], [fp_found_al_header=yes; break])
|
|
+fi
|
|
+]) # FP_HEADER_AL
|
|
+
|
|
+
|
|
+# FP_HEADER_ALC
|
|
+# -------------
|
|
+# Check for an ALC header, setting the variable fp_found_alc_header to no/yes,
|
|
+# depending on the outcome.
|
|
+AC_DEFUN([FP_HEADER_ALC],
|
|
+[if test -z "$fp_found_alc_header"; then
|
|
+ fp_found_alc_header=no
|
|
+ AC_CHECK_HEADERS([AL/alc.h OpenAL/alc.h], [fp_found_alc_header=yes; break])
|
|
+fi
|
|
+]) # FP_HEADER_ALC
|
|
+
|
|
+
|
|
+# FP_FUNC_ALCCLOSEDEVICE_VOID
|
|
+# ---------------------------
|
|
+# Defines ALCCLOSEDEVICE_VOID to 1 if `alcCloseDevice' returns void.
|
|
+AC_DEFUN([FP_FUNC_ALCCLOSEDEVICE_VOID],
|
|
+[AC_REQUIRE([FP_HEADER_ALC])
|
|
+AC_CACHE_CHECK([whether alcCloseDevice returns void],
|
|
+ [fp_cv_func_alcclosedevice_void],
|
|
+ [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT
|
|
+#if defined(HAVE_AL_ALC_H)
|
|
+#include <AL/alc.h>
|
|
+#elif defined(HAVE_OPENAL_ALC_H)
|
|
+#include <OpenAL/alc.h>
|
|
+#endif
|
|
+],
|
|
+ [[int x = (int)alcCloseDevice(NULL);]])],
|
|
+ [fp_cv_func_alcclosedevice_void=no],
|
|
+ [fp_cv_func_alcclosedevice_void=yes])])
|
|
+if test x"$fp_cv_func_alcclosedevice_void" = xyes; then
|
|
+ AC_DEFINE([ALCCLOSEDEVICE_VOID], [1], [Define to 1 if `alcCloseDevice' returns void.])
|
|
+fi
|
|
+]) # FP_FUNC_ALCCLOSEDEVICE_VOID
|
|
+
|
|
+
|
|
+# FP_FUNC_ALCMAKECONTEXTCURRENT_VOID
|
|
+# ----------------------------------
|
|
+# Defines ALCMAKECONTEXTCURRENT_VOID to 1 if `alcMakeContextCurrent' returns void.
|
|
+AC_DEFUN([FP_FUNC_ALCMAKECONTEXTCURRENT_VOID],
|
|
+[AC_REQUIRE([FP_HEADER_ALC])
|
|
+AC_CACHE_CHECK([whether alcMakeContextCurrent returns void],
|
|
+ [fp_cv_func_alcmakecontextcurrent_void],
|
|
+ [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT
|
|
+#if defined(HAVE_AL_ALC_H)
|
|
+#include <AL/alc.h>
|
|
+#elif defined(HAVE_OPENAL_ALC_H)
|
|
+#include <OpenAL/alc.h>
|
|
+#endif
|
|
+],
|
|
+ [[int x = (int)alcMakeContextCurrent(NULL);]])],
|
|
+ [fp_cv_func_alcmakecontextcurrent_void=no],
|
|
+ [fp_cv_func_alcmakecontextcurrent_void=yes])])
|
|
+if test x"$fp_cv_func_alcmakecontextcurrent_void)" = xyes; then
|
|
+ AC_DEFINE([ALCMAKECONTEXTCURRENT_VOID], [1], [Define to 1 if `alcMakeContextCurrent' returns void.])
|
|
+fi
|
|
+]) # FP_FUNC_ALCMAKECONTEXTCURRENT_VOID
|
|
+
|
|
+
|
|
+# FP_FUNC_ALCPROCESSCONTEXT_VOID
|
|
+# ------------------------------
|
|
+# Defines ALCPROCESSCONTEXT_VOID to 1 if `alcProcessContext' returns void.
|
|
+AC_DEFUN([FP_FUNC_ALCPROCESSCONTEXT_VOID],
|
|
+[AC_REQUIRE([FP_HEADER_ALC])
|
|
+AC_CACHE_CHECK([whether alcProcessContext returns void],
|
|
+ [fp_cv_func_alcprocesscontext_void],
|
|
+ [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT
|
|
+#if defined(HAVE_AL_ALC_H)
|
|
+#include <AL/alc.h>
|
|
+#elif defined(HAVE_OPENAL_ALC_H)
|
|
+#include <OpenAL/alc.h>
|
|
+#endif
|
|
+],
|
|
+ [[int x = (int)alcProcessContext(NULL);]])],
|
|
+ [fp_cv_func_alcprocesscontext_void=no],
|
|
+ [fp_cv_func_alcprocesscontext_void=yes])])
|
|
+if test x"$fp_cv_func_alcprocesscontext_void" = xyes; then
|
|
+ AC_DEFINE([ALCPROCESSCONTEXT_VOID], [1], [Define to 1 if `alcProcessContext' returns void.])
|
|
+fi
|
|
+]) # FP_FUNC_ALCPROCESSCONTEXT_VOID
|
|
+
|
|
+
|
|
+# FP_FUNC_ALCDESTROYCONTEXT_VOID
|
|
+# ------------------------------
|
|
+# Defines ALCDESTROYCONTEXT_VOID to 1 if `alcDestroyContext' returns void.
|
|
+AC_DEFUN([FP_FUNC_ALCDESTROYCONTEXT_VOID],
|
|
+[AC_REQUIRE([FP_HEADER_ALC])
|
|
+AC_CACHE_CHECK([whether alcDestroyContext returns void],
|
|
+ [fp_cv_func_alcdestroycontext_void],
|
|
+ [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT
|
|
+#if defined(HAVE_AL_ALC_H)
|
|
+#include <AL/alc.h>
|
|
+#elif defined(HAVE_OPENAL_ALC_H)
|
|
+#include <OpenAL/alc.h>
|
|
+#endif
|
|
+],
|
|
+ [[int x = (int)alcDestroyContext(NULL);]])],
|
|
+ [fp_cv_func_alcdestroycontext_void=no],
|
|
+ [fp_cv_func_alcdestroycontext_void=yes])])
|
|
+if test x"$fp_cv_func_alcdestroycontext_void" = xyes; then
|
|
+ AC_DEFINE([ALCDESTROYCONTEXT_VOID], [1], [Define to 1 if `alcDestroyContext' returns void.])
|
|
+fi
|
|
+]) # FP_FUNC_ALCDESTROYCONTEXT_VOID
|
|
diff -uNr --exclude=autom4te.cache --exclude=.cvsignore hugs98-Mar2005-patched/fptools/libraries/OpenAL/configure ghc-6.4.2/libraries/OpenAL/configure
|
|
--- hugs98-Mar2005-patched/fptools/libraries/OpenAL/configure 2005-03-12 08:13:20.000000000 +0900
|
|
+++ ghc-6.4.2/libraries/OpenAL/configure 2006-04-19 04:36:53.000000000 +0900
|
|
@@ -1,6 +1,6 @@
|
|
#! /bin/sh
|
|
# Guess values for system-dependent variables and create Makefiles.
|
|
-# Generated by GNU Autoconf 2.57 for Haskell HOpenAL package 1.0.
|
|
+# Generated by GNU Autoconf 2.57 for Haskell HOpenAL package 1.2.
|
|
#
|
|
# Report bugs to <sven.panne@aedion.de>.
|
|
#
|
|
@@ -268,8 +268,8 @@
|
|
# Identity of this package.
|
|
PACKAGE_NAME='Haskell HOpenAL package'
|
|
PACKAGE_TARNAME='OpenAL'
|
|
-PACKAGE_VERSION='1.0'
|
|
-PACKAGE_STRING='Haskell HOpenAL package 1.0'
|
|
+PACKAGE_VERSION='1.2'
|
|
+PACKAGE_STRING='Haskell HOpenAL package 1.2'
|
|
PACKAGE_BUGREPORT='sven.panne@aedion.de'
|
|
|
|
ac_unique_file="include/HsOpenAL.h.in"
|
|
@@ -310,7 +310,7 @@
|
|
# include <unistd.h>
|
|
#endif"
|
|
|
|
-ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS AL_BUILD_PACKAGE CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT AL_LIBS CPP EGREP AL_FRAMEWORKS BUILD_PACKAGE_BOOL CALLCONV LIBOBJS LTLIBOBJS'
|
|
+ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS AL_BUILD_PACKAGE CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT AL_LIBS AL_FRAMEWORKS CPP EGREP BUILD_PACKAGE_BOOL CALLCONV LIBOBJS LTLIBOBJS'
|
|
ac_subst_files=''
|
|
|
|
# Initialize some variables set by options.
|
|
@@ -779,7 +779,7 @@
|
|
# Omit some internal or obsolete options to make the list less imposing.
|
|
# This message is too long to be a string in the A/UX 3.1 sh.
|
|
cat <<_ACEOF
|
|
-\`configure' configures Haskell HOpenAL package 1.0 to adapt to many kinds of systems.
|
|
+\`configure' configures Haskell HOpenAL package 1.2 to adapt to many kinds of systems.
|
|
|
|
Usage: $0 [OPTION]... [VAR=VALUE]...
|
|
|
|
@@ -836,7 +836,7 @@
|
|
|
|
if test -n "$ac_init_help"; then
|
|
case $ac_init_help in
|
|
- short | recursive ) echo "Configuration of Haskell HOpenAL package 1.0:";;
|
|
+ short | recursive ) echo "Configuration of Haskell HOpenAL package 1.2:";;
|
|
esac
|
|
cat <<\_ACEOF
|
|
|
|
@@ -921,7 +921,7 @@
|
|
test -n "$ac_init_help" && exit 0
|
|
if $ac_init_version; then
|
|
cat <<\_ACEOF
|
|
-Haskell HOpenAL package configure 1.0
|
|
+Haskell HOpenAL package configure 1.2
|
|
generated by GNU Autoconf 2.57
|
|
|
|
Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002
|
|
@@ -936,7 +936,7 @@
|
|
This file contains any messages produced by compilers while
|
|
running configure, to aid debugging if configure makes a mistake.
|
|
|
|
-It was created by Haskell HOpenAL package $as_me 1.0, which was
|
|
+It was created by Haskell HOpenAL package $as_me 1.2, which was
|
|
generated by GNU Autoconf 2.57. Invocation command line was
|
|
|
|
$ $0 $@
|
|
@@ -2219,7 +2219,7 @@
|
|
fi
|
|
rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
|
|
if test "$ac_cv_search_alGenSources" = no; then
|
|
- for ac_lib in openal; do
|
|
+ for ac_lib in openal openal32; do
|
|
LIBS="-l$ac_lib $ac_func_search_save_LIBS"
|
|
cat >conftest.$ac_ext <<_ACEOF
|
|
#line $LINENO "configure"
|
|
@@ -2283,7 +2283,15 @@
|
|
echo "$as_me: WARNING: no OpenAL library found, so this package will not be built" >&2;}
|
|
else
|
|
|
|
-al_found_header=no
|
|
+# Ugly...
|
|
+AL_FRAMEWORKS=
|
|
+case $host_os in
|
|
+darwin*)
|
|
+ AL_FRAMEWORKS=OpenAL
|
|
+ ;;
|
|
+esac
|
|
+
|
|
+
|
|
ac_ext=c
|
|
ac_cpp='$CPP $CPPFLAGS'
|
|
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
|
|
@@ -2757,9 +2765,11 @@
|
|
done
|
|
|
|
|
|
+if test -z "$fp_found_al_header"; then
|
|
+ fp_found_al_header=no
|
|
|
|
|
|
-for ac_header in AL/alc.h OpenAL/alc.h
|
|
+for ac_header in AL/al.h OpenAL/al.h
|
|
do
|
|
as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
|
|
if eval "test \"\${$as_ac_Header+set}\" = set"; then
|
|
@@ -2895,30 +2905,18 @@
|
|
cat >>confdefs.h <<_ACEOF
|
|
#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
|
|
_ACEOF
|
|
- al_found_header=yes; break
|
|
+ fp_found_al_header=yes; break
|
|
fi
|
|
|
|
done
|
|
|
|
-if test "$al_found_header" = no; then
|
|
- { echo "$as_me:$LINENO: WARNING: no OpenAL header found, so this package will not be built" >&5
|
|
-echo "$as_me: WARNING: no OpenAL header found, so this package will not be built" >&2;}
|
|
-else
|
|
-
|
|
-AL_BUILD_PACKAGE=yes
|
|
-
|
|
-# Ugly...
|
|
-AL_FRAMEWORKS=
|
|
-case $target_os in
|
|
-darwin*)
|
|
- AL_FRAMEWORKS=OpenAL
|
|
- ;;
|
|
-esac
|
|
-
|
|
+fi
|
|
|
|
+if test -z "$fp_found_alc_header"; then
|
|
+ fp_found_alc_header=no
|
|
|
|
|
|
-for ac_header in AL/alext.h OpenAL/alext.h
|
|
+for ac_header in AL/alc.h OpenAL/alc.h
|
|
do
|
|
as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
|
|
if eval "test \"\${$as_ac_Header+set}\" = set"; then
|
|
@@ -3054,133 +3052,1600 @@
|
|
cat >>confdefs.h <<_ACEOF
|
|
#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
|
|
_ACEOF
|
|
- break
|
|
+ fp_found_alc_header=yes; break
|
|
fi
|
|
|
|
done
|
|
|
|
+fi
|
|
|
|
-echo "$as_me:$LINENO: checking Haskell type for ALboolean" >&5
|
|
-echo $ECHO_N "checking Haskell type for ALboolean... $ECHO_C" >&6
|
|
-if test "${fptools_cv_htype_ALboolean+set}" = set; then
|
|
- echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+if test -z "$AL_FRAMEWORKS" && test x"$fp_found_al_header$fp_found_alc_header" != xyesyes; then
|
|
+ { echo "$as_me:$LINENO: WARNING: no OpenAL headers found, so this package will not be built" >&5
|
|
+echo "$as_me: WARNING: no OpenAL headers found, so this package will not be built" >&2;}
|
|
else
|
|
- fptools_cv_htype_sup_ALboolean=yes
|
|
-fp_check_htype_save_cppflags="$CPPFLAGS"
|
|
-CPPFLAGS="$CPPFLAGS $X_CFLAGS"
|
|
-if test "$cross_compiling" = yes; then
|
|
- fptools_cv_htype_ALboolean=NotReallyATypeCross; fptools_cv_htype_sup_ALboolean=no
|
|
+
|
|
+AL_BUILD_PACKAGE=yes
|
|
+
|
|
+
|
|
+
|
|
+for ac_header in AL/alext.h OpenAL/alext.h
|
|
+do
|
|
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
|
|
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
|
|
+ echo "$as_me:$LINENO: checking for $ac_header" >&5
|
|
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
|
|
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
|
|
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
|
|
else
|
|
- cat >conftest.$ac_ext <<_ACEOF
|
|
+ # Is the header compilable?
|
|
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
|
|
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
|
|
+cat >conftest.$ac_ext <<_ACEOF
|
|
#line $LINENO "configure"
|
|
/* confdefs.h. */
|
|
_ACEOF
|
|
cat confdefs.h >>conftest.$ac_ext
|
|
cat >>conftest.$ac_ext <<_ACEOF
|
|
/* end confdefs.h. */
|
|
-#include <stdio.h>
|
|
-#include <stddef.h>
|
|
-
|
|
-#if HAVE_SYS_TYPES_H
|
|
-# include <sys/types.h>
|
|
-#endif
|
|
-
|
|
-#if HAVE_UNISTD_H
|
|
-# include <unistd.h>
|
|
-#endif
|
|
+$ac_includes_default
|
|
+#include <$ac_header>
|
|
+_ACEOF
|
|
+rm -f conftest.$ac_objext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
|
+ (eval $ac_compile) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } &&
|
|
+ { ac_try='test -s conftest.$ac_objext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+ ac_header_compiler=yes
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
|
|
-#if HAVE_SYS_STAT_H
|
|
-# include <sys/stat.h>
|
|
-#endif
|
|
+ac_header_compiler=no
|
|
+fi
|
|
+rm -f conftest.$ac_objext conftest.$ac_ext
|
|
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
|
|
+echo "${ECHO_T}$ac_header_compiler" >&6
|
|
|
|
-#if HAVE_FCNTL_H
|
|
-# include <fcntl.h>
|
|
-#endif
|
|
+# Is the header present?
|
|
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
|
|
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
|
|
+cat >conftest.$ac_ext <<_ACEOF
|
|
+#line $LINENO "configure"
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+#include <$ac_header>
|
|
+_ACEOF
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
|
|
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
|
|
+ ac_status=$?
|
|
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
+ rm -f conftest.er1
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } >/dev/null; then
|
|
+ if test -s conftest.err; then
|
|
+ ac_cpp_err=$ac_c_preproc_warn_flag
|
|
+ else
|
|
+ ac_cpp_err=
|
|
+ fi
|
|
+else
|
|
+ ac_cpp_err=yes
|
|
+fi
|
|
+if test -z "$ac_cpp_err"; then
|
|
+ ac_header_preproc=yes
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
|
|
-#if HAVE_SIGNAL_H
|
|
-# include <signal.h>
|
|
-#endif
|
|
+ ac_header_preproc=no
|
|
+fi
|
|
+rm -f conftest.err conftest.$ac_ext
|
|
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
|
|
+echo "${ECHO_T}$ac_header_preproc" >&6
|
|
|
|
-#if HAVE_TIME_H
|
|
-# include <time.h>
|
|
-#endif
|
|
+# So? What about this header?
|
|
+case $ac_header_compiler:$ac_header_preproc in
|
|
+ yes:no )
|
|
+ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
|
|
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
|
|
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
|
|
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
|
|
+ (
|
|
+ cat <<\_ASBOX
|
|
+## ------------------------------------ ##
|
|
+## Report this to bug-autoconf@gnu.org. ##
|
|
+## ------------------------------------ ##
|
|
+_ASBOX
|
|
+ ) |
|
|
+ sed "s/^/$as_me: WARNING: /" >&2
|
|
+ ;;
|
|
+ no:yes )
|
|
+ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
|
|
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
|
|
+ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
|
|
+echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
|
|
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
|
|
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
|
|
+ (
|
|
+ cat <<\_ASBOX
|
|
+## ------------------------------------ ##
|
|
+## Report this to bug-autoconf@gnu.org. ##
|
|
+## ------------------------------------ ##
|
|
+_ASBOX
|
|
+ ) |
|
|
+ sed "s/^/$as_me: WARNING: /" >&2
|
|
+ ;;
|
|
+esac
|
|
+echo "$as_me:$LINENO: checking for $ac_header" >&5
|
|
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
|
|
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ eval "$as_ac_Header=$ac_header_preproc"
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
|
|
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
|
|
|
|
-#if HAVE_TERMIOS_H
|
|
-# include <termios.h>
|
|
-#endif
|
|
+fi
|
|
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
|
|
+ cat >>confdefs.h <<_ACEOF
|
|
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
|
|
+_ACEOF
|
|
+ break
|
|
+fi
|
|
|
|
-#if HAVE_STRING_H
|
|
-# include <string.h>
|
|
-#endif
|
|
+done
|
|
|
|
-#if HAVE_CTYPE_H
|
|
-# include <ctype.h>
|
|
-#endif
|
|
|
|
-#if defined(HAVE_GL_GL_H)
|
|
-# include <GL/gl.h>
|
|
-#elif defined(HAVE_OPENGL_GL_H)
|
|
-# include <OpenGL/gl.h>
|
|
-#endif
|
|
|
|
+echo "$as_me:$LINENO: checking whether alcCloseDevice returns void" >&5
|
|
+echo $ECHO_N "checking whether alcCloseDevice returns void... $ECHO_C" >&6
|
|
+if test "${fp_cv_func_alcclosedevice_void+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+#line $LINENO "configure"
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+$ac_includes_default
|
|
#if defined(HAVE_AL_ALC_H)
|
|
-# include <AL/alc.h>
|
|
+#include <AL/alc.h>
|
|
#elif defined(HAVE_OPENAL_ALC_H)
|
|
-# include <OpenAL/alc.h>
|
|
-#endif
|
|
-
|
|
-#if HAVE_SYS_RESOURCE_H
|
|
-# include <sys/resource.h>
|
|
+#include <OpenAL/alc.h>
|
|
#endif
|
|
|
|
-typedef ALboolean testing;
|
|
-
|
|
-main() {
|
|
- FILE *f=fopen("conftestval", "w");
|
|
- if (!f) exit(1);
|
|
- if (((testing)((int)((testing)1.4))) == ((testing)1.4)) {
|
|
- fprintf(f, "%s%d\n",
|
|
- ((testing)(-1) < (testing)0) ? "Int" : "Word",
|
|
- sizeof(testing)*8);
|
|
- } else {
|
|
- fprintf(f,"%s\n",
|
|
- (sizeof(testing) > sizeof(double)) ? "LDouble" :
|
|
- (sizeof(testing) == sizeof(double)) ? "Double" : "Float");
|
|
- }
|
|
- fclose(f);
|
|
- exit(0);
|
|
+int
|
|
+main ()
|
|
+{
|
|
+int x = (int)alcCloseDevice(NULL);
|
|
+ ;
|
|
+ return 0;
|
|
}
|
|
_ACEOF
|
|
-rm -f conftest$ac_exeext
|
|
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
|
|
- (eval $ac_link) 2>&5
|
|
+rm -f conftest.$ac_objext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
|
+ (eval $ac_compile) 2>&5
|
|
ac_status=$?
|
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
|
|
+ (exit $ac_status); } &&
|
|
+ { ac_try='test -s conftest.$ac_objext'
|
|
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
(eval $ac_try) 2>&5
|
|
ac_status=$?
|
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
(exit $ac_status); }; }; then
|
|
- fptools_cv_htype_ALboolean=`cat conftestval`
|
|
+ fp_cv_func_alcclosedevice_void=no
|
|
else
|
|
- echo "$as_me: program exited with status $ac_status" >&5
|
|
-echo "$as_me: failed program was:" >&5
|
|
+ echo "$as_me: failed program was:" >&5
|
|
sed 's/^/| /' conftest.$ac_ext >&5
|
|
|
|
-( exit $ac_status )
|
|
+fp_cv_func_alcclosedevice_void=yes
|
|
+fi
|
|
+rm -f conftest.$ac_objext conftest.$ac_ext
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: $fp_cv_func_alcclosedevice_void" >&5
|
|
+echo "${ECHO_T}$fp_cv_func_alcclosedevice_void" >&6
|
|
+if test x"$fp_cv_func_alcclosedevice_void" = xyes; then
|
|
+
|
|
+cat >>confdefs.h <<\_ACEOF
|
|
+#define ALCCLOSEDEVICE_VOID 1
|
|
+_ACEOF
|
|
+
|
|
+fi
|
|
+
|
|
+
|
|
+echo "$as_me:$LINENO: checking whether alcMakeContextCurrent returns void" >&5
|
|
+echo $ECHO_N "checking whether alcMakeContextCurrent returns void... $ECHO_C" >&6
|
|
+if test "${fp_cv_func_alcmakecontextcurrent_void+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+#line $LINENO "configure"
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+$ac_includes_default
|
|
+#if defined(HAVE_AL_ALC_H)
|
|
+#include <AL/alc.h>
|
|
+#elif defined(HAVE_OPENAL_ALC_H)
|
|
+#include <OpenAL/alc.h>
|
|
+#endif
|
|
+
|
|
+int
|
|
+main ()
|
|
+{
|
|
+int x = (int)alcMakeContextCurrent(NULL);
|
|
+ ;
|
|
+ return 0;
|
|
+}
|
|
+_ACEOF
|
|
+rm -f conftest.$ac_objext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
|
+ (eval $ac_compile) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } &&
|
|
+ { ac_try='test -s conftest.$ac_objext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+ fp_cv_func_alcmakecontextcurrent_void=no
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+fp_cv_func_alcmakecontextcurrent_void=yes
|
|
+fi
|
|
+rm -f conftest.$ac_objext conftest.$ac_ext
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: $fp_cv_func_alcmakecontextcurrent_void" >&5
|
|
+echo "${ECHO_T}$fp_cv_func_alcmakecontextcurrent_void" >&6
|
|
+if test x"$fp_cv_func_alcmakecontextcurrent_void)" = xyes; then
|
|
+
|
|
+cat >>confdefs.h <<\_ACEOF
|
|
+#define ALCMAKECONTEXTCURRENT_VOID 1
|
|
+_ACEOF
|
|
+
|
|
+fi
|
|
+
|
|
+
|
|
+echo "$as_me:$LINENO: checking whether alcProcessContext returns void" >&5
|
|
+echo $ECHO_N "checking whether alcProcessContext returns void... $ECHO_C" >&6
|
|
+if test "${fp_cv_func_alcprocesscontext_void+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+#line $LINENO "configure"
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+$ac_includes_default
|
|
+#if defined(HAVE_AL_ALC_H)
|
|
+#include <AL/alc.h>
|
|
+#elif defined(HAVE_OPENAL_ALC_H)
|
|
+#include <OpenAL/alc.h>
|
|
+#endif
|
|
+
|
|
+int
|
|
+main ()
|
|
+{
|
|
+int x = (int)alcProcessContext(NULL);
|
|
+ ;
|
|
+ return 0;
|
|
+}
|
|
+_ACEOF
|
|
+rm -f conftest.$ac_objext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
|
+ (eval $ac_compile) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } &&
|
|
+ { ac_try='test -s conftest.$ac_objext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+ fp_cv_func_alcprocesscontext_void=no
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+fp_cv_func_alcprocesscontext_void=yes
|
|
+fi
|
|
+rm -f conftest.$ac_objext conftest.$ac_ext
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: $fp_cv_func_alcprocesscontext_void" >&5
|
|
+echo "${ECHO_T}$fp_cv_func_alcprocesscontext_void" >&6
|
|
+if test x"$fp_cv_func_alcprocesscontext_void" = xyes; then
|
|
+
|
|
+cat >>confdefs.h <<\_ACEOF
|
|
+#define ALCPROCESSCONTEXT_VOID 1
|
|
+_ACEOF
|
|
+
|
|
+fi
|
|
+
|
|
+
|
|
+echo "$as_me:$LINENO: checking whether alcDestroyContext returns void" >&5
|
|
+echo $ECHO_N "checking whether alcDestroyContext returns void... $ECHO_C" >&6
|
|
+if test "${fp_cv_func_alcdestroycontext_void+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+#line $LINENO "configure"
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+$ac_includes_default
|
|
+#if defined(HAVE_AL_ALC_H)
|
|
+#include <AL/alc.h>
|
|
+#elif defined(HAVE_OPENAL_ALC_H)
|
|
+#include <OpenAL/alc.h>
|
|
+#endif
|
|
+
|
|
+int
|
|
+main ()
|
|
+{
|
|
+int x = (int)alcDestroyContext(NULL);
|
|
+ ;
|
|
+ return 0;
|
|
+}
|
|
+_ACEOF
|
|
+rm -f conftest.$ac_objext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
|
+ (eval $ac_compile) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } &&
|
|
+ { ac_try='test -s conftest.$ac_objext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+ fp_cv_func_alcdestroycontext_void=no
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+fp_cv_func_alcdestroycontext_void=yes
|
|
+fi
|
|
+rm -f conftest.$ac_objext conftest.$ac_ext
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: $fp_cv_func_alcdestroycontext_void" >&5
|
|
+echo "${ECHO_T}$fp_cv_func_alcdestroycontext_void" >&6
|
|
+if test x"$fp_cv_func_alcdestroycontext_void" = xyes; then
|
|
+
|
|
+cat >>confdefs.h <<\_ACEOF
|
|
+#define ALCDESTROYCONTEXT_VOID 1
|
|
+_ACEOF
|
|
+
|
|
+fi
|
|
+
|
|
+
|
|
+echo "$as_me:$LINENO: checking Haskell type for ALboolean" >&5
|
|
+echo $ECHO_N "checking Haskell type for ALboolean... $ECHO_C" >&6
|
|
+if test "${fptools_cv_htype_ALboolean+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ fptools_cv_htype_sup_ALboolean=yes
|
|
+fp_check_htype_save_cppflags="$CPPFLAGS"
|
|
+CPPFLAGS="$CPPFLAGS $X_CFLAGS"
|
|
+if test "$cross_compiling" = yes; then
|
|
+ fptools_cv_htype_ALboolean=NotReallyATypeCross; fptools_cv_htype_sup_ALboolean=no
|
|
+else
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+#line $LINENO "configure"
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+#include <stdio.h>
|
|
+#include <stddef.h>
|
|
+
|
|
+#if HAVE_SYS_TYPES_H
|
|
+# include <sys/types.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_UNISTD_H
|
|
+# include <unistd.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_SYS_STAT_H
|
|
+# include <sys/stat.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_FCNTL_H
|
|
+# include <fcntl.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_SIGNAL_H
|
|
+# include <signal.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_TIME_H
|
|
+# include <time.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_TERMIOS_H
|
|
+# include <termios.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_STRING_H
|
|
+# include <string.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_CTYPE_H
|
|
+# include <ctype.h>
|
|
+#endif
|
|
+
|
|
+#if defined(HAVE_GL_GL_H)
|
|
+# include <GL/gl.h>
|
|
+#elif defined(HAVE_OPENGL_GL_H)
|
|
+# include <OpenGL/gl.h>
|
|
+#endif
|
|
+
|
|
+#if defined(HAVE_AL_AL_H)
|
|
+# include <AL/al.h>
|
|
+#elif defined(HAVE_OPENAL_AL_H)
|
|
+# include <OpenAL/al.h>
|
|
+#endif
|
|
+
|
|
+#if defined(HAVE_AL_ALC_H)
|
|
+# include <AL/alc.h>
|
|
+#elif defined(HAVE_OPENAL_ALC_H)
|
|
+# include <OpenAL/alc.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_SYS_RESOURCE_H
|
|
+# include <sys/resource.h>
|
|
+#endif
|
|
+
|
|
+typedef ALboolean testing;
|
|
+
|
|
+main() {
|
|
+ FILE *f=fopen("conftestval", "w");
|
|
+ if (!f) exit(1);
|
|
+ if (((testing)((int)((testing)1.4))) == ((testing)1.4)) {
|
|
+ fprintf(f, "%s%d\n",
|
|
+ ((testing)(-1) < (testing)0) ? "Int" : "Word",
|
|
+ sizeof(testing)*8);
|
|
+ } else {
|
|
+ fprintf(f,"%s\n",
|
|
+ (sizeof(testing) > sizeof(double)) ? "LDouble" :
|
|
+ (sizeof(testing) == sizeof(double)) ? "Double" : "Float");
|
|
+ }
|
|
+ fclose(f);
|
|
+ exit(0);
|
|
+}
|
|
+_ACEOF
|
|
+rm -f conftest$ac_exeext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
|
|
+ (eval $ac_link) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+ fptools_cv_htype_ALboolean=`cat conftestval`
|
|
+else
|
|
+ echo "$as_me: program exited with status $ac_status" >&5
|
|
+echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+( exit $ac_status )
|
|
fptools_cv_htype_ALboolean=NotReallyAType; fptools_cv_htype_sup_ALboolean=no
|
|
fi
|
|
rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
|
|
fi
|
|
+CPPFLAGS="$fp_check_htype_save_cppflags"
|
|
+fi
|
|
+ if test "$fptools_cv_htype_sup_ALboolean" = yes; then
|
|
+ echo "$as_me:$LINENO: result: $fptools_cv_htype_ALboolean" >&5
|
|
+echo "${ECHO_T}$fptools_cv_htype_ALboolean" >&6
|
|
+
|
|
+cat >>confdefs.h <<_ACEOF
|
|
+#define HTYPE_ALBOOLEAN $fptools_cv_htype_ALboolean
|
|
+_ACEOF
|
|
+
|
|
+else
|
|
+ echo "$as_me:$LINENO: result: not supported" >&5
|
|
+echo "${ECHO_T}not supported" >&6
|
|
+fi
|
|
+
|
|
+echo "$as_me:$LINENO: checking Haskell type for ALchar" >&5
|
|
+echo $ECHO_N "checking Haskell type for ALchar... $ECHO_C" >&6
|
|
+if test "${fptools_cv_htype_ALchar+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ fptools_cv_htype_sup_ALchar=yes
|
|
+fp_check_htype_save_cppflags="$CPPFLAGS"
|
|
+CPPFLAGS="$CPPFLAGS $X_CFLAGS"
|
|
+if test "$cross_compiling" = yes; then
|
|
+ fptools_cv_htype_ALchar=NotReallyATypeCross; fptools_cv_htype_sup_ALchar=no
|
|
+else
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+#line $LINENO "configure"
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+#include <stdio.h>
|
|
+#include <stddef.h>
|
|
+
|
|
+#if HAVE_SYS_TYPES_H
|
|
+# include <sys/types.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_UNISTD_H
|
|
+# include <unistd.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_SYS_STAT_H
|
|
+# include <sys/stat.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_FCNTL_H
|
|
+# include <fcntl.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_SIGNAL_H
|
|
+# include <signal.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_TIME_H
|
|
+# include <time.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_TERMIOS_H
|
|
+# include <termios.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_STRING_H
|
|
+# include <string.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_CTYPE_H
|
|
+# include <ctype.h>
|
|
+#endif
|
|
+
|
|
+#if defined(HAVE_GL_GL_H)
|
|
+# include <GL/gl.h>
|
|
+#elif defined(HAVE_OPENGL_GL_H)
|
|
+# include <OpenGL/gl.h>
|
|
+#endif
|
|
+
|
|
+#if defined(HAVE_AL_AL_H)
|
|
+# include <AL/al.h>
|
|
+#elif defined(HAVE_OPENAL_AL_H)
|
|
+# include <OpenAL/al.h>
|
|
+#endif
|
|
+
|
|
+#if defined(HAVE_AL_ALC_H)
|
|
+# include <AL/alc.h>
|
|
+#elif defined(HAVE_OPENAL_ALC_H)
|
|
+# include <OpenAL/alc.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_SYS_RESOURCE_H
|
|
+# include <sys/resource.h>
|
|
+#endif
|
|
+
|
|
+typedef ALchar testing;
|
|
+
|
|
+main() {
|
|
+ FILE *f=fopen("conftestval", "w");
|
|
+ if (!f) exit(1);
|
|
+ if (((testing)((int)((testing)1.4))) == ((testing)1.4)) {
|
|
+ fprintf(f, "%s%d\n",
|
|
+ ((testing)(-1) < (testing)0) ? "Int" : "Word",
|
|
+ sizeof(testing)*8);
|
|
+ } else {
|
|
+ fprintf(f,"%s\n",
|
|
+ (sizeof(testing) > sizeof(double)) ? "LDouble" :
|
|
+ (sizeof(testing) == sizeof(double)) ? "Double" : "Float");
|
|
+ }
|
|
+ fclose(f);
|
|
+ exit(0);
|
|
+}
|
|
+_ACEOF
|
|
+rm -f conftest$ac_exeext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
|
|
+ (eval $ac_link) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+ fptools_cv_htype_ALchar=`cat conftestval`
|
|
+else
|
|
+ echo "$as_me: program exited with status $ac_status" >&5
|
|
+echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+( exit $ac_status )
|
|
+fptools_cv_htype_ALchar=Int8
|
|
+fi
|
|
+rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
|
|
+fi
|
|
+CPPFLAGS="$fp_check_htype_save_cppflags"
|
|
+fi
|
|
+ if test "$fptools_cv_htype_sup_ALchar" = yes; then
|
|
+ echo "$as_me:$LINENO: result: $fptools_cv_htype_ALchar" >&5
|
|
+echo "${ECHO_T}$fptools_cv_htype_ALchar" >&6
|
|
+
|
|
+cat >>confdefs.h <<_ACEOF
|
|
+#define HTYPE_ALCHAR $fptools_cv_htype_ALchar
|
|
+_ACEOF
|
|
+
|
|
+else
|
|
+ echo "$as_me:$LINENO: result: not supported" >&5
|
|
+echo "${ECHO_T}not supported" >&6
|
|
+fi
|
|
+
|
|
+echo "$as_me:$LINENO: checking Haskell type for ALbyte" >&5
|
|
+echo $ECHO_N "checking Haskell type for ALbyte... $ECHO_C" >&6
|
|
+if test "${fptools_cv_htype_ALbyte+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ fptools_cv_htype_sup_ALbyte=yes
|
|
+fp_check_htype_save_cppflags="$CPPFLAGS"
|
|
+CPPFLAGS="$CPPFLAGS $X_CFLAGS"
|
|
+if test "$cross_compiling" = yes; then
|
|
+ fptools_cv_htype_ALbyte=NotReallyATypeCross; fptools_cv_htype_sup_ALbyte=no
|
|
+else
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+#line $LINENO "configure"
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+#include <stdio.h>
|
|
+#include <stddef.h>
|
|
+
|
|
+#if HAVE_SYS_TYPES_H
|
|
+# include <sys/types.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_UNISTD_H
|
|
+# include <unistd.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_SYS_STAT_H
|
|
+# include <sys/stat.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_FCNTL_H
|
|
+# include <fcntl.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_SIGNAL_H
|
|
+# include <signal.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_TIME_H
|
|
+# include <time.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_TERMIOS_H
|
|
+# include <termios.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_STRING_H
|
|
+# include <string.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_CTYPE_H
|
|
+# include <ctype.h>
|
|
+#endif
|
|
+
|
|
+#if defined(HAVE_GL_GL_H)
|
|
+# include <GL/gl.h>
|
|
+#elif defined(HAVE_OPENGL_GL_H)
|
|
+# include <OpenGL/gl.h>
|
|
+#endif
|
|
+
|
|
+#if defined(HAVE_AL_AL_H)
|
|
+# include <AL/al.h>
|
|
+#elif defined(HAVE_OPENAL_AL_H)
|
|
+# include <OpenAL/al.h>
|
|
+#endif
|
|
+
|
|
+#if defined(HAVE_AL_ALC_H)
|
|
+# include <AL/alc.h>
|
|
+#elif defined(HAVE_OPENAL_ALC_H)
|
|
+# include <OpenAL/alc.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_SYS_RESOURCE_H
|
|
+# include <sys/resource.h>
|
|
+#endif
|
|
+
|
|
+typedef ALbyte testing;
|
|
+
|
|
+main() {
|
|
+ FILE *f=fopen("conftestval", "w");
|
|
+ if (!f) exit(1);
|
|
+ if (((testing)((int)((testing)1.4))) == ((testing)1.4)) {
|
|
+ fprintf(f, "%s%d\n",
|
|
+ ((testing)(-1) < (testing)0) ? "Int" : "Word",
|
|
+ sizeof(testing)*8);
|
|
+ } else {
|
|
+ fprintf(f,"%s\n",
|
|
+ (sizeof(testing) > sizeof(double)) ? "LDouble" :
|
|
+ (sizeof(testing) == sizeof(double)) ? "Double" : "Float");
|
|
+ }
|
|
+ fclose(f);
|
|
+ exit(0);
|
|
+}
|
|
+_ACEOF
|
|
+rm -f conftest$ac_exeext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
|
|
+ (eval $ac_link) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+ fptools_cv_htype_ALbyte=`cat conftestval`
|
|
+else
|
|
+ echo "$as_me: program exited with status $ac_status" >&5
|
|
+echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+( exit $ac_status )
|
|
+fptools_cv_htype_ALbyte=NotReallyAType; fptools_cv_htype_sup_ALbyte=no
|
|
+fi
|
|
+rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
|
|
+fi
|
|
+CPPFLAGS="$fp_check_htype_save_cppflags"
|
|
+fi
|
|
+ if test "$fptools_cv_htype_sup_ALbyte" = yes; then
|
|
+ echo "$as_me:$LINENO: result: $fptools_cv_htype_ALbyte" >&5
|
|
+echo "${ECHO_T}$fptools_cv_htype_ALbyte" >&6
|
|
+
|
|
+cat >>confdefs.h <<_ACEOF
|
|
+#define HTYPE_ALBYTE $fptools_cv_htype_ALbyte
|
|
+_ACEOF
|
|
+
|
|
+else
|
|
+ echo "$as_me:$LINENO: result: not supported" >&5
|
|
+echo "${ECHO_T}not supported" >&6
|
|
+fi
|
|
+
|
|
+echo "$as_me:$LINENO: checking Haskell type for ALubyte" >&5
|
|
+echo $ECHO_N "checking Haskell type for ALubyte... $ECHO_C" >&6
|
|
+if test "${fptools_cv_htype_ALubyte+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ fptools_cv_htype_sup_ALubyte=yes
|
|
+fp_check_htype_save_cppflags="$CPPFLAGS"
|
|
+CPPFLAGS="$CPPFLAGS $X_CFLAGS"
|
|
+if test "$cross_compiling" = yes; then
|
|
+ fptools_cv_htype_ALubyte=NotReallyATypeCross; fptools_cv_htype_sup_ALubyte=no
|
|
+else
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+#line $LINENO "configure"
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+#include <stdio.h>
|
|
+#include <stddef.h>
|
|
+
|
|
+#if HAVE_SYS_TYPES_H
|
|
+# include <sys/types.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_UNISTD_H
|
|
+# include <unistd.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_SYS_STAT_H
|
|
+# include <sys/stat.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_FCNTL_H
|
|
+# include <fcntl.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_SIGNAL_H
|
|
+# include <signal.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_TIME_H
|
|
+# include <time.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_TERMIOS_H
|
|
+# include <termios.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_STRING_H
|
|
+# include <string.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_CTYPE_H
|
|
+# include <ctype.h>
|
|
+#endif
|
|
+
|
|
+#if defined(HAVE_GL_GL_H)
|
|
+# include <GL/gl.h>
|
|
+#elif defined(HAVE_OPENGL_GL_H)
|
|
+# include <OpenGL/gl.h>
|
|
+#endif
|
|
+
|
|
+#if defined(HAVE_AL_AL_H)
|
|
+# include <AL/al.h>
|
|
+#elif defined(HAVE_OPENAL_AL_H)
|
|
+# include <OpenAL/al.h>
|
|
+#endif
|
|
+
|
|
+#if defined(HAVE_AL_ALC_H)
|
|
+# include <AL/alc.h>
|
|
+#elif defined(HAVE_OPENAL_ALC_H)
|
|
+# include <OpenAL/alc.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_SYS_RESOURCE_H
|
|
+# include <sys/resource.h>
|
|
+#endif
|
|
+
|
|
+typedef ALubyte testing;
|
|
+
|
|
+main() {
|
|
+ FILE *f=fopen("conftestval", "w");
|
|
+ if (!f) exit(1);
|
|
+ if (((testing)((int)((testing)1.4))) == ((testing)1.4)) {
|
|
+ fprintf(f, "%s%d\n",
|
|
+ ((testing)(-1) < (testing)0) ? "Int" : "Word",
|
|
+ sizeof(testing)*8);
|
|
+ } else {
|
|
+ fprintf(f,"%s\n",
|
|
+ (sizeof(testing) > sizeof(double)) ? "LDouble" :
|
|
+ (sizeof(testing) == sizeof(double)) ? "Double" : "Float");
|
|
+ }
|
|
+ fclose(f);
|
|
+ exit(0);
|
|
+}
|
|
+_ACEOF
|
|
+rm -f conftest$ac_exeext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
|
|
+ (eval $ac_link) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+ fptools_cv_htype_ALubyte=`cat conftestval`
|
|
+else
|
|
+ echo "$as_me: program exited with status $ac_status" >&5
|
|
+echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+( exit $ac_status )
|
|
+fptools_cv_htype_ALubyte=NotReallyAType; fptools_cv_htype_sup_ALubyte=no
|
|
+fi
|
|
+rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
|
|
+fi
|
|
+CPPFLAGS="$fp_check_htype_save_cppflags"
|
|
+fi
|
|
+ if test "$fptools_cv_htype_sup_ALubyte" = yes; then
|
|
+ echo "$as_me:$LINENO: result: $fptools_cv_htype_ALubyte" >&5
|
|
+echo "${ECHO_T}$fptools_cv_htype_ALubyte" >&6
|
|
+
|
|
+cat >>confdefs.h <<_ACEOF
|
|
+#define HTYPE_ALUBYTE $fptools_cv_htype_ALubyte
|
|
+_ACEOF
|
|
+
|
|
+else
|
|
+ echo "$as_me:$LINENO: result: not supported" >&5
|
|
+echo "${ECHO_T}not supported" >&6
|
|
+fi
|
|
+
|
|
+echo "$as_me:$LINENO: checking Haskell type for ALshort" >&5
|
|
+echo $ECHO_N "checking Haskell type for ALshort... $ECHO_C" >&6
|
|
+if test "${fptools_cv_htype_ALshort+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ fptools_cv_htype_sup_ALshort=yes
|
|
+fp_check_htype_save_cppflags="$CPPFLAGS"
|
|
+CPPFLAGS="$CPPFLAGS $X_CFLAGS"
|
|
+if test "$cross_compiling" = yes; then
|
|
+ fptools_cv_htype_ALshort=NotReallyATypeCross; fptools_cv_htype_sup_ALshort=no
|
|
+else
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+#line $LINENO "configure"
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+#include <stdio.h>
|
|
+#include <stddef.h>
|
|
+
|
|
+#if HAVE_SYS_TYPES_H
|
|
+# include <sys/types.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_UNISTD_H
|
|
+# include <unistd.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_SYS_STAT_H
|
|
+# include <sys/stat.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_FCNTL_H
|
|
+# include <fcntl.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_SIGNAL_H
|
|
+# include <signal.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_TIME_H
|
|
+# include <time.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_TERMIOS_H
|
|
+# include <termios.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_STRING_H
|
|
+# include <string.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_CTYPE_H
|
|
+# include <ctype.h>
|
|
+#endif
|
|
+
|
|
+#if defined(HAVE_GL_GL_H)
|
|
+# include <GL/gl.h>
|
|
+#elif defined(HAVE_OPENGL_GL_H)
|
|
+# include <OpenGL/gl.h>
|
|
+#endif
|
|
+
|
|
+#if defined(HAVE_AL_AL_H)
|
|
+# include <AL/al.h>
|
|
+#elif defined(HAVE_OPENAL_AL_H)
|
|
+# include <OpenAL/al.h>
|
|
+#endif
|
|
+
|
|
+#if defined(HAVE_AL_ALC_H)
|
|
+# include <AL/alc.h>
|
|
+#elif defined(HAVE_OPENAL_ALC_H)
|
|
+# include <OpenAL/alc.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_SYS_RESOURCE_H
|
|
+# include <sys/resource.h>
|
|
+#endif
|
|
+
|
|
+typedef ALshort testing;
|
|
+
|
|
+main() {
|
|
+ FILE *f=fopen("conftestval", "w");
|
|
+ if (!f) exit(1);
|
|
+ if (((testing)((int)((testing)1.4))) == ((testing)1.4)) {
|
|
+ fprintf(f, "%s%d\n",
|
|
+ ((testing)(-1) < (testing)0) ? "Int" : "Word",
|
|
+ sizeof(testing)*8);
|
|
+ } else {
|
|
+ fprintf(f,"%s\n",
|
|
+ (sizeof(testing) > sizeof(double)) ? "LDouble" :
|
|
+ (sizeof(testing) == sizeof(double)) ? "Double" : "Float");
|
|
+ }
|
|
+ fclose(f);
|
|
+ exit(0);
|
|
+}
|
|
+_ACEOF
|
|
+rm -f conftest$ac_exeext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
|
|
+ (eval $ac_link) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+ fptools_cv_htype_ALshort=`cat conftestval`
|
|
+else
|
|
+ echo "$as_me: program exited with status $ac_status" >&5
|
|
+echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+( exit $ac_status )
|
|
+fptools_cv_htype_ALshort=NotReallyAType; fptools_cv_htype_sup_ALshort=no
|
|
+fi
|
|
+rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
|
|
+fi
|
|
+CPPFLAGS="$fp_check_htype_save_cppflags"
|
|
+fi
|
|
+ if test "$fptools_cv_htype_sup_ALshort" = yes; then
|
|
+ echo "$as_me:$LINENO: result: $fptools_cv_htype_ALshort" >&5
|
|
+echo "${ECHO_T}$fptools_cv_htype_ALshort" >&6
|
|
+
|
|
+cat >>confdefs.h <<_ACEOF
|
|
+#define HTYPE_ALSHORT $fptools_cv_htype_ALshort
|
|
+_ACEOF
|
|
+
|
|
+else
|
|
+ echo "$as_me:$LINENO: result: not supported" >&5
|
|
+echo "${ECHO_T}not supported" >&6
|
|
+fi
|
|
+
|
|
+echo "$as_me:$LINENO: checking Haskell type for ALushort" >&5
|
|
+echo $ECHO_N "checking Haskell type for ALushort... $ECHO_C" >&6
|
|
+if test "${fptools_cv_htype_ALushort+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ fptools_cv_htype_sup_ALushort=yes
|
|
+fp_check_htype_save_cppflags="$CPPFLAGS"
|
|
+CPPFLAGS="$CPPFLAGS $X_CFLAGS"
|
|
+if test "$cross_compiling" = yes; then
|
|
+ fptools_cv_htype_ALushort=NotReallyATypeCross; fptools_cv_htype_sup_ALushort=no
|
|
+else
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+#line $LINENO "configure"
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+#include <stdio.h>
|
|
+#include <stddef.h>
|
|
+
|
|
+#if HAVE_SYS_TYPES_H
|
|
+# include <sys/types.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_UNISTD_H
|
|
+# include <unistd.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_SYS_STAT_H
|
|
+# include <sys/stat.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_FCNTL_H
|
|
+# include <fcntl.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_SIGNAL_H
|
|
+# include <signal.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_TIME_H
|
|
+# include <time.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_TERMIOS_H
|
|
+# include <termios.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_STRING_H
|
|
+# include <string.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_CTYPE_H
|
|
+# include <ctype.h>
|
|
+#endif
|
|
+
|
|
+#if defined(HAVE_GL_GL_H)
|
|
+# include <GL/gl.h>
|
|
+#elif defined(HAVE_OPENGL_GL_H)
|
|
+# include <OpenGL/gl.h>
|
|
+#endif
|
|
+
|
|
+#if defined(HAVE_AL_AL_H)
|
|
+# include <AL/al.h>
|
|
+#elif defined(HAVE_OPENAL_AL_H)
|
|
+# include <OpenAL/al.h>
|
|
+#endif
|
|
+
|
|
+#if defined(HAVE_AL_ALC_H)
|
|
+# include <AL/alc.h>
|
|
+#elif defined(HAVE_OPENAL_ALC_H)
|
|
+# include <OpenAL/alc.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_SYS_RESOURCE_H
|
|
+# include <sys/resource.h>
|
|
+#endif
|
|
+
|
|
+typedef ALushort testing;
|
|
+
|
|
+main() {
|
|
+ FILE *f=fopen("conftestval", "w");
|
|
+ if (!f) exit(1);
|
|
+ if (((testing)((int)((testing)1.4))) == ((testing)1.4)) {
|
|
+ fprintf(f, "%s%d\n",
|
|
+ ((testing)(-1) < (testing)0) ? "Int" : "Word",
|
|
+ sizeof(testing)*8);
|
|
+ } else {
|
|
+ fprintf(f,"%s\n",
|
|
+ (sizeof(testing) > sizeof(double)) ? "LDouble" :
|
|
+ (sizeof(testing) == sizeof(double)) ? "Double" : "Float");
|
|
+ }
|
|
+ fclose(f);
|
|
+ exit(0);
|
|
+}
|
|
+_ACEOF
|
|
+rm -f conftest$ac_exeext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
|
|
+ (eval $ac_link) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+ fptools_cv_htype_ALushort=`cat conftestval`
|
|
+else
|
|
+ echo "$as_me: program exited with status $ac_status" >&5
|
|
+echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+( exit $ac_status )
|
|
+fptools_cv_htype_ALushort=NotReallyAType; fptools_cv_htype_sup_ALushort=no
|
|
+fi
|
|
+rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
|
|
+fi
|
|
+CPPFLAGS="$fp_check_htype_save_cppflags"
|
|
+fi
|
|
+ if test "$fptools_cv_htype_sup_ALushort" = yes; then
|
|
+ echo "$as_me:$LINENO: result: $fptools_cv_htype_ALushort" >&5
|
|
+echo "${ECHO_T}$fptools_cv_htype_ALushort" >&6
|
|
+
|
|
+cat >>confdefs.h <<_ACEOF
|
|
+#define HTYPE_ALUSHORT $fptools_cv_htype_ALushort
|
|
+_ACEOF
|
|
+
|
|
+else
|
|
+ echo "$as_me:$LINENO: result: not supported" >&5
|
|
+echo "${ECHO_T}not supported" >&6
|
|
+fi
|
|
+
|
|
+echo "$as_me:$LINENO: checking Haskell type for ALint" >&5
|
|
+echo $ECHO_N "checking Haskell type for ALint... $ECHO_C" >&6
|
|
+if test "${fptools_cv_htype_ALint+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ fptools_cv_htype_sup_ALint=yes
|
|
+fp_check_htype_save_cppflags="$CPPFLAGS"
|
|
+CPPFLAGS="$CPPFLAGS $X_CFLAGS"
|
|
+if test "$cross_compiling" = yes; then
|
|
+ fptools_cv_htype_ALint=NotReallyATypeCross; fptools_cv_htype_sup_ALint=no
|
|
+else
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+#line $LINENO "configure"
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+#include <stdio.h>
|
|
+#include <stddef.h>
|
|
+
|
|
+#if HAVE_SYS_TYPES_H
|
|
+# include <sys/types.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_UNISTD_H
|
|
+# include <unistd.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_SYS_STAT_H
|
|
+# include <sys/stat.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_FCNTL_H
|
|
+# include <fcntl.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_SIGNAL_H
|
|
+# include <signal.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_TIME_H
|
|
+# include <time.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_TERMIOS_H
|
|
+# include <termios.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_STRING_H
|
|
+# include <string.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_CTYPE_H
|
|
+# include <ctype.h>
|
|
+#endif
|
|
+
|
|
+#if defined(HAVE_GL_GL_H)
|
|
+# include <GL/gl.h>
|
|
+#elif defined(HAVE_OPENGL_GL_H)
|
|
+# include <OpenGL/gl.h>
|
|
+#endif
|
|
+
|
|
+#if defined(HAVE_AL_AL_H)
|
|
+# include <AL/al.h>
|
|
+#elif defined(HAVE_OPENAL_AL_H)
|
|
+# include <OpenAL/al.h>
|
|
+#endif
|
|
+
|
|
+#if defined(HAVE_AL_ALC_H)
|
|
+# include <AL/alc.h>
|
|
+#elif defined(HAVE_OPENAL_ALC_H)
|
|
+# include <OpenAL/alc.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_SYS_RESOURCE_H
|
|
+# include <sys/resource.h>
|
|
+#endif
|
|
+
|
|
+typedef ALint testing;
|
|
+
|
|
+main() {
|
|
+ FILE *f=fopen("conftestval", "w");
|
|
+ if (!f) exit(1);
|
|
+ if (((testing)((int)((testing)1.4))) == ((testing)1.4)) {
|
|
+ fprintf(f, "%s%d\n",
|
|
+ ((testing)(-1) < (testing)0) ? "Int" : "Word",
|
|
+ sizeof(testing)*8);
|
|
+ } else {
|
|
+ fprintf(f,"%s\n",
|
|
+ (sizeof(testing) > sizeof(double)) ? "LDouble" :
|
|
+ (sizeof(testing) == sizeof(double)) ? "Double" : "Float");
|
|
+ }
|
|
+ fclose(f);
|
|
+ exit(0);
|
|
+}
|
|
+_ACEOF
|
|
+rm -f conftest$ac_exeext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
|
|
+ (eval $ac_link) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+ fptools_cv_htype_ALint=`cat conftestval`
|
|
+else
|
|
+ echo "$as_me: program exited with status $ac_status" >&5
|
|
+echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+( exit $ac_status )
|
|
+fptools_cv_htype_ALint=NotReallyAType; fptools_cv_htype_sup_ALint=no
|
|
+fi
|
|
+rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
|
|
+fi
|
|
+CPPFLAGS="$fp_check_htype_save_cppflags"
|
|
+fi
|
|
+ if test "$fptools_cv_htype_sup_ALint" = yes; then
|
|
+ echo "$as_me:$LINENO: result: $fptools_cv_htype_ALint" >&5
|
|
+echo "${ECHO_T}$fptools_cv_htype_ALint" >&6
|
|
+
|
|
+cat >>confdefs.h <<_ACEOF
|
|
+#define HTYPE_ALINT $fptools_cv_htype_ALint
|
|
+_ACEOF
|
|
+
|
|
+else
|
|
+ echo "$as_me:$LINENO: result: not supported" >&5
|
|
+echo "${ECHO_T}not supported" >&6
|
|
+fi
|
|
+
|
|
+echo "$as_me:$LINENO: checking Haskell type for ALuint" >&5
|
|
+echo $ECHO_N "checking Haskell type for ALuint... $ECHO_C" >&6
|
|
+if test "${fptools_cv_htype_ALuint+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ fptools_cv_htype_sup_ALuint=yes
|
|
+fp_check_htype_save_cppflags="$CPPFLAGS"
|
|
+CPPFLAGS="$CPPFLAGS $X_CFLAGS"
|
|
+if test "$cross_compiling" = yes; then
|
|
+ fptools_cv_htype_ALuint=NotReallyATypeCross; fptools_cv_htype_sup_ALuint=no
|
|
+else
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+#line $LINENO "configure"
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+#include <stdio.h>
|
|
+#include <stddef.h>
|
|
+
|
|
+#if HAVE_SYS_TYPES_H
|
|
+# include <sys/types.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_UNISTD_H
|
|
+# include <unistd.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_SYS_STAT_H
|
|
+# include <sys/stat.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_FCNTL_H
|
|
+# include <fcntl.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_SIGNAL_H
|
|
+# include <signal.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_TIME_H
|
|
+# include <time.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_TERMIOS_H
|
|
+# include <termios.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_STRING_H
|
|
+# include <string.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_CTYPE_H
|
|
+# include <ctype.h>
|
|
+#endif
|
|
+
|
|
+#if defined(HAVE_GL_GL_H)
|
|
+# include <GL/gl.h>
|
|
+#elif defined(HAVE_OPENGL_GL_H)
|
|
+# include <OpenGL/gl.h>
|
|
+#endif
|
|
+
|
|
+#if defined(HAVE_AL_AL_H)
|
|
+# include <AL/al.h>
|
|
+#elif defined(HAVE_OPENAL_AL_H)
|
|
+# include <OpenAL/al.h>
|
|
+#endif
|
|
+
|
|
+#if defined(HAVE_AL_ALC_H)
|
|
+# include <AL/alc.h>
|
|
+#elif defined(HAVE_OPENAL_ALC_H)
|
|
+# include <OpenAL/alc.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_SYS_RESOURCE_H
|
|
+# include <sys/resource.h>
|
|
+#endif
|
|
+
|
|
+typedef ALuint testing;
|
|
+
|
|
+main() {
|
|
+ FILE *f=fopen("conftestval", "w");
|
|
+ if (!f) exit(1);
|
|
+ if (((testing)((int)((testing)1.4))) == ((testing)1.4)) {
|
|
+ fprintf(f, "%s%d\n",
|
|
+ ((testing)(-1) < (testing)0) ? "Int" : "Word",
|
|
+ sizeof(testing)*8);
|
|
+ } else {
|
|
+ fprintf(f,"%s\n",
|
|
+ (sizeof(testing) > sizeof(double)) ? "LDouble" :
|
|
+ (sizeof(testing) == sizeof(double)) ? "Double" : "Float");
|
|
+ }
|
|
+ fclose(f);
|
|
+ exit(0);
|
|
+}
|
|
+_ACEOF
|
|
+rm -f conftest$ac_exeext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
|
|
+ (eval $ac_link) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+ fptools_cv_htype_ALuint=`cat conftestval`
|
|
+else
|
|
+ echo "$as_me: program exited with status $ac_status" >&5
|
|
+echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+( exit $ac_status )
|
|
+fptools_cv_htype_ALuint=NotReallyAType; fptools_cv_htype_sup_ALuint=no
|
|
+fi
|
|
+rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
|
|
+fi
|
|
+CPPFLAGS="$fp_check_htype_save_cppflags"
|
|
+fi
|
|
+ if test "$fptools_cv_htype_sup_ALuint" = yes; then
|
|
+ echo "$as_me:$LINENO: result: $fptools_cv_htype_ALuint" >&5
|
|
+echo "${ECHO_T}$fptools_cv_htype_ALuint" >&6
|
|
+
|
|
+cat >>confdefs.h <<_ACEOF
|
|
+#define HTYPE_ALUINT $fptools_cv_htype_ALuint
|
|
+_ACEOF
|
|
+
|
|
+else
|
|
+ echo "$as_me:$LINENO: result: not supported" >&5
|
|
+echo "${ECHO_T}not supported" >&6
|
|
+fi
|
|
+
|
|
+echo "$as_me:$LINENO: checking Haskell type for ALsizei" >&5
|
|
+echo $ECHO_N "checking Haskell type for ALsizei... $ECHO_C" >&6
|
|
+if test "${fptools_cv_htype_ALsizei+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ fptools_cv_htype_sup_ALsizei=yes
|
|
+fp_check_htype_save_cppflags="$CPPFLAGS"
|
|
+CPPFLAGS="$CPPFLAGS $X_CFLAGS"
|
|
+if test "$cross_compiling" = yes; then
|
|
+ fptools_cv_htype_ALsizei=NotReallyATypeCross; fptools_cv_htype_sup_ALsizei=no
|
|
+else
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+#line $LINENO "configure"
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+#include <stdio.h>
|
|
+#include <stddef.h>
|
|
+
|
|
+#if HAVE_SYS_TYPES_H
|
|
+# include <sys/types.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_UNISTD_H
|
|
+# include <unistd.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_SYS_STAT_H
|
|
+# include <sys/stat.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_FCNTL_H
|
|
+# include <fcntl.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_SIGNAL_H
|
|
+# include <signal.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_TIME_H
|
|
+# include <time.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_TERMIOS_H
|
|
+# include <termios.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_STRING_H
|
|
+# include <string.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_CTYPE_H
|
|
+# include <ctype.h>
|
|
+#endif
|
|
+
|
|
+#if defined(HAVE_GL_GL_H)
|
|
+# include <GL/gl.h>
|
|
+#elif defined(HAVE_OPENGL_GL_H)
|
|
+# include <OpenGL/gl.h>
|
|
+#endif
|
|
+
|
|
+#if defined(HAVE_AL_AL_H)
|
|
+# include <AL/al.h>
|
|
+#elif defined(HAVE_OPENAL_AL_H)
|
|
+# include <OpenAL/al.h>
|
|
+#endif
|
|
+
|
|
+#if defined(HAVE_AL_ALC_H)
|
|
+# include <AL/alc.h>
|
|
+#elif defined(HAVE_OPENAL_ALC_H)
|
|
+# include <OpenAL/alc.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_SYS_RESOURCE_H
|
|
+# include <sys/resource.h>
|
|
+#endif
|
|
+
|
|
+typedef ALsizei testing;
|
|
+
|
|
+main() {
|
|
+ FILE *f=fopen("conftestval", "w");
|
|
+ if (!f) exit(1);
|
|
+ if (((testing)((int)((testing)1.4))) == ((testing)1.4)) {
|
|
+ fprintf(f, "%s%d\n",
|
|
+ ((testing)(-1) < (testing)0) ? "Int" : "Word",
|
|
+ sizeof(testing)*8);
|
|
+ } else {
|
|
+ fprintf(f,"%s\n",
|
|
+ (sizeof(testing) > sizeof(double)) ? "LDouble" :
|
|
+ (sizeof(testing) == sizeof(double)) ? "Double" : "Float");
|
|
+ }
|
|
+ fclose(f);
|
|
+ exit(0);
|
|
+}
|
|
+_ACEOF
|
|
+rm -f conftest$ac_exeext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
|
|
+ (eval $ac_link) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+ fptools_cv_htype_ALsizei=`cat conftestval`
|
|
+else
|
|
+ echo "$as_me: program exited with status $ac_status" >&5
|
|
+echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+( exit $ac_status )
|
|
+fptools_cv_htype_ALsizei=NotReallyAType; fptools_cv_htype_sup_ALsizei=no
|
|
+fi
|
|
+rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
|
|
+fi
|
|
+CPPFLAGS="$fp_check_htype_save_cppflags"
|
|
fi
|
|
- CPPFLAGS="$fp_check_htype_save_cppflags"
|
|
-if test "$fptools_cv_htype_sup_ALboolean" = yes; then
|
|
- echo "$as_me:$LINENO: result: $fptools_cv_htype_ALboolean" >&5
|
|
-echo "${ECHO_T}$fptools_cv_htype_ALboolean" >&6
|
|
+ if test "$fptools_cv_htype_sup_ALsizei" = yes; then
|
|
+ echo "$as_me:$LINENO: result: $fptools_cv_htype_ALsizei" >&5
|
|
+echo "${ECHO_T}$fptools_cv_htype_ALsizei" >&6
|
|
|
|
cat >>confdefs.h <<_ACEOF
|
|
-#define HTYPE_ALBOOLEAN $fptools_cv_htype_ALboolean
|
|
+#define HTYPE_ALSIZEI $fptools_cv_htype_ALsizei
|
|
_ACEOF
|
|
|
|
else
|
|
@@ -3188,16 +4653,150 @@
|
|
echo "${ECHO_T}not supported" >&6
|
|
fi
|
|
|
|
-echo "$as_me:$LINENO: checking Haskell type for ALbyte" >&5
|
|
-echo $ECHO_N "checking Haskell type for ALbyte... $ECHO_C" >&6
|
|
-if test "${fptools_cv_htype_ALbyte+set}" = set; then
|
|
+echo "$as_me:$LINENO: checking Haskell type for ALenum" >&5
|
|
+echo $ECHO_N "checking Haskell type for ALenum... $ECHO_C" >&6
|
|
+if test "${fptools_cv_htype_ALenum+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ fptools_cv_htype_sup_ALenum=yes
|
|
+fp_check_htype_save_cppflags="$CPPFLAGS"
|
|
+CPPFLAGS="$CPPFLAGS $X_CFLAGS"
|
|
+if test "$cross_compiling" = yes; then
|
|
+ fptools_cv_htype_ALenum=NotReallyATypeCross; fptools_cv_htype_sup_ALenum=no
|
|
+else
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+#line $LINENO "configure"
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+#include <stdio.h>
|
|
+#include <stddef.h>
|
|
+
|
|
+#if HAVE_SYS_TYPES_H
|
|
+# include <sys/types.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_UNISTD_H
|
|
+# include <unistd.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_SYS_STAT_H
|
|
+# include <sys/stat.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_FCNTL_H
|
|
+# include <fcntl.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_SIGNAL_H
|
|
+# include <signal.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_TIME_H
|
|
+# include <time.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_TERMIOS_H
|
|
+# include <termios.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_STRING_H
|
|
+# include <string.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_CTYPE_H
|
|
+# include <ctype.h>
|
|
+#endif
|
|
+
|
|
+#if defined(HAVE_GL_GL_H)
|
|
+# include <GL/gl.h>
|
|
+#elif defined(HAVE_OPENGL_GL_H)
|
|
+# include <OpenGL/gl.h>
|
|
+#endif
|
|
+
|
|
+#if defined(HAVE_AL_AL_H)
|
|
+# include <AL/al.h>
|
|
+#elif defined(HAVE_OPENAL_AL_H)
|
|
+# include <OpenAL/al.h>
|
|
+#endif
|
|
+
|
|
+#if defined(HAVE_AL_ALC_H)
|
|
+# include <AL/alc.h>
|
|
+#elif defined(HAVE_OPENAL_ALC_H)
|
|
+# include <OpenAL/alc.h>
|
|
+#endif
|
|
+
|
|
+#if HAVE_SYS_RESOURCE_H
|
|
+# include <sys/resource.h>
|
|
+#endif
|
|
+
|
|
+typedef ALenum testing;
|
|
+
|
|
+main() {
|
|
+ FILE *f=fopen("conftestval", "w");
|
|
+ if (!f) exit(1);
|
|
+ if (((testing)((int)((testing)1.4))) == ((testing)1.4)) {
|
|
+ fprintf(f, "%s%d\n",
|
|
+ ((testing)(-1) < (testing)0) ? "Int" : "Word",
|
|
+ sizeof(testing)*8);
|
|
+ } else {
|
|
+ fprintf(f,"%s\n",
|
|
+ (sizeof(testing) > sizeof(double)) ? "LDouble" :
|
|
+ (sizeof(testing) == sizeof(double)) ? "Double" : "Float");
|
|
+ }
|
|
+ fclose(f);
|
|
+ exit(0);
|
|
+}
|
|
+_ACEOF
|
|
+rm -f conftest$ac_exeext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
|
|
+ (eval $ac_link) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+ fptools_cv_htype_ALenum=`cat conftestval`
|
|
+else
|
|
+ echo "$as_me: program exited with status $ac_status" >&5
|
|
+echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+( exit $ac_status )
|
|
+fptools_cv_htype_ALenum=NotReallyAType; fptools_cv_htype_sup_ALenum=no
|
|
+fi
|
|
+rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
|
|
+fi
|
|
+CPPFLAGS="$fp_check_htype_save_cppflags"
|
|
+fi
|
|
+ if test "$fptools_cv_htype_sup_ALenum" = yes; then
|
|
+ echo "$as_me:$LINENO: result: $fptools_cv_htype_ALenum" >&5
|
|
+echo "${ECHO_T}$fptools_cv_htype_ALenum" >&6
|
|
+
|
|
+cat >>confdefs.h <<_ACEOF
|
|
+#define HTYPE_ALENUM $fptools_cv_htype_ALenum
|
|
+_ACEOF
|
|
+
|
|
+else
|
|
+ echo "$as_me:$LINENO: result: not supported" >&5
|
|
+echo "${ECHO_T}not supported" >&6
|
|
+fi
|
|
+
|
|
+echo "$as_me:$LINENO: checking Haskell type for ALfloat" >&5
|
|
+echo $ECHO_N "checking Haskell type for ALfloat... $ECHO_C" >&6
|
|
+if test "${fptools_cv_htype_ALfloat+set}" = set; then
|
|
echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
else
|
|
- fptools_cv_htype_sup_ALbyte=yes
|
|
+ fptools_cv_htype_sup_ALfloat=yes
|
|
fp_check_htype_save_cppflags="$CPPFLAGS"
|
|
CPPFLAGS="$CPPFLAGS $X_CFLAGS"
|
|
if test "$cross_compiling" = yes; then
|
|
- fptools_cv_htype_ALbyte=NotReallyATypeCross; fptools_cv_htype_sup_ALbyte=no
|
|
+ fptools_cv_htype_ALfloat=NotReallyATypeCross; fptools_cv_htype_sup_ALfloat=no
|
|
else
|
|
cat >conftest.$ac_ext <<_ACEOF
|
|
#line $LINENO "configure"
|
|
@@ -3251,6 +4850,12 @@
|
|
# include <OpenGL/gl.h>
|
|
#endif
|
|
|
|
+#if defined(HAVE_AL_AL_H)
|
|
+# include <AL/al.h>
|
|
+#elif defined(HAVE_OPENAL_AL_H)
|
|
+# include <OpenAL/al.h>
|
|
+#endif
|
|
+
|
|
#if defined(HAVE_AL_ALC_H)
|
|
# include <AL/alc.h>
|
|
#elif defined(HAVE_OPENAL_ALC_H)
|
|
@@ -3261,7 +4866,7 @@
|
|
# include <sys/resource.h>
|
|
#endif
|
|
|
|
-typedef ALbyte testing;
|
|
+typedef ALfloat testing;
|
|
|
|
main() {
|
|
FILE *f=fopen("conftestval", "w");
|
|
@@ -3290,25 +4895,25 @@
|
|
ac_status=$?
|
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
(exit $ac_status); }; }; then
|
|
- fptools_cv_htype_ALbyte=`cat conftestval`
|
|
+ fptools_cv_htype_ALfloat=`cat conftestval`
|
|
else
|
|
echo "$as_me: program exited with status $ac_status" >&5
|
|
echo "$as_me: failed program was:" >&5
|
|
sed 's/^/| /' conftest.$ac_ext >&5
|
|
|
|
( exit $ac_status )
|
|
-fptools_cv_htype_ALbyte=NotReallyAType; fptools_cv_htype_sup_ALbyte=no
|
|
+fptools_cv_htype_ALfloat=NotReallyAType; fptools_cv_htype_sup_ALfloat=no
|
|
fi
|
|
rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
|
|
fi
|
|
+CPPFLAGS="$fp_check_htype_save_cppflags"
|
|
fi
|
|
- CPPFLAGS="$fp_check_htype_save_cppflags"
|
|
-if test "$fptools_cv_htype_sup_ALbyte" = yes; then
|
|
- echo "$as_me:$LINENO: result: $fptools_cv_htype_ALbyte" >&5
|
|
-echo "${ECHO_T}$fptools_cv_htype_ALbyte" >&6
|
|
+ if test "$fptools_cv_htype_sup_ALfloat" = yes; then
|
|
+ echo "$as_me:$LINENO: result: $fptools_cv_htype_ALfloat" >&5
|
|
+echo "${ECHO_T}$fptools_cv_htype_ALfloat" >&6
|
|
|
|
cat >>confdefs.h <<_ACEOF
|
|
-#define HTYPE_ALBYTE $fptools_cv_htype_ALbyte
|
|
+#define HTYPE_ALFLOAT $fptools_cv_htype_ALfloat
|
|
_ACEOF
|
|
|
|
else
|
|
@@ -3316,16 +4921,16 @@
|
|
echo "${ECHO_T}not supported" >&6
|
|
fi
|
|
|
|
-echo "$as_me:$LINENO: checking Haskell type for ALubyte" >&5
|
|
-echo $ECHO_N "checking Haskell type for ALubyte... $ECHO_C" >&6
|
|
-if test "${fptools_cv_htype_ALubyte+set}" = set; then
|
|
+echo "$as_me:$LINENO: checking Haskell type for ALdouble" >&5
|
|
+echo $ECHO_N "checking Haskell type for ALdouble... $ECHO_C" >&6
|
|
+if test "${fptools_cv_htype_ALdouble+set}" = set; then
|
|
echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
else
|
|
- fptools_cv_htype_sup_ALubyte=yes
|
|
+ fptools_cv_htype_sup_ALdouble=yes
|
|
fp_check_htype_save_cppflags="$CPPFLAGS"
|
|
CPPFLAGS="$CPPFLAGS $X_CFLAGS"
|
|
if test "$cross_compiling" = yes; then
|
|
- fptools_cv_htype_ALubyte=NotReallyATypeCross; fptools_cv_htype_sup_ALubyte=no
|
|
+ fptools_cv_htype_ALdouble=NotReallyATypeCross; fptools_cv_htype_sup_ALdouble=no
|
|
else
|
|
cat >conftest.$ac_ext <<_ACEOF
|
|
#line $LINENO "configure"
|
|
@@ -3379,6 +4984,12 @@
|
|
# include <OpenGL/gl.h>
|
|
#endif
|
|
|
|
+#if defined(HAVE_AL_AL_H)
|
|
+# include <AL/al.h>
|
|
+#elif defined(HAVE_OPENAL_AL_H)
|
|
+# include <OpenAL/al.h>
|
|
+#endif
|
|
+
|
|
#if defined(HAVE_AL_ALC_H)
|
|
# include <AL/alc.h>
|
|
#elif defined(HAVE_OPENAL_ALC_H)
|
|
@@ -3389,7 +5000,7 @@
|
|
# include <sys/resource.h>
|
|
#endif
|
|
|
|
-typedef ALubyte testing;
|
|
+typedef ALdouble testing;
|
|
|
|
main() {
|
|
FILE *f=fopen("conftestval", "w");
|
|
@@ -3418,25 +5029,25 @@
|
|
ac_status=$?
|
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
(exit $ac_status); }; }; then
|
|
- fptools_cv_htype_ALubyte=`cat conftestval`
|
|
+ fptools_cv_htype_ALdouble=`cat conftestval`
|
|
else
|
|
echo "$as_me: program exited with status $ac_status" >&5
|
|
echo "$as_me: failed program was:" >&5
|
|
sed 's/^/| /' conftest.$ac_ext >&5
|
|
|
|
( exit $ac_status )
|
|
-fptools_cv_htype_ALubyte=NotReallyAType; fptools_cv_htype_sup_ALubyte=no
|
|
+fptools_cv_htype_ALdouble=NotReallyAType; fptools_cv_htype_sup_ALdouble=no
|
|
fi
|
|
rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
|
|
fi
|
|
+CPPFLAGS="$fp_check_htype_save_cppflags"
|
|
fi
|
|
- CPPFLAGS="$fp_check_htype_save_cppflags"
|
|
-if test "$fptools_cv_htype_sup_ALubyte" = yes; then
|
|
- echo "$as_me:$LINENO: result: $fptools_cv_htype_ALubyte" >&5
|
|
-echo "${ECHO_T}$fptools_cv_htype_ALubyte" >&6
|
|
+ if test "$fptools_cv_htype_sup_ALdouble" = yes; then
|
|
+ echo "$as_me:$LINENO: result: $fptools_cv_htype_ALdouble" >&5
|
|
+echo "${ECHO_T}$fptools_cv_htype_ALdouble" >&6
|
|
|
|
cat >>confdefs.h <<_ACEOF
|
|
-#define HTYPE_ALUBYTE $fptools_cv_htype_ALubyte
|
|
+#define HTYPE_ALDOUBLE $fptools_cv_htype_ALdouble
|
|
_ACEOF
|
|
|
|
else
|
|
@@ -3444,16 +5055,17 @@
|
|
echo "${ECHO_T}not supported" >&6
|
|
fi
|
|
|
|
-echo "$as_me:$LINENO: checking Haskell type for ALshort" >&5
|
|
-echo $ECHO_N "checking Haskell type for ALshort... $ECHO_C" >&6
|
|
-if test "${fptools_cv_htype_ALshort+set}" = set; then
|
|
+
|
|
+echo "$as_me:$LINENO: checking Haskell type for ALCboolean" >&5
|
|
+echo $ECHO_N "checking Haskell type for ALCboolean... $ECHO_C" >&6
|
|
+if test "${fptools_cv_htype_ALCboolean+set}" = set; then
|
|
echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
else
|
|
- fptools_cv_htype_sup_ALshort=yes
|
|
+ fptools_cv_htype_sup_ALCboolean=yes
|
|
fp_check_htype_save_cppflags="$CPPFLAGS"
|
|
CPPFLAGS="$CPPFLAGS $X_CFLAGS"
|
|
if test "$cross_compiling" = yes; then
|
|
- fptools_cv_htype_ALshort=NotReallyATypeCross; fptools_cv_htype_sup_ALshort=no
|
|
+ fptools_cv_htype_ALCboolean=NotReallyATypeCross; fptools_cv_htype_sup_ALCboolean=no
|
|
else
|
|
cat >conftest.$ac_ext <<_ACEOF
|
|
#line $LINENO "configure"
|
|
@@ -3507,6 +5119,12 @@
|
|
# include <OpenGL/gl.h>
|
|
#endif
|
|
|
|
+#if defined(HAVE_AL_AL_H)
|
|
+# include <AL/al.h>
|
|
+#elif defined(HAVE_OPENAL_AL_H)
|
|
+# include <OpenAL/al.h>
|
|
+#endif
|
|
+
|
|
#if defined(HAVE_AL_ALC_H)
|
|
# include <AL/alc.h>
|
|
#elif defined(HAVE_OPENAL_ALC_H)
|
|
@@ -3517,7 +5135,7 @@
|
|
# include <sys/resource.h>
|
|
#endif
|
|
|
|
-typedef ALshort testing;
|
|
+typedef ALCboolean testing;
|
|
|
|
main() {
|
|
FILE *f=fopen("conftestval", "w");
|
|
@@ -3546,25 +5164,25 @@
|
|
ac_status=$?
|
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
(exit $ac_status); }; }; then
|
|
- fptools_cv_htype_ALshort=`cat conftestval`
|
|
+ fptools_cv_htype_ALCboolean=`cat conftestval`
|
|
else
|
|
echo "$as_me: program exited with status $ac_status" >&5
|
|
echo "$as_me: failed program was:" >&5
|
|
sed 's/^/| /' conftest.$ac_ext >&5
|
|
|
|
( exit $ac_status )
|
|
-fptools_cv_htype_ALshort=NotReallyAType; fptools_cv_htype_sup_ALshort=no
|
|
+fptools_cv_htype_ALCboolean=Int8
|
|
fi
|
|
rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
|
|
fi
|
|
+CPPFLAGS="$fp_check_htype_save_cppflags"
|
|
fi
|
|
- CPPFLAGS="$fp_check_htype_save_cppflags"
|
|
-if test "$fptools_cv_htype_sup_ALshort" = yes; then
|
|
- echo "$as_me:$LINENO: result: $fptools_cv_htype_ALshort" >&5
|
|
-echo "${ECHO_T}$fptools_cv_htype_ALshort" >&6
|
|
+ if test "$fptools_cv_htype_sup_ALCboolean" = yes; then
|
|
+ echo "$as_me:$LINENO: result: $fptools_cv_htype_ALCboolean" >&5
|
|
+echo "${ECHO_T}$fptools_cv_htype_ALCboolean" >&6
|
|
|
|
cat >>confdefs.h <<_ACEOF
|
|
-#define HTYPE_ALSHORT $fptools_cv_htype_ALshort
|
|
+#define HTYPE_ALCBOOLEAN $fptools_cv_htype_ALCboolean
|
|
_ACEOF
|
|
|
|
else
|
|
@@ -3572,16 +5190,16 @@
|
|
echo "${ECHO_T}not supported" >&6
|
|
fi
|
|
|
|
-echo "$as_me:$LINENO: checking Haskell type for ALushort" >&5
|
|
-echo $ECHO_N "checking Haskell type for ALushort... $ECHO_C" >&6
|
|
-if test "${fptools_cv_htype_ALushort+set}" = set; then
|
|
+echo "$as_me:$LINENO: checking Haskell type for ALCchar" >&5
|
|
+echo $ECHO_N "checking Haskell type for ALCchar... $ECHO_C" >&6
|
|
+if test "${fptools_cv_htype_ALCchar+set}" = set; then
|
|
echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
else
|
|
- fptools_cv_htype_sup_ALushort=yes
|
|
+ fptools_cv_htype_sup_ALCchar=yes
|
|
fp_check_htype_save_cppflags="$CPPFLAGS"
|
|
CPPFLAGS="$CPPFLAGS $X_CFLAGS"
|
|
if test "$cross_compiling" = yes; then
|
|
- fptools_cv_htype_ALushort=NotReallyATypeCross; fptools_cv_htype_sup_ALushort=no
|
|
+ fptools_cv_htype_ALCchar=NotReallyATypeCross; fptools_cv_htype_sup_ALCchar=no
|
|
else
|
|
cat >conftest.$ac_ext <<_ACEOF
|
|
#line $LINENO "configure"
|
|
@@ -3635,6 +5253,12 @@
|
|
# include <OpenGL/gl.h>
|
|
#endif
|
|
|
|
+#if defined(HAVE_AL_AL_H)
|
|
+# include <AL/al.h>
|
|
+#elif defined(HAVE_OPENAL_AL_H)
|
|
+# include <OpenAL/al.h>
|
|
+#endif
|
|
+
|
|
#if defined(HAVE_AL_ALC_H)
|
|
# include <AL/alc.h>
|
|
#elif defined(HAVE_OPENAL_ALC_H)
|
|
@@ -3645,7 +5269,7 @@
|
|
# include <sys/resource.h>
|
|
#endif
|
|
|
|
-typedef ALushort testing;
|
|
+typedef ALCchar testing;
|
|
|
|
main() {
|
|
FILE *f=fopen("conftestval", "w");
|
|
@@ -3674,25 +5298,25 @@
|
|
ac_status=$?
|
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
(exit $ac_status); }; }; then
|
|
- fptools_cv_htype_ALushort=`cat conftestval`
|
|
+ fptools_cv_htype_ALCchar=`cat conftestval`
|
|
else
|
|
echo "$as_me: program exited with status $ac_status" >&5
|
|
echo "$as_me: failed program was:" >&5
|
|
sed 's/^/| /' conftest.$ac_ext >&5
|
|
|
|
( exit $ac_status )
|
|
-fptools_cv_htype_ALushort=NotReallyAType; fptools_cv_htype_sup_ALushort=no
|
|
+fptools_cv_htype_ALCchar=Int8
|
|
fi
|
|
rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
|
|
fi
|
|
+CPPFLAGS="$fp_check_htype_save_cppflags"
|
|
fi
|
|
- CPPFLAGS="$fp_check_htype_save_cppflags"
|
|
-if test "$fptools_cv_htype_sup_ALushort" = yes; then
|
|
- echo "$as_me:$LINENO: result: $fptools_cv_htype_ALushort" >&5
|
|
-echo "${ECHO_T}$fptools_cv_htype_ALushort" >&6
|
|
+ if test "$fptools_cv_htype_sup_ALCchar" = yes; then
|
|
+ echo "$as_me:$LINENO: result: $fptools_cv_htype_ALCchar" >&5
|
|
+echo "${ECHO_T}$fptools_cv_htype_ALCchar" >&6
|
|
|
|
cat >>confdefs.h <<_ACEOF
|
|
-#define HTYPE_ALUSHORT $fptools_cv_htype_ALushort
|
|
+#define HTYPE_ALCCHAR $fptools_cv_htype_ALCchar
|
|
_ACEOF
|
|
|
|
else
|
|
@@ -3700,16 +5324,16 @@
|
|
echo "${ECHO_T}not supported" >&6
|
|
fi
|
|
|
|
-echo "$as_me:$LINENO: checking Haskell type for ALint" >&5
|
|
-echo $ECHO_N "checking Haskell type for ALint... $ECHO_C" >&6
|
|
-if test "${fptools_cv_htype_ALint+set}" = set; then
|
|
+echo "$as_me:$LINENO: checking Haskell type for ALCbyte" >&5
|
|
+echo $ECHO_N "checking Haskell type for ALCbyte... $ECHO_C" >&6
|
|
+if test "${fptools_cv_htype_ALCbyte+set}" = set; then
|
|
echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
else
|
|
- fptools_cv_htype_sup_ALint=yes
|
|
+ fptools_cv_htype_sup_ALCbyte=yes
|
|
fp_check_htype_save_cppflags="$CPPFLAGS"
|
|
CPPFLAGS="$CPPFLAGS $X_CFLAGS"
|
|
if test "$cross_compiling" = yes; then
|
|
- fptools_cv_htype_ALint=NotReallyATypeCross; fptools_cv_htype_sup_ALint=no
|
|
+ fptools_cv_htype_ALCbyte=NotReallyATypeCross; fptools_cv_htype_sup_ALCbyte=no
|
|
else
|
|
cat >conftest.$ac_ext <<_ACEOF
|
|
#line $LINENO "configure"
|
|
@@ -3763,6 +5387,12 @@
|
|
# include <OpenGL/gl.h>
|
|
#endif
|
|
|
|
+#if defined(HAVE_AL_AL_H)
|
|
+# include <AL/al.h>
|
|
+#elif defined(HAVE_OPENAL_AL_H)
|
|
+# include <OpenAL/al.h>
|
|
+#endif
|
|
+
|
|
#if defined(HAVE_AL_ALC_H)
|
|
# include <AL/alc.h>
|
|
#elif defined(HAVE_OPENAL_ALC_H)
|
|
@@ -3773,7 +5403,7 @@
|
|
# include <sys/resource.h>
|
|
#endif
|
|
|
|
-typedef ALint testing;
|
|
+typedef ALCbyte testing;
|
|
|
|
main() {
|
|
FILE *f=fopen("conftestval", "w");
|
|
@@ -3802,25 +5432,25 @@
|
|
ac_status=$?
|
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
(exit $ac_status); }; }; then
|
|
- fptools_cv_htype_ALint=`cat conftestval`
|
|
+ fptools_cv_htype_ALCbyte=`cat conftestval`
|
|
else
|
|
echo "$as_me: program exited with status $ac_status" >&5
|
|
echo "$as_me: failed program was:" >&5
|
|
sed 's/^/| /' conftest.$ac_ext >&5
|
|
|
|
( exit $ac_status )
|
|
-fptools_cv_htype_ALint=NotReallyAType; fptools_cv_htype_sup_ALint=no
|
|
+fptools_cv_htype_ALCbyte=Int8
|
|
fi
|
|
rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
|
|
fi
|
|
+CPPFLAGS="$fp_check_htype_save_cppflags"
|
|
fi
|
|
- CPPFLAGS="$fp_check_htype_save_cppflags"
|
|
-if test "$fptools_cv_htype_sup_ALint" = yes; then
|
|
- echo "$as_me:$LINENO: result: $fptools_cv_htype_ALint" >&5
|
|
-echo "${ECHO_T}$fptools_cv_htype_ALint" >&6
|
|
+ if test "$fptools_cv_htype_sup_ALCbyte" = yes; then
|
|
+ echo "$as_me:$LINENO: result: $fptools_cv_htype_ALCbyte" >&5
|
|
+echo "${ECHO_T}$fptools_cv_htype_ALCbyte" >&6
|
|
|
|
cat >>confdefs.h <<_ACEOF
|
|
-#define HTYPE_ALINT $fptools_cv_htype_ALint
|
|
+#define HTYPE_ALCBYTE $fptools_cv_htype_ALCbyte
|
|
_ACEOF
|
|
|
|
else
|
|
@@ -3828,16 +5458,16 @@
|
|
echo "${ECHO_T}not supported" >&6
|
|
fi
|
|
|
|
-echo "$as_me:$LINENO: checking Haskell type for ALuint" >&5
|
|
-echo $ECHO_N "checking Haskell type for ALuint... $ECHO_C" >&6
|
|
-if test "${fptools_cv_htype_ALuint+set}" = set; then
|
|
+echo "$as_me:$LINENO: checking Haskell type for ALCubyte" >&5
|
|
+echo $ECHO_N "checking Haskell type for ALCubyte... $ECHO_C" >&6
|
|
+if test "${fptools_cv_htype_ALCubyte+set}" = set; then
|
|
echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
else
|
|
- fptools_cv_htype_sup_ALuint=yes
|
|
+ fptools_cv_htype_sup_ALCubyte=yes
|
|
fp_check_htype_save_cppflags="$CPPFLAGS"
|
|
CPPFLAGS="$CPPFLAGS $X_CFLAGS"
|
|
if test "$cross_compiling" = yes; then
|
|
- fptools_cv_htype_ALuint=NotReallyATypeCross; fptools_cv_htype_sup_ALuint=no
|
|
+ fptools_cv_htype_ALCubyte=NotReallyATypeCross; fptools_cv_htype_sup_ALCubyte=no
|
|
else
|
|
cat >conftest.$ac_ext <<_ACEOF
|
|
#line $LINENO "configure"
|
|
@@ -3891,6 +5521,12 @@
|
|
# include <OpenGL/gl.h>
|
|
#endif
|
|
|
|
+#if defined(HAVE_AL_AL_H)
|
|
+# include <AL/al.h>
|
|
+#elif defined(HAVE_OPENAL_AL_H)
|
|
+# include <OpenAL/al.h>
|
|
+#endif
|
|
+
|
|
#if defined(HAVE_AL_ALC_H)
|
|
# include <AL/alc.h>
|
|
#elif defined(HAVE_OPENAL_ALC_H)
|
|
@@ -3901,7 +5537,7 @@
|
|
# include <sys/resource.h>
|
|
#endif
|
|
|
|
-typedef ALuint testing;
|
|
+typedef ALCubyte testing;
|
|
|
|
main() {
|
|
FILE *f=fopen("conftestval", "w");
|
|
@@ -3930,25 +5566,25 @@
|
|
ac_status=$?
|
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
(exit $ac_status); }; }; then
|
|
- fptools_cv_htype_ALuint=`cat conftestval`
|
|
+ fptools_cv_htype_ALCubyte=`cat conftestval`
|
|
else
|
|
echo "$as_me: program exited with status $ac_status" >&5
|
|
echo "$as_me: failed program was:" >&5
|
|
sed 's/^/| /' conftest.$ac_ext >&5
|
|
|
|
( exit $ac_status )
|
|
-fptools_cv_htype_ALuint=NotReallyAType; fptools_cv_htype_sup_ALuint=no
|
|
+fptools_cv_htype_ALCubyte=Word8
|
|
fi
|
|
rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
|
|
fi
|
|
+CPPFLAGS="$fp_check_htype_save_cppflags"
|
|
fi
|
|
- CPPFLAGS="$fp_check_htype_save_cppflags"
|
|
-if test "$fptools_cv_htype_sup_ALuint" = yes; then
|
|
- echo "$as_me:$LINENO: result: $fptools_cv_htype_ALuint" >&5
|
|
-echo "${ECHO_T}$fptools_cv_htype_ALuint" >&6
|
|
+ if test "$fptools_cv_htype_sup_ALCubyte" = yes; then
|
|
+ echo "$as_me:$LINENO: result: $fptools_cv_htype_ALCubyte" >&5
|
|
+echo "${ECHO_T}$fptools_cv_htype_ALCubyte" >&6
|
|
|
|
cat >>confdefs.h <<_ACEOF
|
|
-#define HTYPE_ALUINT $fptools_cv_htype_ALuint
|
|
+#define HTYPE_ALCUBYTE $fptools_cv_htype_ALCubyte
|
|
_ACEOF
|
|
|
|
else
|
|
@@ -3956,16 +5592,16 @@
|
|
echo "${ECHO_T}not supported" >&6
|
|
fi
|
|
|
|
-echo "$as_me:$LINENO: checking Haskell type for ALsizei" >&5
|
|
-echo $ECHO_N "checking Haskell type for ALsizei... $ECHO_C" >&6
|
|
-if test "${fptools_cv_htype_ALsizei+set}" = set; then
|
|
+echo "$as_me:$LINENO: checking Haskell type for ALCshort" >&5
|
|
+echo $ECHO_N "checking Haskell type for ALCshort... $ECHO_C" >&6
|
|
+if test "${fptools_cv_htype_ALCshort+set}" = set; then
|
|
echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
else
|
|
- fptools_cv_htype_sup_ALsizei=yes
|
|
+ fptools_cv_htype_sup_ALCshort=yes
|
|
fp_check_htype_save_cppflags="$CPPFLAGS"
|
|
CPPFLAGS="$CPPFLAGS $X_CFLAGS"
|
|
if test "$cross_compiling" = yes; then
|
|
- fptools_cv_htype_ALsizei=NotReallyATypeCross; fptools_cv_htype_sup_ALsizei=no
|
|
+ fptools_cv_htype_ALCshort=NotReallyATypeCross; fptools_cv_htype_sup_ALCshort=no
|
|
else
|
|
cat >conftest.$ac_ext <<_ACEOF
|
|
#line $LINENO "configure"
|
|
@@ -4019,6 +5655,12 @@
|
|
# include <OpenGL/gl.h>
|
|
#endif
|
|
|
|
+#if defined(HAVE_AL_AL_H)
|
|
+# include <AL/al.h>
|
|
+#elif defined(HAVE_OPENAL_AL_H)
|
|
+# include <OpenAL/al.h>
|
|
+#endif
|
|
+
|
|
#if defined(HAVE_AL_ALC_H)
|
|
# include <AL/alc.h>
|
|
#elif defined(HAVE_OPENAL_ALC_H)
|
|
@@ -4029,7 +5671,7 @@
|
|
# include <sys/resource.h>
|
|
#endif
|
|
|
|
-typedef ALsizei testing;
|
|
+typedef ALCshort testing;
|
|
|
|
main() {
|
|
FILE *f=fopen("conftestval", "w");
|
|
@@ -4058,25 +5700,25 @@
|
|
ac_status=$?
|
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
(exit $ac_status); }; }; then
|
|
- fptools_cv_htype_ALsizei=`cat conftestval`
|
|
+ fptools_cv_htype_ALCshort=`cat conftestval`
|
|
else
|
|
echo "$as_me: program exited with status $ac_status" >&5
|
|
echo "$as_me: failed program was:" >&5
|
|
sed 's/^/| /' conftest.$ac_ext >&5
|
|
|
|
( exit $ac_status )
|
|
-fptools_cv_htype_ALsizei=NotReallyAType; fptools_cv_htype_sup_ALsizei=no
|
|
+fptools_cv_htype_ALCshort=Int16
|
|
fi
|
|
rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
|
|
fi
|
|
+CPPFLAGS="$fp_check_htype_save_cppflags"
|
|
fi
|
|
- CPPFLAGS="$fp_check_htype_save_cppflags"
|
|
-if test "$fptools_cv_htype_sup_ALsizei" = yes; then
|
|
- echo "$as_me:$LINENO: result: $fptools_cv_htype_ALsizei" >&5
|
|
-echo "${ECHO_T}$fptools_cv_htype_ALsizei" >&6
|
|
+ if test "$fptools_cv_htype_sup_ALCshort" = yes; then
|
|
+ echo "$as_me:$LINENO: result: $fptools_cv_htype_ALCshort" >&5
|
|
+echo "${ECHO_T}$fptools_cv_htype_ALCshort" >&6
|
|
|
|
cat >>confdefs.h <<_ACEOF
|
|
-#define HTYPE_ALSIZEI $fptools_cv_htype_ALsizei
|
|
+#define HTYPE_ALCSHORT $fptools_cv_htype_ALCshort
|
|
_ACEOF
|
|
|
|
else
|
|
@@ -4084,16 +5726,16 @@
|
|
echo "${ECHO_T}not supported" >&6
|
|
fi
|
|
|
|
-echo "$as_me:$LINENO: checking Haskell type for ALenum" >&5
|
|
-echo $ECHO_N "checking Haskell type for ALenum... $ECHO_C" >&6
|
|
-if test "${fptools_cv_htype_ALenum+set}" = set; then
|
|
+echo "$as_me:$LINENO: checking Haskell type for ALCushort" >&5
|
|
+echo $ECHO_N "checking Haskell type for ALCushort... $ECHO_C" >&6
|
|
+if test "${fptools_cv_htype_ALCushort+set}" = set; then
|
|
echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
else
|
|
- fptools_cv_htype_sup_ALenum=yes
|
|
+ fptools_cv_htype_sup_ALCushort=yes
|
|
fp_check_htype_save_cppflags="$CPPFLAGS"
|
|
CPPFLAGS="$CPPFLAGS $X_CFLAGS"
|
|
if test "$cross_compiling" = yes; then
|
|
- fptools_cv_htype_ALenum=NotReallyATypeCross; fptools_cv_htype_sup_ALenum=no
|
|
+ fptools_cv_htype_ALCushort=NotReallyATypeCross; fptools_cv_htype_sup_ALCushort=no
|
|
else
|
|
cat >conftest.$ac_ext <<_ACEOF
|
|
#line $LINENO "configure"
|
|
@@ -4147,6 +5789,12 @@
|
|
# include <OpenGL/gl.h>
|
|
#endif
|
|
|
|
+#if defined(HAVE_AL_AL_H)
|
|
+# include <AL/al.h>
|
|
+#elif defined(HAVE_OPENAL_AL_H)
|
|
+# include <OpenAL/al.h>
|
|
+#endif
|
|
+
|
|
#if defined(HAVE_AL_ALC_H)
|
|
# include <AL/alc.h>
|
|
#elif defined(HAVE_OPENAL_ALC_H)
|
|
@@ -4157,7 +5805,7 @@
|
|
# include <sys/resource.h>
|
|
#endif
|
|
|
|
-typedef ALenum testing;
|
|
+typedef ALCushort testing;
|
|
|
|
main() {
|
|
FILE *f=fopen("conftestval", "w");
|
|
@@ -4186,25 +5834,25 @@
|
|
ac_status=$?
|
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
(exit $ac_status); }; }; then
|
|
- fptools_cv_htype_ALenum=`cat conftestval`
|
|
+ fptools_cv_htype_ALCushort=`cat conftestval`
|
|
else
|
|
echo "$as_me: program exited with status $ac_status" >&5
|
|
echo "$as_me: failed program was:" >&5
|
|
sed 's/^/| /' conftest.$ac_ext >&5
|
|
|
|
( exit $ac_status )
|
|
-fptools_cv_htype_ALenum=NotReallyAType; fptools_cv_htype_sup_ALenum=no
|
|
+fptools_cv_htype_ALCushort=Word16
|
|
fi
|
|
rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
|
|
fi
|
|
+CPPFLAGS="$fp_check_htype_save_cppflags"
|
|
fi
|
|
- CPPFLAGS="$fp_check_htype_save_cppflags"
|
|
-if test "$fptools_cv_htype_sup_ALenum" = yes; then
|
|
- echo "$as_me:$LINENO: result: $fptools_cv_htype_ALenum" >&5
|
|
-echo "${ECHO_T}$fptools_cv_htype_ALenum" >&6
|
|
+ if test "$fptools_cv_htype_sup_ALCushort" = yes; then
|
|
+ echo "$as_me:$LINENO: result: $fptools_cv_htype_ALCushort" >&5
|
|
+echo "${ECHO_T}$fptools_cv_htype_ALCushort" >&6
|
|
|
|
cat >>confdefs.h <<_ACEOF
|
|
-#define HTYPE_ALENUM $fptools_cv_htype_ALenum
|
|
+#define HTYPE_ALCUSHORT $fptools_cv_htype_ALCushort
|
|
_ACEOF
|
|
|
|
else
|
|
@@ -4212,16 +5860,16 @@
|
|
echo "${ECHO_T}not supported" >&6
|
|
fi
|
|
|
|
-echo "$as_me:$LINENO: checking Haskell type for ALbitfield" >&5
|
|
-echo $ECHO_N "checking Haskell type for ALbitfield... $ECHO_C" >&6
|
|
-if test "${fptools_cv_htype_ALbitfield+set}" = set; then
|
|
+echo "$as_me:$LINENO: checking Haskell type for ALCint" >&5
|
|
+echo $ECHO_N "checking Haskell type for ALCint... $ECHO_C" >&6
|
|
+if test "${fptools_cv_htype_ALCint+set}" = set; then
|
|
echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
else
|
|
- fptools_cv_htype_sup_ALbitfield=yes
|
|
+ fptools_cv_htype_sup_ALCint=yes
|
|
fp_check_htype_save_cppflags="$CPPFLAGS"
|
|
CPPFLAGS="$CPPFLAGS $X_CFLAGS"
|
|
if test "$cross_compiling" = yes; then
|
|
- fptools_cv_htype_ALbitfield=NotReallyATypeCross; fptools_cv_htype_sup_ALbitfield=no
|
|
+ fptools_cv_htype_ALCint=NotReallyATypeCross; fptools_cv_htype_sup_ALCint=no
|
|
else
|
|
cat >conftest.$ac_ext <<_ACEOF
|
|
#line $LINENO "configure"
|
|
@@ -4275,6 +5923,12 @@
|
|
# include <OpenGL/gl.h>
|
|
#endif
|
|
|
|
+#if defined(HAVE_AL_AL_H)
|
|
+# include <AL/al.h>
|
|
+#elif defined(HAVE_OPENAL_AL_H)
|
|
+# include <OpenAL/al.h>
|
|
+#endif
|
|
+
|
|
#if defined(HAVE_AL_ALC_H)
|
|
# include <AL/alc.h>
|
|
#elif defined(HAVE_OPENAL_ALC_H)
|
|
@@ -4285,7 +5939,7 @@
|
|
# include <sys/resource.h>
|
|
#endif
|
|
|
|
-typedef ALbitfield testing;
|
|
+typedef ALCint testing;
|
|
|
|
main() {
|
|
FILE *f=fopen("conftestval", "w");
|
|
@@ -4314,25 +5968,25 @@
|
|
ac_status=$?
|
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
(exit $ac_status); }; }; then
|
|
- fptools_cv_htype_ALbitfield=`cat conftestval`
|
|
+ fptools_cv_htype_ALCint=`cat conftestval`
|
|
else
|
|
echo "$as_me: program exited with status $ac_status" >&5
|
|
echo "$as_me: failed program was:" >&5
|
|
sed 's/^/| /' conftest.$ac_ext >&5
|
|
|
|
( exit $ac_status )
|
|
-fptools_cv_htype_ALbitfield=NotReallyAType; fptools_cv_htype_sup_ALbitfield=no
|
|
+fptools_cv_htype_ALCint=Int32
|
|
fi
|
|
rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
|
|
fi
|
|
+CPPFLAGS="$fp_check_htype_save_cppflags"
|
|
fi
|
|
- CPPFLAGS="$fp_check_htype_save_cppflags"
|
|
-if test "$fptools_cv_htype_sup_ALbitfield" = yes; then
|
|
- echo "$as_me:$LINENO: result: $fptools_cv_htype_ALbitfield" >&5
|
|
-echo "${ECHO_T}$fptools_cv_htype_ALbitfield" >&6
|
|
+ if test "$fptools_cv_htype_sup_ALCint" = yes; then
|
|
+ echo "$as_me:$LINENO: result: $fptools_cv_htype_ALCint" >&5
|
|
+echo "${ECHO_T}$fptools_cv_htype_ALCint" >&6
|
|
|
|
cat >>confdefs.h <<_ACEOF
|
|
-#define HTYPE_ALBITFIELD $fptools_cv_htype_ALbitfield
|
|
+#define HTYPE_ALCINT $fptools_cv_htype_ALCint
|
|
_ACEOF
|
|
|
|
else
|
|
@@ -4340,16 +5994,16 @@
|
|
echo "${ECHO_T}not supported" >&6
|
|
fi
|
|
|
|
-echo "$as_me:$LINENO: checking Haskell type for ALfloat" >&5
|
|
-echo $ECHO_N "checking Haskell type for ALfloat... $ECHO_C" >&6
|
|
-if test "${fptools_cv_htype_ALfloat+set}" = set; then
|
|
+echo "$as_me:$LINENO: checking Haskell type for ALCuint" >&5
|
|
+echo $ECHO_N "checking Haskell type for ALCuint... $ECHO_C" >&6
|
|
+if test "${fptools_cv_htype_ALCuint+set}" = set; then
|
|
echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
else
|
|
- fptools_cv_htype_sup_ALfloat=yes
|
|
+ fptools_cv_htype_sup_ALCuint=yes
|
|
fp_check_htype_save_cppflags="$CPPFLAGS"
|
|
CPPFLAGS="$CPPFLAGS $X_CFLAGS"
|
|
if test "$cross_compiling" = yes; then
|
|
- fptools_cv_htype_ALfloat=NotReallyATypeCross; fptools_cv_htype_sup_ALfloat=no
|
|
+ fptools_cv_htype_ALCuint=NotReallyATypeCross; fptools_cv_htype_sup_ALCuint=no
|
|
else
|
|
cat >conftest.$ac_ext <<_ACEOF
|
|
#line $LINENO "configure"
|
|
@@ -4403,6 +6057,12 @@
|
|
# include <OpenGL/gl.h>
|
|
#endif
|
|
|
|
+#if defined(HAVE_AL_AL_H)
|
|
+# include <AL/al.h>
|
|
+#elif defined(HAVE_OPENAL_AL_H)
|
|
+# include <OpenAL/al.h>
|
|
+#endif
|
|
+
|
|
#if defined(HAVE_AL_ALC_H)
|
|
# include <AL/alc.h>
|
|
#elif defined(HAVE_OPENAL_ALC_H)
|
|
@@ -4413,7 +6073,7 @@
|
|
# include <sys/resource.h>
|
|
#endif
|
|
|
|
-typedef ALfloat testing;
|
|
+typedef ALCuint testing;
|
|
|
|
main() {
|
|
FILE *f=fopen("conftestval", "w");
|
|
@@ -4442,25 +6102,25 @@
|
|
ac_status=$?
|
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
(exit $ac_status); }; }; then
|
|
- fptools_cv_htype_ALfloat=`cat conftestval`
|
|
+ fptools_cv_htype_ALCuint=`cat conftestval`
|
|
else
|
|
echo "$as_me: program exited with status $ac_status" >&5
|
|
echo "$as_me: failed program was:" >&5
|
|
sed 's/^/| /' conftest.$ac_ext >&5
|
|
|
|
( exit $ac_status )
|
|
-fptools_cv_htype_ALfloat=NotReallyAType; fptools_cv_htype_sup_ALfloat=no
|
|
+fptools_cv_htype_ALCuint=Word32
|
|
fi
|
|
rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
|
|
fi
|
|
+CPPFLAGS="$fp_check_htype_save_cppflags"
|
|
fi
|
|
- CPPFLAGS="$fp_check_htype_save_cppflags"
|
|
-if test "$fptools_cv_htype_sup_ALfloat" = yes; then
|
|
- echo "$as_me:$LINENO: result: $fptools_cv_htype_ALfloat" >&5
|
|
-echo "${ECHO_T}$fptools_cv_htype_ALfloat" >&6
|
|
+ if test "$fptools_cv_htype_sup_ALCuint" = yes; then
|
|
+ echo "$as_me:$LINENO: result: $fptools_cv_htype_ALCuint" >&5
|
|
+echo "${ECHO_T}$fptools_cv_htype_ALCuint" >&6
|
|
|
|
cat >>confdefs.h <<_ACEOF
|
|
-#define HTYPE_ALFLOAT $fptools_cv_htype_ALfloat
|
|
+#define HTYPE_ALCUINT $fptools_cv_htype_ALCuint
|
|
_ACEOF
|
|
|
|
else
|
|
@@ -4468,16 +6128,16 @@
|
|
echo "${ECHO_T}not supported" >&6
|
|
fi
|
|
|
|
-echo "$as_me:$LINENO: checking Haskell type for ALclampf" >&5
|
|
-echo $ECHO_N "checking Haskell type for ALclampf... $ECHO_C" >&6
|
|
-if test "${fptools_cv_htype_ALclampf+set}" = set; then
|
|
+echo "$as_me:$LINENO: checking Haskell type for ALCsizei" >&5
|
|
+echo $ECHO_N "checking Haskell type for ALCsizei... $ECHO_C" >&6
|
|
+if test "${fptools_cv_htype_ALCsizei+set}" = set; then
|
|
echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
else
|
|
- fptools_cv_htype_sup_ALclampf=yes
|
|
+ fptools_cv_htype_sup_ALCsizei=yes
|
|
fp_check_htype_save_cppflags="$CPPFLAGS"
|
|
CPPFLAGS="$CPPFLAGS $X_CFLAGS"
|
|
if test "$cross_compiling" = yes; then
|
|
- fptools_cv_htype_ALclampf=NotReallyATypeCross; fptools_cv_htype_sup_ALclampf=no
|
|
+ fptools_cv_htype_ALCsizei=NotReallyATypeCross; fptools_cv_htype_sup_ALCsizei=no
|
|
else
|
|
cat >conftest.$ac_ext <<_ACEOF
|
|
#line $LINENO "configure"
|
|
@@ -4531,6 +6191,12 @@
|
|
# include <OpenGL/gl.h>
|
|
#endif
|
|
|
|
+#if defined(HAVE_AL_AL_H)
|
|
+# include <AL/al.h>
|
|
+#elif defined(HAVE_OPENAL_AL_H)
|
|
+# include <OpenAL/al.h>
|
|
+#endif
|
|
+
|
|
#if defined(HAVE_AL_ALC_H)
|
|
# include <AL/alc.h>
|
|
#elif defined(HAVE_OPENAL_ALC_H)
|
|
@@ -4541,7 +6207,7 @@
|
|
# include <sys/resource.h>
|
|
#endif
|
|
|
|
-typedef ALclampf testing;
|
|
+typedef ALCsizei testing;
|
|
|
|
main() {
|
|
FILE *f=fopen("conftestval", "w");
|
|
@@ -4570,25 +6236,25 @@
|
|
ac_status=$?
|
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
(exit $ac_status); }; }; then
|
|
- fptools_cv_htype_ALclampf=`cat conftestval`
|
|
+ fptools_cv_htype_ALCsizei=`cat conftestval`
|
|
else
|
|
echo "$as_me: program exited with status $ac_status" >&5
|
|
echo "$as_me: failed program was:" >&5
|
|
sed 's/^/| /' conftest.$ac_ext >&5
|
|
|
|
( exit $ac_status )
|
|
-fptools_cv_htype_ALclampf=NotReallyAType; fptools_cv_htype_sup_ALclampf=no
|
|
+fptools_cv_htype_ALCsizei=Int32
|
|
fi
|
|
rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
|
|
fi
|
|
+CPPFLAGS="$fp_check_htype_save_cppflags"
|
|
fi
|
|
- CPPFLAGS="$fp_check_htype_save_cppflags"
|
|
-if test "$fptools_cv_htype_sup_ALclampf" = yes; then
|
|
- echo "$as_me:$LINENO: result: $fptools_cv_htype_ALclampf" >&5
|
|
-echo "${ECHO_T}$fptools_cv_htype_ALclampf" >&6
|
|
+ if test "$fptools_cv_htype_sup_ALCsizei" = yes; then
|
|
+ echo "$as_me:$LINENO: result: $fptools_cv_htype_ALCsizei" >&5
|
|
+echo "${ECHO_T}$fptools_cv_htype_ALCsizei" >&6
|
|
|
|
cat >>confdefs.h <<_ACEOF
|
|
-#define HTYPE_ALCLAMPF $fptools_cv_htype_ALclampf
|
|
+#define HTYPE_ALCSIZEI $fptools_cv_htype_ALCsizei
|
|
_ACEOF
|
|
|
|
else
|
|
@@ -4596,16 +6262,16 @@
|
|
echo "${ECHO_T}not supported" >&6
|
|
fi
|
|
|
|
-echo "$as_me:$LINENO: checking Haskell type for ALdouble" >&5
|
|
-echo $ECHO_N "checking Haskell type for ALdouble... $ECHO_C" >&6
|
|
-if test "${fptools_cv_htype_ALdouble+set}" = set; then
|
|
+echo "$as_me:$LINENO: checking Haskell type for ALCenum" >&5
|
|
+echo $ECHO_N "checking Haskell type for ALCenum... $ECHO_C" >&6
|
|
+if test "${fptools_cv_htype_ALCenum+set}" = set; then
|
|
echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
else
|
|
- fptools_cv_htype_sup_ALdouble=yes
|
|
+ fptools_cv_htype_sup_ALCenum=yes
|
|
fp_check_htype_save_cppflags="$CPPFLAGS"
|
|
CPPFLAGS="$CPPFLAGS $X_CFLAGS"
|
|
if test "$cross_compiling" = yes; then
|
|
- fptools_cv_htype_ALdouble=NotReallyATypeCross; fptools_cv_htype_sup_ALdouble=no
|
|
+ fptools_cv_htype_ALCenum=NotReallyATypeCross; fptools_cv_htype_sup_ALCenum=no
|
|
else
|
|
cat >conftest.$ac_ext <<_ACEOF
|
|
#line $LINENO "configure"
|
|
@@ -4659,6 +6325,12 @@
|
|
# include <OpenGL/gl.h>
|
|
#endif
|
|
|
|
+#if defined(HAVE_AL_AL_H)
|
|
+# include <AL/al.h>
|
|
+#elif defined(HAVE_OPENAL_AL_H)
|
|
+# include <OpenAL/al.h>
|
|
+#endif
|
|
+
|
|
#if defined(HAVE_AL_ALC_H)
|
|
# include <AL/alc.h>
|
|
#elif defined(HAVE_OPENAL_ALC_H)
|
|
@@ -4669,7 +6341,7 @@
|
|
# include <sys/resource.h>
|
|
#endif
|
|
|
|
-typedef ALdouble testing;
|
|
+typedef ALCenum testing;
|
|
|
|
main() {
|
|
FILE *f=fopen("conftestval", "w");
|
|
@@ -4698,25 +6370,25 @@
|
|
ac_status=$?
|
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
(exit $ac_status); }; }; then
|
|
- fptools_cv_htype_ALdouble=`cat conftestval`
|
|
+ fptools_cv_htype_ALCenum=`cat conftestval`
|
|
else
|
|
echo "$as_me: program exited with status $ac_status" >&5
|
|
echo "$as_me: failed program was:" >&5
|
|
sed 's/^/| /' conftest.$ac_ext >&5
|
|
|
|
( exit $ac_status )
|
|
-fptools_cv_htype_ALdouble=NotReallyAType; fptools_cv_htype_sup_ALdouble=no
|
|
+fptools_cv_htype_ALCenum=Int32
|
|
fi
|
|
rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
|
|
fi
|
|
+CPPFLAGS="$fp_check_htype_save_cppflags"
|
|
fi
|
|
- CPPFLAGS="$fp_check_htype_save_cppflags"
|
|
-if test "$fptools_cv_htype_sup_ALdouble" = yes; then
|
|
- echo "$as_me:$LINENO: result: $fptools_cv_htype_ALdouble" >&5
|
|
-echo "${ECHO_T}$fptools_cv_htype_ALdouble" >&6
|
|
+ if test "$fptools_cv_htype_sup_ALCenum" = yes; then
|
|
+ echo "$as_me:$LINENO: result: $fptools_cv_htype_ALCenum" >&5
|
|
+echo "${ECHO_T}$fptools_cv_htype_ALCenum" >&6
|
|
|
|
cat >>confdefs.h <<_ACEOF
|
|
-#define HTYPE_ALDOUBLE $fptools_cv_htype_ALdouble
|
|
+#define HTYPE_ALCENUM $fptools_cv_htype_ALCenum
|
|
_ACEOF
|
|
|
|
else
|
|
@@ -4724,16 +6396,16 @@
|
|
echo "${ECHO_T}not supported" >&6
|
|
fi
|
|
|
|
-echo "$as_me:$LINENO: checking Haskell type for ALclampd" >&5
|
|
-echo $ECHO_N "checking Haskell type for ALclampd... $ECHO_C" >&6
|
|
-if test "${fptools_cv_htype_ALclampd+set}" = set; then
|
|
+echo "$as_me:$LINENO: checking Haskell type for ALCfloat" >&5
|
|
+echo $ECHO_N "checking Haskell type for ALCfloat... $ECHO_C" >&6
|
|
+if test "${fptools_cv_htype_ALCfloat+set}" = set; then
|
|
echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
else
|
|
- fptools_cv_htype_sup_ALclampd=yes
|
|
+ fptools_cv_htype_sup_ALCfloat=yes
|
|
fp_check_htype_save_cppflags="$CPPFLAGS"
|
|
CPPFLAGS="$CPPFLAGS $X_CFLAGS"
|
|
if test "$cross_compiling" = yes; then
|
|
- fptools_cv_htype_ALclampd=NotReallyATypeCross; fptools_cv_htype_sup_ALclampd=no
|
|
+ fptools_cv_htype_ALCfloat=NotReallyATypeCross; fptools_cv_htype_sup_ALCfloat=no
|
|
else
|
|
cat >conftest.$ac_ext <<_ACEOF
|
|
#line $LINENO "configure"
|
|
@@ -4787,6 +6459,12 @@
|
|
# include <OpenGL/gl.h>
|
|
#endif
|
|
|
|
+#if defined(HAVE_AL_AL_H)
|
|
+# include <AL/al.h>
|
|
+#elif defined(HAVE_OPENAL_AL_H)
|
|
+# include <OpenAL/al.h>
|
|
+#endif
|
|
+
|
|
#if defined(HAVE_AL_ALC_H)
|
|
# include <AL/alc.h>
|
|
#elif defined(HAVE_OPENAL_ALC_H)
|
|
@@ -4797,7 +6475,7 @@
|
|
# include <sys/resource.h>
|
|
#endif
|
|
|
|
-typedef ALclampd testing;
|
|
+typedef ALCfloat testing;
|
|
|
|
main() {
|
|
FILE *f=fopen("conftestval", "w");
|
|
@@ -4826,25 +6504,25 @@
|
|
ac_status=$?
|
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
(exit $ac_status); }; }; then
|
|
- fptools_cv_htype_ALclampd=`cat conftestval`
|
|
+ fptools_cv_htype_ALCfloat=`cat conftestval`
|
|
else
|
|
echo "$as_me: program exited with status $ac_status" >&5
|
|
echo "$as_me: failed program was:" >&5
|
|
sed 's/^/| /' conftest.$ac_ext >&5
|
|
|
|
( exit $ac_status )
|
|
-fptools_cv_htype_ALclampd=NotReallyAType; fptools_cv_htype_sup_ALclampd=no
|
|
+fptools_cv_htype_ALCfloat=Float
|
|
fi
|
|
rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
|
|
fi
|
|
+CPPFLAGS="$fp_check_htype_save_cppflags"
|
|
fi
|
|
- CPPFLAGS="$fp_check_htype_save_cppflags"
|
|
-if test "$fptools_cv_htype_sup_ALclampd" = yes; then
|
|
- echo "$as_me:$LINENO: result: $fptools_cv_htype_ALclampd" >&5
|
|
-echo "${ECHO_T}$fptools_cv_htype_ALclampd" >&6
|
|
+ if test "$fptools_cv_htype_sup_ALCfloat" = yes; then
|
|
+ echo "$as_me:$LINENO: result: $fptools_cv_htype_ALCfloat" >&5
|
|
+echo "${ECHO_T}$fptools_cv_htype_ALCfloat" >&6
|
|
|
|
cat >>confdefs.h <<_ACEOF
|
|
-#define HTYPE_ALCLAMPD $fptools_cv_htype_ALclampd
|
|
+#define HTYPE_ALCFLOAT $fptools_cv_htype_ALCfloat
|
|
_ACEOF
|
|
|
|
else
|
|
@@ -4852,16 +6530,16 @@
|
|
echo "${ECHO_T}not supported" >&6
|
|
fi
|
|
|
|
-echo "$as_me:$LINENO: checking Haskell type for ALCenum" >&5
|
|
-echo $ECHO_N "checking Haskell type for ALCenum... $ECHO_C" >&6
|
|
-if test "${fptools_cv_htype_ALCenum+set}" = set; then
|
|
+echo "$as_me:$LINENO: checking Haskell type for ALCdouble" >&5
|
|
+echo $ECHO_N "checking Haskell type for ALCdouble... $ECHO_C" >&6
|
|
+if test "${fptools_cv_htype_ALCdouble+set}" = set; then
|
|
echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
else
|
|
- fptools_cv_htype_sup_ALCenum=yes
|
|
+ fptools_cv_htype_sup_ALCdouble=yes
|
|
fp_check_htype_save_cppflags="$CPPFLAGS"
|
|
CPPFLAGS="$CPPFLAGS $X_CFLAGS"
|
|
if test "$cross_compiling" = yes; then
|
|
- fptools_cv_htype_ALCenum=NotReallyATypeCross; fptools_cv_htype_sup_ALCenum=no
|
|
+ fptools_cv_htype_ALCdouble=NotReallyATypeCross; fptools_cv_htype_sup_ALCdouble=no
|
|
else
|
|
cat >conftest.$ac_ext <<_ACEOF
|
|
#line $LINENO "configure"
|
|
@@ -4915,6 +6593,12 @@
|
|
# include <OpenGL/gl.h>
|
|
#endif
|
|
|
|
+#if defined(HAVE_AL_AL_H)
|
|
+# include <AL/al.h>
|
|
+#elif defined(HAVE_OPENAL_AL_H)
|
|
+# include <OpenAL/al.h>
|
|
+#endif
|
|
+
|
|
#if defined(HAVE_AL_ALC_H)
|
|
# include <AL/alc.h>
|
|
#elif defined(HAVE_OPENAL_ALC_H)
|
|
@@ -4925,7 +6609,7 @@
|
|
# include <sys/resource.h>
|
|
#endif
|
|
|
|
-typedef ALCenum testing;
|
|
+typedef ALCdouble testing;
|
|
|
|
main() {
|
|
FILE *f=fopen("conftestval", "w");
|
|
@@ -4954,31 +6638,99 @@
|
|
ac_status=$?
|
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
(exit $ac_status); }; }; then
|
|
- fptools_cv_htype_ALCenum=`cat conftestval`
|
|
+ fptools_cv_htype_ALCdouble=`cat conftestval`
|
|
else
|
|
echo "$as_me: program exited with status $ac_status" >&5
|
|
echo "$as_me: failed program was:" >&5
|
|
sed 's/^/| /' conftest.$ac_ext >&5
|
|
|
|
-( exit $ac_status )
|
|
-fptools_cv_htype_ALCenum=NotReallyAType; fptools_cv_htype_sup_ALCenum=no
|
|
-fi
|
|
-rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
|
|
-fi
|
|
-fi
|
|
- CPPFLAGS="$fp_check_htype_save_cppflags"
|
|
-if test "$fptools_cv_htype_sup_ALCenum" = yes; then
|
|
- echo "$as_me:$LINENO: result: $fptools_cv_htype_ALCenum" >&5
|
|
-echo "${ECHO_T}$fptools_cv_htype_ALCenum" >&6
|
|
+( exit $ac_status )
|
|
+fptools_cv_htype_ALCdouble=Double
|
|
+fi
|
|
+rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
|
|
+fi
|
|
+CPPFLAGS="$fp_check_htype_save_cppflags"
|
|
+fi
|
|
+ if test "$fptools_cv_htype_sup_ALCdouble" = yes; then
|
|
+ echo "$as_me:$LINENO: result: $fptools_cv_htype_ALCdouble" >&5
|
|
+echo "${ECHO_T}$fptools_cv_htype_ALCdouble" >&6
|
|
+
|
|
+cat >>confdefs.h <<_ACEOF
|
|
+#define HTYPE_ALCDOUBLE $fptools_cv_htype_ALCdouble
|
|
+_ACEOF
|
|
+
|
|
+else
|
|
+ echo "$as_me:$LINENO: result: not supported" >&5
|
|
+echo "${ECHO_T}not supported" >&6
|
|
+fi
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
|
|
-cat >>confdefs.h <<_ACEOF
|
|
-#define HTYPE_ALCENUM $fptools_cv_htype_ALCenum
|
|
-_ACEOF
|
|
|
|
-else
|
|
- echo "$as_me:$LINENO: result: not supported" >&5
|
|
-echo "${ECHO_T}not supported" >&6
|
|
-fi
|
|
|
|
|
|
|
|
@@ -4998,7 +6750,7 @@
|
|
|
|
|
|
|
|
-for fp_const_name in AL_FORMAT_VORBIS_EXT ALC_FREQUENCY ALC_REFRESH ALC_SYNC ALC_NO_ERROR ALC_INVALID_DEVICE ALC_INVALID_CONTEXT ALC_INVALID_ENUM ALC_INVALID_VALUE ALC_OUT_OF_MEMORY ALC_DEFAULT_DEVICE_SPECIFIER ALC_DEVICE_SPECIFIER ALC_EXTENSIONS ALC_MAJOR_VERSION ALC_MINOR_VERSION ALC_ATTRIBUTES_SIZE ALC_ALL_ATTRIBUTES
|
|
+for fp_const_name in AL_FALSE AL_TRUE AL_NO_ERROR AL_INVALID_NAME AL_INVALID_ENUM AL_INVALID_VALUE AL_INVALID_OPERATION AL_OUT_OF_MEMORY AL_DOPPLER_FACTOR AL_SPEED_OF_SOUND AL_DISTANCE_MODEL AL_VERSION AL_RENDERER AL_VENDOR AL_EXTENSIONS AL_NONE AL_INVERSE_DISTANCE AL_INVERSE_DISTANCE_CLAMPED AL_LINEAR_DISTANCE AL_LINEAR_DISTANCE_CLAMPED AL_EXPONENT_DISTANCE AL_EXPONENT_DISTANCE_CLAMPED 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_UNDETERMINED AL_STATIC AL_STREAMING AL_INITIAL AL_PLAYING AL_PAUSED AL_STOPPED AL_FREQUENCY AL_SIZE AL_BITS AL_CHANNELS AL_FORMAT_MONO8 AL_FORMAT_MONO16 AL_FORMAT_STEREO8 AL_FORMAT_STEREO16 ALC_FALSE ALC_TRUE ALC_FREQUENCY ALC_REFRESH ALC_SYNC ALC_MONO_SOURCES ALC_STEREO_SOURCES ALC_NO_ERROR ALC_INVALID_DEVICE ALC_INVALID_CONTEXT ALC_INVALID_ENUM ALC_INVALID_VALUE ALC_INVALID_OPERATION ALC_OUT_OF_MEMORY ALC_DEFAULT_DEVICE_SPECIFIER ALC_DEVICE_SPECIFIER ALC_EXTENSIONS ALC_CAPTURE_DEFAULT_DEVICE_SPECIFIER ALC_CAPTURE_DEVICE_SPECIFIER ALC_ATTRIBUTES_SIZE ALC_ALL_ATTRIBUTES ALC_MAJOR_VERSION ALC_MINOR_VERSION ALC_CAPTURE_SAMPLES
|
|
do
|
|
as_fp_Cache=`echo "fp_cv_const_$fp_const_name" | $as_tr_sh`
|
|
echo "$as_me:$LINENO: checking value of $fp_const_name" >&5
|
|
@@ -5028,6 +6780,87 @@
|
|
#include <OpenAL/alext.h>
|
|
#endif
|
|
|
|
+#ifndef AL_SPEED_OF_SOUND
|
|
+#define AL_SPEED_OF_SOUND 0xC003
|
|
+#endif
|
|
+
|
|
+#ifndef AL_LINEAR_DISTANCE
|
|
+#define AL_LINEAR_DISTANCE 0xD003
|
|
+#endif
|
|
+
|
|
+#ifndef AL_LINEAR_DISTANCE_CLAMPED
|
|
+#define AL_LINEAR_DISTANCE_CLAMPED 0xD004
|
|
+#endif
|
|
+
|
|
+#ifndef AL_EXPONENT_DISTANCE
|
|
+#define AL_EXPONENT_DISTANCE 0xD005
|
|
+#endif
|
|
+
|
|
+#ifndef AL_EXPONENT_DISTANCE_CLAMPED
|
|
+#define AL_EXPONENT_DISTANCE_CLAMPED 0xD006
|
|
+#endif
|
|
+
|
|
+#ifndef AL_SEC_OFFSET
|
|
+#define AL_SEC_OFFSET 0x1024
|
|
+#endif
|
|
+
|
|
+#ifndef AL_SAMPLE_OFFSET
|
|
+#define AL_SAMPLE_OFFSET 0x1025
|
|
+#endif
|
|
+
|
|
+#ifndef AL_BYTE_OFFSET
|
|
+#define AL_BYTE_OFFSET 0x1026
|
|
+#endif
|
|
+
|
|
+#ifndef AL_UNDETERMINED
|
|
+#define AL_UNDETERMINED 0x1030
|
|
+#endif
|
|
+
|
|
+#ifndef AL_STATIC
|
|
+#define AL_STATIC 0x1028
|
|
+#endif
|
|
+
|
|
+#ifndef ALC_MONO_SOURCES
|
|
+#define ALC_MONO_SOURCES 0x1010
|
|
+#endif
|
|
+
|
|
+#ifndef ALC_STEREO_SOURCES
|
|
+#define ALC_STEREO_SOURCES 0x1011
|
|
+#endif
|
|
+
|
|
+#ifndef AL_INVALID_ENUM
|
|
+#ifdef AL_ILLEGAL_ENUM
|
|
+#define AL_INVALID_ENUM AL_ILLEGAL_ENUM
|
|
+#else
|
|
+#define AL_INVALID_ENUM 0xA002
|
|
+#endif
|
|
+#endif
|
|
+
|
|
+#ifndef AL_INVALID_OPERATION
|
|
+#ifdef AL_ILLEGAL_COMMAND
|
|
+#define AL_INVALID_OPERATION AL_ILLEGAL_COMMAND
|
|
+#else
|
|
+#define AL_INVALID_OPERATION 0xA004
|
|
+#endif
|
|
+#endif
|
|
+
|
|
+/* NOTE: THIS IS NOT IN ANY HEADER */
|
|
+#ifndef ALC_INVALID_OPERATION
|
|
+#define ALC_INVALID_OPERATION 0xA006
|
|
+#endif
|
|
+
|
|
+#ifndef ALC_CAPTURE_DEFAULT_DEVICE_SPECIFIER
|
|
+#define ALC_CAPTURE_DEFAULT_DEVICE_SPECIFIER 0x311
|
|
+#endif
|
|
+
|
|
+#ifndef ALC_CAPTURE_DEVICE_SPECIFIER
|
|
+#define ALC_CAPTURE_DEVICE_SPECIFIER 0x310
|
|
+#endif
|
|
+
|
|
+#ifndef ALC_CAPTURE_SAMPLES
|
|
+#define ALC_CAPTURE_SAMPLES 0x312
|
|
+#endif
|
|
+
|
|
|
|
int
|
|
main ()
|
|
@@ -5073,6 +6906,87 @@
|
|
#include <OpenAL/alext.h>
|
|
#endif
|
|
|
|
+#ifndef AL_SPEED_OF_SOUND
|
|
+#define AL_SPEED_OF_SOUND 0xC003
|
|
+#endif
|
|
+
|
|
+#ifndef AL_LINEAR_DISTANCE
|
|
+#define AL_LINEAR_DISTANCE 0xD003
|
|
+#endif
|
|
+
|
|
+#ifndef AL_LINEAR_DISTANCE_CLAMPED
|
|
+#define AL_LINEAR_DISTANCE_CLAMPED 0xD004
|
|
+#endif
|
|
+
|
|
+#ifndef AL_EXPONENT_DISTANCE
|
|
+#define AL_EXPONENT_DISTANCE 0xD005
|
|
+#endif
|
|
+
|
|
+#ifndef AL_EXPONENT_DISTANCE_CLAMPED
|
|
+#define AL_EXPONENT_DISTANCE_CLAMPED 0xD006
|
|
+#endif
|
|
+
|
|
+#ifndef AL_SEC_OFFSET
|
|
+#define AL_SEC_OFFSET 0x1024
|
|
+#endif
|
|
+
|
|
+#ifndef AL_SAMPLE_OFFSET
|
|
+#define AL_SAMPLE_OFFSET 0x1025
|
|
+#endif
|
|
+
|
|
+#ifndef AL_BYTE_OFFSET
|
|
+#define AL_BYTE_OFFSET 0x1026
|
|
+#endif
|
|
+
|
|
+#ifndef AL_UNDETERMINED
|
|
+#define AL_UNDETERMINED 0x1030
|
|
+#endif
|
|
+
|
|
+#ifndef AL_STATIC
|
|
+#define AL_STATIC 0x1028
|
|
+#endif
|
|
+
|
|
+#ifndef ALC_MONO_SOURCES
|
|
+#define ALC_MONO_SOURCES 0x1010
|
|
+#endif
|
|
+
|
|
+#ifndef ALC_STEREO_SOURCES
|
|
+#define ALC_STEREO_SOURCES 0x1011
|
|
+#endif
|
|
+
|
|
+#ifndef AL_INVALID_ENUM
|
|
+#ifdef AL_ILLEGAL_ENUM
|
|
+#define AL_INVALID_ENUM AL_ILLEGAL_ENUM
|
|
+#else
|
|
+#define AL_INVALID_ENUM 0xA002
|
|
+#endif
|
|
+#endif
|
|
+
|
|
+#ifndef AL_INVALID_OPERATION
|
|
+#ifdef AL_ILLEGAL_COMMAND
|
|
+#define AL_INVALID_OPERATION AL_ILLEGAL_COMMAND
|
|
+#else
|
|
+#define AL_INVALID_OPERATION 0xA004
|
|
+#endif
|
|
+#endif
|
|
+
|
|
+/* NOTE: THIS IS NOT IN ANY HEADER */
|
|
+#ifndef ALC_INVALID_OPERATION
|
|
+#define ALC_INVALID_OPERATION 0xA006
|
|
+#endif
|
|
+
|
|
+#ifndef ALC_CAPTURE_DEFAULT_DEVICE_SPECIFIER
|
|
+#define ALC_CAPTURE_DEFAULT_DEVICE_SPECIFIER 0x311
|
|
+#endif
|
|
+
|
|
+#ifndef ALC_CAPTURE_DEVICE_SPECIFIER
|
|
+#define ALC_CAPTURE_DEVICE_SPECIFIER 0x310
|
|
+#endif
|
|
+
|
|
+#ifndef ALC_CAPTURE_SAMPLES
|
|
+#define ALC_CAPTURE_SAMPLES 0x312
|
|
+#endif
|
|
+
|
|
|
|
int
|
|
main ()
|
|
@@ -5134,6 +7048,87 @@
|
|
#include <OpenAL/alext.h>
|
|
#endif
|
|
|
|
+#ifndef AL_SPEED_OF_SOUND
|
|
+#define AL_SPEED_OF_SOUND 0xC003
|
|
+#endif
|
|
+
|
|
+#ifndef AL_LINEAR_DISTANCE
|
|
+#define AL_LINEAR_DISTANCE 0xD003
|
|
+#endif
|
|
+
|
|
+#ifndef AL_LINEAR_DISTANCE_CLAMPED
|
|
+#define AL_LINEAR_DISTANCE_CLAMPED 0xD004
|
|
+#endif
|
|
+
|
|
+#ifndef AL_EXPONENT_DISTANCE
|
|
+#define AL_EXPONENT_DISTANCE 0xD005
|
|
+#endif
|
|
+
|
|
+#ifndef AL_EXPONENT_DISTANCE_CLAMPED
|
|
+#define AL_EXPONENT_DISTANCE_CLAMPED 0xD006
|
|
+#endif
|
|
+
|
|
+#ifndef AL_SEC_OFFSET
|
|
+#define AL_SEC_OFFSET 0x1024
|
|
+#endif
|
|
+
|
|
+#ifndef AL_SAMPLE_OFFSET
|
|
+#define AL_SAMPLE_OFFSET 0x1025
|
|
+#endif
|
|
+
|
|
+#ifndef AL_BYTE_OFFSET
|
|
+#define AL_BYTE_OFFSET 0x1026
|
|
+#endif
|
|
+
|
|
+#ifndef AL_UNDETERMINED
|
|
+#define AL_UNDETERMINED 0x1030
|
|
+#endif
|
|
+
|
|
+#ifndef AL_STATIC
|
|
+#define AL_STATIC 0x1028
|
|
+#endif
|
|
+
|
|
+#ifndef ALC_MONO_SOURCES
|
|
+#define ALC_MONO_SOURCES 0x1010
|
|
+#endif
|
|
+
|
|
+#ifndef ALC_STEREO_SOURCES
|
|
+#define ALC_STEREO_SOURCES 0x1011
|
|
+#endif
|
|
+
|
|
+#ifndef AL_INVALID_ENUM
|
|
+#ifdef AL_ILLEGAL_ENUM
|
|
+#define AL_INVALID_ENUM AL_ILLEGAL_ENUM
|
|
+#else
|
|
+#define AL_INVALID_ENUM 0xA002
|
|
+#endif
|
|
+#endif
|
|
+
|
|
+#ifndef AL_INVALID_OPERATION
|
|
+#ifdef AL_ILLEGAL_COMMAND
|
|
+#define AL_INVALID_OPERATION AL_ILLEGAL_COMMAND
|
|
+#else
|
|
+#define AL_INVALID_OPERATION 0xA004
|
|
+#endif
|
|
+#endif
|
|
+
|
|
+/* NOTE: THIS IS NOT IN ANY HEADER */
|
|
+#ifndef ALC_INVALID_OPERATION
|
|
+#define ALC_INVALID_OPERATION 0xA006
|
|
+#endif
|
|
+
|
|
+#ifndef ALC_CAPTURE_DEFAULT_DEVICE_SPECIFIER
|
|
+#define ALC_CAPTURE_DEFAULT_DEVICE_SPECIFIER 0x311
|
|
+#endif
|
|
+
|
|
+#ifndef ALC_CAPTURE_DEVICE_SPECIFIER
|
|
+#define ALC_CAPTURE_DEVICE_SPECIFIER 0x310
|
|
+#endif
|
|
+
|
|
+#ifndef ALC_CAPTURE_SAMPLES
|
|
+#define ALC_CAPTURE_SAMPLES 0x312
|
|
+#endif
|
|
+
|
|
|
|
int
|
|
main ()
|
|
@@ -5179,6 +7174,87 @@
|
|
#include <OpenAL/alext.h>
|
|
#endif
|
|
|
|
+#ifndef AL_SPEED_OF_SOUND
|
|
+#define AL_SPEED_OF_SOUND 0xC003
|
|
+#endif
|
|
+
|
|
+#ifndef AL_LINEAR_DISTANCE
|
|
+#define AL_LINEAR_DISTANCE 0xD003
|
|
+#endif
|
|
+
|
|
+#ifndef AL_LINEAR_DISTANCE_CLAMPED
|
|
+#define AL_LINEAR_DISTANCE_CLAMPED 0xD004
|
|
+#endif
|
|
+
|
|
+#ifndef AL_EXPONENT_DISTANCE
|
|
+#define AL_EXPONENT_DISTANCE 0xD005
|
|
+#endif
|
|
+
|
|
+#ifndef AL_EXPONENT_DISTANCE_CLAMPED
|
|
+#define AL_EXPONENT_DISTANCE_CLAMPED 0xD006
|
|
+#endif
|
|
+
|
|
+#ifndef AL_SEC_OFFSET
|
|
+#define AL_SEC_OFFSET 0x1024
|
|
+#endif
|
|
+
|
|
+#ifndef AL_SAMPLE_OFFSET
|
|
+#define AL_SAMPLE_OFFSET 0x1025
|
|
+#endif
|
|
+
|
|
+#ifndef AL_BYTE_OFFSET
|
|
+#define AL_BYTE_OFFSET 0x1026
|
|
+#endif
|
|
+
|
|
+#ifndef AL_UNDETERMINED
|
|
+#define AL_UNDETERMINED 0x1030
|
|
+#endif
|
|
+
|
|
+#ifndef AL_STATIC
|
|
+#define AL_STATIC 0x1028
|
|
+#endif
|
|
+
|
|
+#ifndef ALC_MONO_SOURCES
|
|
+#define ALC_MONO_SOURCES 0x1010
|
|
+#endif
|
|
+
|
|
+#ifndef ALC_STEREO_SOURCES
|
|
+#define ALC_STEREO_SOURCES 0x1011
|
|
+#endif
|
|
+
|
|
+#ifndef AL_INVALID_ENUM
|
|
+#ifdef AL_ILLEGAL_ENUM
|
|
+#define AL_INVALID_ENUM AL_ILLEGAL_ENUM
|
|
+#else
|
|
+#define AL_INVALID_ENUM 0xA002
|
|
+#endif
|
|
+#endif
|
|
+
|
|
+#ifndef AL_INVALID_OPERATION
|
|
+#ifdef AL_ILLEGAL_COMMAND
|
|
+#define AL_INVALID_OPERATION AL_ILLEGAL_COMMAND
|
|
+#else
|
|
+#define AL_INVALID_OPERATION 0xA004
|
|
+#endif
|
|
+#endif
|
|
+
|
|
+/* NOTE: THIS IS NOT IN ANY HEADER */
|
|
+#ifndef ALC_INVALID_OPERATION
|
|
+#define ALC_INVALID_OPERATION 0xA006
|
|
+#endif
|
|
+
|
|
+#ifndef ALC_CAPTURE_DEFAULT_DEVICE_SPECIFIER
|
|
+#define ALC_CAPTURE_DEFAULT_DEVICE_SPECIFIER 0x311
|
|
+#endif
|
|
+
|
|
+#ifndef ALC_CAPTURE_DEVICE_SPECIFIER
|
|
+#define ALC_CAPTURE_DEVICE_SPECIFIER 0x310
|
|
+#endif
|
|
+
|
|
+#ifndef ALC_CAPTURE_SAMPLES
|
|
+#define ALC_CAPTURE_SAMPLES 0x312
|
|
+#endif
|
|
+
|
|
|
|
int
|
|
main ()
|
|
@@ -5248,6 +7324,87 @@
|
|
#include <OpenAL/alext.h>
|
|
#endif
|
|
|
|
+#ifndef AL_SPEED_OF_SOUND
|
|
+#define AL_SPEED_OF_SOUND 0xC003
|
|
+#endif
|
|
+
|
|
+#ifndef AL_LINEAR_DISTANCE
|
|
+#define AL_LINEAR_DISTANCE 0xD003
|
|
+#endif
|
|
+
|
|
+#ifndef AL_LINEAR_DISTANCE_CLAMPED
|
|
+#define AL_LINEAR_DISTANCE_CLAMPED 0xD004
|
|
+#endif
|
|
+
|
|
+#ifndef AL_EXPONENT_DISTANCE
|
|
+#define AL_EXPONENT_DISTANCE 0xD005
|
|
+#endif
|
|
+
|
|
+#ifndef AL_EXPONENT_DISTANCE_CLAMPED
|
|
+#define AL_EXPONENT_DISTANCE_CLAMPED 0xD006
|
|
+#endif
|
|
+
|
|
+#ifndef AL_SEC_OFFSET
|
|
+#define AL_SEC_OFFSET 0x1024
|
|
+#endif
|
|
+
|
|
+#ifndef AL_SAMPLE_OFFSET
|
|
+#define AL_SAMPLE_OFFSET 0x1025
|
|
+#endif
|
|
+
|
|
+#ifndef AL_BYTE_OFFSET
|
|
+#define AL_BYTE_OFFSET 0x1026
|
|
+#endif
|
|
+
|
|
+#ifndef AL_UNDETERMINED
|
|
+#define AL_UNDETERMINED 0x1030
|
|
+#endif
|
|
+
|
|
+#ifndef AL_STATIC
|
|
+#define AL_STATIC 0x1028
|
|
+#endif
|
|
+
|
|
+#ifndef ALC_MONO_SOURCES
|
|
+#define ALC_MONO_SOURCES 0x1010
|
|
+#endif
|
|
+
|
|
+#ifndef ALC_STEREO_SOURCES
|
|
+#define ALC_STEREO_SOURCES 0x1011
|
|
+#endif
|
|
+
|
|
+#ifndef AL_INVALID_ENUM
|
|
+#ifdef AL_ILLEGAL_ENUM
|
|
+#define AL_INVALID_ENUM AL_ILLEGAL_ENUM
|
|
+#else
|
|
+#define AL_INVALID_ENUM 0xA002
|
|
+#endif
|
|
+#endif
|
|
+
|
|
+#ifndef AL_INVALID_OPERATION
|
|
+#ifdef AL_ILLEGAL_COMMAND
|
|
+#define AL_INVALID_OPERATION AL_ILLEGAL_COMMAND
|
|
+#else
|
|
+#define AL_INVALID_OPERATION 0xA004
|
|
+#endif
|
|
+#endif
|
|
+
|
|
+/* NOTE: THIS IS NOT IN ANY HEADER */
|
|
+#ifndef ALC_INVALID_OPERATION
|
|
+#define ALC_INVALID_OPERATION 0xA006
|
|
+#endif
|
|
+
|
|
+#ifndef ALC_CAPTURE_DEFAULT_DEVICE_SPECIFIER
|
|
+#define ALC_CAPTURE_DEFAULT_DEVICE_SPECIFIER 0x311
|
|
+#endif
|
|
+
|
|
+#ifndef ALC_CAPTURE_DEVICE_SPECIFIER
|
|
+#define ALC_CAPTURE_DEVICE_SPECIFIER 0x310
|
|
+#endif
|
|
+
|
|
+#ifndef ALC_CAPTURE_SAMPLES
|
|
+#define ALC_CAPTURE_SAMPLES 0x312
|
|
+#endif
|
|
+
|
|
|
|
int
|
|
main ()
|
|
@@ -5312,6 +7469,87 @@
|
|
#include <OpenAL/alext.h>
|
|
#endif
|
|
|
|
+#ifndef AL_SPEED_OF_SOUND
|
|
+#define AL_SPEED_OF_SOUND 0xC003
|
|
+#endif
|
|
+
|
|
+#ifndef AL_LINEAR_DISTANCE
|
|
+#define AL_LINEAR_DISTANCE 0xD003
|
|
+#endif
|
|
+
|
|
+#ifndef AL_LINEAR_DISTANCE_CLAMPED
|
|
+#define AL_LINEAR_DISTANCE_CLAMPED 0xD004
|
|
+#endif
|
|
+
|
|
+#ifndef AL_EXPONENT_DISTANCE
|
|
+#define AL_EXPONENT_DISTANCE 0xD005
|
|
+#endif
|
|
+
|
|
+#ifndef AL_EXPONENT_DISTANCE_CLAMPED
|
|
+#define AL_EXPONENT_DISTANCE_CLAMPED 0xD006
|
|
+#endif
|
|
+
|
|
+#ifndef AL_SEC_OFFSET
|
|
+#define AL_SEC_OFFSET 0x1024
|
|
+#endif
|
|
+
|
|
+#ifndef AL_SAMPLE_OFFSET
|
|
+#define AL_SAMPLE_OFFSET 0x1025
|
|
+#endif
|
|
+
|
|
+#ifndef AL_BYTE_OFFSET
|
|
+#define AL_BYTE_OFFSET 0x1026
|
|
+#endif
|
|
+
|
|
+#ifndef AL_UNDETERMINED
|
|
+#define AL_UNDETERMINED 0x1030
|
|
+#endif
|
|
+
|
|
+#ifndef AL_STATIC
|
|
+#define AL_STATIC 0x1028
|
|
+#endif
|
|
+
|
|
+#ifndef ALC_MONO_SOURCES
|
|
+#define ALC_MONO_SOURCES 0x1010
|
|
+#endif
|
|
+
|
|
+#ifndef ALC_STEREO_SOURCES
|
|
+#define ALC_STEREO_SOURCES 0x1011
|
|
+#endif
|
|
+
|
|
+#ifndef AL_INVALID_ENUM
|
|
+#ifdef AL_ILLEGAL_ENUM
|
|
+#define AL_INVALID_ENUM AL_ILLEGAL_ENUM
|
|
+#else
|
|
+#define AL_INVALID_ENUM 0xA002
|
|
+#endif
|
|
+#endif
|
|
+
|
|
+#ifndef AL_INVALID_OPERATION
|
|
+#ifdef AL_ILLEGAL_COMMAND
|
|
+#define AL_INVALID_OPERATION AL_ILLEGAL_COMMAND
|
|
+#else
|
|
+#define AL_INVALID_OPERATION 0xA004
|
|
+#endif
|
|
+#endif
|
|
+
|
|
+/* NOTE: THIS IS NOT IN ANY HEADER */
|
|
+#ifndef ALC_INVALID_OPERATION
|
|
+#define ALC_INVALID_OPERATION 0xA006
|
|
+#endif
|
|
+
|
|
+#ifndef ALC_CAPTURE_DEFAULT_DEVICE_SPECIFIER
|
|
+#define ALC_CAPTURE_DEFAULT_DEVICE_SPECIFIER 0x311
|
|
+#endif
|
|
+
|
|
+#ifndef ALC_CAPTURE_DEVICE_SPECIFIER
|
|
+#define ALC_CAPTURE_DEVICE_SPECIFIER 0x310
|
|
+#endif
|
|
+
|
|
+#ifndef ALC_CAPTURE_SAMPLES
|
|
+#define ALC_CAPTURE_SAMPLES 0x312
|
|
+#endif
|
|
+
|
|
|
|
long longval () { return $fp_const_name; }
|
|
unsigned long ulongval () { return $fp_const_name; }
|
|
@@ -5402,7 +7640,7 @@
|
|
fi
|
|
|
|
|
|
-case "$target" in
|
|
+case "$host" in
|
|
*-mingw32) CALLCONV=stdcall ;;
|
|
*) CALLCONV=ccall ;;
|
|
esac
|
|
@@ -5770,7 +8008,7 @@
|
|
} >&5
|
|
cat >&5 <<_CSEOF
|
|
|
|
-This file was extended by Haskell HOpenAL package $as_me 1.0, which was
|
|
+This file was extended by Haskell HOpenAL package $as_me 1.2, which was
|
|
generated by GNU Autoconf 2.57. Invocation command line was
|
|
|
|
CONFIG_FILES = $CONFIG_FILES
|
|
@@ -5830,7 +8068,7 @@
|
|
|
|
cat >>$CONFIG_STATUS <<_ACEOF
|
|
ac_cs_version="\\
|
|
-Haskell HOpenAL package config.status 1.0
|
|
+Haskell HOpenAL package config.status 1.2
|
|
configured by $0, generated by GNU Autoconf 2.57,
|
|
with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
|
|
|
|
@@ -6030,9 +8268,9 @@
|
|
s,@EXEEXT@,$EXEEXT,;t t
|
|
s,@OBJEXT@,$OBJEXT,;t t
|
|
s,@AL_LIBS@,$AL_LIBS,;t t
|
|
+s,@AL_FRAMEWORKS@,$AL_FRAMEWORKS,;t t
|
|
s,@CPP@,$CPP,;t t
|
|
s,@EGREP@,$EGREP,;t t
|
|
-s,@AL_FRAMEWORKS@,$AL_FRAMEWORKS,;t t
|
|
s,@BUILD_PACKAGE_BOOL@,$BUILD_PACKAGE_BOOL,;t t
|
|
s,@CALLCONV@,$CALLCONV,;t t
|
|
s,@LIBOBJS@,$LIBOBJS,;t t
|
|
diff -uNr --exclude=autom4te.cache --exclude=.cvsignore hugs98-Mar2005-patched/fptools/libraries/OpenAL/configure.ac ghc-6.4.2/libraries/OpenAL/configure.ac
|
|
--- hugs98-Mar2005-patched/fptools/libraries/OpenAL/configure.ac 2005-02-04 18:16:28.000000000 +0900
|
|
+++ ghc-6.4.2/libraries/OpenAL/configure.ac 2006-03-22 00:58:03.000000000 +0900
|
|
@@ -1,4 +1,4 @@
|
|
-AC_INIT([Haskell HOpenAL package], [1.0], [sven.panne@aedion.de], [OpenAL])
|
|
+AC_INIT([Haskell HOpenAL package], [1.2], [sven.panne@aedion.de], [OpenAL])
|
|
|
|
# Safety check: Ensure that we are in the correct source directory.
|
|
AC_CONFIG_SRCDIR([include/HsOpenAL.h.in])
|
|
@@ -19,7 +19,7 @@
|
|
# The following test for the OpenAL library is a bit of a hack, but gives nice
|
|
# feedback even for the case when no additional library is needed. (Mac OS X?)
|
|
AL_LIBS=no
|
|
-AC_SEARCH_LIBS([alGenSources], [openal], [AL_LIBS="$ac_cv_search_alGenSources"])
|
|
+AC_SEARCH_LIBS([alGenSources], [openal openal32], [AL_LIBS="$ac_cv_search_alGenSources"])
|
|
test x"$AL_LIBS" = x"none required" && AL_LIBS=
|
|
AC_SUBST([AL_LIBS])
|
|
|
|
@@ -27,42 +27,57 @@
|
|
AC_MSG_WARN([no OpenAL library found, so this package will not be built])
|
|
else
|
|
|
|
-al_found_header=no
|
|
-AC_CHECK_HEADERS([AL/alc.h OpenAL/alc.h], [al_found_header=yes; break])
|
|
-if test "$al_found_header" = no; then
|
|
- AC_MSG_WARN([no OpenAL header found, so this package will not be built])
|
|
-else
|
|
-
|
|
-AL_BUILD_PACKAGE=yes
|
|
-
|
|
# Ugly...
|
|
AL_FRAMEWORKS=
|
|
-case $target_os in
|
|
+case $host_os in
|
|
darwin*)
|
|
AL_FRAMEWORKS=OpenAL
|
|
;;
|
|
esac
|
|
AC_SUBST([AL_FRAMEWORKS])
|
|
|
|
+FP_HEADER_AL
|
|
+FP_HEADER_ALC
|
|
+if test -z "$AL_FRAMEWORKS" && test x"$fp_found_al_header$fp_found_alc_header" != xyesyes; then
|
|
+ AC_MSG_WARN([no OpenAL headers found, so this package will not be built])
|
|
+else
|
|
+
|
|
+AL_BUILD_PACKAGE=yes
|
|
+
|
|
AC_CHECK_HEADERS([AL/alext.h OpenAL/alext.h], [break])
|
|
|
|
-FPTOOLS_CHECK_HTYPE(ALboolean)
|
|
-FPTOOLS_CHECK_HTYPE(ALbyte)
|
|
-FPTOOLS_CHECK_HTYPE(ALubyte)
|
|
-FPTOOLS_CHECK_HTYPE(ALshort)
|
|
-FPTOOLS_CHECK_HTYPE(ALushort)
|
|
-FPTOOLS_CHECK_HTYPE(ALint)
|
|
-FPTOOLS_CHECK_HTYPE(ALuint)
|
|
-FPTOOLS_CHECK_HTYPE(ALsizei)
|
|
-FPTOOLS_CHECK_HTYPE(ALenum)
|
|
-FPTOOLS_CHECK_HTYPE(ALbitfield)
|
|
-FPTOOLS_CHECK_HTYPE(ALfloat)
|
|
-FPTOOLS_CHECK_HTYPE(ALclampf)
|
|
-FPTOOLS_CHECK_HTYPE(ALdouble)
|
|
-FPTOOLS_CHECK_HTYPE(ALclampd)
|
|
-FPTOOLS_CHECK_HTYPE(ALCenum)
|
|
+FP_FUNC_ALCCLOSEDEVICE_VOID
|
|
+FP_FUNC_ALCMAKECONTEXTCURRENT_VOID
|
|
+FP_FUNC_ALCPROCESSCONTEXT_VOID
|
|
+FP_FUNC_ALCDESTROYCONTEXT_VOID
|
|
+
|
|
+FPTOOLS_CHECK_HTYPE([ALboolean])
|
|
+FPTOOLS_CHECK_HTYPE([ALchar], [Int8])
|
|
+FPTOOLS_CHECK_HTYPE([ALbyte])
|
|
+FPTOOLS_CHECK_HTYPE([ALubyte])
|
|
+FPTOOLS_CHECK_HTYPE([ALshort])
|
|
+FPTOOLS_CHECK_HTYPE([ALushort])
|
|
+FPTOOLS_CHECK_HTYPE([ALint])
|
|
+FPTOOLS_CHECK_HTYPE([ALuint])
|
|
+FPTOOLS_CHECK_HTYPE([ALsizei])
|
|
+FPTOOLS_CHECK_HTYPE([ALenum])
|
|
+FPTOOLS_CHECK_HTYPE([ALfloat])
|
|
+FPTOOLS_CHECK_HTYPE([ALdouble])
|
|
+
|
|
+FPTOOLS_CHECK_HTYPE([ALCboolean], [Int8])
|
|
+FPTOOLS_CHECK_HTYPE([ALCchar], [Int8])
|
|
+FPTOOLS_CHECK_HTYPE([ALCbyte], [Int8])
|
|
+FPTOOLS_CHECK_HTYPE([ALCubyte], [Word8])
|
|
+FPTOOLS_CHECK_HTYPE([ALCshort], [Int16])
|
|
+FPTOOLS_CHECK_HTYPE([ALCushort], [Word16])
|
|
+FPTOOLS_CHECK_HTYPE([ALCint], [Int32])
|
|
+FPTOOLS_CHECK_HTYPE([ALCuint], [Word32])
|
|
+FPTOOLS_CHECK_HTYPE([ALCsizei], [Int32])
|
|
+FPTOOLS_CHECK_HTYPE([ALCenum], [Int32])
|
|
+FPTOOLS_CHECK_HTYPE([ALCfloat], [Float])
|
|
+FPTOOLS_CHECK_HTYPE([ALCdouble], [Double])
|
|
|
|
-FP_CHECK_CONSTS([AL_FORMAT_VORBIS_EXT ALC_FREQUENCY ALC_REFRESH ALC_SYNC ALC_NO_ERROR ALC_INVALID_DEVICE ALC_INVALID_CONTEXT ALC_INVALID_ENUM ALC_INVALID_VALUE ALC_OUT_OF_MEMORY ALC_DEFAULT_DEVICE_SPECIFIER ALC_DEVICE_SPECIFIER ALC_EXTENSIONS ALC_MAJOR_VERSION ALC_MINOR_VERSION ALC_ATTRIBUTES_SIZE ALC_ALL_ATTRIBUTES], [#include <stdio.h>
|
|
+FP_CHECK_CONSTS([AL_FALSE AL_TRUE AL_NO_ERROR AL_INVALID_NAME AL_INVALID_ENUM AL_INVALID_VALUE AL_INVALID_OPERATION AL_OUT_OF_MEMORY AL_DOPPLER_FACTOR AL_SPEED_OF_SOUND AL_DISTANCE_MODEL AL_VERSION AL_RENDERER AL_VENDOR AL_EXTENSIONS AL_NONE AL_INVERSE_DISTANCE AL_INVERSE_DISTANCE_CLAMPED AL_LINEAR_DISTANCE AL_LINEAR_DISTANCE_CLAMPED AL_EXPONENT_DISTANCE AL_EXPONENT_DISTANCE_CLAMPED 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_UNDETERMINED AL_STATIC AL_STREAMING AL_INITIAL AL_PLAYING AL_PAUSED AL_STOPPED AL_FREQUENCY AL_SIZE AL_BITS AL_CHANNELS AL_FORMAT_MONO8 AL_FORMAT_MONO16 AL_FORMAT_STEREO8 AL_FORMAT_STEREO16 ALC_FALSE ALC_TRUE ALC_FREQUENCY ALC_REFRESH ALC_SYNC ALC_MONO_SOURCES ALC_STEREO_SOURCES ALC_NO_ERROR ALC_INVALID_DEVICE ALC_INVALID_CONTEXT ALC_INVALID_ENUM ALC_INVALID_VALUE ALC_INVALID_OPERATION ALC_OUT_OF_MEMORY ALC_DEFAULT_DEVICE_SPECIFIER ALC_DEVICE_SPECIFIER ALC_EXTENSIONS ALC_CAPTURE_DEFAULT_DEVICE_SPECIFIER ALC_CAPTURE_DEVICE_SPECIFIER ALC_ATTRIBUTES_SIZE ALC_ALL_ATTRIBUTES ALC_MAJOR_VERSION ALC_MINOR_VERSION ALC_CAPTURE_SAMPLES], [#include <stdio.h>
|
|
#if defined(HAVE_AL_ALC_H)
|
|
#include <AL/alc.h>
|
|
#elif defined(HAVE_OPENAL_ALC_H)
|
|
@@ -74,6 +89,87 @@
|
|
#elif defined(HAVE_OPENAL_ALEXT_H)
|
|
#include <OpenAL/alext.h>
|
|
#endif
|
|
+
|
|
+#ifndef AL_SPEED_OF_SOUND
|
|
+#define AL_SPEED_OF_SOUND 0xC003
|
|
+#endif
|
|
+
|
|
+#ifndef AL_LINEAR_DISTANCE
|
|
+#define AL_LINEAR_DISTANCE 0xD003
|
|
+#endif
|
|
+
|
|
+#ifndef AL_LINEAR_DISTANCE_CLAMPED
|
|
+#define AL_LINEAR_DISTANCE_CLAMPED 0xD004
|
|
+#endif
|
|
+
|
|
+#ifndef AL_EXPONENT_DISTANCE
|
|
+#define AL_EXPONENT_DISTANCE 0xD005
|
|
+#endif
|
|
+
|
|
+#ifndef AL_EXPONENT_DISTANCE_CLAMPED
|
|
+#define AL_EXPONENT_DISTANCE_CLAMPED 0xD006
|
|
+#endif
|
|
+
|
|
+#ifndef AL_SEC_OFFSET
|
|
+#define AL_SEC_OFFSET 0x1024
|
|
+#endif
|
|
+
|
|
+#ifndef AL_SAMPLE_OFFSET
|
|
+#define AL_SAMPLE_OFFSET 0x1025
|
|
+#endif
|
|
+
|
|
+#ifndef AL_BYTE_OFFSET
|
|
+#define AL_BYTE_OFFSET 0x1026
|
|
+#endif
|
|
+
|
|
+#ifndef AL_UNDETERMINED
|
|
+#define AL_UNDETERMINED 0x1030
|
|
+#endif
|
|
+
|
|
+#ifndef AL_STATIC
|
|
+#define AL_STATIC 0x1028
|
|
+#endif
|
|
+
|
|
+#ifndef ALC_MONO_SOURCES
|
|
+#define ALC_MONO_SOURCES 0x1010
|
|
+#endif
|
|
+
|
|
+#ifndef ALC_STEREO_SOURCES
|
|
+#define ALC_STEREO_SOURCES 0x1011
|
|
+#endif
|
|
+
|
|
+#ifndef AL_INVALID_ENUM
|
|
+#ifdef AL_ILLEGAL_ENUM
|
|
+#define AL_INVALID_ENUM AL_ILLEGAL_ENUM
|
|
+#else
|
|
+#define AL_INVALID_ENUM 0xA002
|
|
+#endif
|
|
+#endif
|
|
+
|
|
+#ifndef AL_INVALID_OPERATION
|
|
+#ifdef AL_ILLEGAL_COMMAND
|
|
+#define AL_INVALID_OPERATION AL_ILLEGAL_COMMAND
|
|
+#else
|
|
+#define AL_INVALID_OPERATION 0xA004
|
|
+#endif
|
|
+#endif
|
|
+
|
|
+/* NOTE: THIS IS NOT IN ANY HEADER */
|
|
+#ifndef ALC_INVALID_OPERATION
|
|
+#define ALC_INVALID_OPERATION 0xA006
|
|
+#endif
|
|
+
|
|
+#ifndef ALC_CAPTURE_DEFAULT_DEVICE_SPECIFIER
|
|
+#define ALC_CAPTURE_DEFAULT_DEVICE_SPECIFIER 0x311
|
|
+#endif
|
|
+
|
|
+#ifndef ALC_CAPTURE_DEVICE_SPECIFIER
|
|
+#define ALC_CAPTURE_DEVICE_SPECIFIER 0x310
|
|
+#endif
|
|
+
|
|
+#ifndef ALC_CAPTURE_SAMPLES
|
|
+#define ALC_CAPTURE_SAMPLES 0x312
|
|
+#endif
|
|
])
|
|
|
|
AC_DEFINE_UNQUOTED([AL_LIBS],
|
|
@@ -95,7 +191,7 @@
|
|
fi
|
|
AC_SUBST([BUILD_PACKAGE_BOOL])
|
|
|
|
-case "$target" in
|
|
+case "$host" in
|
|
*-mingw32) CALLCONV=stdcall ;;
|
|
*) CALLCONV=ccall ;;
|
|
esac
|
|
diff -uNr --exclude=autom4te.cache --exclude=.cvsignore hugs98-Mar2005-patched/fptools/libraries/OpenAL/examples/test/TestDevice.hs ghc-6.4.2/libraries/OpenAL/examples/test/TestDevice.hs
|
|
--- hugs98-Mar2005-patched/fptools/libraries/OpenAL/examples/test/TestDevice.hs 2004-04-05 23:15:54.000000000 +0900
|
|
+++ ghc-6.4.2/libraries/OpenAL/examples/test/TestDevice.hs 2006-03-22 00:58:04.000000000 +0900
|
|
@@ -1,8 +1,15 @@
|
|
-import Sound.OpenAL
|
|
+import Control.Monad ( unless )
|
|
+import System.IO ( hPutStrLn, stderr )
|
|
import System.Posix.Unistd ( sleep )
|
|
+import Sound.OpenAL
|
|
|
|
main :: IO ()
|
|
main = do
|
|
- dev <- openDevice (Just "'( ( devices '( native null ) ) )")
|
|
- sleep 1
|
|
- closeDevice dev
|
|
+ maybeDevice <- openDevice (Just "'( ( devices '( native null ) ) )")
|
|
+ case maybeDevice of
|
|
+ Nothing -> hPutStrLn stderr "openDevice failed"
|
|
+ Just device -> do
|
|
+ sleep 1
|
|
+ ok <- closeDevice device
|
|
+ unless ok $
|
|
+ hPutStrLn stderr "closeDevice failed"
|
|
diff -uNr --exclude=autom4te.cache --exclude=.cvsignore hugs98-Mar2005-patched/fptools/libraries/OpenAL/include/HsOpenAL.h.in ghc-6.4.2/libraries/OpenAL/include/HsOpenAL.h.in
|
|
--- hugs98-Mar2005-patched/fptools/libraries/OpenAL/include/HsOpenAL.h.in 2004-01-03 04:03:10.000000000 +0900
|
|
+++ ghc-6.4.2/libraries/OpenAL/include/HsOpenAL.h.in 2006-03-22 00:58:04.000000000 +0900
|
|
@@ -1,7 +1,7 @@
|
|
/* -----------------------------------------------------------------------------
|
|
*
|
|
* Module : C support for Sound.OpenAL
|
|
- * Copyright : (c) Sven Panne 2003-2004
|
|
+ * Copyright : (c) Sven Panne 2003-2005
|
|
* License : BSD-style (see the file libraries/OpenAL/LICENSE)
|
|
*
|
|
* Maintainer : sven.panne@aedion.de
|
|
@@ -22,11 +22,9 @@
|
|
#if defined(HAVE_AL_ALC_H)
|
|
#include <AL/al.h>
|
|
#include <AL/alc.h>
|
|
-#include <AL/alut.h>
|
|
#elif defined(HAVE_OPENAL_ALC_H)
|
|
#include <OpenAL/al.h>
|
|
#include <OpenAL/alc.h>
|
|
-#include <OpenAL/alut.h>
|
|
#endif
|
|
|
|
#endif
|
|
diff -uNr --exclude=autom4te.cache --exclude=.cvsignore hugs98-Mar2005-patched/fptools/libraries/OpenAL/include/HsOpenALConfig.h.in ghc-6.4.2/libraries/OpenAL/include/HsOpenALConfig.h.in
|
|
--- hugs98-Mar2005-patched/fptools/libraries/OpenAL/include/HsOpenALConfig.h.in 2005-03-12 08:13:22.000000000 +0900
|
|
+++ ghc-6.4.2/libraries/OpenAL/include/HsOpenALConfig.h.in 2006-04-19 04:36:53.000000000 +0900
|
|
@@ -1,5 +1,17 @@
|
|
/* include/HsOpenALConfig.h.in. Generated from configure.ac by autoheader. */
|
|
|
|
+/* Define to 1 if `alcCloseDevice' returns void. */
|
|
+#undef ALCCLOSEDEVICE_VOID
|
|
+
|
|
+/* Define to 1 if `alcDestroyContext' returns void. */
|
|
+#undef ALCDESTROYCONTEXT_VOID
|
|
+
|
|
+/* Define to 1 if `alcMakeContextCurrent' returns void. */
|
|
+#undef ALCMAKECONTEXTCURRENT_VOID
|
|
+
|
|
+/* Define to 1 if `alcProcessContext' returns void. */
|
|
+#undef ALCPROCESSCONTEXT_VOID
|
|
+
|
|
/* Framework flags for AL, as a list of string literals. */
|
|
#undef AL_FRAMEWORKS
|
|
|
|
@@ -12,6 +24,15 @@
|
|
/* The value of ALC_ATTRIBUTES_SIZE. */
|
|
#undef CONST_ALC_ATTRIBUTES_SIZE
|
|
|
|
+/* The value of ALC_CAPTURE_DEFAULT_DEVICE_SPECIFIER. */
|
|
+#undef CONST_ALC_CAPTURE_DEFAULT_DEVICE_SPECIFIER
|
|
+
|
|
+/* The value of ALC_CAPTURE_DEVICE_SPECIFIER. */
|
|
+#undef CONST_ALC_CAPTURE_DEVICE_SPECIFIER
|
|
+
|
|
+/* The value of ALC_CAPTURE_SAMPLES. */
|
|
+#undef CONST_ALC_CAPTURE_SAMPLES
|
|
+
|
|
/* The value of ALC_DEFAULT_DEVICE_SPECIFIER. */
|
|
#undef CONST_ALC_DEFAULT_DEVICE_SPECIFIER
|
|
|
|
@@ -21,6 +42,9 @@
|
|
/* The value of ALC_EXTENSIONS. */
|
|
#undef CONST_ALC_EXTENSIONS
|
|
|
|
+/* The value of ALC_FALSE. */
|
|
+#undef CONST_ALC_FALSE
|
|
+
|
|
/* The value of ALC_FREQUENCY. */
|
|
#undef CONST_ALC_FREQUENCY
|
|
|
|
@@ -33,6 +57,9 @@
|
|
/* The value of ALC_INVALID_ENUM. */
|
|
#undef CONST_ALC_INVALID_ENUM
|
|
|
|
+/* The value of ALC_INVALID_OPERATION. */
|
|
+#undef CONST_ALC_INVALID_OPERATION
|
|
+
|
|
/* The value of ALC_INVALID_VALUE. */
|
|
#undef CONST_ALC_INVALID_VALUE
|
|
|
|
@@ -42,6 +69,9 @@
|
|
/* The value of ALC_MINOR_VERSION. */
|
|
#undef CONST_ALC_MINOR_VERSION
|
|
|
|
+/* The value of ALC_MONO_SOURCES. */
|
|
+#undef CONST_ALC_MONO_SOURCES
|
|
+
|
|
/* The value of ALC_NO_ERROR. */
|
|
#undef CONST_ALC_NO_ERROR
|
|
|
|
@@ -51,11 +81,197 @@
|
|
/* The value of ALC_REFRESH. */
|
|
#undef CONST_ALC_REFRESH
|
|
|
|
+/* The value of ALC_STEREO_SOURCES. */
|
|
+#undef CONST_ALC_STEREO_SOURCES
|
|
+
|
|
/* The value of ALC_SYNC. */
|
|
#undef CONST_ALC_SYNC
|
|
|
|
-/* The value of AL_FORMAT_VORBIS_EXT. */
|
|
-#undef CONST_AL_FORMAT_VORBIS_EXT
|
|
+/* The value of ALC_TRUE. */
|
|
+#undef CONST_ALC_TRUE
|
|
+
|
|
+/* The value of AL_BITS. */
|
|
+#undef CONST_AL_BITS
|
|
+
|
|
+/* The value of AL_BUFFER. */
|
|
+#undef CONST_AL_BUFFER
|
|
+
|
|
+/* The value of AL_BUFFERS_PROCESSED. */
|
|
+#undef CONST_AL_BUFFERS_PROCESSED
|
|
+
|
|
+/* The value of AL_BUFFERS_QUEUED. */
|
|
+#undef CONST_AL_BUFFERS_QUEUED
|
|
+
|
|
+/* The value of AL_BYTE_OFFSET. */
|
|
+#undef CONST_AL_BYTE_OFFSET
|
|
+
|
|
+/* The value of AL_CHANNELS. */
|
|
+#undef CONST_AL_CHANNELS
|
|
+
|
|
+/* The value of AL_CONE_INNER_ANGLE. */
|
|
+#undef CONST_AL_CONE_INNER_ANGLE
|
|
+
|
|
+/* The value of AL_CONE_OUTER_ANGLE. */
|
|
+#undef CONST_AL_CONE_OUTER_ANGLE
|
|
+
|
|
+/* The value of AL_CONE_OUTER_GAIN. */
|
|
+#undef CONST_AL_CONE_OUTER_GAIN
|
|
+
|
|
+/* The value of AL_DIRECTION. */
|
|
+#undef CONST_AL_DIRECTION
|
|
+
|
|
+/* The value of AL_DISTANCE_MODEL. */
|
|
+#undef CONST_AL_DISTANCE_MODEL
|
|
+
|
|
+/* The value of AL_DOPPLER_FACTOR. */
|
|
+#undef CONST_AL_DOPPLER_FACTOR
|
|
+
|
|
+/* The value of AL_EXPONENT_DISTANCE. */
|
|
+#undef CONST_AL_EXPONENT_DISTANCE
|
|
+
|
|
+/* The value of AL_EXPONENT_DISTANCE_CLAMPED. */
|
|
+#undef CONST_AL_EXPONENT_DISTANCE_CLAMPED
|
|
+
|
|
+/* The value of AL_EXTENSIONS. */
|
|
+#undef CONST_AL_EXTENSIONS
|
|
+
|
|
+/* The value of AL_FALSE. */
|
|
+#undef CONST_AL_FALSE
|
|
+
|
|
+/* The value of AL_FORMAT_MONO16. */
|
|
+#undef CONST_AL_FORMAT_MONO16
|
|
+
|
|
+/* The value of AL_FORMAT_MONO8. */
|
|
+#undef CONST_AL_FORMAT_MONO8
|
|
+
|
|
+/* The value of AL_FORMAT_STEREO16. */
|
|
+#undef CONST_AL_FORMAT_STEREO16
|
|
+
|
|
+/* The value of AL_FORMAT_STEREO8. */
|
|
+#undef CONST_AL_FORMAT_STEREO8
|
|
+
|
|
+/* The value of AL_FREQUENCY. */
|
|
+#undef CONST_AL_FREQUENCY
|
|
+
|
|
+/* The value of AL_GAIN. */
|
|
+#undef CONST_AL_GAIN
|
|
+
|
|
+/* The value of AL_INITIAL. */
|
|
+#undef CONST_AL_INITIAL
|
|
+
|
|
+/* The value of AL_INVALID_ENUM. */
|
|
+#undef CONST_AL_INVALID_ENUM
|
|
+
|
|
+/* The value of AL_INVALID_NAME. */
|
|
+#undef CONST_AL_INVALID_NAME
|
|
+
|
|
+/* The value of AL_INVALID_OPERATION. */
|
|
+#undef CONST_AL_INVALID_OPERATION
|
|
+
|
|
+/* The value of AL_INVALID_VALUE. */
|
|
+#undef CONST_AL_INVALID_VALUE
|
|
+
|
|
+/* The value of AL_INVERSE_DISTANCE. */
|
|
+#undef CONST_AL_INVERSE_DISTANCE
|
|
+
|
|
+/* The value of AL_INVERSE_DISTANCE_CLAMPED. */
|
|
+#undef CONST_AL_INVERSE_DISTANCE_CLAMPED
|
|
+
|
|
+/* The value of AL_LINEAR_DISTANCE. */
|
|
+#undef CONST_AL_LINEAR_DISTANCE
|
|
+
|
|
+/* The value of AL_LINEAR_DISTANCE_CLAMPED. */
|
|
+#undef CONST_AL_LINEAR_DISTANCE_CLAMPED
|
|
+
|
|
+/* The value of AL_LOOPING. */
|
|
+#undef CONST_AL_LOOPING
|
|
+
|
|
+/* The value of AL_MAX_DISTANCE. */
|
|
+#undef CONST_AL_MAX_DISTANCE
|
|
+
|
|
+/* The value of AL_MAX_GAIN. */
|
|
+#undef CONST_AL_MAX_GAIN
|
|
+
|
|
+/* The value of AL_MIN_GAIN. */
|
|
+#undef CONST_AL_MIN_GAIN
|
|
+
|
|
+/* The value of AL_NONE. */
|
|
+#undef CONST_AL_NONE
|
|
+
|
|
+/* The value of AL_NO_ERROR. */
|
|
+#undef CONST_AL_NO_ERROR
|
|
+
|
|
+/* The value of AL_ORIENTATION. */
|
|
+#undef CONST_AL_ORIENTATION
|
|
+
|
|
+/* The value of AL_OUT_OF_MEMORY. */
|
|
+#undef CONST_AL_OUT_OF_MEMORY
|
|
+
|
|
+/* The value of AL_PAUSED. */
|
|
+#undef CONST_AL_PAUSED
|
|
+
|
|
+/* The value of AL_PITCH. */
|
|
+#undef CONST_AL_PITCH
|
|
+
|
|
+/* The value of AL_PLAYING. */
|
|
+#undef CONST_AL_PLAYING
|
|
+
|
|
+/* The value of AL_POSITION. */
|
|
+#undef CONST_AL_POSITION
|
|
+
|
|
+/* The value of AL_REFERENCE_DISTANCE. */
|
|
+#undef CONST_AL_REFERENCE_DISTANCE
|
|
+
|
|
+/* The value of AL_RENDERER. */
|
|
+#undef CONST_AL_RENDERER
|
|
+
|
|
+/* The value of AL_ROLLOFF_FACTOR. */
|
|
+#undef CONST_AL_ROLLOFF_FACTOR
|
|
+
|
|
+/* The value of AL_SAMPLE_OFFSET. */
|
|
+#undef CONST_AL_SAMPLE_OFFSET
|
|
+
|
|
+/* The value of AL_SEC_OFFSET. */
|
|
+#undef CONST_AL_SEC_OFFSET
|
|
+
|
|
+/* The value of AL_SIZE. */
|
|
+#undef CONST_AL_SIZE
|
|
+
|
|
+/* The value of AL_SOURCE_RELATIVE. */
|
|
+#undef CONST_AL_SOURCE_RELATIVE
|
|
+
|
|
+/* The value of AL_SOURCE_STATE. */
|
|
+#undef CONST_AL_SOURCE_STATE
|
|
+
|
|
+/* The value of AL_SOURCE_TYPE. */
|
|
+#undef CONST_AL_SOURCE_TYPE
|
|
+
|
|
+/* The value of AL_SPEED_OF_SOUND. */
|
|
+#undef CONST_AL_SPEED_OF_SOUND
|
|
+
|
|
+/* The value of AL_STATIC. */
|
|
+#undef CONST_AL_STATIC
|
|
+
|
|
+/* The value of AL_STOPPED. */
|
|
+#undef CONST_AL_STOPPED
|
|
+
|
|
+/* The value of AL_STREAMING. */
|
|
+#undef CONST_AL_STREAMING
|
|
+
|
|
+/* The value of AL_TRUE. */
|
|
+#undef CONST_AL_TRUE
|
|
+
|
|
+/* The value of AL_UNDETERMINED. */
|
|
+#undef CONST_AL_UNDETERMINED
|
|
+
|
|
+/* The value of AL_VELOCITY. */
|
|
+#undef CONST_AL_VELOCITY
|
|
+
|
|
+/* The value of AL_VENDOR. */
|
|
+#undef CONST_AL_VENDOR
|
|
+
|
|
+/* The value of AL_VERSION. */
|
|
+#undef CONST_AL_VERSION
|
|
|
|
/* Define to 1 if you have the <AL/alc.h> header file. */
|
|
#undef HAVE_AL_ALC_H
|
|
@@ -63,6 +279,9 @@
|
|
/* Define to 1 if you have the <AL/alext.h> header file. */
|
|
#undef HAVE_AL_ALEXT_H
|
|
|
|
+/* Define to 1 if you have the <AL/al.h> header file. */
|
|
+#undef HAVE_AL_AL_H
|
|
+
|
|
/* Define to 1 if you have the <inttypes.h> header file. */
|
|
#undef HAVE_INTTYPES_H
|
|
|
|
@@ -75,6 +294,9 @@
|
|
/* Define to 1 if you have the <OpenAL/alext.h> header file. */
|
|
#undef HAVE_OPENAL_ALEXT_H
|
|
|
|
+/* Define to 1 if you have the <OpenAL/al.h> header file. */
|
|
+#undef HAVE_OPENAL_AL_H
|
|
+
|
|
/* Define to 1 if you have the <stdint.h> header file. */
|
|
#undef HAVE_STDINT_H
|
|
|
|
@@ -96,23 +318,50 @@
|
|
/* Define to 1 if you have the <unistd.h> header file. */
|
|
#undef HAVE_UNISTD_H
|
|
|
|
-/* Define to Haskell type for ALbitfield */
|
|
-#undef HTYPE_ALBITFIELD
|
|
-
|
|
/* Define to Haskell type for ALboolean */
|
|
#undef HTYPE_ALBOOLEAN
|
|
|
|
/* Define to Haskell type for ALbyte */
|
|
#undef HTYPE_ALBYTE
|
|
|
|
+/* Define to Haskell type for ALCboolean */
|
|
+#undef HTYPE_ALCBOOLEAN
|
|
+
|
|
+/* Define to Haskell type for ALCbyte */
|
|
+#undef HTYPE_ALCBYTE
|
|
+
|
|
+/* Define to Haskell type for ALCchar */
|
|
+#undef HTYPE_ALCCHAR
|
|
+
|
|
+/* Define to Haskell type for ALCdouble */
|
|
+#undef HTYPE_ALCDOUBLE
|
|
+
|
|
/* Define to Haskell type for ALCenum */
|
|
#undef HTYPE_ALCENUM
|
|
|
|
-/* Define to Haskell type for ALclampd */
|
|
-#undef HTYPE_ALCLAMPD
|
|
+/* Define to Haskell type for ALCfloat */
|
|
+#undef HTYPE_ALCFLOAT
|
|
+
|
|
+/* Define to Haskell type for ALchar */
|
|
+#undef HTYPE_ALCHAR
|
|
+
|
|
+/* Define to Haskell type for ALCint */
|
|
+#undef HTYPE_ALCINT
|
|
+
|
|
+/* Define to Haskell type for ALCshort */
|
|
+#undef HTYPE_ALCSHORT
|
|
+
|
|
+/* Define to Haskell type for ALCsizei */
|
|
+#undef HTYPE_ALCSIZEI
|
|
+
|
|
+/* Define to Haskell type for ALCubyte */
|
|
+#undef HTYPE_ALCUBYTE
|
|
+
|
|
+/* Define to Haskell type for ALCuint */
|
|
+#undef HTYPE_ALCUINT
|
|
|
|
-/* Define to Haskell type for ALclampf */
|
|
-#undef HTYPE_ALCLAMPF
|
|
+/* Define to Haskell type for ALCushort */
|
|
+#undef HTYPE_ALCUSHORT
|
|
|
|
/* Define to Haskell type for ALdouble */
|
|
#undef HTYPE_ALDOUBLE
|
|
diff -uNr --exclude=autom4te.cache --exclude=.cvsignore hugs98-Mar2005-patched/fptools/libraries/OpenAL/package.conf.in ghc-6.4.2/libraries/OpenAL/package.conf.in
|
|
--- hugs98-Mar2005-patched/fptools/libraries/OpenAL/package.conf.in 2005-02-19 00:06:43.000000000 +0900
|
|
+++ ghc-6.4.2/libraries/OpenAL/package.conf.in 2006-03-22 00:58:03.000000000 +0900
|
|
@@ -9,27 +9,36 @@
|
|
exposed-modules:
|
|
Sound.OpenAL,
|
|
Sound.OpenAL.AL,
|
|
+ Sound.OpenAL.AL.ALboolean,
|
|
+ Sound.OpenAL.AL.Attenuation,
|
|
Sound.OpenAL.AL.BasicTypes,
|
|
Sound.OpenAL.AL.Buffer,
|
|
+ Sound.OpenAL.AL.BufferInternal,
|
|
+ Sound.OpenAL.AL.Doppler,
|
|
+ Sound.OpenAL.AL.Errors,
|
|
+ Sound.OpenAL.AL.Extensions,
|
|
+ Sound.OpenAL.AL.Format,
|
|
Sound.OpenAL.AL.Listener,
|
|
Sound.OpenAL.AL.Source,
|
|
+ Sound.OpenAL.AL.StringQueries,
|
|
Sound.OpenAL.ALC,
|
|
+ Sound.OpenAL.ALC.BasicTypes,
|
|
+ Sound.OpenAL.ALC.Capture,
|
|
Sound.OpenAL.ALC.Context,
|
|
Sound.OpenAL.ALC.Device,
|
|
Sound.OpenAL.ALC.Errors,
|
|
- Sound.OpenAL.ALC.Extensions,
|
|
- Sound.OpenAL.ALUT,
|
|
- Sound.OpenAL.ALUT.Initialization,
|
|
- Sound.OpenAL.ALUT.WAV
|
|
+ Sound.OpenAL.ALC.Extensions
|
|
|
|
hidden-modules:
|
|
- Sound.OpenAL.AL.ALboolean,
|
|
- Sound.OpenAL.AL.Format,
|
|
Sound.OpenAL.AL.PeekPoke,
|
|
Sound.OpenAL.AL.QueryUtils,
|
|
- Sound.OpenAL.ALC.BasicTypes,
|
|
- Sound.OpenAL.ALC.Queries,
|
|
- Sound.OpenAL.ALUT.Exception
|
|
+ Sound.OpenAL.AL.SourceState,
|
|
+ Sound.OpenAL.AL.String,
|
|
+ Sound.OpenAL.ALC.ALCboolean,
|
|
+ Sound.OpenAL.ALC.QueryUtils,
|
|
+ Sound.OpenAL.ALC.String,
|
|
+ Sound.OpenAL.Config,
|
|
+ Sound.OpenAL.Constants
|
|
|
|
import-dirs: IMPORT_DIR
|
|
|