From 4bb919e13807c7539c309a629939b0aa6843ee21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Sun, 17 Mar 2013 20:48:18 +0100 Subject: [PATCH] Don't define Query constructors & destructors in header. AbstractQuery is virtual class, thus the constructors & destructors are heavier than it looks. --- src/Query.cpp | 24 ++++++++++++++++++++++++ src/Query.h | 24 +++++++----------------- 2 files changed, 31 insertions(+), 17 deletions(-) diff --git a/src/Query.cpp b/src/Query.cpp index 072fad307..df80395fa 100644 --- a/src/Query.cpp +++ b/src/Query.cpp @@ -26,6 +26,20 @@ namespace Magnum { +AbstractQuery::AbstractQuery() { + /** @todo Get some extension wrangler instead to avoid undeclared glGenQueries() on ES2 */ + #ifndef MAGNUM_TARGET_GLES2 + glGenQueries(1, &_id); + #endif +} + +AbstractQuery::~AbstractQuery() { + /** @todo Get some extension wrangler instead to avoid undeclared glGenQueries() on ES2 */ + #ifndef MAGNUM_TARGET_GLES2 + glDeleteQueries(1, &_id); + #endif +} + bool AbstractQuery::resultAvailable() { /** @todo Re-enable when extension wrangler is available for ES */ #ifndef MAGNUM_TARGET_GLES2 @@ -79,6 +93,10 @@ template<> Long AbstractQuery::result() { } #endif +Query::Query(): target(nullptr) {} + +Query::~Query() { delete target; } + #ifndef MAGNUM_TARGET_GLES2 void Query::begin(Query::Target target) { glBeginQuery(static_cast(target), id()); @@ -94,6 +112,10 @@ void Query::end() { } #endif +SampleQuery::SampleQuery(): target(nullptr) {} + +SampleQuery::~SampleQuery() { delete target; } + void SampleQuery::begin(SampleQuery::Target target) { /** @todo Re-enable when extension wrangler is available for ES */ #ifndef MAGNUM_TARGET_GLES2 @@ -113,4 +135,6 @@ void SampleQuery::end() { target = nullptr; } +TimeQuery::TimeQuery() = default; + } diff --git a/src/Query.h b/src/Query.h index 76ad04a55..11f597ff9 100644 --- a/src/Query.h +++ b/src/Query.h @@ -49,12 +49,7 @@ class MAGNUM_EXPORT AbstractQuery { * Generates one OpenGL query. * @see @fn_gl{GenQueries} */ - inline explicit AbstractQuery() { - /** @todo Get some extension wrangler instead to avoid undeclared glGenQueries() on ES2 */ - #ifndef MAGNUM_TARGET_GLES2 - glGenQueries(1, &_id); - #endif - } + explicit AbstractQuery(); /** * @brief Destructor @@ -62,12 +57,7 @@ class MAGNUM_EXPORT AbstractQuery { * Deletes assigned OpenGL query. * @see @fn_gl{DeleteQueries} */ - virtual inline ~AbstractQuery() { - /** @todo Get some extension wrangler instead to avoid undeclared glGenQueries() on ES2 */ - #ifndef MAGNUM_TARGET_GLES2 - glDeleteQueries(1, &_id); - #endif - } + virtual ~AbstractQuery() = 0; /** @brief OpenGL query ID */ inline GLuint id() const { return _id; } @@ -163,9 +153,9 @@ class MAGNUM_EXPORT Query: public AbstractQuery { #endif }; - inline explicit Query(): target(nullptr) {} + explicit Query(); - inline ~Query() { delete target; } + ~Query(); /** * @brief Begin query @@ -294,9 +284,9 @@ class MAGNUM_EXPORT SampleQuery: public AbstractQuery { }; #endif - inline explicit SampleQuery(): target(nullptr) {} + explicit SampleQuery(); - inline ~SampleQuery() { delete target; } + ~SampleQuery(); /** @copydoc Query::begin() */ void begin(Target target); @@ -369,7 +359,7 @@ Using this query results in fewer OpenGL calls when doing more measures. */ class TimeQuery: public AbstractQuery { public: - explicit TimeQuery() = default; + explicit TimeQuery(); /** * @brief Query timestamp