aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexandros Frantzis <alexandros.frantzis@linaro.org>2012-08-16 18:55:56 +0300
committerAlexandros Frantzis <alexandros.frantzis@linaro.org>2012-08-16 18:55:56 +0300
commitf50d60daac20ae553ac276e81ef8dc2e69f3ecdb (patch)
tree264815bdd1dd51819f82717287990e9fb7d043bf
parent2b0a1f08cf8a54a4a5b6465b4687d41b34100937 (diff)
downloadglmark2-f50d60daac20ae553ac276e81ef8dc2e69f3ecdb.tar.gz
SceneJellyfish: Take into account the initialization status of internal objects.
-rw-r--r--src/scene-jellyfish.cpp49
-rw-r--r--src/scene-jellyfish.h4
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
@@ -358,10 +361,24 @@ JellyfishPrivate::JellyfishPrivate() :
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<uint64_t>(lastUpdateTime_) % 100000000 / 1000.0;
whichCaustic_ = static_cast<uint64_t>(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();