diff options
Diffstat (limited to 'src/al.zig')
-rw-r--r-- | src/al.zig | 189 |
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, } } |