Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

GL::Context: pass InternalFlags as parameter #494

Closed
wants to merge 3 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 9 additions & 5 deletions src/Magnum/GL/Context.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -626,9 +626,9 @@ Context& Context::current() {

void Context::makeCurrent(Context* context) { currentContext = context; }

Context::Context(NoCreateT, Int argc, const char** argv, void functionLoader(Context&)): Context{NoCreate, Utility::Arguments{"magnum"}, argc, argv, functionLoader} {}
Context::Context(NoCreateT, Int argc, const char** argv, void functionLoader(Context&), InternalFlags flags): Context{NoCreate, Utility::Arguments{"magnum"}, argc, argv, functionLoader, flags} {}

Context::Context(NoCreateT, Utility::Arguments& args, Int argc, const char** argv, void functionLoader(Context&)): _functionLoader{functionLoader}, _version{Version::None} {
Context::Context(NoCreateT, Utility::Arguments& args, Int argc, const char** argv, void functionLoader(Context&), InternalFlags flags): Context{NoCreate, functionLoader, flags} {
/* Parse arguments */
CORRADE_INTERNAL_ASSERT(args.prefix() == "magnum");
args.addOption("disable-workarounds").setHelp("disable-workarounds", "driver workarounds to disable\n (see https://doc.magnum.graphics/magnum/opengl-workarounds.html for detailed info)", "LIST")
Expand All @@ -644,8 +644,8 @@ Context::Context(NoCreateT, Utility::Arguments& args, Int argc, const char** arg
/* Decide how to display initialization log */
if(args.value("log") == "verbose" || args.value("log") == "VERBOSE")
_internalFlags |= InternalFlag::DisplayVerboseInitializationLog;
else if(!(args.value("log") == "quiet" || args.value("log") == "QUIET"))
_internalFlags |= InternalFlag::DisplayInitializationLog;
else if(args.value("log") == "quiet" || args.value("log") == "QUIET")
_internalFlags &= ~InternalFlag::DisplayInitializationLog;

/* Decide whether to enable GPU validation */
if(args.value("gpu-validation") == "on" || args.value("gpu-validation") == "ON")
Expand All @@ -660,6 +660,8 @@ Context::Context(NoCreateT, Utility::Arguments& args, Int argc, const char** arg
_disabledExtensions.push_back(extension);
}

Context::Context(NoCreateT, void functionLoader(Context&), InternalFlags flags): _functionLoader{functionLoader}, _version{Version::None}, _internalFlags{flags} {}

Context::Context(Context&& other) noexcept: _version{other._version},
#ifndef MAGNUM_TARGET_WEBGL
_flags{other._flags},
Expand Down Expand Up @@ -910,7 +912,9 @@ bool Context::tryCreate() {

/* Initialize functionality based on current OpenGL version and extensions */
/** @todo Get rid of these */
DefaultFramebuffer::initializeContextBasedFunctionality(*this);
if(!(_internalFlags & InternalFlag::NoFramebuffer))
DefaultFramebuffer::initializeContextBasedFunctionality(*this);

Renderer::initializeContextBasedFunctionality();

/* Enable GPU validation, if requested */
Expand Down
13 changes: 9 additions & 4 deletions src/Magnum/GL/Context.h
Original file line number Diff line number Diff line change
Expand Up @@ -745,7 +745,11 @@ class MAGNUM_GL_EXPORT Context {
enum class InternalFlag: UnsignedByte {
DisplayInitializationLog = 1 << 0,
DisplayVerboseInitializationLog = DisplayInitializationLog|(1 << 1),
GpuValidation = 1 << 2
GpuValidation = 1 << 2,

NoFramebuffer = 1 << 3,

Default = DisplayInitializationLog
};
typedef Containers::EnumSet<InternalFlag> InternalFlags;
CORRADE_ENUMSET_FRIEND_OPERATORS(InternalFlags)
Expand All @@ -766,9 +770,10 @@ class MAGNUM_GL_EXPORT Context {
#endif
/* Made protected so it's possible to test the NoCreate constructor and
also not needed to friend Platform::GLContext. */
explicit Context(NoCreateT, Int argc, const char** argv, void functionLoader(Context&));
explicit Context(NoCreateT, Utility::Arguments&& args, Int argc, const char** argv, void functionLoader(Context&)): Context{NoCreate, args, argc, argv, functionLoader} {}
explicit Context(NoCreateT, Utility::Arguments& args, Int argc, const char** argv, void functionLoader(Context&));
explicit Context(NoCreateT, Int argc, const char** argv, void functionLoader(Context&), InternalFlags flags = InternalFlag::Default);
explicit Context(NoCreateT, Utility::Arguments&& args, Int argc, const char** argv, void functionLoader(Context&), InternalFlags flags = InternalFlag::Default): Context{NoCreate, args, argc, argv, functionLoader, flags} {}
explicit Context(NoCreateT, Utility::Arguments& args, Int argc, const char** argv, void functionLoader(Context&), InternalFlags flags = InternalFlag::Default);
explicit Context(NoCreateT, void functionLoader(Context&), InternalFlags flags = InternalFlag::Default);

bool tryCreate();
void create();
Expand Down
30 changes: 15 additions & 15 deletions src/Magnum/Platform/GLContext.h
Original file line number Diff line number Diff line change
Expand Up @@ -60,13 +60,13 @@ class GLContext: public GL::Context {
* Equivalent to calling @ref GLContext(NoCreateT, Int, const char**)
* followed by @ref create().
*/
explicit GLContext(Int argc, const char** argv): GLContext{NoCreate, argc, argv} { create(); }
explicit GLContext(Int argc, const char** argv, InternalFlags flags = InternalFlag::Default): GLContext{NoCreate, argc, argv, flags} { create(); }

/** @overload */
explicit GLContext(Int argc, char** argv): GLContext{argc, const_cast<const char**>(argv)} {}
explicit GLContext(Int argc, char** argv, InternalFlags flags = InternalFlag::Default): GLContext{argc, const_cast<const char**>(argv), flags} {}

/** @overload */
explicit GLContext(Int argc, std::nullptr_t argv): GLContext{argc, static_cast<const char**>(argv)} {}
explicit GLContext(Int argc, std::nullptr_t argv, InternalFlags flags = InternalFlag::Default): GLContext{argc, static_cast<const char**>(argv), flags} {}

/**
* @brief Default constructor
Expand All @@ -77,7 +77,7 @@ class GLContext: public GL::Context {
* behavior from the environment. See @ref GL-Context-command-line for
* more information.
*/
explicit GLContext(): GLContext{0, nullptr} {}
explicit GLContext(InternalFlags flags = InternalFlag::Default): GLContext{0, nullptr, flags} {}

/**
* @brief Construct without creating the context
Expand All @@ -87,28 +87,28 @@ class GLContext: public GL::Context {
* Use @ref create() or @ref tryCreate() to create the context.
* @see @ref GLContext(Int, const char**)
*/
explicit GLContext(NoCreateT, Int argc, const char** argv):
explicit GLContext(NoCreateT, Int argc, const char** argv, InternalFlags flags = InternalFlag::Default):
#ifndef CORRADE_TARGET_EMSCRIPTEN
GL::Context{NoCreate, argc, argv, flextGLInit} {}
GL::Context{NoCreate, argc, argv, flextGLInit, flags} {}
#else
GL::Context{NoCreate, argc, argv, nullptr} {}
GL::Context{NoCreate, argc, argv, nullptr, flags} {}
#endif

/** @overload */
explicit GLContext(NoCreateT, Int argc, char** argv): GLContext{NoCreate, argc, const_cast<const char**>(argv)} {}
explicit GLContext(NoCreateT, Int argc, char** argv, InternalFlags flags = InternalFlag::Default): GLContext{NoCreate, argc, const_cast<const char**>(argv), flags} {}

/** @overload */
explicit GLContext(NoCreateT, Int argc, std::nullptr_t argv): GLContext{NoCreate, argc, static_cast<const char**>(argv)} {}
explicit GLContext(NoCreateT, Int argc, std::nullptr_t argv, InternalFlags flags = InternalFlag::Default): GLContext{NoCreate, argc, static_cast<const char**>(argv), flags} {}

#ifndef DOXYGEN_GENERATING_OUTPUT
/* Used privately to inject additional command-line arguments */
explicit GLContext(NoCreateT, Utility::Arguments& args, Int argc, char** argv): GLContext{NoCreate, args, argc, const_cast<const char**>(argv)} {}
explicit GLContext(NoCreateT, Utility::Arguments& args, Int argc, std::nullptr_t argv): GLContext{NoCreate, args, argc, static_cast<const char**>(argv)} {}
explicit GLContext(NoCreateT, Utility::Arguments& args, Int argc, const char** argv):
explicit GLContext(NoCreateT, Utility::Arguments& args, Int argc, char** argv, InternalFlags flags = InternalFlag::Default): GLContext{NoCreate, args, argc, const_cast<const char**>(argv), flags} {}
explicit GLContext(NoCreateT, Utility::Arguments& args, Int argc, std::nullptr_t argv, InternalFlags flags = InternalFlag::Default): GLContext{NoCreate, args, argc, static_cast<const char**>(argv), flags} {}
explicit GLContext(NoCreateT, Utility::Arguments& args, Int argc, const char** argv, InternalFlags flags = InternalFlag::Default):
#ifndef CORRADE_TARGET_EMSCRIPTEN
GL::Context{NoCreate, args, argc, argv, flextGLInit} {}
GL::Context{NoCreate, args, argc, argv, flextGLInit, flags} {}
#else
GL::Context{NoCreate, args, argc, argv, nullptr} {}
GL::Context{NoCreate, args, argc, argv, nullptr, flags} {}
#endif
#endif

Expand All @@ -121,7 +121,7 @@ class GLContext: public GL::Context {
* affect the renderer behavior from the environment. See
* @ref GL-Context-command-line for more information.
*/
explicit GLContext(NoCreateT): GLContext{NoCreate, 0, nullptr} {}
explicit GLContext(NoCreateT, InternalFlags flags = InternalFlag::Default): GLContext{NoCreate, 0, nullptr, flags} {}

/**
* @brief Create the context
Expand Down