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

4
src/Platform/EglContextHandler.h

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

66
src/Platform/GlutApplication.h

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

9
src/Platform/GlxApplication.h

@ -57,10 +57,15 @@ to simplify porting.
class GlxApplication: public AbstractXApplication { class GlxApplication: public AbstractXApplication {
public: public:
/** @copydoc GlutApplication::GlutApplication(const Arguments&) */ /** @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*) */ /** @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 /** @hideinitializer

8
src/Platform/GlxContextHandler.h

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

3
src/Platform/NaClApplication.cpp

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

60
src/Platform/Sdl2Application.h

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

6
src/Platform/WindowlessGlxApplication.h

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

9
src/Platform/XEglApplication.h

@ -57,10 +57,15 @@ to simplify porting.
class XEglApplication: public AbstractXApplication { class XEglApplication: public AbstractXApplication {
public: public:
/** @copydoc GlutApplication::GlutApplication(const Arguments&) */ /** @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*) */ /** @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 /** @hideinitializer

2
src/Platform/magnum-info.cpp

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

Loading…
Cancel
Save