diff --git a/include/openspace/rendering/model/renderablemodel.h b/include/openspace/rendering/model/renderablemodel.h index 1a3fc0615c..fd6c6149aa 100644 --- a/include/openspace/rendering/model/renderablemodel.h +++ b/include/openspace/rendering/model/renderablemodel.h @@ -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; diff --git a/include/openspace/rendering/planets/renderableplanet.h b/include/openspace/rendering/planets/renderableplanet.h index 1ccae2a8c2..2ad096fdc2 100644 --- a/include/openspace/rendering/planets/renderableplanet.h +++ b/include/openspace/rendering/planets/renderableplanet.h @@ -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; diff --git a/include/openspace/rendering/renderable.h b/include/openspace/rendering/renderable.h index 0860bbbe65..b8144b8aae 100644 --- a/include/openspace/rendering/renderable.h +++ b/include/openspace/rendering/renderable.h @@ -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(); diff --git a/include/openspace/rendering/renderableephemeris.h b/include/openspace/rendering/renderableephemeris.h index 59a85322b9..d3cde1477a 100644 --- a/include/openspace/rendering/renderableephemeris.h +++ b/include/openspace/rendering/renderableephemeris.h @@ -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; diff --git a/include/openspace/rendering/renderablefieldlines.h b/include/openspace/rendering/renderablefieldlines.h index c0b54c0f16..01322da655 100644 --- a/include/openspace/rendering/renderablefieldlines.h +++ b/include/openspace/rendering/renderablefieldlines.h @@ -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; diff --git a/include/openspace/rendering/renderablefov.h b/include/openspace/rendering/renderablefov.h index c0725a5b94..dc09000e9a 100644 --- a/include/openspace/rendering/renderablefov.h +++ b/include/openspace/rendering/renderablefov.h @@ -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: diff --git a/include/openspace/rendering/renderablepath.h b/include/openspace/rendering/renderablepath.h index 5c2eb1e7f5..3dd6febb53 100644 --- a/include/openspace/rendering/renderablepath.h +++ b/include/openspace/rendering/renderablepath.h @@ -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: diff --git a/include/openspace/rendering/renderableplane.h b/include/openspace/rendering/renderableplane.h index b5f987c881..369cd4e5a3 100644 --- a/include/openspace/rendering/renderableplane.h +++ b/include/openspace/rendering/renderableplane.h @@ -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; diff --git a/include/openspace/rendering/renderablesphericalgrid.h b/include/openspace/rendering/renderablesphericalgrid.h index d2de735960..aa51884dab 100644 --- a/include/openspace/rendering/renderablesphericalgrid.h +++ b/include/openspace/rendering/renderablesphericalgrid.h @@ -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: diff --git a/include/openspace/rendering/renderabletrail.h b/include/openspace/rendering/renderabletrail.h index d68196db95..aa399d229f 100644 --- a/include/openspace/rendering/renderabletrail.h +++ b/include/openspace/rendering/renderabletrail.h @@ -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: diff --git a/include/openspace/rendering/renderablevolumegl.h b/include/openspace/rendering/renderablevolumegl.h index 82560fe3d8..df7cb2673a 100644 --- a/include/openspace/rendering/renderablevolumegl.h +++ b/include/openspace/rendering/renderablevolumegl.h @@ -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; diff --git a/include/openspace/rendering/stars/renderablestars.h b/include/openspace/rendering/stars/renderablestars.h index f5c9c50415..0a6e327c51 100644 --- a/include/openspace/rendering/stars/renderablestars.h +++ b/include/openspace/rendering/stars/renderablestars.h @@ -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 _fullData; int _nValuesPerStar; - //GLint vertsToDraw; - GLuint _vboID; GLuint _vaoID; }; diff --git a/shaders/star_fs.glsl b/shaders/star_fs.glsl index fe5f3f461d..c3b17a6e5a 100644 --- a/shaders/star_fs.glsl +++ b/shaders/star_fs.glsl @@ -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; } diff --git a/src/rendering/model/renderablemodel.cpp b/src/rendering/model/renderablemodel.cpp index 040145a8e0..c7eea2a351 100644 --- a/src/rendering/model/renderablemodel.cpp +++ b/src/rendering/model/renderablemodel.cpp @@ -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 diff --git a/src/rendering/planets/renderableplanet.cpp b/src/rendering/planets/renderableplanet.cpp index 4c21e91c8e..77df66824e 100644 --- a/src/rendering/planets/renderableplanet.cpp +++ b/src/rendering/planets/renderableplanet.cpp @@ -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; diff --git a/src/rendering/renderable.cpp b/src/rendering/renderable.cpp index b767cbd9c7..fac2359542 100644 --- a/src/rendering/renderable.cpp +++ b/src/rendering/renderable.cpp @@ -118,4 +118,8 @@ bool Renderable::isVisible() const { return _enabled; } +bool Renderable::isReady() const { + return true; +} + } // namespace openspace diff --git a/src/rendering/renderableephemeris.cpp b/src/rendering/renderableephemeris.cpp index de330b1b27..b10c2d9f44 100644 --- a/src/rendering/renderableephemeris.cpp +++ b/src/rendering/renderableephemeris.cpp @@ -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() } } + } \ No newline at end of file diff --git a/src/rendering/renderablefieldlines.cpp b/src/rendering/renderablefieldlines.cpp index d0db9225a4..fb931fddf6 100644 --- a/src/rendering/renderablefieldlines.cpp +++ b/src/rendering/renderablefieldlines.cpp @@ -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); diff --git a/src/rendering/renderablefov.cpp b/src/rendering/renderablefov.cpp index a72a51c587..c34181880f 100644 --- a/src/rendering/renderablefov.cpp +++ b/src/rendering/renderablefov.cpp @@ -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); diff --git a/src/rendering/renderablepath.cpp b/src/rendering/renderablepath.cpp index 4e4c822c1a..658c4d61ba 100644 --- a/src/rendering/renderablepath.cpp +++ b/src/rendering/renderablepath.cpp @@ -139,6 +139,11 @@ RenderablePath::~RenderablePath(){ deinitialize(); } +bool RenderablePath::isReady() const { + return _programObject != nullptr; +} + + bool RenderablePath::initialize(){ bool completeSuccess = true; if (_programObject == nullptr) diff --git a/src/rendering/renderableplane.cpp b/src/rendering/renderableplane.cpp index 7bb7a02d6e..9c0e506bda 100644 --- a/src/rendering/renderableplane.cpp +++ b/src/rendering/renderableplane.cpp @@ -90,6 +90,10 @@ RenderablePlane::RenderablePlane(const ghoul::Dictionary& dictionary) RenderablePlane::~RenderablePlane() { } +bool RenderablePlane::isReady() const { + return _shader != nullptr; +} + bool RenderablePlane::initialize() { // ============================ diff --git a/src/rendering/renderablesphericalgrid.cpp b/src/rendering/renderablesphericalgrid.cpp index 1cf8cbbd2f..f2d756fdd2 100644 --- a/src/rendering/renderablesphericalgrid.cpp +++ b/src/rendering/renderablesphericalgrid.cpp @@ -131,6 +131,10 @@ RenderableSphericalGrid::~RenderableSphericalGrid(){ deinitialize(); } +bool RenderableSphericalGrid::isReady() const { + return _gridProgram != nullptr; +} + bool RenderableSphericalGrid::deinitialize(){ return true; } diff --git a/src/rendering/renderabletrail.cpp b/src/rendering/renderabletrail.cpp index 900c80d11a..d664265530 100644 --- a/src/rendering/renderabletrail.cpp +++ b/src/rendering/renderabletrail.cpp @@ -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); diff --git a/src/rendering/renderablevolumegl.cpp b/src/rendering/renderablevolumegl.cpp index 65199dceb5..a88b718e36 100644 --- a/src/rendering/renderablevolumegl.cpp +++ b/src/rendering/renderablevolumegl.cpp @@ -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 != "") { diff --git a/src/rendering/stars/renderablestars.cpp b/src/rendering/stars/renderablestars.cpp index fa5d70150d..497a26c77a 100644 --- a/src/rendering/stars/renderablestars.cpp +++ b/src/rendering/stars/renderablestars.cpp @@ -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::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(offsetof(VelocityVBOLayout, bvColor))); GLint velocityAttrib = _haloProgram->attributeLocation("in_velocity"); + glEnableVertexAttribArray(velocityAttrib); glVertexAttribPointer(velocityAttrib, 3, GL_FLOAT, GL_TRUE, stride, reinterpret_cast(offsetof(VelocityVBOLayout, vx))); break; diff --git a/src/scenegraph/scenegraph.cpp b/src/scenegraph/scenegraph.cpp index e9f498e21b..f108e7763f 100644 --- a/src/scenegraph/scenegraph.cpp +++ b/src/scenegraph/scenegraph.cpp @@ -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", diff --git a/src/scenegraph/scenegraphnode.cpp b/src/scenegraph/scenegraphnode.cpp index 4b4e3c46bd..2d61eaec50 100644 --- a/src/scenegraph/scenegraphnode.cpp +++ b/src/scenegraph/scenegraphnode.cpp @@ -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); }