From 3156b17057569fb8d3074603d8d8b4ba0dd73c57 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Sun, 16 Feb 2020 23:49:29 -0800 Subject: [PATCH] Stub out an interface for a callback-driven buffer --- al/buffer.cpp | 41 +++++++++++++++++++++++++++++++++++++++++ alc/alc.cpp | 5 +++++ alc/inprogext.h | 17 +++++++++++++++++ 3 files changed, 63 insertions(+) diff --git a/al/buffer.cpp b/al/buffer.cpp index de8abeb6..c7acb9aa 100644 --- a/al/buffer.cpp +++ b/al/buffer.cpp @@ -1376,6 +1376,47 @@ START_API_FUNC END_API_FUNC +AL_API void AL_APIENTRY alBufferCallbackSOFT(ALuint /*buffer*/, ALenum /*format*/, ALsizei /*freq*/, LPALBUFFERCALLBACKTYPESOFT /*callback*/, ALvoid* /*userptr*/, ALbitfieldSOFT /*flags*/) +START_API_FUNC +{ + ContextRef context{GetContextRef()}; + if UNLIKELY(!context) return; + + context->setError(AL_INVALID_OPERATION, "alBufferCallbackSOFT not functional"); +} +END_API_FUNC + +AL_API void AL_APIENTRY alGetBufferPtrSOFT(ALuint /*buffer*/, ALenum /*param*/, ALvoid** /*value*/) +START_API_FUNC +{ + ContextRef context{GetContextRef()}; + if UNLIKELY(!context) return; + + context->setError(AL_INVALID_OPERATION, "alGetBufferPtrSOFT not functional"); +} +END_API_FUNC + +AL_API void AL_APIENTRY alGetBuffer3PtrSOFT(ALuint /*buffer*/, ALenum /*param*/, ALvoid** /*value1*/, ALvoid** /*value2*/, ALvoid** /*value3*/) +START_API_FUNC +{ + ContextRef context{GetContextRef()}; + if UNLIKELY(!context) return; + + context->setError(AL_INVALID_OPERATION, "alGetBuffer3PtrSOFT not functional"); +} +END_API_FUNC + +AL_API void AL_APIENTRY alGetBufferPtrvSOFT(ALuint /*buffer*/, ALenum /*param*/, ALvoid** /*values*/) +START_API_FUNC +{ + ContextRef context{GetContextRef()}; + if UNLIKELY(!context) return; + + context->setError(AL_INVALID_OPERATION, "alGetBufferPtrvSOFT not functional"); +} +END_API_FUNC + + ALuint BytesFromFmt(FmtType type) noexcept { switch(type) diff --git a/alc/alc.cpp b/alc/alc.cpp index 52edbe1e..948fbfb1 100644 --- a/alc/alc.cpp +++ b/alc/alc.cpp @@ -393,6 +393,11 @@ const struct { DECL(alEventCallbackSOFT), DECL(alGetPointerSOFT), DECL(alGetPointervSOFT), + + DECL(alBufferCallbackSOFT), + DECL(alGetBufferPtrSOFT), + DECL(alGetBuffer3PtrSOFT), + DECL(alGetBufferPtrvSOFT), }; #undef DECL diff --git a/alc/inprogext.h b/alc/inprogext.h index ad3ea288..1eeeddf2 100644 --- a/alc/inprogext.h +++ b/alc/inprogext.h @@ -77,6 +77,23 @@ AL_API void AL_APIENTRY alGetPointervSOFT(ALenum pname, void **values); #define AL_EFFECTSLOT_TARGET_SOFT 0xf000 #endif +#ifndef AL_SOFT_callback_buffer +#define AL_SOFT_callback_buffer +#define AL_BUFFER_CALLBACK_FUNCTION_SOFT 0x19A0 +#define AL_BUFFER_CALLBACK_USER_PARAM_SOFT 0x19A1 +typedef ALsizei (AL_APIENTRY*LPALBUFFERCALLBACKTYPESOFT)(ALvoid *userptr, ALvoid *sampledata, ALsizei numsamples); +typedef void (AL_APIENTRY*LPALBUFFERCALLBACKSOFT)(ALuint buffer, ALenum format, ALsizei freq, LPALBUFFERCALLBACKTYPESOFT callback, ALvoid *userptr, ALbitfieldSOFT flags); +typedef void (AL_APIENTRY*LPALGETBUFFERPTRSOFT)(ALuint buffer, ALenum param, ALvoid **value); +typedef void (AL_APIENTRY*LPALGETBUFFER3PTRSOFT)(ALuint buffer, ALenum param, ALvoid **value1, ALvoid **value2, ALvoid **value3); +typedef void (AL_APIENTRY*LPALGETBUFFERPTRVSOFT)(ALuint buffer, ALenum param, ALvoid **values); +#ifdef AL_ALEXT_PROTOTYPES +AL_API void AL_APIENTRY alBufferCallbackSOFT(ALuint buffer, ALenum format, ALsizei freq, LPALBUFFERCALLBACKTYPESOFT callback, ALvoid *userptr, ALbitfieldSOFT flags); +AL_API void AL_APIENTRY alGetBufferPtrSOFT(ALuint buffer, ALenum param, ALvoid **ptr); +AL_API void AL_APIENTRY alGetBuffer3PtrSOFT(ALuint buffer, ALenum param, ALvoid **ptr0, ALvoid **ptr1, ALvoid **ptr2); +AL_API void AL_APIENTRY alGetBufferPtrvSOFT(ALuint buffer, ALenum param, ALvoid **ptr); +#endif +#endif + #ifdef __cplusplus } /* extern "C" */ #endif