|
From: Tapio V. <aa...@us...> - 2009-11-10 09:06:22
|
Module: performous
Branch: master
Commit: 9295099d8c70d14a317652207a0a90eef8d0c0bf
Author: Tapio Vierros <tap...@gm...>
Date: Tue Nov 10 11:04:40 2009 +0200
Exception handling for loading 3d objects.
---
game/3dobject.cc | 1 +
game/3dobject.hh | 12 ++++++++----
game/guitargraph.cc | 10 ++++++++--
3 files changed, 17 insertions(+), 6 deletions(-)
diff --git a/game/3dobject.cc b/game/3dobject.cc
index c17db3e..f4e5a2e 100644
--- a/game/3dobject.cc
+++ b/game/3dobject.cc
@@ -87,6 +87,7 @@ void Object3d::loadWavefrontObj(std::string filepath, float scale) {
void Object3d::generateDisplayList() {
+ if (m_displist != 0) glDeleteLists(m_displist, 1);
m_displist = glGenLists(1);
glutil::DisplayList displist(m_displist, GL_COMPILE);
//UseTexture tex(*m_texture);
diff --git a/game/3dobject.hh b/game/3dobject.hh
index d4dfce0..771f197 100644
--- a/game/3dobject.hh
+++ b/game/3dobject.hh
@@ -47,16 +47,20 @@ class Object3d: boost::noncopyable {
void generateDisplayList();
public:
/// constructors
- Object3d();
+ Object3d(): m_displist(0) {};
Object3d(std::string filepath, float scale = 1.0): m_displist(0) {
- //m_texture.reset(new Texture("button.svg"));
- loadWavefrontObj(filepath, scale);
- generateDisplayList();
+ load(filepath, scale);
}
/// destructor
~Object3d() {
if (m_displist != 0) glDeleteLists(m_displist, 1);
}
+ /// load a new object file
+ void load(std::string filepath, float scale = 1.0) {
+ //m_texture.reset(new Texture("button.svg"));
+ loadWavefrontObj(filepath, scale);
+ generateDisplayList();
+ }
/// draws the object
void draw(float x = 0, float y = 0, float z = 0) const {
glTranslatef(x, y, z);
diff --git a/game/guitargraph.cc b/game/guitargraph.cc
index 1032250..7e2b00b 100644
--- a/game/guitargraph.cc
+++ b/game/guitargraph.cc
@@ -5,6 +5,7 @@
#include "3dobject.hh"
#include <cmath>
#include <cstdlib>
+#include <stdexcept>
#include <boost/lexical_cast.hpp>
@@ -51,8 +52,6 @@ GuitarGraph::GuitarGraph(Audio& audio, Song const& song, std::string track):
m_button("button.svg"),
m_button_l("button_l.svg"),
m_tap("tap.svg"),
- m_fretObj(getThemePath("fret.obj"), 1.0f),
- m_tappableObj(getThemePath("fret_tap.obj"), 1.0f),
m_drums(track=="drums"),
m_use3d(config["graphic/3d_notes"].b()),
m_cx(0.0, 0.2),
@@ -68,6 +67,13 @@ GuitarGraph::GuitarGraph(Audio& audio, Song const& song, std::string track):
m_streak(),
m_longestStreak()
{
+ try {
+ m_fretObj.load(getThemePath("fret.obj"));
+ m_tappableObj.load(getThemePath("fret_tap.obj"));
+ } catch (std::exception const& e) {
+ std::cout << e.what() << std::endl;
+ m_use3d = false;
+ }
unsigned int sr = m_audio.getSR();
if (g_samplesD.empty()) {
g_samplesD.push_back(Sample(getDataPath("sounds/drum_bass.ogg"), sr));
|