From f50d60daac20ae553ac276e81ef8dc2e69f3ecdb Mon Sep 17 00:00:00 2001 From: Alexandros Frantzis Date: Thu, 16 Aug 2012 18:55:56 +0300 Subject: SceneJellyfish: Take into account the initialization status of internal objects. --- src/scene-jellyfish.cpp | 49 ++++++++++++++++++++++++++++++------------------- src/scene-jellyfish.h | 4 ++-- 2 files changed, 32 insertions(+), 21 deletions(-) diff --git a/src/scene-jellyfish.cpp b/src/scene-jellyfish.cpp index bb8f17a..bc18ee3 100644 --- a/src/scene-jellyfish.cpp +++ b/src/scene-jellyfish.cpp @@ -62,7 +62,8 @@ SceneJellyfish::setup() // Set up our private object that does all of the lifting priv_ = new JellyfishPrivate(); - priv_->initialize(); + if (!priv_->initialize()) + return false; // Set core scene timing after actual initialization so we don't measure // set up time. @@ -110,7 +111,7 @@ using LibMatrix::vec2; using std::string; using std::vector; -void +bool GradientRenderer::init() { // Program set up @@ -121,7 +122,7 @@ GradientRenderer::init() if (!Scene::load_shaders_from_strings(program_, vtx_source.str(), frg_source.str())) { - return; + return false; } positionLocation_ = program_["position"].location(); uvLocation_ = program_["uvIn"].location(); @@ -147,6 +148,8 @@ GradientRenderer::init() glBufferSubData(GL_ARRAY_BUFFER, uvOffset_, uvs_.size() * sizeof(vec2), &uvs_.front()); glBindBuffer(GL_ARRAY_BUFFER, 0); + + return true; } void @@ -357,11 +360,25 @@ JellyfishPrivate::JellyfishPrivate() : blend_(0), blendFuncSrc_(0), blendFuncDst_(0) +{ +} + +JellyfishPrivate::~JellyfishPrivate() +{ + positions_.clear(); + normals_.clear(); + colors_.clear(); + texcoords_.clear(); + indices_.clear(); +} + +bool +JellyfishPrivate::initialize() { static const string modelFilename(GLMARK_DATA_PATH"/models/jellyfish.jobj"); if (!load_obj(modelFilename)) { - return; + return false; } // Now that we've setup the vertex data, we can setup the map of how @@ -379,26 +396,16 @@ JellyfishPrivate::JellyfishPrivate() : dataMap_.texcoordOffset = dataMap_.colorOffset + dataMap_.colorSize; dataMap_.texcoordSize = texcoords_.size() * sv3; dataMap_.totalSize += dataMap_.texcoordSize; -} - -JellyfishPrivate::~JellyfishPrivate() -{ - positions_.clear(); - normals_.clear(); - colors_.clear(); - texcoords_.clear(); - indices_.clear(); -} -void -JellyfishPrivate::initialize() -{ lastUpdateTime_ = Util::get_timestamp_us() / 1000.0; currentTime_ = static_cast(lastUpdateTime_) % 100000000 / 1000.0; whichCaustic_ = static_cast(currentTime_ * 30) % 32 + 1; rotation_ = 0.0; - gradient_.init(); + if (!gradient_.init()) + { + return false; + } // Set up program first so we can store attribute and uniform locations // away for the @@ -412,7 +419,7 @@ JellyfishPrivate::initialize() if (!Scene::load_shaders_from_strings(program_, vtx_source.str(), frg_source.str())) { - return; + return false; } // Stash away attribute and uniform locations for handy use. @@ -455,6 +462,7 @@ JellyfishPrivate::initialize() if (!gotTex || textureObjects_[0] == 0) { Log::error("Jellyfish texture set up failed!!!\n"); + return false; } glBindTexture(GL_TEXTURE_2D, 0); // Then, the caustics textures @@ -470,6 +478,7 @@ JellyfishPrivate::initialize() if (!gotTex || textureObjects_[i] == 0) { Log::error("Caustics texture[%u] set up failed!!!\n", i); + return false; } glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); @@ -487,6 +496,8 @@ JellyfishPrivate::initialize() glEnable(GL_BLEND); glDisable(GL_CULL_FACE); glDisable(GL_DEPTH_TEST); + + return true; } void diff --git a/src/scene-jellyfish.h b/src/scene-jellyfish.h index 77be159..1e0db3a 100644 --- a/src/scene-jellyfish.h +++ b/src/scene-jellyfish.h @@ -48,7 +48,7 @@ public: vertices_.clear(); uvs_.clear(); } - void init(); + bool init(); void cleanup(); void draw(); }; @@ -114,7 +114,7 @@ class JellyfishPrivate public: JellyfishPrivate(); ~JellyfishPrivate(); - void initialize(); + bool initialize(); void update_viewport(const LibMatrix::vec2& viewport); void update_time(); void cleanup(); -- cgit v1.2.3