Force all Renderables to declare an 'isReady' function to circumvent assertion triggers when a crucial element of initialization fails

Fix velocity in RenderableStars
This commit is contained in:
Alexander Bock
2014-11-28 01:41:26 +01:00
parent 2c3723a778
commit 4de8071efe
27 changed files with 89 additions and 35 deletions

View File

@@ -49,6 +49,8 @@ public:
bool initialize() override;
bool deinitialize() override;
bool isReady() const override;
void render(const RenderData& data) override;
void update(const UpdateData& data) override;

View File

@@ -48,6 +48,7 @@ public:
bool initialize() override;
bool deinitialize() override;
bool isReady() const override;
void render(const RenderData& data) override;
void update(const UpdateData& data) override;

View File

@@ -55,6 +55,8 @@ public:
virtual bool initialize() = 0;
virtual bool deinitialize() = 0;
virtual bool isReady() const = 0;
void setBoundingSphere(const PowerScaledScalar& boundingSphere);
const PowerScaledScalar& getBoundingSphere();

View File

@@ -43,6 +43,8 @@ public:
bool initialize() override;
bool deinitialize() override;
bool isReady() const override;
void render(const RenderData& data) override;
void update(const UpdateData& data) override;

View File

@@ -44,6 +44,8 @@ public:
bool initialize();
bool deinitialize();
bool isReady() const override;
void render(const RenderData& data) override;
void update(const UpdateData& data) override;

View File

@@ -44,6 +44,8 @@ public:
bool initialize() override;
bool deinitialize() override;
bool isReady() const override;
void render(const RenderData& data) override;
void update(const UpdateData& data) override;
private:

View File

@@ -44,6 +44,8 @@ namespace openspace {
bool initialize() override;
bool deinitialize() override;
bool isReady() const override;
void render(const RenderData& data) override;
void update(const UpdateData& data) override;
private:

View File

@@ -47,8 +47,10 @@ public:
RenderablePlane(const ghoul::Dictionary& dictionary);
~RenderablePlane();
bool initialize();
bool deinitialize();
bool initialize() override;
bool deinitialize() override;
bool isReady() const override;
void render(const RenderData& data) override;
void update(const UpdateData& data) override;

View File

@@ -44,6 +44,8 @@ public:
bool initialize() override;
bool deinitialize() override;
bool isReady() const override;
void render(const RenderData& data) override;
void update(const UpdateData& data) override;
private:

View File

@@ -44,6 +44,8 @@ public:
bool initialize() override;
bool deinitialize() override;
bool isReady() const override;
void render(const RenderData& data) override;
void update(const UpdateData& data) override;
private:

View File

@@ -46,8 +46,10 @@ public:
RenderableVolumeGL(const ghoul::Dictionary& dictionary);
~RenderableVolumeGL();
bool initialize();
bool deinitialize();
bool initialize() override;
bool deinitialize() override;
bool isReady() const override;
virtual void render(const RenderData& data) override;
virtual void update(const UpdateData& data) override;

View File

@@ -39,9 +39,11 @@ public:
RenderableStars(const ghoul::Dictionary& dictionary);
~RenderableStars();
bool initialize() override;
bool initialize() override;
bool deinitialize() override;
bool isReady() const override;
void render(const RenderData& data) override;
void update(const UpdateData& data) override;
@@ -78,8 +80,6 @@ private:
std::vector<float> _fullData;
int _nValuesPerStar;
//GLint vertsToDraw;
GLuint _vboID;
GLuint _vaoID;
};

View File

@@ -79,8 +79,8 @@ void main(void)
color = bv2rgb(ge_brightness[0])/1.1;
break;
case COLOROPTION_VELOCITY:
//color = vec4(abs(ge_velocity), 1.0);
color = vec4(1.0, 0.0, 0.0, 1.0);
color = vec4(abs(ge_velocity), 0.5);
//color = vec4(1.0, 0.0, 0.0, 1.0);
break;
}

View File

@@ -94,6 +94,10 @@ RenderableModel::~RenderableModel(){
deinitialize();
}
bool RenderableModel::isReady() const {
return _programObject != nullptr;
}
bool RenderableModel::initialize(){
bool completeSuccess = true;
if (_programObject == nullptr)
@@ -176,4 +180,5 @@ void RenderableModel::loadTexture()
}
}
}
} // namespace openspace

View File

@@ -82,11 +82,9 @@ RenderablePlanet::RenderablePlanet(const ghoul::Dictionary& dictionary)
_colorTexturePath.onChange(std::bind(&RenderablePlanet::loadTexture, this));
}
RenderablePlanet::~RenderablePlanet(){
deinitialize();
}
RenderablePlanet::~RenderablePlanet() {}
bool RenderablePlanet::initialize(){
bool RenderablePlanet::initialize() {
bool completeSuccess = true;
if (_programObject == nullptr)
completeSuccess
@@ -99,7 +97,7 @@ bool RenderablePlanet::initialize(){
return completeSuccess;
}
bool RenderablePlanet::deinitialize(){
bool RenderablePlanet::deinitialize() {
_geometry->deinitialize();
delete _geometry;
_geometry = nullptr;
@@ -108,6 +106,10 @@ bool RenderablePlanet::deinitialize(){
return true;
}
bool RenderablePlanet::isReady() const {
return (_geometry != nullptr);
}
void RenderablePlanet::render(const RenderData& data)
{
if (!_programObject) return;

View File

@@ -118,4 +118,8 @@ bool Renderable::isVisible() const {
return _enabled;
}
bool Renderable::isReady() const {
return true;
}
} // namespace openspace

View File

@@ -128,6 +128,10 @@ RenderableEphemeris::~RenderableEphemeris(){
deinitialize();
}
bool RenderableEphemeris::isReady() const {
return _programObject != nullptr;
}
bool RenderableEphemeris::initialize(){
bool completeSuccess = true;
if (_programObject == nullptr)
@@ -312,4 +316,5 @@ void RenderableEphemeris::loadTexture()
}
}
}

View File

@@ -124,6 +124,10 @@ RenderableFieldlines::RenderableFieldlines(const ghoul::Dictionary& dictionary)
RenderableFieldlines::~RenderableFieldlines() {
}
bool RenderableFieldlines::isReady() const {
return _fieldlinesProgram != nullptr;
}
bool RenderableFieldlines::initialize() {
assert(_filenames.size() != 0);
assert(_hintsDictionaries.size() != 0);

View File

@@ -95,6 +95,10 @@ RenderableFov::~RenderableFov(){
deinitialize();
}
bool RenderableFov::isReady() const {
return _programObject != nullptr;
}
void RenderableFov::sendToGPU(){
// Initialize and upload to graphics card
glGenVertexArrays(1, &_vaoID);

View File

@@ -139,6 +139,11 @@ RenderablePath::~RenderablePath(){
deinitialize();
}
bool RenderablePath::isReady() const {
return _programObject != nullptr;
}
bool RenderablePath::initialize(){
bool completeSuccess = true;
if (_programObject == nullptr)

View File

@@ -90,6 +90,10 @@ RenderablePlane::RenderablePlane(const ghoul::Dictionary& dictionary)
RenderablePlane::~RenderablePlane() {
}
bool RenderablePlane::isReady() const {
return _shader != nullptr;
}
bool RenderablePlane::initialize() {
// ============================

View File

@@ -131,6 +131,10 @@ RenderableSphericalGrid::~RenderableSphericalGrid(){
deinitialize();
}
bool RenderableSphericalGrid::isReady() const {
return _gridProgram != nullptr;
}
bool RenderableSphericalGrid::deinitialize(){
return true;
}

View File

@@ -151,6 +151,10 @@ RenderableTrail::~RenderableTrail(){
deinitialize();
}
bool RenderableTrail::isReady() const {
return _programObject != nullptr;
}
void RenderableTrail::sendToGPU(){
// Initialize and upload to graphics card
glGenVertexArrays(1, &_vaoID);

View File

@@ -167,6 +167,11 @@ RenderableVolumeGL::~RenderableVolumeGL() {
delete _transferFunction;
}
bool RenderableVolumeGL::isReady() const {
// @TODO needs a proper isReady definition --abock
return true;
}
bool RenderableVolumeGL::initialize() {
// TODO: fix volume an transferfunction names
if(_filename != "") {

View File

@@ -101,12 +101,8 @@ RenderableStars::RenderableStars(const ghoul::Dictionary& dictionary)
RenderableStars::~RenderableStars() {
}
std::ifstream& skipToLine(std::ifstream& file, unsigned int num){
file.seekg(std::ios::beg);
for (size_t i = 0; i < num - 1; ++i){
file.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
return file;
bool RenderableStars::isReady() const {
return (_haloProgram != nullptr) && (_fullData.size() > 0);
}
bool RenderableStars::initialize() {
@@ -115,9 +111,9 @@ bool RenderableStars::initialize() {
// Star program
_haloProgram = ghoul::opengl::ProgramObject::Build("Star",
"${SHADERS}/star_vs.glsl",
"${SHADERS}/star_fs.glsl",
"${SHADERS}/star_ge.glsl",
"${SHADERS}/modules/stars/star_vs.glsl",
"${SHADERS}/modules/stars/star_fs.glsl",
"${SHADERS}/modules/stars/star_ge.glsl",
[&](ghoul::opengl::ProgramObject*){ _programIsDirty = true;});
completeSuccess = (_haloProgram != nullptr);
@@ -231,6 +227,7 @@ void RenderableStars::update(const UpdateData& data) {
glVertexAttribPointer(brightnessDataAttrib, 3, GL_FLOAT, GL_FALSE, stride, reinterpret_cast<void*>(offsetof(VelocityVBOLayout, bvColor)));
GLint velocityAttrib = _haloProgram->attributeLocation("in_velocity");
glEnableVertexAttribArray(velocityAttrib);
glVertexAttribPointer(velocityAttrib, 3, GL_FLOAT, GL_TRUE, stride, reinterpret_cast<void*>(offsetof(VelocityVBOLayout, vx)));
break;

View File

@@ -193,16 +193,6 @@ bool SceneGraph::initialize()
_programs.push_back(tmpProgram);
OsEng.ref().configurationManager().setValue("RaycastProgram", tmpProgram);
// Point program
tmpProgram = ProgramObject::Build("Point",
"${SHADERS}/star_vs.glsl",
"${SHADERS}/star_fs.glsl",
"${SHADERS}/star_ge.glsl",
cb);
if (!tmpProgram) return false;
_programs.push_back(tmpProgram);
OsEng.ref().configurationManager().setValue("PointProgram", tmpProgram);
// Grid program
tmpProgram = ProgramObject::Build("Grid",
"${SHADERS}/grid_vs.glsl",

View File

@@ -175,7 +175,7 @@ void SceneGraphNode::update(const UpdateData& data)
{
if (_ephemeris)
_ephemeris->update(data);
if (_renderable)
if (_renderable && _renderable->isReady())
_renderable->update(data);
}
@@ -232,7 +232,7 @@ void SceneGraphNode::render(const RenderData& data)
return;
}*/
if (_renderableVisible && _renderable->isVisible()) {
if (_renderableVisible && _renderable->isVisible() && _renderable->isReady()) {
// LDEBUG("Render");
_renderable->render(newData);
}