From 6702d47993d6cc308cd48e4d1d45cc18ecc3f874 Mon Sep 17 00:00:00 2001 From: rachytski Date: Wed, 9 Nov 2011 14:58:17 +0400 Subject: [PATCH] lazy initialization of OpenGL resources(texture and render buffer). --- yg/base_texture.cpp | 12 ++++++++---- yg/base_texture.hpp | 1 + yg/render_target.hpp | 1 + yg/renderbuffer.cpp | 7 ++++--- yg/renderbuffer.hpp | 1 + 5 files changed, 15 insertions(+), 7 deletions(-) diff --git a/yg/base_texture.cpp b/yg/base_texture.cpp index 7b39be46ee..fc7d3a5bf5 100644 --- a/yg/base_texture.cpp +++ b/yg/base_texture.cpp @@ -11,8 +11,11 @@ namespace yg { void BaseTexture::checkID() const { - if (m_id == -1) + if (!m_hasID) + { + m_hasID = true; init(); + } } void BaseTexture::init() const @@ -28,20 +31,20 @@ namespace yg } BaseTexture::BaseTexture(m2::PointU const & size) - : m_width(size.x), m_height(size.y), m_id(-1) + : m_width(size.x), m_height(size.y), m_id(0), m_hasID(false) { // init(); } BaseTexture::BaseTexture(unsigned width, unsigned height) - : m_width(width), m_height(height), m_id(-1) + : m_width(width), m_height(height), m_id(0), m_hasID(false) { // init(); } BaseTexture::~BaseTexture() { - if (m_id != -1) + if (m_hasID) OGLCHECK(glDeleteTextures(1, &m_id)); } @@ -84,6 +87,7 @@ namespace yg unsigned BaseTexture::id() const { + checkID(); return m_id; } diff --git a/yg/base_texture.hpp b/yg/base_texture.hpp index 8938a1e744..ae68553539 100644 --- a/yg/base_texture.hpp +++ b/yg/base_texture.hpp @@ -15,6 +15,7 @@ namespace yg /// OpenGL texture ID mutable unsigned m_id; + mutable bool m_hasID; /// texture dimensions /// @{ unsigned m_width; diff --git a/yg/render_target.hpp b/yg/render_target.hpp index 8e6c4d8c90..c45b5c658a 100644 --- a/yg/render_target.hpp +++ b/yg/render_target.hpp @@ -9,6 +9,7 @@ namespace yg public: virtual ~RenderTarget() {} /// attach render target to framebuffer and setup coordinate system + virtual unsigned int id() const = 0; virtual void attachToFrameBuffer() = 0; virtual unsigned width() const = 0; virtual unsigned height() const = 0; diff --git a/yg/renderbuffer.cpp b/yg/renderbuffer.cpp index 52c013952c..d0450dee83 100644 --- a/yg/renderbuffer.cpp +++ b/yg/renderbuffer.cpp @@ -27,8 +27,9 @@ namespace yg void RenderBuffer::checkID() const { - if (m_id == -1) + if (!m_hasID) { + m_hasID = true; #ifdef OMIM_GL_ES OGLCHECK(glGenRenderbuffersOES(1, &m_id)); makeCurrent(); @@ -57,12 +58,12 @@ namespace yg } RenderBuffer::RenderBuffer(size_t width, size_t height, bool isDepthBuffer) - : m_isDepthBuffer(isDepthBuffer), m_width(width), m_height(height), m_id(-1) + : m_isDepthBuffer(isDepthBuffer), m_width(width), m_height(height), m_hasID(false), m_id(0) {} RenderBuffer::~RenderBuffer() { - if (m_id != -1) + if (m_hasID) { #ifdef OMIM_GL_ES OGLCHECK(glDeleteRenderbuffersOES(1, &m_id)); diff --git a/yg/renderbuffer.hpp b/yg/renderbuffer.hpp index 48edee8299..986a14624f 100644 --- a/yg/renderbuffer.hpp +++ b/yg/renderbuffer.hpp @@ -11,6 +11,7 @@ namespace yg { private: + mutable bool m_hasID; mutable unsigned int m_id; bool m_isDepthBuffer;