change interfaces from pointer to reference

This commit is contained in:
Emil Axelsson
2016-03-23 14:00:40 +01:00
parent c5aba19d52
commit 80fe89dbc8
28 changed files with 84 additions and 80 deletions

View File

@@ -78,7 +78,7 @@ public:
* Responsible for calling renderEngine::setRenderData
*/
virtual void updateRendererData() override;
virtual void raycastersChanged(VolumeRaycaster* entity, bool attached) override;
virtual void raycastersChanged(VolumeRaycaster& raycaster, bool attached) override;
private:
void clear();

View File

@@ -78,7 +78,7 @@ public:
*/
virtual void updateRendererData() override;
virtual void raycastersChanged(VolumeRaycaster* entity, bool attached) override;
virtual void raycastersChanged(VolumeRaycaster& raycaster, bool attached) override;
private:
std::map<VolumeRaycaster*, RaycastData> _raycastData;

View File

@@ -31,7 +31,7 @@ class VolumeRaycaster;
class RaycasterListener {
public:
virtual void raycastersChanged(VolumeRaycaster* raycaster, bool attached) = 0;
virtual void raycastersChanged(VolumeRaycaster& raycaster, bool attached) = 0;
}; // RaycasterListener
} // openspace

View File

@@ -36,13 +36,13 @@ class RaycasterManager {
public:
RaycasterManager();
~RaycasterManager();
void attachRaycaster(VolumeRaycaster* raycaster);
void detachRaycaster(VolumeRaycaster* raycaster);
bool isAttached(VolumeRaycaster* raycaster);
void attachRaycaster(VolumeRaycaster& raycaster);
void detachRaycaster(VolumeRaycaster& raycaster);
bool isAttached(VolumeRaycaster& raycaster);
const std::vector<VolumeRaycaster*>& raycasters();
void addListener(RaycasterListener* listener);
void removeListener(RaycasterListener* listener);
void addListener(RaycasterListener& listener);
void removeListener(RaycasterListener& listener);
private:
std::vector<VolumeRaycaster*> _raycasters;
std::vector<RaycasterListener*> _listeners;

View File

@@ -81,7 +81,7 @@ public:
void onEnabledChange(std::function<void(bool)> callback);
static void setPscUniforms(ghoul::opengl::ProgramObject* program, const Camera* camera, const PowerScaledCoordinate& position);
static void setPscUniforms(ghoul::opengl::ProgramObject& program, const Camera& camera, const PowerScaledCoordinate& position);
private:
properties::BoolProperty _enabled;

View File

@@ -51,24 +51,24 @@ public:
/**
* Render the volume's entry points (front face of the bounding geometry)
*/
virtual void renderEntryPoints(const RenderData& data, ghoul::opengl::ProgramObject* program) = 0;
virtual void renderEntryPoints(const RenderData& data, ghoul::opengl::ProgramObject& program) = 0;
/**
* Render the volume's exit points (back face of the bounding geometry)
*/
virtual void renderExitPoints(const RenderData& data, ghoul::opengl::ProgramObject* program) = 0;
virtual void renderExitPoints(const RenderData& data, ghoul::opengl::ProgramObject& program) = 0;
/**
* Prepare the volume for the ABuffer's resolve step.
* Make sure textures are up to date, bind them to texture units, set program uniforms etc.
*/
virtual void preRaycast(const RaycastData& data, ghoul::opengl::ProgramObject* program) {};
virtual void preRaycast(const RaycastData& data, ghoul::opengl::ProgramObject& program) {};
/**
* Clean up for the volume after the ABuffer's resolve step.
* Make sure texture units are deinitialized, etc.
*/
virtual void postRaycast(const RaycastData& data, ghoul::opengl::ProgramObject* program) {};
virtual void postRaycast(const RaycastData& data, ghoul::opengl::ProgramObject& program) {};
/**
* Return a path the file to use as vertex shader

View File

@@ -162,7 +162,7 @@ void RenderableConstellationBounds::render(const RenderData& data) {
glm::mat4 viewMatrix = data.camera.viewMatrix();
glm::mat4 projectionMatrix = data.camera.projectionMatrix();
setPscUniforms(_program.get(), &data.camera, data.position);
setPscUniforms(*_program.get(), data.camera, data.position);
_program->setUniform("exponent", _distance);
_program->setUniform("ViewProjection", data.camera.viewProjectionMatrix());

View File

@@ -200,7 +200,7 @@ void RenderableModel::render(const RenderData& data) {
_programObject->setUniform("sun_pos", _sunPosition.vec3());
_programObject->setUniform("ViewProjection", data.camera.viewProjectionMatrix());
_programObject->setUniform("ModelTransform", transform);
setPscUniforms(_programObject.get(), &data.camera, data.position);
setPscUniforms(*_programObject.get(), data.camera, data.position);
_programObject->setUniform("_performShading", _performShading);

View File

@@ -162,7 +162,7 @@ void RenderablePath::render(const RenderData& data) {
_programObject->setUniform("ModelTransform", transform);
_programObject->setUniform("color", _lineColor);
_programObject->setUniform("lastPosition", _lastPosition);
setPscUniforms(_programObject.get(), &data.camera, data.position);
setPscUniforms(*_programObject.get(), data.camera, data.position);
if (_drawLine) {
glLineWidth(_lineWidth);

View File

@@ -206,7 +206,7 @@ void RenderablePlane::render(const RenderData& data) {
_shader->setUniform("ViewProjection", data.camera.viewProjectionMatrix());
_shader->setUniform("ModelTransform", transform);
setPscUniforms(_shader.get(), &data.camera, data.position);
setPscUniforms(*_shader.get(), data.camera, data.position);
ghoul::opengl::TextureUnit unit;
unit.activate();

View File

@@ -213,7 +213,7 @@ void RenderablePlanet::render(const RenderData& data)
_programObject->setUniform("transparency", _alpha);
_programObject->setUniform("ViewProjection", data.camera.viewProjectionMatrix());
_programObject->setUniform("ModelTransform", transform);
setPscUniforms(_programObject.get(), &data.camera, data.position);
setPscUniforms(*_programObject.get(), data.camera, data.position);
_programObject->setUniform("_performShading", _performShading);

View File

@@ -162,7 +162,7 @@ void RenderableSphere::render(const RenderData& data) {
_shader->setUniform("ViewProjection", data.camera.viewProjectionMatrix());
_shader->setUniform("ModelTransform", transform);
setPscUniforms(_shader.get(), &data.camera, data.position);
setPscUniforms(*_shader.get(), data.camera, data.position);
_shader->setUniform("alpha", _transparency);
ghoul::opengl::TextureUnit unit;

View File

@@ -212,7 +212,7 @@ void RenderableSphericalGrid::render(const RenderData& data){
_gridProgram->setIgnoreUniformLocationError(IgnoreError::Yes);
_gridProgram->setUniform("ViewProjection", data.camera.viewProjectionMatrix());
_gridProgram->setUniform("ModelTransform", transform);
setPscUniforms(_gridProgram, &data.camera, data.position);
setPscUniforms(*_gridProgram, data.camera, data.position);
_gridProgram->setUniform("gridColor", _gridColor);
glLineWidth(0.5f);

View File

@@ -203,7 +203,7 @@ void RenderableStars::render(const RenderData& data) {
_program->setUniform("scaleFactor", _scaleFactor);
_program->setUniform("minBillboardSize", _minBillboardSize);
setPscUniforms(_program.get(), &data.camera, data.position);
setPscUniforms(*_program.get(), data.camera, data.position);
_program->setUniform("scaling", scaling);
ghoul::opengl::TextureUnit psfUnit;

View File

@@ -155,7 +155,7 @@ void RenderableTrail::render(const RenderData& data) {
// setup the data to the shader
_programObject->setUniform("ViewProjection", data.camera.viewProjectionMatrix());
_programObject->setUniform("ModelTransform", transform);
setPscUniforms(_programObject.get(), &data.camera, data.position);
setPscUniforms(*_programObject.get(), data.camera, data.position);
_programObject->setUniform("color", _lineColor);
_programObject->setUniform("nVertices", static_cast<unsigned int>(_vertexArray.size()));

View File

@@ -140,7 +140,7 @@ void RenderableCrawlingLine::render(const RenderData& data) {
_program->setUniform("_alpha", alpha);
_program->setUniform("color", _lineColor);
setPscUniforms(_program.get(), &data.camera, data.position);
setPscUniforms(*_program.get(), data.camera, data.position);
glBindVertexArray(_vao);
glBindBuffer(GL_ARRAY_BUFFER, _vbo);

View File

@@ -549,7 +549,7 @@ void RenderableFov::render(const RenderData& data) {
// setup the data to the shader
_programObject->setUniform("ViewProjection", data.camera.viewProjectionMatrix());
_programObject->setUniform("ModelTransform", glm::mat4(1));
setPscUniforms(_programObject.get(), &data.camera, data.position);
setPscUniforms(*_programObject.get(), data.camera, data.position);
if (openspace::ImageSequencer2::ref().isReady())
_drawFOV = ImageSequencer2::ref().instrumentActive(_instrumentID);

View File

@@ -331,7 +331,7 @@ void RenderableModelProjection::render(const RenderData& data) {
_viewProjection = data.camera.viewProjectionMatrix();
_programObject->setUniform("ViewProjection", _viewProjection);
_programObject->setUniform("ModelTransform", _transform);
setPscUniforms(_programObject.get(), &data.camera, data.position);
setPscUniforms(*_programObject.get(), data.camera, data.position);
textureBind();
_geometry->render();

View File

@@ -147,7 +147,7 @@ void RenderablePlaneProjection::render(const RenderData& data) {
_shader->setUniform("ViewProjection", data.camera.viewProjectionMatrix());
_shader->setUniform("ModelTransform", transform);
setPscUniforms(_shader.get(), &data.camera, data.position);
setPscUniforms(*_shader.get(), data.camera, data.position);
ghoul::opengl::TextureUnit unit;
unit.activate();

View File

@@ -541,7 +541,7 @@ void RenderablePlanetProjection::render(const RenderData& data){
_programObject->setUniform("ViewProjection" , data.camera.viewProjectionMatrix());
_programObject->setUniform("ModelTransform" , _transform);
_programObject->setUniform("boresight" , _boresight);
setPscUniforms(_programObject.get(), &data.camera, data.position);
setPscUniforms(*_programObject.get(), data.camera, data.position);
textureBind();

View File

@@ -136,7 +136,7 @@ void RenderableShadowCylinder::render(const RenderData& data){
_shader->setUniform("ViewProjection", data.camera.viewProjectionMatrix());
_shader->setUniform("ModelTransform", _transform);
_shader->setUniform("shadowColor", _shadowColor);
setPscUniforms(_shader.get(), &data.camera, data.position);
setPscUniforms(*_shader.get(), data.camera, data.position);
glBindVertexArray(_vao);
glDrawArrays(GL_TRIANGLE_STRIP, 0, static_cast<GLsizei>(_vertices.size()));

View File

@@ -80,14 +80,14 @@ bool RenderableToyVolume::initialize() {
_raycaster = std::make_unique<ToyVolumeRaycaster>(ToyVolumeRaycaster(_color));
_raycaster->initialize();
OsEng.renderEngine().raycasterManager().attachRaycaster(_raycaster.get());
OsEng.renderEngine().raycasterManager().attachRaycaster(*_raycaster.get());
std::function<void(bool)> onChange = [&](bool enabled) {
if (enabled) {
OsEng.renderEngine().raycasterManager().attachRaycaster(_raycaster.get());
OsEng.renderEngine().raycasterManager().attachRaycaster(*_raycaster.get());
}
else {
OsEng.renderEngine().raycasterManager().detachRaycaster(_raycaster.get());
OsEng.renderEngine().raycasterManager().detachRaycaster(*_raycaster.get());
}
};
@@ -105,7 +105,7 @@ bool RenderableToyVolume::initialize() {
bool RenderableToyVolume::deinitialize() {
if (_raycaster) {
OsEng.renderEngine().raycasterManager().detachRaycaster(_raycaster.get());
OsEng.renderEngine().raycasterManager().detachRaycaster(*_raycaster.get());
_raycaster = nullptr;
}
return true;

View File

@@ -53,10 +53,10 @@ void ToyVolumeRaycaster::initialize() {
void ToyVolumeRaycaster::deinitialize() {
}
void ToyVolumeRaycaster::renderEntryPoints(const RenderData& data, ghoul::opengl::ProgramObject* program) {
program->setUniform("modelTransform", _modelTransform);
program->setUniform("viewProjection", data.camera.viewProjectionMatrix());
Renderable::setPscUniforms(program, &data.camera, data.position);
void ToyVolumeRaycaster::renderEntryPoints(const RenderData& data, ghoul::opengl::ProgramObject& program) {
program.setUniform("modelTransform", _modelTransform);
program.setUniform("viewProjection", data.camera.viewProjectionMatrix());
Renderable::setPscUniforms(program, data.camera, data.position);
// Cull back face
glEnable(GL_CULL_FACE);
@@ -66,11 +66,11 @@ void ToyVolumeRaycaster::renderEntryPoints(const RenderData& data, ghoul::opengl
_boundingBox.render();
}
void ToyVolumeRaycaster::renderExitPoints(const RenderData& data, ghoul::opengl::ProgramObject* program) {
void ToyVolumeRaycaster::renderExitPoints(const RenderData& data, ghoul::opengl::ProgramObject& program) {
// Uniforms
program->setUniform("modelTransform", _modelTransform);
program->setUniform("viewProjection", data.camera.viewProjectionMatrix());
Renderable::setPscUniforms(program, &data.camera, data.position);
program.setUniform("modelTransform", _modelTransform);
program.setUniform("viewProjection", data.camera.viewProjectionMatrix());
Renderable::setPscUniforms(program, data.camera, data.position);
// Cull front face
glEnable(GL_CULL_FACE);
@@ -83,16 +83,16 @@ void ToyVolumeRaycaster::renderExitPoints(const RenderData& data, ghoul::opengl:
glCullFace(GL_BACK);
}
void ToyVolumeRaycaster::preRaycast(const RaycastData& data, ghoul::opengl::ProgramObject* program) {
void ToyVolumeRaycaster::preRaycast(const RaycastData& data, ghoul::opengl::ProgramObject& program) {
std::string colorUniformName = "color" + std::to_string(data.id);
std::string timeUniformName = "time" + std::to_string(data.id);
std::string stepSizeUniformName = "maxStepSize" + std::to_string(data.id);
program->setUniform(colorUniformName, _color);
program->setUniform(stepSizeUniformName, _stepSize);
program->setUniform(timeUniformName, static_cast<float>(std::fmod(_time, 3600.0)));
program.setUniform(colorUniformName, _color);
program.setUniform(stepSizeUniformName, _stepSize);
program.setUniform(timeUniformName, static_cast<float>(std::fmod(_time, 3600.0)));
}
void ToyVolumeRaycaster::postRaycast(const RaycastData& data, ghoul::opengl::ProgramObject* program) {
void ToyVolumeRaycaster::postRaycast(const RaycastData& data, ghoul::opengl::ProgramObject& program) {
// For example: release texture units
}

View File

@@ -52,10 +52,10 @@ public:
virtual ~ToyVolumeRaycaster();
void initialize();
void deinitialize();
void renderEntryPoints(const RenderData& data, ghoul::opengl::ProgramObject* program) override;
void renderExitPoints(const RenderData& data, ghoul::opengl::ProgramObject* program) override;
void preRaycast(const RaycastData& data, ghoul::opengl::ProgramObject* program) override;
void postRaycast(const RaycastData& data, ghoul::opengl::ProgramObject* program) override;
void renderEntryPoints(const RenderData& data, ghoul::opengl::ProgramObject& program) override;
void renderExitPoints(const RenderData& data, ghoul::opengl::ProgramObject& program) override;
void preRaycast(const RaycastData& data, ghoul::opengl::ProgramObject& program) override;
void postRaycast(const RaycastData& data, ghoul::opengl::ProgramObject& program) override;
std::string getBoundsVsPath() const override;
std::string getBoundsFsPath() const override;

View File

@@ -118,7 +118,7 @@ void ABufferRenderer::initialize() {
LERROR(e.message);
}
OsEng.renderEngine().raycasterManager().addListener(this);
OsEng.renderEngine().raycasterManager().addListener(*this);
}
void ABufferRenderer::deinitialize() {
@@ -133,10 +133,12 @@ void ABufferRenderer::deinitialize() {
glDeleteBuffers(1, &_vertexPositionBuffer);
glDeleteVertexArrays(1, &_screenQuad);
OsEng.renderEngine().raycasterManager().removeListener(this);
OsEng.renderEngine().raycasterManager().removeListener(*this);
}
void ABufferRenderer::raycastersChanged(VolumeRaycaster* raycaster, bool attached) {
void ABufferRenderer::raycastersChanged(VolumeRaycaster& raycaster, bool attached) {
(void) raycaster;
(void) attached;
_dirtyRaycastData = true;
}
@@ -221,9 +223,9 @@ void ABufferRenderer::render(float blackoutFactor, bool doPerformanceMeasurement
if (program) {
program->activate();
program->setUniform("_exit_", false);
raycaster->renderEntryPoints(raycasterTask.renderData, program);
raycaster->renderEntryPoints(raycasterTask.renderData, *program);
program->setUniform("_exit_", true);
raycaster->renderExitPoints(raycasterTask.renderData, program);
raycaster->renderExitPoints(raycasterTask.renderData, *program);
program->deactivate();
}
else {
@@ -239,7 +241,7 @@ void ABufferRenderer::render(float blackoutFactor, bool doPerformanceMeasurement
VolumeRaycaster* raycaster = raycasterTask.raycaster;
auto raycastData = _raycastData.find(raycaster);
if (raycastData != _raycastData.end()) {
raycaster->preRaycast(raycastData->second, _resolveProgram.get());
raycaster->preRaycast(raycastData->second, *_resolveProgram.get());
}
}
@@ -254,7 +256,7 @@ void ABufferRenderer::render(float blackoutFactor, bool doPerformanceMeasurement
VolumeRaycaster* raycaster = raycasterTask.raycaster;
auto raycastData = _raycastData.find(raycaster);
if (raycastData != _raycastData.end()) {
raycaster->postRaycast(raycastData->second, _resolveProgram.get());
raycaster->postRaycast(raycastData->second, *_resolveProgram.get());
}
}

View File

@@ -120,7 +120,7 @@ void FramebufferRenderer::initialize() {
LERROR(e.message);
}
OsEng.renderEngine().raycasterManager().addListener(this);
OsEng.renderEngine().raycasterManager().addListener(*this);
_nAaSamples = OsEng.windowWrapper().currentNumberOfAaSamples();
if (_nAaSamples > 8) {
@@ -143,10 +143,12 @@ void FramebufferRenderer::deinitialize() {
glDeleteBuffers(1, &_vertexPositionBuffer);
glDeleteVertexArrays(1, &_screenQuad);
OsEng.renderEngine().raycasterManager().removeListener(this);
OsEng.renderEngine().raycasterManager().removeListener(*this);
}
void FramebufferRenderer::raycastersChanged(VolumeRaycaster* raycaster, bool attached) {
void FramebufferRenderer::raycastersChanged(VolumeRaycaster& raycaster, bool attached) {
(void) raycaster;
(void) attached;
_dirtyRaycastData = true;
}
@@ -321,7 +323,7 @@ void FramebufferRenderer::render(float blackoutFactor, bool doPerformanceMeasure
ghoul::opengl::ProgramObject* exitProgram = _exitPrograms[raycaster].get();
if (exitProgram) {
exitProgram->activate();
raycaster->renderExitPoints(raycasterTask.renderData, exitProgram);
raycaster->renderExitPoints(raycasterTask.renderData, *exitProgram);
exitProgram->deactivate();
}
@@ -330,7 +332,7 @@ void FramebufferRenderer::render(float blackoutFactor, bool doPerformanceMeasure
ghoul::opengl::ProgramObject* raycastProgram = _raycastPrograms[raycaster].get();
if (raycastProgram) {
raycastProgram->activate();
raycaster->preRaycast(_raycastData[raycaster], raycastProgram);
raycaster->preRaycast(_raycastData[raycaster], *raycastProgram);
ghoul::opengl::TextureUnit exitColorTextureUnit;
exitColorTextureUnit.activate();
@@ -351,11 +353,11 @@ void FramebufferRenderer::render(float blackoutFactor, bool doPerformanceMeasure
glDisable(GL_DEPTH_TEST);
glDepthMask(false);
raycaster->renderEntryPoints(raycasterTask.renderData, raycastProgram);
raycaster->renderEntryPoints(raycasterTask.renderData, *raycastProgram);
glDepthMask(true);
glEnable(GL_DEPTH_TEST);
raycaster->postRaycast(_raycastData[raycaster], raycastProgram);
raycaster->postRaycast(_raycastData[raycaster], *raycastProgram);
raycastProgram->deactivate();
} else {
LWARNING("Raycaster is not attached when trying to perform raycaster task");

View File

@@ -36,23 +36,23 @@ RaycasterManager::RaycasterManager() {}
RaycasterManager::~RaycasterManager() {}
void RaycasterManager::attachRaycaster(VolumeRaycaster* raycaster) {
void RaycasterManager::attachRaycaster(VolumeRaycaster& raycaster) {
if (!isAttached(raycaster)) {
_raycasters.push_back(raycaster);
_raycasters.push_back(&raycaster);
}
for (auto &listener : _listeners) {
listener->raycastersChanged(raycaster, true);
}
}
bool RaycasterManager::isAttached(VolumeRaycaster* raycaster) {
auto it = std::find(_raycasters.begin(), _raycasters.end(), raycaster);
bool RaycasterManager::isAttached(VolumeRaycaster& raycaster) {
auto it = std::find(_raycasters.begin(), _raycasters.end(), &raycaster);
return it != _raycasters.end();
}
void RaycasterManager::detachRaycaster(VolumeRaycaster* raycaster) {
auto it = std::find(_raycasters.begin(), _raycasters.end(), raycaster);
void RaycasterManager::detachRaycaster(VolumeRaycaster& raycaster) {
auto it = std::find(_raycasters.begin(), _raycasters.end(), &raycaster);
if (it != _raycasters.end()) {
_raycasters.erase(it);
for (auto &listener : _listeners) {
@@ -62,15 +62,15 @@ void RaycasterManager::detachRaycaster(VolumeRaycaster* raycaster) {
}
void RaycasterManager::addListener(RaycasterListener* listener) {
auto it = std::find(_listeners.begin(), _listeners.end(), listener);
void RaycasterManager::addListener(RaycasterListener& listener) {
auto it = std::find(_listeners.begin(), _listeners.end(), &listener);
if (it == _listeners.end()) {
_listeners.push_back(listener);
_listeners.push_back(&listener);
}
}
void RaycasterManager::removeListener(RaycasterListener* listener) {
auto it = std::find(_listeners.begin(), _listeners.end(), listener);
void RaycasterManager::removeListener(RaycasterListener& listener) {
auto it = std::find(_listeners.begin(), _listeners.end(), &listener);
if (it != _listeners.end()) {
_listeners.erase(it);
}

View File

@@ -122,14 +122,14 @@ void Renderable::render(const RenderData& data)
}
void Renderable::setPscUniforms(
ghoul::opengl::ProgramObject* program,
const Camera* camera,
ghoul::opengl::ProgramObject& program,
const Camera& camera,
const PowerScaledCoordinate& position)
{
program->setUniform("campos", camera->position().vec4());
program->setUniform("objpos", position.vec4());
program->setUniform("camrot", camera->viewRotationMatrix());
program->setUniform("scaling", camera->scaling());
program.setUniform("campos", camera.position().vec4());
program.setUniform("objpos", position.vec4());
program.setUniform("camrot", camera.viewRotationMatrix());
program.setUniform("scaling", camera.scaling());
}
bool Renderable::isVisible() const {