Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
66 changes: 65 additions & 1 deletion project/src/media/openal/OpenALBindings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3425,6 +3425,68 @@ namespace lime {
}


value lime_alc_get_string_list (value device, int param) {

ALCdevice* alcDevice = (ALCdevice*)val_data (device);
const char* values = alcGetString (alcDevice, param);

if (!values) {
return alloc_array (0);
}

int count = 0;
const char* ptr = values;
while (*ptr) {
count++;
ptr += strlen (ptr) + 1;
}

value result = alloc_array (count);
ptr = values;
count = 0;
while (*ptr) {
val_array_set_i (result, count, alloc_string (ptr));
count++;
ptr += strlen (ptr) + 1;
}

return result;

}


HL_PRIM varray* HL_NAME(hl_alc_get_string_list) (HL_CFFIPointer* device, int param) {

ALCdevice* alcDevice = device ? (ALCdevice*)device->ptr : 0;
const char* values = alcGetString (alcDevice, param);

if (!values) {
return hl_alloc_array (&hlt_bytes, 0);
}

int count = 0;
const char* ptr = values;
while (*ptr) {
count++;
ptr += strlen (ptr) + 1;
}

varray* result = hl_alloc_array(&hlt_bytes, count);
ptr = values;
count = 0;
while (*ptr) {
char* _result = (char*)malloc (strlen (ptr) + 1);
strcpy (_result, ptr);
hl_aptr (result, vbyte*)[count] = (vbyte*)_result;
count++;
ptr += strlen (ptr) + 1;
}

return result;

}


bool lime_alc_make_context_current (value context) {

ALCcontext* alcContext = (ALCcontext*)val_data (context);
Expand Down Expand Up @@ -3584,7 +3646,7 @@ namespace lime {

al_gc_mutex.Lock ();

alSoftEventCallback->Call (alloc_int((int)eventType), alloc_int((int)deviceType), CFFIPointer (device), message ? alloc_string(message) : alloc_null());
alSoftEventCallback->Call (alloc_int((int)eventType), alloc_int((int)deviceType), (value)CFFIPointer (device), message ? alloc_string(message) : alloc_null());

al_gc_mutex.Unlock ();

Expand Down Expand Up @@ -3827,6 +3889,7 @@ namespace lime {
DEFINE_PRIME1 (lime_alc_get_error);
DEFINE_PRIME3 (lime_alc_get_integerv);
DEFINE_PRIME2 (lime_alc_get_string);
DEFINE_PRIME2 (lime_alc_get_string_list);
DEFINE_PRIME1 (lime_alc_make_context_current);
DEFINE_PRIME1 (lime_alc_open_device);
DEFINE_PRIME1v (lime_alc_pause_device);
Expand Down Expand Up @@ -3954,6 +4017,7 @@ namespace lime {
DEFINE_HL_PRIM (_I32, hl_alc_get_error, _TCFFIPOINTER);
DEFINE_HL_PRIM (_ARR, hl_alc_get_integerv, _TCFFIPOINTER _I32 _I32);
DEFINE_HL_PRIM (_BYTES, hl_alc_get_string, _TCFFIPOINTER _I32);
DEFINE_HL_PRIM (_ARR, hl_alc_get_string_list, _TCFFIPOINTER _I32);
DEFINE_HL_PRIM (_BOOL, hl_alc_make_context_current, _TCFFIPOINTER);
DEFINE_HL_PRIM (_TCFFIPOINTER, hl_alc_open_device, _STRING);
DEFINE_HL_PRIM (_VOID, hl_alc_pause_device, _TCFFIPOINTER);
Expand Down
28 changes: 28 additions & 0 deletions src/lime/_internal/backend/native/NativeCFFI.hx
Original file line number Diff line number Diff line change
Expand Up @@ -1553,6 +1553,12 @@ class NativeCFFI

@:cffi private static function lime_al_delete_sources(n:Int, sources:Dynamic):Void;

@:cffi private static function lime_al_delete_effect(buffer:CFFIPointer):Void;

@:cffi private static function lime_al_delete_filter(buffer:CFFIPointer):Void;

@:cffi private static function lime_al_delete_auxiliary_effect_slot(slot:CFFIPointer):Void;

@:cffi private static function lime_al_disable(capability:Int):Void;

@:cffi private static function lime_al_distance_model(distanceModel:Int):Void;
Expand Down Expand Up @@ -1703,6 +1709,8 @@ class NativeCFFI

@:cffi private static function lime_alc_get_string(device:CFFIPointer, param:Int):Dynamic;

@:cffi private static function lime_alc_get_string_list(device:CFFIPointer, param:Int):Dynamic;

@:cffi private static function lime_alc_make_context_current(context:CFFIPointer):Bool;

@:cffi private static function lime_alc_open_device(devicename:String):CFFIPointer;
Expand Down Expand Up @@ -1779,6 +1787,10 @@ class NativeCFFI
private static var lime_al_delete_source = new cpp.Callable<cpp.Object->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_al_delete_source", "ov", false));
private static var lime_al_delete_sources = new cpp.Callable<Int->cpp.Object->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_al_delete_sources", "iov",
false));
private static var lime_al_delete_effect = new cpp.Callable<cpp.Object->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_al_delete_effect", "ov", false));
private static var lime_al_delete_filter = new cpp.Callable<cpp.Object->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_al_delete_filter", "ov", false));
private static var lime_al_delete_auxiliary_effect_slot = new cpp.Callable<cpp.Object->cpp.Void>(cpp.Prime._loadPrime("lime",
"lime_al_delete_auxiliary_effect_slot", "ov", false));
private static var lime_al_disable = new cpp.Callable<Int->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_al_disable", "iv", false));
private static var lime_al_distance_model = new cpp.Callable<Int->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_al_distance_model", "iv", false));
private static var lime_al_doppler_factor = new cpp.Callable<cpp.Float32->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_al_doppler_factor", "fv", false));
Expand Down Expand Up @@ -1881,6 +1893,7 @@ class NativeCFFI
private static var lime_alc_get_integerv = new cpp.Callable<cpp.Object->Int->Int->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_alc_get_integerv",
"oiio", false));
private static var lime_alc_get_string = new cpp.Callable<cpp.Object->Int->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_alc_get_string", "oio", false));
private static var lime_alc_get_string_list = new cpp.Callable<cpp.Object->Int->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_alc_get_string_list", "oio", false));
private static var lime_alc_make_context_current = new cpp.Callable<cpp.Object->Bool>(cpp.Prime._loadPrime("lime", "lime_alc_make_context_current", "ob",
false));
private static var lime_alc_open_device = new cpp.Callable<String->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_alc_open_device", "so", false));
Expand Down Expand Up @@ -1936,6 +1949,9 @@ class NativeCFFI
private static var lime_al_delete_buffers = CFFI.load("lime", "lime_al_delete_buffers", 2);
private static var lime_al_delete_source = CFFI.load("lime", "lime_al_delete_source", 1);
private static var lime_al_delete_sources = CFFI.load("lime", "lime_al_delete_sources", 2);
private static var lime_al_delete_effect = CFFI.load("lime", "lime_al_delete_effect", 1);
private static var lime_al_delete_filter = CFFI.load("lime", "lime_al_delete_filter", 1);
private static var lime_al_delete_auxiliary_effect_slot = CFFI.load("lime", "lime_al_delete_auxiliary_effect_slot", 1);
private static var lime_al_disable = CFFI.load("lime", "lime_al_disable", 1);
private static var lime_al_distance_model = CFFI.load("lime", "lime_al_distance_model", 1);
private static var lime_al_doppler_factor = CFFI.load("lime", "lime_al_doppler_factor", 1);
Expand Down Expand Up @@ -2011,6 +2027,7 @@ class NativeCFFI
private static var lime_alc_get_error = CFFI.load("lime", "lime_alc_get_error", 1);
private static var lime_alc_get_integerv = CFFI.load("lime", "lime_alc_get_integerv", 3);
private static var lime_alc_get_string = CFFI.load("lime", "lime_alc_get_string", 2);
private static var lime_alc_get_string_list = CFFI.load("lime", "lime_alc_get_string_list", 2);
private static var lime_alc_make_context_current = CFFI.load("lime", "lime_alc_make_context_current", 1);
private static var lime_alc_open_device = CFFI.load("lime", "lime_alc_open_device", 1);
private static var lime_alc_pause_device = CFFI.load("lime", "lime_alc_pause_device", 1);
Expand Down Expand Up @@ -2068,6 +2085,12 @@ class NativeCFFI

@:hlNative("lime", "hl_al_delete_sources") private static function lime_al_delete_sources(n:Int, sources:hl.NativeArray<CFFIPointer>):Void {}

@:hlNative("lime", "lime_al_delete_effect") private static function lime_al_delete_effect(buffer:CFFIPointer):Void {}

@:hlNative("lime", "lime_al_delete_filter") private static function lime_al_delete_filter(buffer:CFFIPointer):Void {}

@:hlNative("lime", "lime_al_delete_auxiliary_effect_slot") private static function lime_al_delete_auxiliary_effect_slot(slot:CFFIPointer):Void {}

@:hlNative("lime", "hl_al_disable") private static function lime_al_disable(capability:Int):Void {}

@:hlNative("lime", "hl_al_distance_model") private static function lime_al_distance_model(distanceModel:Int):Void {}
Expand Down Expand Up @@ -2363,6 +2386,11 @@ class NativeCFFI
return null;
}

@:hlNative("lime", "hl_alc_get_string_list") private static function lime_alc_get_string_list(device:CFFIPointer, param:Int):hl.NativeArray<Array>
{
return null;
}

@:hlNative("lime", "hl_alc_make_context_current") private static function lime_alc_make_context_current(context:ALContext):Bool
{
return false;
Expand Down
Loading