Browse Source

Audio: add support for quiet logging in Context.

pull/364/head
Guillaume Jacquemin 7 years ago committed by Vladimír Vondruš
parent
commit
7d7ebb379c
  1. 25
      src/Magnum/Audio/Context.cpp
  2. 66
      src/Magnum/Audio/Context.h

25
src/Magnum/Audio/Context.cpp

@ -4,6 +4,7 @@
Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019 Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019
Vladimír Vondruš <mosra@centrum.cz> Vladimír Vondruš <mosra@centrum.cz>
Copyright © 2015 Jonathan Hale <squareys@googlemail.com> Copyright © 2015 Jonathan Hale <squareys@googlemail.com>
Copyright © 2019 Guillaume Jacquemin <williamjcm@users.noreply.github.com>
Permission is hereby granted, free of charge, to any person obtaining a Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the "Software"), copy of this software and associated documentation files (the "Software"),
@ -32,6 +33,7 @@
#include <alc.h> #include <alc.h>
#include <cstring> #include <cstring>
#include <Corrade/Utility/Arguments.h>
#include <Corrade/Utility/Assert.h> #include <Corrade/Utility/Assert.h>
#include <Corrade/Utility/Debug.h> #include <Corrade/Utility/Debug.h>
#include <Corrade/Utility/DebugStl.h> #include <Corrade/Utility/DebugStl.h>
@ -120,15 +122,16 @@ Context& Context::current() {
return *_current; return *_current;
} }
#ifndef DOXYGEN_GENERATING_OUTPUT Context::Context(Int argc, const char** argv): Context(Configuration{}, argc, argv) {}
Context::Context(): Context{Configuration{}} {}
#endif
Context::Context(const Configuration& configuration) { Context::Context(NoCreateT, Int argc, const char** argv) noexcept: _device{}, _context{} {
create(configuration); Utility::Arguments args{"magnum"};
} args.addOption("log", "default").setHelp("log", "console logging", "default|quiet|verbose")
.setFromEnvironment("log")
.parse(argc, argv);
Context::Context(NoCreateT) noexcept: _device{}, _context{} {} _displayInitializationLog = !(args.value("log") == "quiet" || args.value("log") == "QUIET");
}
void Context::create(const Configuration& configuration) { void Context::create(const Configuration& configuration) {
if(!tryCreate(configuration)) std::exit(1); if(!tryCreate(configuration)) std::exit(1);
@ -211,9 +214,11 @@ bool Context::tryCreate(const Configuration& configuration) {
} }
} }
/* Print some info */ if(_displayInitializationLog) {
Debug() << "Audio Renderer:" << rendererString() << "by" << vendorString(); /* Print some info */
Debug() << "OpenAL version:" << versionString(); Debug() << "Audio Renderer:" << rendererString() << "by" << vendorString();
Debug() << "OpenAL version:" << versionString();
}
return true; return true;
} }

66
src/Magnum/Audio/Context.h

@ -6,6 +6,7 @@
Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019 Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019
Vladimír Vondruš <mosra@centrum.cz> Vladimír Vondruš <mosra@centrum.cz>
Copyright © 2015 Jonathan Hale <squareys@googlemail.com> Copyright © 2015 Jonathan Hale <squareys@googlemail.com>
Copyright © 2019 Guillaume Jacquemin <williamjcm@users.noreply.github.com>
Permission is hereby granted, free of charge, to any person obtaining a Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the "Software"), copy of this software and associated documentation files (the "Software"),
@ -83,6 +84,27 @@ class MAGNUM_AUDIO_EXPORT Extension {
/** /**
@brief OpenAL context @brief OpenAL context
@section AL-Context-command-line Command-line options
The context is configurable through command-line options, that can be passed
for example from the `Platform::*Application` classes. Usage:
@code{.sh}
<application> [--magnum-help] [--magnum-log default|quiet|verbose] ...
@endcode
Arguments:
- `...` --- main application arguments (see `-h` or `--help` for details)
- `--magnum-help` --- display this help message and exit
- `--magnum-log default|quiet|verbose` --- console logging
(environment: `MAGNUM_LOG`) (default: `default`)
Note that all options are prefixed with `--magnum-` to avoid conflicts with
options passed to the application itself. Options that don't have this prefix
are completely ignored, see documentation of the
@ref Utility-Arguments-delegating "Utility::Arguments" class for details.
*/ */
class MAGNUM_AUDIO_EXPORT Context { class MAGNUM_AUDIO_EXPORT Context {
public: public:
@ -158,14 +180,31 @@ class MAGNUM_AUDIO_EXPORT Context {
/** /**
* @brief Constructor * @brief Constructor
* *
* Creates OpenAL context with given configuration. * Parses command-line arguments, and creates OpenAL context with given
* configuration.
*/ */
#ifdef DOXYGEN_GENERATING_OUTPUT explicit Context(const Configuration& configuration, Int argc, const char** argv): Context(NoCreate, argc, argv) { create(configuration); }
explicit Context(const Configuration& configuration = Configuration());
#else /** @overload */
explicit Context(const Configuration& configuration); explicit Context(const Configuration& configuration, Int argc, char** argv): Context(configuration, argc, const_cast<const char**>(argv)) {}
explicit Context();
#endif /** @overload */
explicit Context(const Configuration& configuration, Int argc, std::nullptr_t argv): Context(configuration, argc, static_cast<const char**>(argv)) {}
/** @overload */
explicit Context(const Configuration& configuration): Context(configuration, 0, nullptr) {}
/** @overload */
explicit Context(Int argc, const char** argv);
/** @overload */
explicit Context(Int argc, char** argv): Context(argc, const_cast<const char**>(argv)) {}
/** @overload */
explicit Context(Int argc, std::nullptr_t argv): Context(argc, static_cast<const char**>(argv)) {}
/** @overload */
explicit Context(): Context(0, nullptr) {}
/** /**
* @brief Construct without creating the underlying OpenAL context * @brief Construct without creating the underlying OpenAL context
@ -174,7 +213,16 @@ class MAGNUM_AUDIO_EXPORT Context {
* time, for example to do a more involved configuration. Call * time, for example to do a more involved configuration. Call
* @ref create() or @ref tryCreate() to create the actual context. * @ref create() or @ref tryCreate() to create the actual context.
*/ */
explicit Context(NoCreateT) noexcept; explicit Context(NoCreateT, Int argc, const char** argv) noexcept;
/** @overload */
explicit Context(NoCreateT, Int argc, char** argv) noexcept: Context(NoCreate, argc, const_cast<const char**>(argv)) {}
/** @overload */
explicit Context(NoCreateT, Int argc, std::nullptr_t argv) noexcept: Context(NoCreate, argc, static_cast<const char**>(argv)) {}
/** @overload */
explicit Context(NoCreateT) noexcept: Context{NoCreate, 0, nullptr} {}
/** @brief Copying is not allowed */ /** @brief Copying is not allowed */
Context(const Context&) = delete; Context(const Context&) = delete;
@ -331,6 +379,8 @@ class MAGNUM_AUDIO_EXPORT Context {
private: private:
MAGNUM_AUDIO_LOCAL static Context* _current; MAGNUM_AUDIO_LOCAL static Context* _current;
bool _displayInitializationLog;
ALCdevice* _device; ALCdevice* _device;
ALCcontext* _context; ALCcontext* _context;

Loading…
Cancel
Save