mirror of
https://github.com/OpenSpace/OpenSpace.git
synced 2026-01-07 04:00:37 -06:00
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:
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -118,4 +118,8 @@ bool Renderable::isVisible() const {
|
||||
return _enabled;
|
||||
}
|
||||
|
||||
bool Renderable::isReady() const {
|
||||
return true;
|
||||
}
|
||||
|
||||
} // namespace openspace
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -139,6 +139,11 @@ RenderablePath::~RenderablePath(){
|
||||
deinitialize();
|
||||
}
|
||||
|
||||
bool RenderablePath::isReady() const {
|
||||
return _programObject != nullptr;
|
||||
}
|
||||
|
||||
|
||||
bool RenderablePath::initialize(){
|
||||
bool completeSuccess = true;
|
||||
if (_programObject == nullptr)
|
||||
|
||||
@@ -90,6 +90,10 @@ RenderablePlane::RenderablePlane(const ghoul::Dictionary& dictionary)
|
||||
RenderablePlane::~RenderablePlane() {
|
||||
}
|
||||
|
||||
bool RenderablePlane::isReady() const {
|
||||
return _shader != nullptr;
|
||||
}
|
||||
|
||||
bool RenderablePlane::initialize() {
|
||||
|
||||
// ============================
|
||||
|
||||
@@ -131,6 +131,10 @@ RenderableSphericalGrid::~RenderableSphericalGrid(){
|
||||
deinitialize();
|
||||
}
|
||||
|
||||
bool RenderableSphericalGrid::isReady() const {
|
||||
return _gridProgram != nullptr;
|
||||
}
|
||||
|
||||
bool RenderableSphericalGrid::deinitialize(){
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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 != "") {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user