Browse Source

Platform: inline/virtual optimizations.

Removed redundant `inline` keyword, changed public (pure) virtual
destructors to protected nonvirtual ones.
pull/278/head
Vladimír Vondruš 13 years ago
parent
commit
72e83c4f49
  1. 2
      src/Platform/AbstractContextHandler.h
  2. 58
      src/Platform/AbstractXApplication.h
  3. 4
      src/Platform/EglContextHandler.h
  4. 66
      src/Platform/GlutApplication.h
  5. 9
      src/Platform/GlxApplication.h
  6. 8
      src/Platform/GlxContextHandler.h
  7. 3
      src/Platform/NaClApplication.cpp
  8. 63
      src/Platform/NaClApplication.h
  9. 60
      src/Platform/Sdl2Application.h
  10. 6
      src/Platform/WindowlessGlxApplication.h
  11. 9
      src/Platform/XEglApplication.h
  12. 2
      src/Platform/magnum-info.cpp

2
src/Platform/AbstractContextHandler.h

@ -63,7 +63,7 @@ template<class Display, class VisualId, class Window> class AbstractContextHandl
*
* Default is to disable.
*/
virtual inline ExtensionWrangler::ExperimentalFeatures experimentalExtensionWranglerFeatures() const {
virtual ExtensionWrangler::ExperimentalFeatures experimentalExtensionWranglerFeatures() const {
return ExtensionWrangler::ExperimentalFeatures::Disable;
}

58
src/Platform/AbstractXApplication.h

@ -89,13 +89,6 @@ class AbstractXApplication {
*/
explicit AbstractXApplication(AbstractContextHandler<Display*, VisualID, Window>* contextHandler, const Arguments& arguments, Configuration* configuration);
/**
* @brief Destructor
*
* Deletes context and destroys the window.
*/
virtual ~AbstractXApplication() = 0;
/**
* @brief Execute main loop
* @return Value for returning from `main()`.
@ -103,9 +96,18 @@ class AbstractXApplication {
int exec();
/** @brief Exit application main loop */
inline void exit() { flags |= Flag::Exit; }
void exit() { flags |= Flag::Exit; }
protected:
/**
* @brief Destructor
*
* Deletes context and destroys the window.
*/
/* Nobody will need to have (and delete) AbstractXApplication*, thus
this is faster than public pure virtual destructor */
~AbstractXApplication();
/** @copydoc GlutApplication::createContext() */
void createContext(Configuration* configuration);
@ -118,10 +120,10 @@ class AbstractXApplication {
virtual void drawEvent() = 0;
/** @copydoc GlutApplication::swapBuffers() */
inline void swapBuffers() { contextHandler->swapBuffers(); }
void swapBuffers() { contextHandler->swapBuffers(); }
/** @copydoc GlutApplication::redraw() */
inline void redraw() { flags |= Flag::Redraw; }
void redraw() { flags |= Flag::Redraw; }
/*@}*/
@ -191,7 +193,7 @@ class AbstractXApplication::Configuration {
~Configuration();
/** @brief Window title */
inline std::string title() const { return _title; }
std::string title() const { return _title; }
/**
* @brief Set window title
@ -199,13 +201,13 @@ class AbstractXApplication::Configuration {
*
* Default is `"Magnum X Application"`.
*/
inline Configuration* setTitle(std::string title) {
Configuration* setTitle(std::string title) {
_title = std::move(title);
return this;
}
/** @brief Window size */
inline Vector2i size() const { return _size; }
Vector2i size() const { return _size; }
/**
* @brief Set window size
@ -213,7 +215,7 @@ class AbstractXApplication::Configuration {
*
* Default is `{800, 600}`.
*/
inline Configuration* setSize(const Vector2i& size) {
Configuration* setSize(const Vector2i& size) {
_size = size;
return this;
}
@ -263,20 +265,20 @@ class AbstractXApplication::InputEvent {
*/
typedef Containers::EnumSet<Modifier, unsigned int> Modifiers;
inline virtual ~InputEvent() {}
/** @copydoc GlutApplication::InputEvent::setAccepted() */
inline void setAccepted(bool accepted = true) { _accepted = accepted; }
void setAccepted(bool accepted = true) { _accepted = accepted; }
/** @copydoc GlutApplication::InputEvent::isAccepted() */
inline bool isAccepted() { return _accepted; }
constexpr bool isAccepted() const { return _accepted; }
/** @brief Modifiers */
inline Modifiers modifiers() const { return _modifiers; }
constexpr Modifiers modifiers() const { return _modifiers; }
#ifndef DOXYGEN_GENERATING_OUTPUT
protected:
inline InputEvent(Modifiers modifiers): _modifiers(modifiers), _accepted(false) {}
constexpr InputEvent(Modifiers modifiers): _modifiers(modifiers), _accepted(false) {}
~InputEvent() = default;
#endif
private:
@ -374,13 +376,13 @@ class AbstractXApplication::KeyEvent: public AbstractXApplication::InputEvent {
};
/** @brief Key */
inline Key key() const { return _key; }
constexpr Key key() const { return _key; }
/** @brief Position */
inline Vector2i position() const { return _position; }
constexpr Vector2i position() const { return _position; }
private:
inline KeyEvent(Key key, Modifiers modifiers, const Vector2i& position): InputEvent(modifiers), _key(key), _position(position) {}
constexpr KeyEvent(Key key, Modifiers modifiers, const Vector2i& position): InputEvent(modifiers), _key(key), _position(position) {}
const Key _key;
const Vector2i _position;
@ -409,13 +411,13 @@ class AbstractXApplication::MouseEvent: public AbstractXApplication::InputEvent
};
/** @brief Button */
inline Button button() const { return _button; }
constexpr Button button() const { return _button; }
/** @brief Position */
inline Vector2i position() const { return _position; }
constexpr Vector2i position() const { return _position; }
private:
inline MouseEvent(Button button, Modifiers modifiers, const Vector2i& position): InputEvent(modifiers), _button(button), _position(position) {}
constexpr MouseEvent(Button button, Modifiers modifiers, const Vector2i& position): InputEvent(modifiers), _button(button), _position(position) {}
const Button _button;
const Vector2i _position;
@ -431,10 +433,10 @@ class AbstractXApplication::MouseMoveEvent: public AbstractXApplication::InputEv
public:
/** @brief Position */
inline Vector2i position() const { return _position; }
constexpr Vector2i position() const { return _position; }
private:
inline MouseMoveEvent(Modifiers modifiers, const Vector2i& position): InputEvent(modifiers), _position(position) {}
constexpr MouseMoveEvent(Modifiers modifiers, const Vector2i& position): InputEvent(modifiers), _position(position) {}
const Vector2i _position;
};

4
src/Platform/EglContextHandler.h

@ -66,11 +66,11 @@ class EglContextHandler: public AbstractContextHandler<EGLNativeDisplayType, Vis
VisualId getVisualId(EGLNativeDisplayType nativeDisplay) override;
void createContext(EGLNativeWindowType nativeWindow) override;
inline void makeCurrent() override {
void makeCurrent() override {
eglMakeCurrent(display, surface, surface, context);
}
inline void swapBuffers() override {
void swapBuffers() override {
eglSwapBuffers(display, surface);
}

66
src/Platform/GlutApplication.h

@ -101,18 +101,20 @@ class GlutApplication {
*/
explicit GlutApplication(const Arguments& arguments, Configuration* configuration);
virtual ~GlutApplication();
/**
* @brief Execute main loop
* @return Value for returning from `main()`.
*/
inline int exec() {
int exec() {
glutMainLoop();
return 0;
}
protected:
/* Nobody will need to have (and delete) GlutApplication*, thus this is
faster than public pure virtual destructor */
~GlutApplication();
/**
* @brief Create context with given configuration
*
@ -159,9 +161,7 @@ class GlutApplication {
*
* Paints currently rendered framebuffer on screen.
*/
inline void swapBuffers() {
glutSwapBuffers();
}
void swapBuffers() { glutSwapBuffers(); }
/**
* @brief Redraw immediately
@ -169,9 +169,7 @@ class GlutApplication {
* Marks the window for redrawing, resulting in call to drawEvent()
* in the next iteration.
*/
virtual inline void redraw() {
glutPostRedisplay();
}
virtual void redraw() { glutPostRedisplay(); }
/*@}*/
@ -205,17 +203,17 @@ class GlutApplication {
* When mouse tracking is enabled, mouseMoveEvent() is called even
* when no button is pressed. Mouse tracking is disabled by default.
*/
inline void setMouseTracking(bool enabled) {
void setMouseTracking(bool enabled) {
glutPassiveMotionFunc(enabled ? staticMouseMoveEvent : nullptr);
}
/** @brief Set mouse cursor */
inline void setMouseCursor(MouseCursor cursor) {
void setMouseCursor(MouseCursor cursor) {
glutSetCursor(static_cast<int>(cursor));
}
/** @brief Warp mouse cursor to given coordinates */
inline void warpMouseCursor(const Vector2i& position) {
void warpMouseCursor(const Vector2i& position) {
glutWarpPointer(position.x(), position.y());
}
@ -250,7 +248,7 @@ class GlutApplication {
private:
void initialize(int& argc, char** argv);
inline static void staticViewportEvent(int x, int y) {
static void staticViewportEvent(int x, int y) {
instance->viewportEvent({x, y});
}
@ -260,7 +258,7 @@ class GlutApplication {
static void staticMouseMoveEvent(int x, int y);
inline static void staticDrawEvent() {
static void staticDrawEvent() {
instance->drawEvent();
}
@ -286,7 +284,7 @@ class GlutApplication::Configuration {
~Configuration();
/** @brief Window title */
inline std::string title() const { return _title; }
std::string title() const { return _title; }
/**
* @brief Set window title
@ -294,13 +292,13 @@ class GlutApplication::Configuration {
*
* Default is `"Magnum GLUT Application"`.
*/
inline Configuration* setTitle(std::string title) {
Configuration* setTitle(std::string title) {
_title = std::move(title);
return this;
}
/** @brief Window size */
inline Vector2i size() const { return _size; }
Vector2i size() const { return _size; }
/**
* @brief Set window size
@ -308,13 +306,13 @@ class GlutApplication::Configuration {
*
* Default is `{800, 600}`.
*/
inline Configuration* setSize(const Vector2i& size) {
Configuration* setSize(const Vector2i& size) {
_size = size;
return this;
}
/** @brief Sample count */
inline Int sampleCount() const { return _sampleCount; }
Int sampleCount() const { return _sampleCount; }
/**
* @brief Set sample count
@ -324,7 +322,7 @@ class GlutApplication::Configuration {
* ignored, GLUT either enables it or disables. See also
* @ref Renderer::Feature "Renderer::Feature::Multisampling".
*/
inline Configuration* setSampleCount(Int count) {
Configuration* setSampleCount(Int count) {
_sampleCount = count;
return this;
}
@ -348,23 +346,21 @@ class GlutApplication::InputEvent {
InputEvent& operator=(InputEvent&&) = delete;
public:
inline virtual ~InputEvent() {}
/**
* @brief Set event as accepted
*
* If the event is ignored (i.e., not set as accepted), it might be
* propagated elsewhere. By default is each event ignored.
*/
inline void setAccepted(bool accepted = true) { _accepted = accepted; }
void setAccepted(bool accepted = true) { _accepted = accepted; }
/** @brief Whether the event is accepted */
inline bool isAccepted() { return _accepted; }
constexpr bool isAccepted() const { return _accepted; }
#ifndef DOXYGEN_GENERATING_OUTPUT
protected:
inline InputEvent(): _accepted(false) {}
#endif
constexpr InputEvent(): _accepted(false) {}
~InputEvent() = default;
private:
bool _accepted;
@ -408,13 +404,13 @@ class GlutApplication::KeyEvent: public GlutApplication::InputEvent {
};
/** @brief Key */
inline Key key() const { return _key; }
constexpr Key key() const { return _key; }
/** @brief Position */
inline Vector2i position() const { return _position; }
constexpr Vector2i position() const { return _position; }
private:
inline KeyEvent(Key key, const Vector2i& position): _key(key), _position(position) {}
constexpr KeyEvent(Key key, const Vector2i& position): _key(key), _position(position) {}
const Key _key;
const Vector2i _position;
@ -443,13 +439,13 @@ class GlutApplication::MouseEvent: public GlutApplication::InputEvent {
};
/** @brief Button */
inline Button button() const { return _button; }
constexpr Button button() const { return _button; }
/** @brief Position */
inline Vector2i position() const { return _position; }
constexpr Vector2i position() const { return _position; }
private:
inline MouseEvent(Button button, const Vector2i& position): _button(button), _position(position) {}
constexpr MouseEvent(Button button, const Vector2i& position): _button(button), _position(position) {}
const Button _button;
const Vector2i _position;
@ -465,10 +461,10 @@ class GlutApplication::MouseMoveEvent: public GlutApplication::InputEvent {
public:
/** @brief Position */
inline Vector2i position() const { return _position; }
constexpr Vector2i position() const { return _position; }
private:
inline MouseMoveEvent(const Vector2i& position): _position(position) {}
constexpr MouseMoveEvent(const Vector2i& position): _position(position) {}
const Vector2i _position;
};

9
src/Platform/GlxApplication.h

@ -57,10 +57,15 @@ to simplify porting.
class GlxApplication: public AbstractXApplication {
public:
/** @copydoc GlutApplication::GlutApplication(const Arguments&) */
inline explicit GlxApplication(const Arguments& arguments): AbstractXApplication(new GlxContextHandler, arguments) {}
explicit GlxApplication(const Arguments& arguments): AbstractXApplication(new GlxContextHandler, arguments) {}
/** @copydoc GlutApplication::GlutApplication(const Arguments&, Configuration*) */
inline explicit GlxApplication(const Arguments& arguments, Configuration* configuration): AbstractXApplication(new GlxContextHandler, arguments, configuration) {}
explicit GlxApplication(const Arguments& arguments, Configuration* configuration): AbstractXApplication(new GlxContextHandler, arguments, configuration) {}
protected:
/* Nobody will need to have (and delete) GlxApplication*, thus this is
faster than public pure virtual destructor */
~GlxApplication() = default;
};
/** @hideinitializer

8
src/Platform/GlxContextHandler.h

@ -56,17 +56,15 @@ class GlxContextHandler: public AbstractContextHandler<Display*, VisualID, Windo
void createContext(Window nativeWindow) override;
/* This must be enabled, otherwise (on my NVidia) it crashes when creating VAO. WTF. */
inline ExtensionWrangler::ExperimentalFeatures experimentalExtensionWranglerFeatures() const override {
ExtensionWrangler::ExperimentalFeatures experimentalExtensionWranglerFeatures() const override {
return ExtensionWrangler::ExperimentalFeatures::Enable;
}
inline void makeCurrent() override {
void makeCurrent() override {
glXMakeCurrent(display, window, context);
}
inline void swapBuffers() override {
glXSwapBuffers(display, window);
}
void swapBuffers() override { glXSwapBuffers(display, window); }
private:
Display* display;

3
src/Platform/NaClApplication.cpp

@ -232,7 +232,4 @@ void NaClApplication::mouseLockCallback(void* applicationInstance, std::int32_t)
instance->flags |= Flag::MouseLocked;
}
NaClApplication::Configuration::Configuration(): _size(640, 480), _sampleCount(0) {}
NaClApplication::Configuration::~Configuration() = default;
}}

63
src/Platform/NaClApplication.h

@ -102,8 +102,6 @@ class NaClApplication: public pp::Instance, public pp::Graphics3DClient, public
*/
explicit NaClApplication(const Arguments& arguments, Configuration* configuration);
~NaClApplication();
/** @brief Whether the application runs fullscreen */
bool isFullscreen();
@ -118,6 +116,10 @@ class NaClApplication: public pp::Instance, public pp::Graphics3DClient, public
bool setFullscreen(bool enabled);
protected:
/* Nobody will need to have (and delete) NaClApplication*, thus this is
faster than public pure virtual destructor */
~NaClApplication();
/** @copydoc GlutApplication::createContext() */
void createContext(Configuration* configuration);
@ -136,7 +138,7 @@ class NaClApplication: public pp::Instance, public pp::Graphics3DClient, public
void swapBuffers();
/** @copydoc GlutApplication::redraw() */
inline void redraw() { flags |= Flag::Redraw; }
void redraw() { flags |= Flag::Redraw; }
/*@}*/
@ -166,9 +168,7 @@ class NaClApplication: public pp::Instance, public pp::Graphics3DClient, public
public:
/** @brief Whether mouse is locked */
inline bool isMouseLocked() const {
return flags & Flag::MouseLocked;
}
bool isMouseLocked() const { return flags & Flag::MouseLocked; }
/**
* @brief Enable or disable mouse locking
@ -220,11 +220,11 @@ class NaClApplication: public pp::Instance, public pp::Graphics3DClient, public
};
typedef Containers::EnumSet<Flag, UnsignedByte> Flags;
inline void Graphics3DContextLost() override {
void Graphics3DContextLost() override {
CORRADE_ASSERT(false, "NaClApplication: context unexpectedly lost", );
}
inline void MouseLockLost() override {
void MouseLockLost() override {
flags &= ~Flag::MouseLocked;
}
@ -257,11 +257,10 @@ class NaClApplication::Configuration {
Configuration& operator=(Configuration&&) = delete;
public:
explicit Configuration();
~Configuration();
constexpr explicit Configuration(): _size(640, 480), _sampleCount(0) {}
/** @brief Window size */
inline Vector2i size() const { return _size; }
Vector2i size() const { return _size; }
/**
* @brief Set window size
@ -269,13 +268,13 @@ class NaClApplication::Configuration {
*
* Default is `{640, 480}`.
*/
inline Configuration* setSize(const Vector2i& size) {
Configuration* setSize(const Vector2i& size) {
_size = size;
return this;
}
/** @brief Sample count */
inline Int sampleCount() const { return _sampleCount; }
Int sampleCount() const { return _sampleCount; }
/**
* @brief Set sample count
@ -284,7 +283,7 @@ class NaClApplication::Configuration {
* Default is `0`, thus no multisampling. See also
* @ref Renderer::Feature "Renderer::Feature::Multisampling".
*/
inline Configuration* setSampleCount(Int count) {
Configuration* setSampleCount(Int count) {
_sampleCount = count;
return this;
}
@ -336,10 +335,8 @@ class NaClApplication::InputEvent {
*/
typedef Containers::EnumSet<Modifier, std::uint32_t> Modifiers;
inline virtual ~InputEvent() {}
/** @brief Modifiers */
inline Modifiers modifiers() const { return _modifiers; }
constexpr Modifiers modifiers() const { return _modifiers; }
/**
* @brief Set event as accepted
@ -348,14 +345,16 @@ class NaClApplication::InputEvent {
* propagated elsewhere (e.g. to the browser). By default is each
* event ignored.
*/
inline void setAccepted(bool accepted = true) { _accepted = accepted; }
void setAccepted(bool accepted = true) { _accepted = accepted; }
/** @brief Whether the event is accepted */
inline bool isAccepted() { return _accepted; }
constexpr bool isAccepted() const { return _accepted; }
#ifndef DOXYGEN_GENERATING_OUTPUT
protected:
inline InputEvent(Modifiers modifiers): _accepted(false), _modifiers(modifiers) {}
constexpr InputEvent(Modifiers modifiers): _accepted(false), _modifiers(modifiers) {}
~InputEvent() = default;
#endif
private:
@ -450,10 +449,10 @@ class NaClApplication::KeyEvent: public NaClApplication::InputEvent {
};
/** @brief Key */
inline Key key() const { return _key; }
constexpr Key key() const { return _key; }
private:
inline KeyEvent(Key key, Modifiers modifiers): InputEvent(modifiers), _key(key) {}
constexpr KeyEvent(Key key, Modifiers modifiers): InputEvent(modifiers), _key(key) {}
const Key _key;
};
@ -480,13 +479,13 @@ class NaClApplication::MouseEvent: public NaClApplication::InputEvent {
};
/** @brief Button */
inline Button button() const { return _button; }
constexpr Button button() const { return _button; }
/** @brief Position */
inline Vector2i position() const { return _position; }
constexpr Vector2i position() const { return _position; }
private:
inline MouseEvent(Button button, const Vector2i& position, Modifiers modifiers): InputEvent(modifiers), _button(button), _position(position) {}
constexpr MouseEvent(Button button, const Vector2i& position, Modifiers modifiers): InputEvent(modifiers), _button(button), _position(position) {}
const Button _button;
const Vector2i _position;
@ -503,17 +502,17 @@ class NaClApplication::MouseMoveEvent: public NaClApplication::InputEvent {
public:
/** @brief Position */
inline Vector2i position() const { return _position; }
constexpr Vector2i position() const { return _position; }
/**
* @brief Relative position
*
* Position relative to previous event.
*/
inline Vector2i relativePosition() const { return _relativePosition; }
constexpr Vector2i relativePosition() const { return _relativePosition; }
private:
inline MouseMoveEvent(const Vector2i& position, const Vector2i& relativePosition, Modifiers modifiers): InputEvent(modifiers), _position(position), _relativePosition(relativePosition) {}
constexpr MouseMoveEvent(const Vector2i& position, const Vector2i& relativePosition, Modifiers modifiers): InputEvent(modifiers), _position(position), _relativePosition(relativePosition) {}
const Vector2i _position, _relativePosition;
};
@ -523,15 +522,13 @@ CORRADE_ENUMSET_OPERATORS(NaClApplication::Flags)
namespace Implementation {
template<class Application> class NaClModule: public pp::Module {
public:
inline ~NaClModule() {
glTerminatePPAPI();
}
~NaClModule() { glTerminatePPAPI(); }
inline bool Init() override {
bool Init() override {
return glInitializePPAPI(get_browser_interface());
}
inline pp::Instance* CreateInstance(PP_Instance instance) {
pp::Instance* CreateInstance(PP_Instance instance) {
return new Application(instance);
}
};

60
src/Platform/Sdl2Application.h

@ -86,15 +86,17 @@ class Sdl2Application {
/** @copydoc GlutApplication::GlutApplication(const Arguments&, Configuration*) */
explicit Sdl2Application(const Arguments& arguments, Configuration* configuration);
virtual ~Sdl2Application();
/** @copydoc GlutApplication::exec() */
int exec();
/** @brief Exit application main loop */
inline void exit() { flags |= Flag::Exit; }
void exit() { flags |= Flag::Exit; }
protected:
/* Nobody will need to have (and delete) Sdl2Application*, thus this is
faster than public pure virtual destructor */
virtual ~Sdl2Application();
/** @copydoc GlutApplication::createContext() */
void createContext(Configuration* configuration);
@ -110,10 +112,10 @@ class Sdl2Application {
virtual void drawEvent() = 0;
/** @copydoc GlutApplication::swapBuffers() */
inline void swapBuffers() { SDL_GL_SwapWindow(window); }
void swapBuffers() { SDL_GL_SwapWindow(window); }
/** @copydoc GlutApplication::redraw() */
inline void redraw() { flags |= Flag::Redraw; }
void redraw() { flags |= Flag::Redraw; }
/*@}*/
@ -135,9 +137,7 @@ class Sdl2Application {
public:
/** @brief Whether mouse is locked */
inline bool isMouseLocked() const {
return SDL_GetRelativeMouseMode();
}
bool isMouseLocked() const { return SDL_GetRelativeMouseMode(); }
/**
* @brief Enable or disable mouse locking
@ -227,7 +227,7 @@ class Sdl2Application::Configuration {
~Configuration();
/** @brief Window title */
inline std::string title() const { return _title; }
std::string title() const { return _title; }
/**
* @brief Set window title
@ -235,13 +235,13 @@ class Sdl2Application::Configuration {
*
* Default is `"Magnum SDL2 Application"`.
*/
inline Configuration* setTitle(std::string title) {
Configuration* setTitle(std::string title) {
_title = std::move(title);
return this;
}
/** @brief Window size */
inline Vector2i size() const { return _size; }
Vector2i size() const { return _size; }
/**
* @brief Set window size
@ -249,13 +249,13 @@ class Sdl2Application::Configuration {
*
* Default is `{800, 600}`.
*/
inline Configuration* setSize(const Vector2i& size) {
Configuration* setSize(const Vector2i& size) {
_size = size;
return this;
}
/** @brief Window flags */
inline Flags flags() const { return _flags; }
Flags flags() const { return _flags; }
/**
* @brief Set window flags
@ -263,13 +263,13 @@ class Sdl2Application::Configuration {
*
* Default is @ref Flag "Flag::Resizable".
*/
inline Configuration* setFlags(const Flags flags) {
Configuration* setFlags(const Flags flags) {
_flags = flags;
return this;
}
/** @brief Sample count */
inline Int sampleCount() const { return _sampleCount; }
Int sampleCount() const { return _sampleCount; }
/**
* @brief Set sample count
@ -278,7 +278,7 @@ class Sdl2Application::Configuration {
* Default is `0`, thus no multisampling. See also
* @ref Renderer::Feature "Renderer::Feature::Multisampling".
*/
inline Configuration* setSampleCount(Int count) {
Configuration* setSampleCount(Int count) {
_sampleCount = count;
return this;
}
@ -329,17 +329,17 @@ class Sdl2Application::InputEvent {
*/
typedef Containers::EnumSet<Modifier, Uint16> Modifiers;
inline virtual ~InputEvent() {}
/** @copydoc GlutApplication::InputEvent::setAccepted() */
inline void setAccepted(bool accepted = true) { _accepted = accepted; }
void setAccepted(bool accepted = true) { _accepted = accepted; }
/** @copydoc GlutApplication::InputEvent::isAccepted() */
inline bool isAccepted() { return _accepted; }
constexpr bool isAccepted() const { return _accepted; }
#ifndef DOXYGEN_GENERATING_OUTPUT
protected:
inline InputEvent(): _accepted(false) {}
constexpr explicit InputEvent(): _accepted(false) {}
~InputEvent() = default;
#endif
private:
@ -434,13 +434,13 @@ class Sdl2Application::KeyEvent: public Sdl2Application::InputEvent {
};
/** @brief Key */
inline Key key() const { return _key; }
constexpr Key key() const { return _key; }
/** @brief Modifiers */
inline Modifiers modifiers() const { return _modifiers; }
constexpr Modifiers modifiers() const { return _modifiers; }
private:
inline KeyEvent(Key key, Modifiers modifiers): _key(key), _modifiers(modifiers) {}
constexpr KeyEvent(Key key, Modifiers modifiers): _key(key), _modifiers(modifiers) {}
const Key _key;
const Modifiers _modifiers;
@ -469,10 +469,10 @@ class Sdl2Application::MouseEvent: public Sdl2Application::InputEvent {
};
/** @brief Button */
inline Button button() const { return _button; }
constexpr Button button() const { return _button; }
/** @brief Position */
inline Vector2i position() const { return _position; }
constexpr Vector2i position() const { return _position; }
/**
* @brief Modifiers
@ -482,7 +482,7 @@ class Sdl2Application::MouseEvent: public Sdl2Application::InputEvent {
Modifiers modifiers();
private:
inline MouseEvent(Button button, const Vector2i& position): _button(button), _position(position), modifiersLoaded(false) {}
constexpr MouseEvent(Button button, const Vector2i& position): _button(button), _position(position), modifiersLoaded(false) {}
const Button _button;
const Vector2i _position;
@ -500,14 +500,14 @@ class Sdl2Application::MouseMoveEvent: public Sdl2Application::InputEvent {
public:
/** @brief Position */
inline Vector2i position() const { return _position; }
constexpr Vector2i position() const { return _position; }
/**
* @brief Relative position
*
* Position relative to previous event.
*/
inline Vector2i relativePosition() const { return _relativePosition; }
constexpr Vector2i relativePosition() const { return _relativePosition; }
/**
* @brief Modifiers
@ -517,7 +517,7 @@ class Sdl2Application::MouseMoveEvent: public Sdl2Application::InputEvent {
Modifiers modifiers();
private:
inline MouseMoveEvent(const Vector2i& position, const Vector2i& relativePosition): _position(position), _relativePosition(relativePosition), modifiersLoaded(false) {}
constexpr MouseMoveEvent(const Vector2i& position, const Vector2i& relativePosition): _position(position), _relativePosition(relativePosition), modifiersLoaded(false) {}
const Vector2i _position, _relativePosition;
bool modifiersLoaded;

6
src/Platform/WindowlessGlxApplication.h

@ -79,8 +79,6 @@ class WindowlessGlxApplication {
/** @copydoc GlutApplication::GlutApplication(const Arguments&, Configuration*) */
explicit WindowlessGlxApplication(const Arguments& arguments, Configuration* configuration);
~WindowlessGlxApplication();
/**
* @brief Execute application
* @return Value for returning from `main()`.
@ -88,6 +86,10 @@ class WindowlessGlxApplication {
virtual int exec() = 0;
protected:
/* Nobody will need to have (and delete) WindowlessGlxApplication*,
thus this is faster than public pure virtual destructor */
~WindowlessGlxApplication();
/** @copydoc GlutApplication::createContext() */
void createContext(Configuration* configuration);

9
src/Platform/XEglApplication.h

@ -57,10 +57,15 @@ to simplify porting.
class XEglApplication: public AbstractXApplication {
public:
/** @copydoc GlutApplication::GlutApplication(const Arguments&) */
inline explicit XEglApplication(const Arguments& arguments): AbstractXApplication(new EglContextHandler, arguments) {}
explicit XEglApplication(const Arguments& arguments): AbstractXApplication(new EglContextHandler, arguments) {}
/** @copydoc GlutApplication::GlutApplication(const Arguments&, Configuration*) */
inline explicit XEglApplication(const Arguments& arguments, Configuration* configuration): AbstractXApplication(new EglContextHandler, arguments, configuration) {}
explicit XEglApplication(const Arguments& arguments, Configuration* configuration): AbstractXApplication(new EglContextHandler, arguments, configuration) {}
protected:
/* Nobody will need to have (and delete) XEglApplication*, thus this is
faster than public pure virtual destructor */
~XEglApplication() = default;
};
/** @hideinitializer

2
src/Platform/magnum-info.cpp

@ -34,7 +34,7 @@ class MagnumInfo: public Platform::WindowlessGlxApplication {
public:
explicit MagnumInfo(const Arguments& arguments);
inline int exec() override { return 0; }
int exec() override { return 0; }
};
MagnumInfo::MagnumInfo(const Arguments& arguments): WindowlessGlxApplication(arguments) {

Loading…
Cancel
Save