fmod/core/
flags.rs

1// Copyright (c) 2024 Lily Lyons
2//
3// This Source Code Form is subject to the terms of the Mozilla Public
4// License, v. 2.0. If a copy of the MPL was not distributed with this
5// file, You can obtain one at https://mozilla.org/MPL/2.0/.
6
7use fmod_sys::*;
8
9bitflags::bitflags! {
10  #[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
11  pub struct InitFlags: FMOD_INITFLAGS {
12    const NORMAL =                  FMOD_INIT_NORMAL;
13    const STREAM_FROM_UPDATE =      FMOD_INIT_STREAM_FROM_UPDATE;
14    const MIX_FROM_UPDATE =         FMOD_INIT_MIX_FROM_UPDATE;
15    const RIGHTHANDED_3D =          FMOD_INIT_3D_RIGHTHANDED;
16    const CLIP_OUTPUT =             FMOD_INIT_CLIP_OUTPUT;
17    const CHANNEL_LOWPASS =         FMOD_INIT_CHANNEL_LOWPASS;
18    const CHANNEL_DISTANCE_FILTER = FMOD_INIT_CHANNEL_DISTANCEFILTER;
19    const PROFILE_ENABLE =          FMOD_INIT_PROFILE_ENABLE;
20    const VOL_0_BECOMES_VIRTUAL =   FMOD_INIT_VOL0_BECOMES_VIRTUAL;
21    const GEOMETRY_USE_CLOSEST =    FMOD_INIT_GEOMETRY_USECLOSEST;
22    const PREFER_DOLBY_DOWNMIX =    FMOD_INIT_PREFER_DOLBY_DOWNMIX;
23    const THREAD_UNSAFE =           FMOD_INIT_THREAD_UNSAFE; // FIXME: this is unsafe
24    const PROFILE_METER_ALL =       FMOD_INIT_PROFILE_METER_ALL;
25    const MEMORY_TRACKING =         FMOD_INIT_MEMORY_TRACKING;
26  }
27}
28
29impl From<FMOD_INITFLAGS> for InitFlags {
30    fn from(value: FMOD_INITFLAGS) -> Self {
31        InitFlags::from_bits_truncate(value)
32    }
33}
34
35impl From<InitFlags> for FMOD_INITFLAGS {
36    fn from(value: InitFlags) -> Self {
37        value.bits()
38    }
39}
40
41bitflags::bitflags! {
42  #[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
43  pub struct ThreadAffinity: FMOD_THREAD_AFFINITY {
44    const GROUP_DEFAULT      = FMOD_THREAD_AFFINITY_GROUP_DEFAULT       as FMOD_THREAD_AFFINITY;
45    const GROUP_A            = FMOD_THREAD_AFFINITY_GROUP_A             as FMOD_THREAD_AFFINITY;
46    const GROUP_B            = FMOD_THREAD_AFFINITY_GROUP_B             as FMOD_THREAD_AFFINITY;
47    const GROUP_C            = FMOD_THREAD_AFFINITY_GROUP_C             as FMOD_THREAD_AFFINITY;
48    const MIXER              = FMOD_THREAD_AFFINITY_MIXER               as FMOD_THREAD_AFFINITY;
49    const FEEDER             = FMOD_THREAD_AFFINITY_FEEDER              as FMOD_THREAD_AFFINITY;
50    const STREAM             = FMOD_THREAD_AFFINITY_STREAM              as FMOD_THREAD_AFFINITY;
51    const FILE               = FMOD_THREAD_AFFINITY_FILE                as FMOD_THREAD_AFFINITY;
52    const NONBLOCKING        = FMOD_THREAD_AFFINITY_NONBLOCKING         as FMOD_THREAD_AFFINITY;
53    const RECORD             = FMOD_THREAD_AFFINITY_RECORD              as FMOD_THREAD_AFFINITY;
54    const GEOMETRY           = FMOD_THREAD_AFFINITY_GEOMETRY            as FMOD_THREAD_AFFINITY;
55    const PROFILER           = FMOD_THREAD_AFFINITY_PROFILER            as FMOD_THREAD_AFFINITY;
56    const STUDIO_UPDATE      = FMOD_THREAD_AFFINITY_STUDIO_UPDATE       as FMOD_THREAD_AFFINITY;
57    const STUDIO_LOAD_BANK   = FMOD_THREAD_AFFINITY_STUDIO_LOAD_BANK    as FMOD_THREAD_AFFINITY;
58    const STUDIO_LOAD_SAMPLE = FMOD_THREAD_AFFINITY_STUDIO_LOAD_SAMPLE  as FMOD_THREAD_AFFINITY;
59    const CORE_ALL           = FMOD_THREAD_AFFINITY_CORE_ALL            as FMOD_THREAD_AFFINITY;
60    const CORE_0             = FMOD_THREAD_AFFINITY_CORE_0              as FMOD_THREAD_AFFINITY;
61    const CORE_1             = FMOD_THREAD_AFFINITY_CORE_1              as FMOD_THREAD_AFFINITY;
62    const CORE_2             = FMOD_THREAD_AFFINITY_CORE_2              as FMOD_THREAD_AFFINITY;
63    const CORE_3             = FMOD_THREAD_AFFINITY_CORE_3              as FMOD_THREAD_AFFINITY;
64    const CORE_4             = FMOD_THREAD_AFFINITY_CORE_4              as FMOD_THREAD_AFFINITY;
65    const CORE_5             = FMOD_THREAD_AFFINITY_CORE_5              as FMOD_THREAD_AFFINITY;
66    const CORE_6             = FMOD_THREAD_AFFINITY_CORE_6              as FMOD_THREAD_AFFINITY;
67    const CORE_7             = FMOD_THREAD_AFFINITY_CORE_7              as FMOD_THREAD_AFFINITY;
68    const CORE_8             = FMOD_THREAD_AFFINITY_CORE_8              as FMOD_THREAD_AFFINITY;
69    const CORE_9             = FMOD_THREAD_AFFINITY_CORE_9              as FMOD_THREAD_AFFINITY;
70    const CORE_10            = FMOD_THREAD_AFFINITY_CORE_10             as FMOD_THREAD_AFFINITY;
71    const CORE_11            = FMOD_THREAD_AFFINITY_CORE_11             as FMOD_THREAD_AFFINITY;
72    const CORE_12            = FMOD_THREAD_AFFINITY_CORE_12             as FMOD_THREAD_AFFINITY;
73    const CORE_13            = FMOD_THREAD_AFFINITY_CORE_13             as FMOD_THREAD_AFFINITY;
74    const CORE_14            = FMOD_THREAD_AFFINITY_CORE_14             as FMOD_THREAD_AFFINITY;
75    const CORE_15            = FMOD_THREAD_AFFINITY_CORE_15             as FMOD_THREAD_AFFINITY;
76  }
77}
78
79impl From<FMOD_THREAD_AFFINITY> for ThreadAffinity {
80    fn from(value: FMOD_THREAD_AFFINITY) -> Self {
81        ThreadAffinity::from_bits_truncate(value)
82    }
83}
84
85impl From<ThreadAffinity> for FMOD_THREAD_AFFINITY {
86    fn from(value: ThreadAffinity) -> Self {
87        value.bits()
88    }
89}
90
91// FIXME: A LOT OF THESE ARE UNSAFE!
92bitflags::bitflags! {
93  #[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
94  pub struct Mode: FMOD_MODE {
95    const DEFAULT                   = FMOD_DEFAULT;
96    const LOOP_OFF                  = FMOD_LOOP_OFF;
97    const LOOP_NORMAL               = FMOD_LOOP_NORMAL;
98    const LOOP_BIDI                 = FMOD_LOOP_BIDI;
99    const D2                        = FMOD_2D;
100    const D3                        = FMOD_3D;
101    const CREATE_STREAM             = FMOD_CREATESTREAM;
102    const CREATE_SAMPLE             = FMOD_CREATESAMPLE;
103    const CREATE_COMPRESSED_SAMPLE  = FMOD_CREATECOMPRESSEDSAMPLE;
104    const OPEN_USER                 = FMOD_OPENUSER;
105    const OPEN_MEMORY               = FMOD_OPENMEMORY;
106    const OPEN_MEMORY_POINT         = FMOD_OPENMEMORY_POINT;
107    const OPEN_RAW                  = FMOD_OPENRAW;
108    const OPEN_ONLY                 = FMOD_OPENONLY;
109    const ACCURATE_TIME             = FMOD_ACCURATETIME;
110    const MPEG_SEARCH               = FMOD_MPEGSEARCH;
111    const NONBLOCKING               = FMOD_NONBLOCKING;
112    const UNIQUE                    = FMOD_UNIQUE;
113    const HEADRELATIVE_3D           = FMOD_3D_HEADRELATIVE;
114    const WORLDRELATIVE_3D          = FMOD_3D_WORLDRELATIVE;
115    const INVERSE_ROLLOFF_3D        = FMOD_3D_INVERSEROLLOFF;
116    const LINEAR_ROLLOFF_3D         = FMOD_3D_LINEARROLLOFF;
117    const LINEAR_SQUARE_ROLLOFF_3D  = FMOD_3D_LINEARSQUAREROLLOFF;
118    const INVERSE_TAPERED_ROLLOFF_3D = FMOD_3D_INVERSETAPEREDROLLOFF;
119    const CUSTOM_ROLLOFF_3D         = FMOD_3D_CUSTOMROLLOFF;
120    const IGNORE_GEOMETRY_3D        = FMOD_3D_IGNOREGEOMETRY;
121    const IGNORE_TAGS               = FMOD_IGNORETAGS;
122    const LOWMEM                    = FMOD_LOWMEM;
123    const VIRTUAL_PLAYFROM_START    = FMOD_VIRTUAL_PLAYFROMSTART;
124  }
125}
126
127impl From<FMOD_MODE> for Mode {
128    fn from(value: FMOD_MODE) -> Self {
129        Mode::from_bits_truncate(value)
130    }
131}
132
133impl From<Mode> for FMOD_MODE {
134    fn from(value: Mode) -> Self {
135        value.bits()
136    }
137}
138
139// FIXME: this is deprecated..?
140bitflags::bitflags! {
141  #[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
142  pub struct ChannelMask: FMOD_CHANNELMASK {
143    const FRONT_LEFT        = FMOD_CHANNELMASK_FRONT_LEFT;
144    const FRONT_RIGHT       = FMOD_CHANNELMASK_FRONT_RIGHT;
145    const FRONT_CENTER      = FMOD_CHANNELMASK_FRONT_CENTER;
146    const LOW_FREQUENCY     = FMOD_CHANNELMASK_LOW_FREQUENCY;
147    const SURROUND_LEFT     = FMOD_CHANNELMASK_SURROUND_LEFT;
148    const SURROUND_RIGHT    = FMOD_CHANNELMASK_SURROUND_RIGHT ;
149    const BACK_LEFT         = FMOD_CHANNELMASK_BACK_LEFT;
150    const BACK_RIGHT        = FMOD_CHANNELMASK_BACK_RIGHT;
151    const BACK_CENTER       = FMOD_CHANNELMASK_BACK_CENTER;
152    const MONO              = FMOD_CHANNELMASK_MONO;
153    const STEREO            = FMOD_CHANNELMASK_STEREO;
154    const LRC               = FMOD_CHANNELMASK_LRC;
155    const QUAD              = FMOD_CHANNELMASK_QUAD;
156    const SURROUND          = FMOD_CHANNELMASK_SURROUND;
157    const _5POINT1          = FMOD_CHANNELMASK_5POINT1;
158    const _5POINT1_REARS    = FMOD_CHANNELMASK_5POINT1_REARS;
159    const _7POINT0          = FMOD_CHANNELMASK_7POINT0;
160    const _7POINT1          = FMOD_CHANNELMASK_7POINT1;
161  }
162}
163
164impl From<FMOD_CHANNELMASK> for ChannelMask {
165    fn from(value: FMOD_CHANNELMASK) -> Self {
166        ChannelMask::from_bits_truncate(value)
167    }
168}
169
170impl From<ChannelMask> for FMOD_CHANNELMASK {
171    fn from(value: ChannelMask) -> Self {
172        value.bits()
173    }
174}
175
176bitflags::bitflags! {
177  #[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
178  pub struct DriverState: FMOD_DRIVER_STATE {
179    const CONNECTED = FMOD_DRIVER_STATE_CONNECTED;
180    const DEFAULT   = FMOD_DRIVER_STATE_DEFAULT;
181  }
182}
183
184impl From<FMOD_DRIVER_STATE> for DriverState {
185    fn from(value: FMOD_DRIVER_STATE) -> Self {
186        DriverState::from_bits_truncate(value)
187    }
188}
189
190impl From<DriverState> for FMOD_DRIVER_STATE {
191    fn from(value: DriverState) -> Self {
192        value.bits()
193    }
194}