about summary refs log tree commit diff
path: root/src/al.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/al.zig')
-rw-r--r--src/al.zig189
1 files changed, 93 insertions, 96 deletions
diff --git a/src/al.zig b/src/al.zig
index a5164d6..5193df2 100644
--- a/src/al.zig
+++ b/src/al.zig
@@ -20,10 +20,7 @@ const Child = meta.Child;
 const Tag = meta.Tag;
 const meta = @import("std").meta;
 
-usingnamespace @cImport({
-    @cInclude("AL/al.h");
-    @cInclude("AL/alext.h");
-});
+const c = @import("cimport.zig");
 
 pub const Error = error {
     /// Bad name (ID) passed to an OpenAL function.
@@ -39,17 +36,17 @@ pub const Error = error {
 };
 
 // FIXME: turn into enum
-pub const FALSE = AL_FALSE;
-pub const TRUE = AL_TRUE;
-pub const AUTO = AL_AUTO_SOFT;
+pub const FALSE = c.AL_FALSE;
+pub const TRUE = c.AL_TRUE;
+pub const AUTO = c.AL_AUTO_SOFT;
 
 pub const listener = struct {
-    const Property = enum(ALenum) {
-        gain = AL_GAIN,
-        position = AL_POSITION,
-        velocity = AL_VELOCITY,
-        orientation = AL_ORIENTATION,
-        meters_per_unit = AL_METERS_PER_UNIT,
+    const Property = enum(c.ALenum) {
+        gain = c.AL_GAIN,
+        position = c.AL_POSITION,
+        velocity = c.AL_VELOCITY,
+        orientation = c.AL_ORIENTATION,
+        meters_per_unit = c.AL_METERS_PER_UNIT,
     };
 
     /// Set a property for the listener.
@@ -57,20 +54,20 @@ pub const listener = struct {
         const param = @enumToInt(property);
         const T = @TypeOf(value);
         switch (T) {
-            f32 => alListenerf(param, value),
-            i32 => alListeneri(param, value),
+            f32 => c.alListenerf(param, value),
+            i32 => c.alListeneri(param, value),
             else => switch (Child(T)) {
-                f32 => alListenerfv(param, value[0..]),
-                i32 => alListeneriv(param, value[0..]),
+                f32 => c.alListenerfv(param, value[0..]),
+                i32 => c.alListeneriv(param, value[0..]),
                 else => unreachable,
             }
         }
 
-        switch (alGetError()) {
-            AL_NO_ERROR => {},
-            AL_INVALID_VALUE => return Error.InvalidValue,
-            AL_INVALID_ENUM => return Error.InvalidEnum,
-            AL_INVALID_OPERATION => return Error.InvalidOperation,
+        switch (c.alGetError()) {
+            c.AL_NO_ERROR => {},
+            c.AL_INVALID_VALUE => return Error.InvalidValue,
+            c.AL_INVALID_ENUM => return Error.InvalidEnum,
+            c.AL_INVALID_OPERATION => return Error.InvalidOperation,
             else => unreachable,
         }
     }
@@ -91,11 +88,11 @@ pub const buffer = struct {
     /// Generate one buffer for audio data and return its reference.
     pub fn create() Error!u32 {
         var reference: u32 = undefined;
-        alGenBuffers(1, &reference);
-        return switch (alGetError()) {
-            AL_NO_ERROR => reference,
-            AL_INVALID_VALUE => Error.InvalidValue,
-            AL_OUT_OF_MEMORY => Error.OutOfMemory,
+        c.alGenBuffers(1, &reference);
+        return switch (c.alGetError()) {
+            c.AL_NO_ERROR => reference,
+            c.AL_INVALID_VALUE => Error.InvalidValue,
+            c.AL_OUT_OF_MEMORY => Error.OutOfMemory,
             else => unreachable,
         };
     }
@@ -103,12 +100,12 @@ pub const buffer = struct {
     /// Free resources used by one buffer.
     /// Buffers attached to a source cannot be deleted.
     pub fn destroy(reference: *const u32) Error!void {
-        alDeleteBuffers(1, reference);
-        switch (alGetError()) {
-            AL_NO_ERROR => {},
-            AL_INVALID_OPERATION => return Error.InvalidOperation,
-            AL_INVALID_NAME => return Error.InvalidName,
-            AL_INVALID_VALUE => return Error.InvalidValue,
+        c.alDeleteBuffers(1, reference);
+        switch (c.alGetError()) {
+            c.AL_NO_ERROR => {},
+            c.AL_INVALID_OPERATION => return Error.InvalidOperation,
+            c.AL_INVALID_NAME => return Error.InvalidName,
+            c.AL_INVALID_VALUE => return Error.InvalidValue,
             else => unreachable,
         }
     }
@@ -116,28 +113,28 @@ pub const buffer = struct {
     /// Fill a buffer with audio data.
     pub fn fill(reference: u32, data: Data, freq: i32) Error!void {
         const format = switch (data) {
-            .mono8 => AL_FORMAT_MONO8,
-            .mono16 => AL_FORMAT_MONO16,
-            .stereo8 => AL_FORMAT_STEREO8,
-            .stereo16 => AL_FORMAT_STEREO16,
+            .mono8 => c.AL_FORMAT_MONO8,
+            .mono16 => c.AL_FORMAT_MONO16,
+            .stereo8 => c.AL_FORMAT_STEREO8,
+            .stereo16 => c.AL_FORMAT_STEREO16,
         };
 
         switch (data) {
             .mono8, .stereo8 => |slice| {
                 const size = @intCast(c_int, slice.len);
-                alBufferData(reference, format, slice.ptr, size, freq);
+                c.alBufferData(reference, format, slice.ptr, size, freq);
             },
             .mono16, .stereo16 => |slice| {
                 const size = @intCast(c_int, slice.len) * 2;
-                alBufferData(reference, format, slice.ptr, size, freq);
+                c.alBufferData(reference, format, slice.ptr, size, freq);
             },
         }
 
-        switch (alGetError()) {
-            AL_NO_ERROR => {},
-            AL_OUT_OF_MEMORY => return Error.OutOfMemory,
-            AL_INVALID_VALUE => return Error.InvalidValue,
-            AL_INVALID_ENUM => return Error.InvalidEnum,
+        switch (c.alGetError()) {
+            c.AL_NO_ERROR => {},
+            c.AL_OUT_OF_MEMORY => return Error.OutOfMemory,
+            c.AL_INVALID_VALUE => return Error.InvalidValue,
+            c.AL_INVALID_ENUM => return Error.InvalidEnum,
             else => unreachable,
         }
     }
@@ -147,11 +144,11 @@ pub const source = struct {
     /// Generate one source for audio data and return its reference.
     pub fn create() Error!u32 {
         var reference: u32 = undefined;
-        alGenSources(1, &reference);
-        return switch (alGetError()) {
-            AL_NO_ERROR => reference,
-            AL_INVALID_VALUE => Error.InvalidValue,
-            AL_OUT_OF_MEMORY => Error.OutOfMemory,
+        c.alGenSources(1, &reference);
+        return switch (c.alGetError()) {
+            c.AL_NO_ERROR => reference,
+            c.AL_INVALID_VALUE => Error.InvalidValue,
+            c.AL_OUT_OF_MEMORY => Error.OutOfMemory,
             else => unreachable,
         };
     }
@@ -159,35 +156,35 @@ pub const source = struct {
     /// Free resources used by one source.
     /// Sources attached to a source cannot be deleted.
     pub fn destroy(reference: *const u32) Error!void {
-        alDeleteSources(1, reference);
-        switch (alGetError()) {
-            AL_NO_ERROR => {},
-            AL_INVALID_OPERATION => return Error.InvalidOperation,
-            AL_INVALID_NAME => return Error.InvalidName,
-            AL_INVALID_VALUE => return Error.InvalidValue,
+        c.alDeleteSources(1, reference);
+        switch (c.alGetError()) {
+            c.AL_NO_ERROR => {},
+            c.AL_INVALID_OPERATION => return Error.InvalidOperation,
+            c.AL_INVALID_NAME => return Error.InvalidName,
+            c.AL_INVALID_VALUE => return Error.InvalidValue,
             else => unreachable,
         }
     }
 
-    const Property = enum(ALenum) {
-        pitch = AL_PITCH,
-        gain = AL_GAIN,
-        position = AL_POSITION,
-        velocity = AL_VELOCITY,
-        direction = AL_DIRECTION,
-        relative = AL_SOURCE_RELATIVE,
-        looping = AL_LOOPING,
-        buffer = AL_BUFFER,
-        state = AL_SOURCE_STATE,
-        sec_offset = AL_SEC_OFFSET,
-        spatialize = AL_SOURCE_SPATIALIZE_SOFT,
+    const Property = enum(c.ALenum) {
+        pitch = c.AL_PITCH,
+        gain = c.AL_GAIN,
+        position = c.AL_POSITION,
+        velocity = c.AL_VELOCITY,
+        direction = c.AL_DIRECTION,
+        relative = c.AL_SOURCE_RELATIVE,
+        looping = c.AL_LOOPING,
+        buffer = c.AL_BUFFER,
+        state = c.AL_SOURCE_STATE,
+        sec_offset = c.AL_SEC_OFFSET,
+        spatialize = c.AL_SOURCE_SPATIALIZE_SOFT,
     };
 
     pub const State = enum(i32) {
-        initial = AL_INITIAL,
-        playing = AL_PLAYING,
-        paused = AL_PAUSED,
-        stopped = AL_STOPPED,
+        initial = c.AL_INITIAL,
+        playing = c.AL_PLAYING,
+        paused = c.AL_PAUSED,
+        stopped = c.AL_STOPPED,
     };
 
     /// Set a property for the source.
@@ -195,24 +192,24 @@ pub const source = struct {
         const param = @enumToInt(property);
         const T = @TypeOf(value);
         switch (T) {
-            f32 => alSourcef(reference, param, value),
-            i32 => alSourcei(reference, param, value),
+            f32 => c.alSourcef(reference, param, value),
+            i32 => c.alSourcei(reference, param, value),
             else => switch (@typeInfo(T)) {
-                .Enum => alSourcei(reference, param, @enumToInt(value)),
+                .Enum => c.alSourcei(reference, param, @enumToInt(value)),
                 else => switch (Child(T)) {
-                    f32 => alSourcefv(reference, param, value[0..]),
-                    i32 => alSourceiv(reference, param, value[0..]),
+                    f32 => c.alSourcefv(reference, param, value[0..]),
+                    i32 => c.alSourceiv(reference, param, value[0..]),
                     else => unreachable,
                 },
             },
         }
 
-        switch (alGetError()) {
-            AL_NO_ERROR => {},
-            AL_INVALID_VALUE => return Error.InvalidValue,
-            AL_INVALID_ENUM => return Error.InvalidEnum,
-            AL_INVALID_NAME => return Error.InvalidName,
-            AL_INVALID_OPERATION => return Error.InvalidOperation,
+        switch (c.alGetError()) {
+            c.AL_NO_ERROR => {},
+            c.AL_INVALID_VALUE => return Error.InvalidValue,
+            c.AL_INVALID_ENUM => return Error.InvalidEnum,
+            c.AL_INVALID_NAME => return Error.InvalidName,
+            c.AL_INVALID_OPERATION => return Error.InvalidOperation,
             else => unreachable,
         }
     }
@@ -222,35 +219,35 @@ pub const source = struct {
         const param = @enumToInt(property);
         var value: T = undefined;
         switch (T) {
-            f32 => alGetSourcef(reference, param, &value),
-            i32 => alGetSourcei(reference, param, &value),
+            f32 => c.alGetSourcef(reference, param, &value),
+            i32 => c.alGetSourcei(reference, param, &value),
             else => switch (@typeInfo(T)) {
                 .Enum => {
                     var raw: i32 = undefined;
-                    alGetSourcei(reference, param, &raw);
+                    c.alGetSourcei(reference, param, &raw);
                     value = @intToEnum(T, raw);
                 },
                 else => unreachable,
             },
         }
 
-        return switch (alGetError()) {
-            AL_NO_ERROR => value,
-            AL_INVALID_VALUE => return Error.InvalidValue,
-            AL_INVALID_ENUM => return Error.InvalidEnum,
-            AL_INVALID_NAME => return Error.InvalidName,
-            AL_INVALID_OPERATION => return Error.InvalidOperation,
+        return switch (c.alGetError()) {
+            c.AL_NO_ERROR => value,
+            c.AL_INVALID_VALUE => return Error.InvalidValue,
+            c.AL_INVALID_ENUM => return Error.InvalidEnum,
+            c.AL_INVALID_NAME => return Error.InvalidName,
+            c.AL_INVALID_OPERATION => return Error.InvalidOperation,
             else => unreachable,
         };
     }
 
     /// Play the source.
     pub fn play(reference: u32) Error!void {
-        alSourcePlay(reference);
-        switch (alGetError()) {
-            AL_NO_ERROR => {},
-            AL_INVALID_NAME => return Error.InvalidName,
-            AL_INVALID_OPERATION => return Error.InvalidOperation,
+        c.alSourcePlay(reference);
+        switch (c.alGetError()) {
+            c.AL_NO_ERROR => {},
+            c.AL_INVALID_NAME => return Error.InvalidName,
+            c.AL_INVALID_OPERATION => return Error.InvalidOperation,
             else => unreachable,
         }
     }