[openal] Can I use effect functions without using macros?

Sean s.tolstoyevski at gmail.com
Wed Jan 27 00:43:50 EST 2021


No, no. :) .

This is not what I want to tell you.

For example I want to be able to use alGenFilters without LOAD_PROC.
Can I use these effect functions without writing the code between 
#define and #undef?


Thanks for your answer.


/* Filter object functions */
static LPALGENFILTERS alGenFilters;
static LPALDELETEFILTERS alDeleteFilters;
static LPALISFILTER alIsFilter;
static LPALFILTERI alFilteri;
static LPALFILTERIV alFilteriv;
static LPALFILTERF alFilterf;
static LPALFILTERFV alFilterfv;
static LPALGETFILTERI alGetFilteri;
static LPALGETFILTERIV alGetFilteriv;
static LPALGETFILTERF alGetFilterf;
static LPALGETFILTERFV alGetFilterfv;

/* Effect object functions */
static LPALGENEFFECTS alGenEffects;
static LPALDELETEEFFECTS alDeleteEffects;
static LPALISEFFECT alIsEffect;
static LPALEFFECTI alEffecti;
static LPALEFFECTIV alEffectiv;
static LPALEFFECTF alEffectf;
static LPALEFFECTFV alEffectfv;
static LPALGETEFFECTI alGetEffecti;
static LPALGETEFFECTIV alGetEffectiv;
static LPALGETEFFECTF alGetEffectf;
static LPALGETEFFECTFV alGetEffectfv;

/* Auxiliary Effect Slot object functions */
static LPALGENAUXILIARYEFFECTSLOTS alGenAuxiliaryEffectSlots;
static LPALDELETEAUXILIARYEFFECTSLOTS alDeleteAuxiliaryEffectSlots;
static LPALISAUXILIARYEFFECTSLOT alIsAuxiliaryEffectSlot;
static LPALAUXILIARYEFFECTSLOTI alAuxiliaryEffectSloti;
static LPALAUXILIARYEFFECTSLOTIV alAuxiliaryEffectSlotiv;
static LPALAUXILIARYEFFECTSLOTF alAuxiliaryEffectSlotf;
static LPALAUXILIARYEFFECTSLOTFV alAuxiliaryEffectSlotfv;
static LPALGETAUXILIARYEFFECTSLOTI alGetAuxiliaryEffectSloti;
static LPALGETAUXILIARYEFFECTSLOTIV alGetAuxiliaryEffectSlotiv;
static LPALGETAUXILIARYEFFECTSLOTF alGetAuxiliaryEffectSlotf;
static LPALGETAUXILIARYEFFECTSLOTFV alGetAuxiliaryEffectSlotfv;


....

     /* Define a macro to help load the function pointers. */
#define LOAD_PROC(T, x)  ((x) = (T)alGetProcAddress(#x))
     LOAD_PROC(LPALGENFILTERS, alGenFilters);
     LOAD_PROC(LPALDELETEFILTERS, alDeleteFilters);
     LOAD_PROC(LPALISFILTER, alIsFilter);
     LOAD_PROC(LPALFILTERI, alFilteri);
     LOAD_PROC(LPALFILTERIV, alFilteriv);
     LOAD_PROC(LPALFILTERF, alFilterf);
     LOAD_PROC(LPALFILTERFV, alFilterfv);
     LOAD_PROC(LPALGETFILTERI, alGetFilteri);
     LOAD_PROC(LPALGETFILTERIV, alGetFilteriv);
     LOAD_PROC(LPALGETFILTERF, alGetFilterf);
     LOAD_PROC(LPALGETFILTERFV, alGetFilterfv);

     LOAD_PROC(LPALGENEFFECTS, alGenEffects);
     LOAD_PROC(LPALDELETEEFFECTS, alDeleteEffects);
     LOAD_PROC(LPALISEFFECT, alIsEffect);
     LOAD_PROC(LPALEFFECTI, alEffecti);
     LOAD_PROC(LPALEFFECTIV, alEffectiv);
     LOAD_PROC(LPALEFFECTF, alEffectf);
     LOAD_PROC(LPALEFFECTFV, alEffectfv);
     LOAD_PROC(LPALGETEFFECTI, alGetEffecti);
     LOAD_PROC(LPALGETEFFECTIV, alGetEffectiv);
     LOAD_PROC(LPALGETEFFECTF, alGetEffectf);
     LOAD_PROC(LPALGETEFFECTFV, alGetEffectfv);

     LOAD_PROC(LPALGENAUXILIARYEFFECTSLOTS, alGenAuxiliaryEffectSlots);
     LOAD_PROC(LPALDELETEAUXILIARYEFFECTSLOTS, 
alDeleteAuxiliaryEffectSlots);
     LOAD_PROC(LPALISAUXILIARYEFFECTSLOT, alIsAuxiliaryEffectSlot);
     LOAD_PROC(LPALAUXILIARYEFFECTSLOTI, alAuxiliaryEffectSloti);
     LOAD_PROC(LPALAUXILIARYEFFECTSLOTIV, alAuxiliaryEffectSlotiv);
     LOAD_PROC(LPALAUXILIARYEFFECTSLOTF, alAuxiliaryEffectSlotf);
     LOAD_PROC(LPALAUXILIARYEFFECTSLOTFV, alAuxiliaryEffectSlotfv);
     LOAD_PROC(LPALGETAUXILIARYEFFECTSLOTI, alGetAuxiliaryEffectSloti);
     LOAD_PROC(LPALGETAUXILIARYEFFECTSLOTIV, alGetAuxiliaryEffectSlotiv);
     LOAD_PROC(LPALGETAUXILIARYEFFECTSLOTF, alGetAuxiliaryEffectSlotf);
     LOAD_PROC(LPALGETAUXILIARYEFFECTSLOTFV, alGetAuxiliaryEffectSlotfv);
#undef LOAD_PROC

On 26/01/2021 18:30, Chris Robinson wrote:
> On Tue, 26 Jan 2021 16:22:58 +0300
> Sean <s.tolstoyevski at gmail.com> wrote:
>
>> Hello all,
>>
>> I am trying to write OpenAL wrapper for Golang.
>> C and Go are nice. So mixing them up is easy enough.
>> But there is no macro support. Doing this confuses me. Because I
>> don't know enough ce and cpp to understand macros.
>>
>> Can I use effect functions in OpenAL-Soft without a macros?
> Yes. The macros are syntactic sugar to make the code more readable and
> easier to understand. When you write
>
> alEffecti(effect, AL_EFFECT_TYPE, AL_EFFECT_REVERB);
>
> as far as the library is concerned, and what the compiler essentially
> produces, it's
>
> alEffecti(effect, 0x8001, 0x0001);
>
> The same goes for all other macros. It's just a search-and-replace done
> by the preprocessor before compiling.


More information about the openal mailing list