Skip to content

Commit 94d9f3b

Browse files
committed
Move extension loading for examples to a shared function
1 parent a4da1d6 commit 94d9f3b

11 files changed

Lines changed: 395 additions & 374 deletions

File tree

examples/alconvolve.c

Lines changed: 1 addition & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -47,46 +47,6 @@
4747
#endif
4848

4949

50-
/* Filter object functions */
51-
static LPALGENFILTERS alGenFilters;
52-
static LPALDELETEFILTERS alDeleteFilters;
53-
static LPALISFILTER alIsFilter;
54-
static LPALFILTERI alFilteri;
55-
static LPALFILTERIV alFilteriv;
56-
static LPALFILTERF alFilterf;
57-
static LPALFILTERFV alFilterfv;
58-
static LPALGETFILTERI alGetFilteri;
59-
static LPALGETFILTERIV alGetFilteriv;
60-
static LPALGETFILTERF alGetFilterf;
61-
static LPALGETFILTERFV alGetFilterfv;
62-
63-
/* Effect object functions */
64-
static LPALGENEFFECTS alGenEffects;
65-
static LPALDELETEEFFECTS alDeleteEffects;
66-
static LPALISEFFECT alIsEffect;
67-
static LPALEFFECTI alEffecti;
68-
static LPALEFFECTIV alEffectiv;
69-
static LPALEFFECTF alEffectf;
70-
static LPALEFFECTFV alEffectfv;
71-
static LPALGETEFFECTI alGetEffecti;
72-
static LPALGETEFFECTIV alGetEffectiv;
73-
static LPALGETEFFECTF alGetEffectf;
74-
static LPALGETEFFECTFV alGetEffectfv;
75-
76-
/* Auxiliary Effect Slot object functions */
77-
static LPALGENAUXILIARYEFFECTSLOTS alGenAuxiliaryEffectSlots;
78-
static LPALDELETEAUXILIARYEFFECTSLOTS alDeleteAuxiliaryEffectSlots;
79-
static LPALISAUXILIARYEFFECTSLOT alIsAuxiliaryEffectSlot;
80-
static LPALAUXILIARYEFFECTSLOTI alAuxiliaryEffectSloti;
81-
static LPALAUXILIARYEFFECTSLOTIV alAuxiliaryEffectSlotiv;
82-
static LPALAUXILIARYEFFECTSLOTF alAuxiliaryEffectSlotf;
83-
static LPALAUXILIARYEFFECTSLOTFV alAuxiliaryEffectSlotfv;
84-
static LPALGETAUXILIARYEFFECTSLOTI alGetAuxiliaryEffectSloti;
85-
static LPALGETAUXILIARYEFFECTSLOTIV alGetAuxiliaryEffectSlotiv;
86-
static LPALGETAUXILIARYEFFECTSLOTF alGetAuxiliaryEffectSlotf;
87-
static LPALGETAUXILIARYEFFECTSLOTFV alGetAuxiliaryEffectSlotfv;
88-
89-
9050
/* This stuff defines a simple streaming player object, the same as alstream.c.
9151
* Comments are removed for brevity, see alstream.c for more details.
9252
*/
@@ -436,6 +396,7 @@ int main(int argc, char **argv)
436396
fprintf(stderr, "Error: Convolution effect not supported\n");
437397
return 1;
438398
}
399+
LoadALExtensions();
439400

440401
if(argc < 2)
441402
{
@@ -444,45 +405,6 @@ int main(int argc, char **argv)
444405
return 1;
445406
}
446407

447-
/* Define a macro to help load the function pointers. */
448-
#define LOAD_PROC(T, x) ((x) = FUNCTION_CAST(T, alGetProcAddress(#x)))
449-
LOAD_PROC(LPALGENFILTERS, alGenFilters);
450-
LOAD_PROC(LPALDELETEFILTERS, alDeleteFilters);
451-
LOAD_PROC(LPALISFILTER, alIsFilter);
452-
LOAD_PROC(LPALFILTERI, alFilteri);
453-
LOAD_PROC(LPALFILTERIV, alFilteriv);
454-
LOAD_PROC(LPALFILTERF, alFilterf);
455-
LOAD_PROC(LPALFILTERFV, alFilterfv);
456-
LOAD_PROC(LPALGETFILTERI, alGetFilteri);
457-
LOAD_PROC(LPALGETFILTERIV, alGetFilteriv);
458-
LOAD_PROC(LPALGETFILTERF, alGetFilterf);
459-
LOAD_PROC(LPALGETFILTERFV, alGetFilterfv);
460-
461-
LOAD_PROC(LPALGENEFFECTS, alGenEffects);
462-
LOAD_PROC(LPALDELETEEFFECTS, alDeleteEffects);
463-
LOAD_PROC(LPALISEFFECT, alIsEffect);
464-
LOAD_PROC(LPALEFFECTI, alEffecti);
465-
LOAD_PROC(LPALEFFECTIV, alEffectiv);
466-
LOAD_PROC(LPALEFFECTF, alEffectf);
467-
LOAD_PROC(LPALEFFECTFV, alEffectfv);
468-
LOAD_PROC(LPALGETEFFECTI, alGetEffecti);
469-
LOAD_PROC(LPALGETEFFECTIV, alGetEffectiv);
470-
LOAD_PROC(LPALGETEFFECTF, alGetEffectf);
471-
LOAD_PROC(LPALGETEFFECTFV, alGetEffectfv);
472-
473-
LOAD_PROC(LPALGENAUXILIARYEFFECTSLOTS, alGenAuxiliaryEffectSlots);
474-
LOAD_PROC(LPALDELETEAUXILIARYEFFECTSLOTS, alDeleteAuxiliaryEffectSlots);
475-
LOAD_PROC(LPALISAUXILIARYEFFECTSLOT, alIsAuxiliaryEffectSlot);
476-
LOAD_PROC(LPALAUXILIARYEFFECTSLOTI, alAuxiliaryEffectSloti);
477-
LOAD_PROC(LPALAUXILIARYEFFECTSLOTIV, alAuxiliaryEffectSlotiv);
478-
LOAD_PROC(LPALAUXILIARYEFFECTSLOTF, alAuxiliaryEffectSlotf);
479-
LOAD_PROC(LPALAUXILIARYEFFECTSLOTFV, alAuxiliaryEffectSlotfv);
480-
LOAD_PROC(LPALGETAUXILIARYEFFECTSLOTI, alGetAuxiliaryEffectSloti);
481-
LOAD_PROC(LPALGETAUXILIARYEFFECTSLOTIV, alGetAuxiliaryEffectSlotiv);
482-
LOAD_PROC(LPALGETAUXILIARYEFFECTSLOTF, alGetAuxiliaryEffectSlotf);
483-
LOAD_PROC(LPALGETAUXILIARYEFFECTSLOTFV, alGetAuxiliaryEffectSlotfv);
484-
#undef LOAD_PROC
485-
486408
/* Load the reverb into an effect. */
487409
effect = CreateEffect();
488410
if(!effect)

examples/aldebug.cpp

Lines changed: 3 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
#include "fmt/ostream.h"
4343
#include "fmt/std.h"
4444

45+
#include "common/alhelpers.h"
4546
#include "win_main_utf8.h"
4647

4748
#if HAVE_CXXMODULES
@@ -110,17 +111,6 @@ constexpr auto GetDebugSeverityName(ALenum severity) noexcept -> std::string_vie
110111
return "<invalid severity>"sv;
111112
}
112113

113-
auto alDebugMessageCallbackEXT = LPALDEBUGMESSAGECALLBACKEXT{};
114-
auto alDebugMessageInsertEXT = LPALDEBUGMESSAGEINSERTEXT{};
115-
auto alDebugMessageControlEXT = LPALDEBUGMESSAGECONTROLEXT{};
116-
auto alPushDebugGroupEXT = LPALPUSHDEBUGGROUPEXT{};
117-
auto alPopDebugGroupEXT = LPALPOPDEBUGGROUPEXT{};
118-
auto alGetDebugMessageLogEXT = LPALGETDEBUGMESSAGELOGEXT{};
119-
auto alObjectLabelEXT = LPALOBJECTLABELEXT{};
120-
auto alGetObjectLabelEXT = LPALGETOBJECTLABELEXT{};
121-
auto alGetPointerEXT = LPALGETPOINTEREXT{};
122-
auto alGetPointervEXT = LPALGETPOINTERVEXT{};
123-
124114

125115
auto main(std::span<std::string_view> args) -> int
126116
{
@@ -156,22 +146,6 @@ auto main(std::span<std::string_view> args) -> int
156146
return 1;
157147
}
158148

159-
/* Load the Debug API functions we're using. */
160-
#define LOAD_PROC(N) N = reinterpret_cast<decltype(N)>(alcGetProcAddress(device.get(), #N))
161-
/* NOLINTBEGIN(cppcoreguidelines-pro-type-reinterpret-cast) */
162-
LOAD_PROC(alDebugMessageCallbackEXT);
163-
LOAD_PROC(alDebugMessageInsertEXT);
164-
LOAD_PROC(alDebugMessageControlEXT);
165-
LOAD_PROC(alPushDebugGroupEXT);
166-
LOAD_PROC(alPopDebugGroupEXT);
167-
LOAD_PROC(alGetDebugMessageLogEXT);
168-
LOAD_PROC(alObjectLabelEXT);
169-
LOAD_PROC(alGetObjectLabelEXT);
170-
LOAD_PROC(alGetPointerEXT);
171-
LOAD_PROC(alGetPointervEXT);
172-
/* NOLINTEND(cppcoreguidelines-pro-type-reinterpret-cast) */
173-
#undef LOAD_PROC
174-
175149
/* Create a debug context and set it as current. If -nodebug was specified,
176150
* create a non-debug context (to see how debug messages react).
177151
*/
@@ -190,6 +164,8 @@ auto main(std::span<std::string_view> args) -> int
190164
return 1;
191165
}
192166

167+
LoadALExtensions();
168+
193169
/* Enable low-severity debug messages, which are disabled by default. */
194170
alDebugMessageControlEXT(AL_DONT_CARE_EXT, AL_DONT_CARE_EXT, AL_DEBUG_SEVERITY_LOW_EXT, 0,
195171
nullptr, AL_TRUE);

examples/alffplay.cpp

Lines changed: 2 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -124,11 +124,6 @@ auto EnableWideStereo = false;
124124
auto EnableUhj = false;
125125
auto EnableSuperStereo = false;
126126
auto DisableVideo = false;
127-
auto alGetSourcei64vSOFT = LPALGETSOURCEI64VSOFT{};
128-
auto alEventControlSOFT = LPALEVENTCONTROLSOFT{};
129-
auto alEventCallbackSOFT = LPALEVENTCALLBACKSOFT{};
130-
131-
auto alBufferCallbackSOFT = LPALBUFFERCALLBACKSOFT{};
132127

133128
constexpr auto AVNoSyncThreshold = seconds{10};
134129

@@ -2168,28 +2163,14 @@ auto main(std::span<std::string_view> args) -> int
21682163
auto almgr = InitAL(args);
21692164
almgr.printName();
21702165

2171-
/* NOLINTBEGIN(cppcoreguidelines-pro-type-reinterpret-cast) */
2166+
LoadALExtensions();
2167+
21722168
if(alIsExtensionPresent("AL_SOFT_source_latency"))
2173-
{
21742169
fmt::println("Found AL_SOFT_source_latency");
2175-
alGetSourcei64vSOFT = reinterpret_cast<LPALGETSOURCEI64VSOFT>(
2176-
alGetProcAddress("alGetSourcei64vSOFT"));
2177-
}
21782170
if(alIsExtensionPresent("AL_SOFT_events"))
2179-
{
21802171
fmt::println("Found AL_SOFT_events");
2181-
alEventControlSOFT = reinterpret_cast<LPALEVENTCONTROLSOFT>(
2182-
alGetProcAddress("alEventControlSOFT"));
2183-
alEventCallbackSOFT = reinterpret_cast<LPALEVENTCALLBACKSOFT>(
2184-
alGetProcAddress("alEventCallbackSOFT"));
2185-
}
21862172
if(alIsExtensionPresent("AL_SOFT_callback_buffer"))
2187-
{
21882173
fmt::println("Found AL_SOFT_callback_buffer");
2189-
alBufferCallbackSOFT = reinterpret_cast<LPALBUFFERCALLBACKSOFT>(
2190-
alGetProcAddress("alBufferCallbackSOFT"));
2191-
}
2192-
/* NOLINTEND(cppcoreguidelines-pro-type-reinterpret-cast) */
21932174

21942175
auto curarg = args.begin();
21952176
for(auto args_end=args.end();curarg != args_end;++curarg)

examples/allafplay.cpp

Lines changed: 2 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -108,45 +108,6 @@ using ALCdevicePtr = std::unique_ptr<ALCdevice, decltype([](ALCdevice *device)
108108
using ALCcontextPtr = std::unique_ptr<ALCcontext, decltype([](ALCcontext *context)
109109
{ alcDestroyContext(context); })>;
110110

111-
/* Filter object functions */
112-
auto alGenFilters = LPALGENFILTERS{};
113-
auto alDeleteFilters = LPALDELETEFILTERS{};
114-
auto alIsFilter = LPALISFILTER{};
115-
auto alFilteri = LPALFILTERI{};
116-
auto alFilteriv = LPALFILTERIV{};
117-
auto alFilterf = LPALFILTERF{};
118-
auto alFilterfv = LPALFILTERFV{};
119-
auto alGetFilteri = LPALGETFILTERI{};
120-
auto alGetFilteriv = LPALGETFILTERIV{};
121-
auto alGetFilterf = LPALGETFILTERF{};
122-
auto alGetFilterfv = LPALGETFILTERFV{};
123-
124-
/* Effect object functions */
125-
auto alGenEffects = LPALGENEFFECTS{};
126-
auto alDeleteEffects = LPALDELETEEFFECTS{};
127-
auto alIsEffect = LPALISEFFECT{};
128-
auto alEffecti = LPALEFFECTI{};
129-
auto alEffectiv = LPALEFFECTIV{};
130-
auto alEffectf = LPALEFFECTF{};
131-
auto alEffectfv = LPALEFFECTFV{};
132-
auto alGetEffecti = LPALGETEFFECTI{};
133-
auto alGetEffectiv = LPALGETEFFECTIV{};
134-
auto alGetEffectf = LPALGETEFFECTF{};
135-
auto alGetEffectfv = LPALGETEFFECTFV{};
136-
137-
/* Auxiliary Effect Slot object functions */
138-
auto alGenAuxiliaryEffectSlots = LPALGENAUXILIARYEFFECTSLOTS{};
139-
auto alDeleteAuxiliaryEffectSlots = LPALDELETEAUXILIARYEFFECTSLOTS{};
140-
auto alIsAuxiliaryEffectSlot = LPALISAUXILIARYEFFECTSLOT{};
141-
auto alAuxiliaryEffectSloti = LPALAUXILIARYEFFECTSLOTI{};
142-
auto alAuxiliaryEffectSlotiv = LPALAUXILIARYEFFECTSLOTIV{};
143-
auto alAuxiliaryEffectSlotf = LPALAUXILIARYEFFECTSLOTF{};
144-
auto alAuxiliaryEffectSlotfv = LPALAUXILIARYEFFECTSLOTFV{};
145-
auto alGetAuxiliaryEffectSloti = LPALGETAUXILIARYEFFECTSLOTI{};
146-
auto alGetAuxiliaryEffectSlotiv = LPALGETAUXILIARYEFFECTSLOTIV{};
147-
auto alGetAuxiliaryEffectSlotf = LPALGETAUXILIARYEFFECTSLOTF{};
148-
auto alGetAuxiliaryEffectSlotfv = LPALGETAUXILIARYEFFECTSLOTFV{};
149-
150111
auto alcRenderSamplesSOFT = LPALCRENDERSAMPLESSOFT{};
151112

152113

@@ -1253,6 +1214,7 @@ auto main(std::span<std::string_view> args) -> int
12531214

12541215
auto almgr = InitAL(args);
12551216
almgr.printName();
1217+
LoadALExtensions();
12561218

12571219
if(!args.empty() && args[0] == "-render")
12581220
{
@@ -1398,6 +1360,7 @@ auto main(std::span<std::string_view> args) -> int
13981360
almgr.close();
13991361
almgr.mDevice = loopbackDev.release();
14001362
almgr.mContext = loopbackCtx.release();
1363+
LoadALExtensions();
14011364
}
14021365

14031366
/* Automate effect cleanup at end of scope (before almgr destructs). */
@@ -1414,48 +1377,6 @@ auto main(std::span<std::string_view> args) -> int
14141377
if(alcIsExtensionPresent(almgr.mDevice, "ALC_EXT_EFX")
14151378
&& alcIsExtensionPresent(almgr.mDevice, "ALC_EXT_DEDICATED"))
14161379
{
1417-
static constexpr auto load_proc = []<typename T>(T &func, gsl::czstring const funcname)
1418-
{
1419-
/* NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast) */
1420-
func = reinterpret_cast<T>(alGetProcAddress(funcname));
1421-
if(!func) fmt::println(std::cerr, "Failed to find function '{}'", funcname);
1422-
};
1423-
#define LOAD_PROC(x) load_proc(x, #x)
1424-
LOAD_PROC(alGenFilters);
1425-
LOAD_PROC(alDeleteFilters);
1426-
LOAD_PROC(alIsFilter);
1427-
LOAD_PROC(alFilterf);
1428-
LOAD_PROC(alFilterfv);
1429-
LOAD_PROC(alFilteri);
1430-
LOAD_PROC(alFilteriv);
1431-
LOAD_PROC(alGetFilterf);
1432-
LOAD_PROC(alGetFilterfv);
1433-
LOAD_PROC(alGetFilteri);
1434-
LOAD_PROC(alGetFilteriv);
1435-
LOAD_PROC(alGenEffects);
1436-
LOAD_PROC(alDeleteEffects);
1437-
LOAD_PROC(alIsEffect);
1438-
LOAD_PROC(alEffectf);
1439-
LOAD_PROC(alEffectfv);
1440-
LOAD_PROC(alEffecti);
1441-
LOAD_PROC(alEffectiv);
1442-
LOAD_PROC(alGetEffectf);
1443-
LOAD_PROC(alGetEffectfv);
1444-
LOAD_PROC(alGetEffecti);
1445-
LOAD_PROC(alGetEffectiv);
1446-
LOAD_PROC(alGenAuxiliaryEffectSlots);
1447-
LOAD_PROC(alDeleteAuxiliaryEffectSlots);
1448-
LOAD_PROC(alIsAuxiliaryEffectSlot);
1449-
LOAD_PROC(alAuxiliaryEffectSlotf);
1450-
LOAD_PROC(alAuxiliaryEffectSlotfv);
1451-
LOAD_PROC(alAuxiliaryEffectSloti);
1452-
LOAD_PROC(alAuxiliaryEffectSlotiv);
1453-
LOAD_PROC(alGetAuxiliaryEffectSlotf);
1454-
LOAD_PROC(alGetAuxiliaryEffectSlotfv);
1455-
LOAD_PROC(alGetAuxiliaryEffectSloti);
1456-
LOAD_PROC(alGetAuxiliaryEffectSlotiv);
1457-
#undef LOAD_PROC
1458-
14591380
alGenFilters(1, &MuteFilterID);
14601381
alFilteri(MuteFilterID, AL_FILTER_TYPE, AL_FILTER_LOWPASS);
14611382
alFilterf(MuteFilterID, AL_LOWPASS_GAIN, 0.0f);

examples/allatency.c

Lines changed: 1 addition & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -40,19 +40,6 @@
4040
#include "win_main_utf8.h"
4141

4242

43-
static LPALSOURCEDSOFT alSourcedSOFT;
44-
static LPALSOURCE3DSOFT alSource3dSOFT;
45-
static LPALSOURCEDVSOFT alSourcedvSOFT;
46-
static LPALGETSOURCEDSOFT alGetSourcedSOFT;
47-
static LPALGETSOURCE3DSOFT alGetSource3dSOFT;
48-
static LPALGETSOURCEDVSOFT alGetSourcedvSOFT;
49-
static LPALSOURCEI64SOFT alSourcei64SOFT;
50-
static LPALSOURCE3I64SOFT alSource3i64SOFT;
51-
static LPALSOURCEI64VSOFT alSourcei64vSOFT;
52-
static LPALGETSOURCEI64SOFT alGetSourcei64SOFT;
53-
static LPALGETSOURCE3I64SOFT alGetSource3i64SOFT;
54-
static LPALGETSOURCEI64VSOFT alGetSourcei64vSOFT;
55-
5643
/* LoadBuffer loads the named audio file into an OpenAL buffer object, and
5744
* returns the new buffer ID.
5845
*/
@@ -167,21 +154,7 @@ int main(int argc, char **argv)
167154
return 1;
168155
}
169156

170-
/* Define a macro to help load the function pointers. */
171-
#define LOAD_PROC(T, x) ((x) = FUNCTION_CAST(T, alGetProcAddress(#x)))
172-
LOAD_PROC(LPALSOURCEDSOFT, alSourcedSOFT);
173-
LOAD_PROC(LPALSOURCE3DSOFT, alSource3dSOFT);
174-
LOAD_PROC(LPALSOURCEDVSOFT, alSourcedvSOFT);
175-
LOAD_PROC(LPALGETSOURCEDSOFT, alGetSourcedSOFT);
176-
LOAD_PROC(LPALGETSOURCE3DSOFT, alGetSource3dSOFT);
177-
LOAD_PROC(LPALGETSOURCEDVSOFT, alGetSourcedvSOFT);
178-
LOAD_PROC(LPALSOURCEI64SOFT, alSourcei64SOFT);
179-
LOAD_PROC(LPALSOURCE3I64SOFT, alSource3i64SOFT);
180-
LOAD_PROC(LPALSOURCEI64VSOFT, alSourcei64vSOFT);
181-
LOAD_PROC(LPALGETSOURCEI64SOFT, alGetSourcei64SOFT);
182-
LOAD_PROC(LPALGETSOURCE3I64SOFT, alGetSource3i64SOFT);
183-
LOAD_PROC(LPALGETSOURCEI64VSOFT, alGetSourcei64vSOFT);
184-
#undef LOAD_PROC
157+
LoadALExtensions();
185158

186159
/* Load the sound into a buffer. */
187160
buffer = LoadSound(argv[0]);

0 commit comments

Comments
 (0)