diff options
author | Charlie Birks <admin@daftgames.net> | 2014-01-28 10:37:41 +0000 |
---|---|---|
committer | Charlie Birks <admin@daftgames.net> | 2014-01-28 10:37:41 +0000 |
commit | 398d28480a0f7b91cfe523ba175d455b8a248bde (patch) | |
tree | 4da3ef4202e940b8c04647274fffc0b6eca6baa7 /src/library_openal.js | |
parent | 1083b6e1f6d471bb947e917695e415ede07dad9f (diff) |
improve alcGetString
Diffstat (limited to 'src/library_openal.js')
-rw-r--r-- | src/library_openal.js | 64 |
1 files changed, 62 insertions, 2 deletions
diff --git a/src/library_openal.js b/src/library_openal.js index f57fd247..929db092 100644 --- a/src/library_openal.js +++ b/src/library_openal.js @@ -7,6 +7,7 @@ var LibraryOpenAL = { currentContext: null, stringCache: {}, + alcStringCache: {}, QUEUE_INTERVAL: 25, QUEUE_LOOKAHEAD: 100, @@ -1220,8 +1221,67 @@ var LibraryOpenAL = { return 0; }, - alcGetString: function(param) { - return allocate(intArrayFromString('NA'), 'i8', ALLOC_NORMAL); + alcGetString: function(device, param) { + if (AL.alcStringCache[param]) return AL.alcStringCache[param]; + var ret; + switch (param) { + case 0 /* ALC_NO_ERROR */: + ret = 'No Error'; + break; + case 0xA001 /* ALC_INVALID_DEVICE */: + ret = 'Invalid Device'; + break; + case 0xA002 /* ALC_INVALID_CONTEXT */: + ret = 'Invalid Context'; + break; + case 0xA003 /* ALC_INVALID_ENUM */: + ret = 'Invalid Enum'; + break; + case 0xA004 /* ALC_INVALID_VALUE */: + ret = 'Invalid Value'; + break; + case 0xA005 /* ALC_OUT_OF_MEMORY */: + ret = 'Out of Memory'; + break; + case 0x1004 /* ALC_DEFAULT_DEVICE_SPECIFIER */: + if (typeof(AudioContext) == "function" || + typeof(webkitAudioContext) == "function") { + ret = 'Device'; + } else { + return 0; + } + break; + case 0x1005 /* ALC_DEVICE_SPECIFIER */: + if (typeof(AudioContext) == "function" || + typeof(webkitAudioContext) == "function") { + ret = 'Device\0'; + } else { + ret = '\0'; + } + break; + case 0x311 /* ALC_CAPTURE_DEFAULT_DEVICE_SPECIFIER */: + return 0; + break; + case 0x310 /* ALC_CAPTURE_DEVICE_SPECIFIER */: + ret = '\0' + break; + case 0x1006 /* ALC_EXTENSIONS */: + if (!device) { + AL.currentContext.err = 0xA001 /* ALC_INVALID_DEVICE */; + return 0; + } + ret = ''; + break; + default: + AL.currentContext.err = 0xA003 /* ALC_INVALID_ENUM */; + return 0; + } + + ret = allocate(intArrayFromString(ret), 'i8', ALLOC_NORMAL); + + AL.alcStringCache[param] = ret; + + return ret; }, alcGetProcAddress: function(device, fname) { |