Comment out flare code

This commit is contained in:
Alexander Bock
2014-09-26 13:24:09 +02:00
parent d7190b2239
commit b3e800acaa
2 changed files with 519 additions and 514 deletions

View File

@@ -22,71 +22,73 @@
* OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
****************************************************************************************/
#ifndef __FLARE_H__
#define __FLARE_H__
// Source is still in here to cannibalize later (ab)
#include <GL/glew.h>
#include <ghoul/logging/logmanager.h>
#define SGCT_WINDOWS_INCLUDE
#include <sgct.h>
#include <openspace/flare/Animator.h>
#include <openspace/flare/Raycaster.h>
#include <openspace/flare/Config.h>
#include <openspace/rendering/renderable.h>
namespace openspace {
class Flare: public Renderable {
public:
Flare();
~Flare();
bool initialize();
bool deinitialize();
virtual void render(const Camera *camera, const psc& thisPosition, RuntimeData* runtimeData);
virtual void update();
void render();
void initNavigation();
void keyboard(int key, int action);
void mouse(int button, int action);
void preSync();
void postSyncPreDraw();
void postDraw();
void encode();
void decode();
private:
void init();
osp::Config* _config;
osp::Raycaster* _raycaster;
osp::Animator* _animator;
sgct::SharedInt _timeStep;
sgct::SharedBool _animationPaused;
sgct::SharedBool _fpsMode;
sgct::SharedFloat _elapsedTime;
sgct::SharedInt _manualTimestep;
sgct::SharedFloat _pitch;
sgct::SharedFloat _yaw;
sgct::SharedFloat _roll;
sgct::SharedFloat _translateX;
sgct::SharedFloat _translateY;
sgct::SharedFloat _translateZ;
sgct::SharedBool _reloadFlag;
float _oldTime;
float _currentTime;
bool _leftMouseButton;
double _currentMouseX;
double _currentMouseY;
double _lastMouseX;
double _lastMouseY;
};
} // namespace openspace
#endif // __FLARE_H__
//#ifndef __FLARE_H__
//#define __FLARE_H__
//
//#include <GL/glew.h>
//#include <ghoul/logging/logmanager.h>
//#define SGCT_WINDOWS_INCLUDE
//#include <sgct.h>
//#include <openspace/flare/Animator.h>
//#include <openspace/flare/Raycaster.h>
//#include <openspace/flare/Config.h>
//#include <openspace/rendering/renderable.h>
//
//namespace openspace {
//
//class Flare: public Renderable {
//public:
// Flare();
// ~Flare();
//
// bool initialize();
// bool deinitialize();
//
// virtual void render(const Camera *camera, const psc& thisPosition, RuntimeData* runtimeData);
// virtual void update();
//
// void render();
// void initNavigation();
//
// void keyboard(int key, int action);
// void mouse(int button, int action);
// void preSync();
// void postSyncPreDraw();
// void postDraw();
// void encode();
// void decode();
//
//private:
// void init();
//
// osp::Config* _config;
// osp::Raycaster* _raycaster;
// osp::Animator* _animator;
//
// sgct::SharedInt _timeStep;
// sgct::SharedBool _animationPaused;
// sgct::SharedBool _fpsMode;
// sgct::SharedFloat _elapsedTime;
// sgct::SharedInt _manualTimestep;
// sgct::SharedFloat _pitch;
// sgct::SharedFloat _yaw;
// sgct::SharedFloat _roll;
// sgct::SharedFloat _translateX;
// sgct::SharedFloat _translateY;
// sgct::SharedFloat _translateZ;
// sgct::SharedBool _reloadFlag;
//
// float _oldTime;
// float _currentTime;
// bool _leftMouseButton;
// double _currentMouseX;
// double _currentMouseY;
// double _lastMouseX;
// double _lastMouseY;
//};
//
//} // namespace openspace
//
//#endif // __FLARE_H__

View File

@@ -1,449 +1,452 @@
#include <openspace/flare/flare.h>
#include <ghoul/opengl/texture.h>
#include <openspace/flare/Renderer.h>
#include <openspace/flare/TransferFunction.h>
#include <openspace/flare/BrickManager.h>
#include <openspace/flare/TSP.h>
#include <openspace/flare/CLManager.h>
#include <openspace/flare/Utils.h>
#include <ghoul/filesystem/filesystem.h>
#include <sgct.h>
#include <string>
#include <cstdlib>
#include <vector>
#include <iostream>
namespace {
std::string _loggerCat = "Flare";
}
namespace openspace {
using namespace osp;
Flare::Flare()
: Renderable(ghoul::Dictionary())
, _oldTime(0.f)
, _currentTime(0.f)
, _leftMouseButton(false)
, _currentMouseX(0)
, _currentMouseY(0)
, _lastMouseX(0)
, _lastMouseY(0)
{
setBoundingSphere(PowerScaledScalar::CreatePSS(sqrt(3.0f)));
}
Flare::~Flare() {
// Clean up like a good citizen
delete _config;
delete _raycaster;
delete _animator;
}
void exit_msg(std::string m) {
LDEBUG(m);
exit(1);
}
bool Flare::initialize() {
init();
return true;
}
bool Flare::deinitialize() {
return true;
}
void Flare::render(const Camera *camera, const psc& thisPosition, RuntimeData* runtimeData) {
render();
}
void Flare::update() {
}
void Flare::render() {
// Sync timestep
//unsigned int ts = static_cast<unsigned int>(_timeStep.getVal());
//LDEBUG("ts: " << ts);
// Reload config if flag is set
if (_reloadFlag.getVal()) _raycaster->Reload();
// Set model and view params
_raycaster->SetModelParams(_pitch.getVal(),
_yaw.getVal(),
_roll.getVal());
_raycaster->SetViewParams(_translateX.getVal(),
_translateY.getVal(),
_translateZ.getVal());
// Render
if (!_raycaster->Render(_elapsedTime.getVal())) {
LDEBUG("!_raycaster->Render(_elapsedTime.getVal())");
exit(1);
}
// Save screenshot
if (_config->TakeScreenshot()) sgct::Engine::instance()->takeScreenshot();
// Update animator with synchronized time
_animator->SetPaused(_animationPaused.getVal());
_animator->SetFPSMode(_fpsMode.getVal());
_animator->Update(_elapsedTime.getVal());
_animator->ManualTimestep(_manualTimestep.getVal());
}
void Flare::initNavigation() {
_animationPaused.setVal(false);
_reloadFlag.setVal(false);
// FPS mode should be OFF for cluster syncing
_fpsMode.setVal(true);
_manualTimestep.setVal(0);
// Read initial values from config
_pitch.setVal(_config->StartPitch());
_yaw.setVal(_config->StartYaw());
_roll.setVal(_config->StartRoll());
_translateX.setVal(_config->TranslateX());
_translateY.setVal(_config->TranslateY());
_translateZ.setVal(_config->TranslateZ());
}
void Flare::init() {
// Start with reading a config file
_config = Config::New(absPath("${CONFIG}/flareConfig.txt"));
if (!_config) {
LDEBUG("!_Config");
exit(1);
}
initNavigation();
_reloadFlag.setVal(false);
// Get the viewport coordinates from OpenGL
GLint currentViewPort[4];
glGetIntegerv( GL_VIEWPORT, currentViewPort);
// Make sure texture width/height and global kernel worksizes are
// multiples of the local worksize
// Window dimensions
unsigned int width = currentViewPort[2] - currentViewPort[0];
unsigned int height = currentViewPort[3] - currentViewPort[1];
unsigned int xFactor = width/_config->LocalWorkSizeX();
unsigned int yFactor = height/_config->LocalWorkSizeY();
width = xFactor * _config->LocalWorkSizeX();
height = yFactor * _config->LocalWorkSizeY();
width /= _config->TextureDivisionFactor();
height /= _config->TextureDivisionFactor();
// Create TSP structure from file
TSP *tsp = TSP::New(_config);
if (!tsp->ReadHeader()) {
LDEBUG("!tsp->ReadHeader()");
exit(1);
}
// Read cache if it exists, calculate otherwise
if (tsp->ReadCache()) {
INFO("\nUsing cached TSP file");
} else {
INFO("\nNo cached TSP file found");
if (!tsp->Construct()) {
LDEBUG("!tsp->Construct()");
exit(1);
}
if (_config->CalculateError() == 0) {
INFO("Not calculating errors");
} else {
if (!tsp->CalculateSpatialError()) {
LDEBUG("!tsp->CalculateSpatialError()");
exit(1);
}
if (!tsp->CalculateTemporalError()) {
LDEBUG("!tsp->CalculateTemporalError()");
exit(1);
}
if (!tsp->WriteCache()) {
LDEBUG("!tsp->WriteCache()");
exit(1);
}
}
}
// Create brick manager and init (has to be done after init OpenGL!)
BrickManager *brickManager= BrickManager::New(_config);
if (!brickManager->ReadHeader()) {
LDEBUG("!brickManager->ReadHeader()");
exit(1);
}
if (!brickManager->InitAtlas()) {
LDEBUG("!brickManager->InitAtlas()");
exit(1);
}
using ghoul::opengl::ShaderObject;
using ghoul::opengl::ProgramObject;
ProgramObject* cubeShaderProgram = nullptr;
ShaderObject* cubeShaderProgram_vs = new ShaderObject(ShaderObject::ShaderType::ShaderTypeVertex,
_config->CubeShaderVertFilename(),
"cubeShaderProgram_vs"
);
ShaderObject* cubeShaderProgram_fs = new ShaderObject(ShaderObject::ShaderType::ShaderTypeFragment,
_config->CubeShaderFragFilename(),
"cubeShaderProgram_fs"
);
cubeShaderProgram = new ProgramObject;
cubeShaderProgram->attachObject(cubeShaderProgram_vs);
cubeShaderProgram->attachObject(cubeShaderProgram_fs);
if( ! cubeShaderProgram->compileShaderObjects())
LDEBUG("Could not compile cubeShaderProgram");
if( ! cubeShaderProgram->linkProgramObject())
LDEBUG("Could not link cubeShaderProgram");
ProgramObject* quadShaderProgram = nullptr;
ShaderObject* quadShaderProgram_vs = new ShaderObject(ShaderObject::ShaderType::ShaderTypeVertex,
_config->QuadShaderVertFilename(),
"quadShaderProgram_vs"
);
ShaderObject* quadShaderProgram_fs = new ShaderObject(ShaderObject::ShaderType::ShaderTypeFragment,
_config->QuadShaderFragFilename(),
"quadShaderProgram_fs"
);
quadShaderProgram = new ProgramObject;
quadShaderProgram->attachObject(quadShaderProgram_vs);
quadShaderProgram->attachObject(quadShaderProgram_fs);
if( ! quadShaderProgram->compileShaderObjects())
LDEBUG("Could not compile quadShaderProgram");
if( ! quadShaderProgram->linkProgramObject())
LDEBUG("Could not link quadShaderProgram");
// Create shaders for color cube and output textured quad
/*
ShaderProgram *cubeShaderProgram = ShaderProgram::New();
cubeShaderProgram->CreateShader(ShaderProgram::VERTEX,
_config->CubeShaderVertFilename());
cubeShaderProgram->CreateShader(ShaderProgram::FRAGMENT,
_config->CubeShaderFragFilename());
cubeShaderProgram->CreateProgram();
ShaderProgram *quadShaderProgram = ShaderProgram::New();
quadShaderProgram->CreateShader(ShaderProgram::VERTEX,
_config->QuadShaderVertFilename());
quadShaderProgram->CreateShader(ShaderProgram::FRAGMENT,
_config->QuadShaderFragFilename());
quadShaderProgram->CreateProgram();
*/
// Create two textures to hold the color cube
std::vector<unsigned int> dimensions(2);
dimensions[0] = width;
dimensions[1] = height;
ghoul::opengl::Texture* cubeFrontTex = new ghoul::opengl::Texture(glm::size3_t(width, height, 1),
ghoul::opengl::Texture::Format::RGBA, GL_RGBA, GL_FLOAT);
cubeFrontTex->uploadTexture();
ghoul::opengl::Texture* cubeBackTex = new ghoul::opengl::Texture(glm::size3_t(width, height, 1),
ghoul::opengl::Texture::Format::RGBA, GL_RGBA, GL_FLOAT);
cubeBackTex->uploadTexture();
/*
Texture2D *cubeFrontTex = Texture2D::New(dimensions);
Texture2D *cubeBackTex = Texture2D::New(dimensions);
cubeFrontTex->Init();
cubeBackTex->Init();
*/
// Create an output texture to write to
ghoul::opengl::Texture* quadTex = new ghoul::opengl::Texture(glm::size3_t(width, height, 1),
ghoul::opengl::Texture::Format::RGBA, GL_RGBA, GL_FLOAT);
quadTex->uploadTexture();
//Texture2D *quadTex = Texture2D::New(dimensions);
//quadTex->Init();
// Create transfer functions
TransferFunction *transferFunction = TransferFunction::New();
transferFunction->SetInFilename(_config->TFFilename());
if (!transferFunction->ReadFile()) exit_msg("!transferFunction->ReadFile()");
if (!transferFunction->ConstructTexture()) exit_msg("!transferFunction->ConstructTexture()");
// Create animator
_animator = Animator::New(_config);
// Use original (not adjusted) number of timesteps for animator
_animator->SetNumTimesteps(brickManager->NumOrigTimesteps());
// Create CL manager
CLManager *clManager = CLManager::New();
// Set up the raycaster
_raycaster = Raycaster::New(_config);
_raycaster->SetWinWidth(width);
_raycaster->SetWinHeight(height);
if (!_raycaster->InitCube()) exit_msg("!_raycaster->InitCube()");
if (!_raycaster->InitQuad()) exit_msg("!_raycaster->InitQuad()");
_raycaster->SetBrickManager(brickManager);
_raycaster->SetCubeFrontTexture(cubeFrontTex);
_raycaster->SetCubeBackTexture(cubeBackTex);
_raycaster->SetQuadTexture(quadTex);
_raycaster->SetCubeShaderProgram(cubeShaderProgram);
_raycaster->SetQuadShaderProgram(quadShaderProgram);
if (!_raycaster->InitFramebuffers()) exit_msg("!_raycaster->InitFramebuffers()");
_raycaster->SetAnimator(_animator);
_raycaster->AddTransferFunction(transferFunction);
// Tie CL manager to renderer
_raycaster->SetCLManager(clManager);
_raycaster->SetTSP(tsp);
if (!_raycaster->InitCL()) exit_msg("!_raycaster->InitCL()");
if (!_raycaster->InitPipeline()) exit_msg("!_raycaster->InitCL()");
}
void Flare::keyboard(int key, int action) {
if (action == GLFW_PRESS) {
switch(key) {
case 32: // space bar
// Toggle animation paused
INFO("Pausing");
_animationPaused.setVal(!_animationPaused.getVal());
break;
case 'Z':
case 'z':
// Decrease timestep
// NOTE: Can't decrease timestep with double buffered approach atm
//manualTimestep_.setVal(-1);
break;
case 'X':
case 'x':
// Increase timestep
_manualTimestep.setVal(1);
break;
case 'D':
case 'd':
_translateX.setVal(_translateX.getVal() + _config->ZoomFactor());
break;
case 'A':
case 'a':
_translateX.setVal(_translateX.getVal() - _config->ZoomFactor());
break;
case 'W':
case 'w':
_translateY.setVal(_translateY.getVal() + _config->ZoomFactor());
break;
case 'S':
case 's':
_translateY.setVal(_translateY.getVal() - _config->ZoomFactor());
break;
case 'Q':
case 'q':
_translateZ.setVal(_translateZ.getVal() + _config->ZoomFactor());
break;
case 'E':
case 'e':
_translateZ.setVal(_translateZ.getVal() - _config->ZoomFactor());
break;
case 'R':
case 'r':
_reloadFlag.setVal(true);
break;
case 'F':
case 'f':
_fpsMode.setVal(!_fpsMode.getVal());
if (_fpsMode.getVal()) {
INFO("Updating animation ASAP");
} else {
INFO("Using refresh interval variable");
}
break;
}
}
}
void Flare::mouse(int button, int action) {
switch (button) {
case GLFW_MOUSE_BUTTON_LEFT:
_leftMouseButton = (action == GLFW_PRESS) ? true : false;
std::size_t winId = sgct::Engine::instance()->getActiveWindowPtr()->getId();
sgct::Engine::getMousePos(winId, &_lastMouseX, &_lastMouseY);
}
}
void Flare::preSync() {
// Update time
_oldTime = _currentTime;
_currentTime = static_cast<float>(sgct::Engine::getTime());
_elapsedTime.setVal(_currentTime - _oldTime);
_timeStep.setVal(_animator->CurrentTimestep());
// Update automatic model transform
if (!_animationPaused.getVal()) {
_pitch.setVal(_pitch.getVal() + _config->PitchSpeed());
_roll.setVal(_roll.getVal() + _config->RollSpeed());
_yaw.setVal(_yaw.getVal() + _config->YawSpeed());
}
// Update mouse
if (_leftMouseButton) {
std::size_t winId = sgct::Engine::instance()->getActiveWindowPtr()->getId();
sgct::Engine::getMousePos(winId ,&_currentMouseX, &_currentMouseY);
_pitch.setVal(_pitch.getVal() + _config->MousePitchFactor() *
static_cast<float>(_currentMouseX-_lastMouseX));
_roll.setVal(_roll.getVal() + _config->MouseRollFactor() *
static_cast<float>(_currentMouseY-_lastMouseY));
}
}
void Flare::postSyncPreDraw() {
_animator->SetCurrentTimestep(static_cast<unsigned int>(_timeStep.getVal()));
}
void Flare::postDraw() {
// Reset manual timestep
_manualTimestep.setVal(0);
// Reset reload flag
_reloadFlag.setVal(false);
}
void Flare::encode() {
sgct::SharedData::instance()->writeInt(&_timeStep);
sgct::SharedData::instance()->writeBool(&_animationPaused);
sgct::SharedData::instance()->writeBool(&_fpsMode);
sgct::SharedData::instance()->writeFloat(&_elapsedTime);
sgct::SharedData::instance()->writeInt(&_manualTimestep);
sgct::SharedData::instance()->writeFloat(&_pitch);
sgct::SharedData::instance()->writeFloat(&_yaw);
sgct::SharedData::instance()->writeFloat(&_roll);
sgct::SharedData::instance()->writeFloat(&_translateX);
sgct::SharedData::instance()->writeFloat(&_translateY);
sgct::SharedData::instance()->writeFloat(&_translateZ);
sgct::SharedData::instance()->writeBool(&_reloadFlag);
}
void Flare::decode() {
sgct::SharedData::instance()->readInt(&_timeStep);
sgct::SharedData::instance()->readBool(&_animationPaused);
sgct::SharedData::instance()->readBool(&_fpsMode);
sgct::SharedData::instance()->readFloat(&_elapsedTime);
sgct::SharedData::instance()->readInt(&_manualTimestep);
sgct::SharedData::instance()->readFloat(&_pitch);
sgct::SharedData::instance()->readFloat(&_yaw);
sgct::SharedData::instance()->readFloat(&_roll);
sgct::SharedData::instance()->readFloat(&_translateX);
sgct::SharedData::instance()->readFloat(&_translateY);
sgct::SharedData::instance()->readFloat(&_translateZ);
sgct::SharedData::instance()->readBool(&_reloadFlag);
}
} // namespace openspace
// The source is still in here to be cannibalized later (ab)
//#include <openspace/flare/flare.h>
//
//#include <ghoul/opengl/texture.h>
//
//#include <openspace/flare/Renderer.h>
//#include <openspace/flare/TransferFunction.h>
//#include <openspace/flare/BrickManager.h>
//#include <openspace/flare/TSP.h>
//#include <openspace/flare/CLManager.h>
//#include <openspace/flare/Utils.h>
//
//#include <ghoul/filesystem/filesystem.h>
//
//#include <sgct.h>
//
//#include <string>
//#include <cstdlib>
//#include <vector>
//#include <iostream>
//
//namespace {
// std::string _loggerCat = "Flare";
//}
//
//namespace openspace {
//using namespace osp;
//
//Flare::Flare()
// : Renderable(ghoul::Dictionary())
// , _oldTime(0.f)
// , _currentTime(0.f)
// , _leftMouseButton(false)
// , _currentMouseX(0)
// , _currentMouseY(0)
// , _lastMouseX(0)
// , _lastMouseY(0)
//{
// setBoundingSphere(PowerScaledScalar::CreatePSS(sqrt(3.0f)));
//}
//
//Flare::~Flare() {
// // Clean up like a good citizen
// delete _config;
// delete _raycaster;
// delete _animator;
//}
//
//void exit_msg(std::string m) {
// LDEBUG(m);
// exit(1);
//}
//
//
//bool Flare::initialize() {
// init();
// return true;
//}
//bool Flare::deinitialize() {
// return true;
//}
//
//void Flare::render(const Camera *camera, const psc& thisPosition, RuntimeData* runtimeData) {
// render();
//}
//void Flare::update() {
//
//}
//
//void Flare::render() {
// // Sync timestep
// //unsigned int ts = static_cast<unsigned int>(_timeStep.getVal());
// //LDEBUG("ts: " << ts);
// // Reload config if flag is set
// if (_reloadFlag.getVal()) _raycaster->Reload();
//
// // Set model and view params
// _raycaster->SetModelParams(_pitch.getVal(),
// _yaw.getVal(),
// _roll.getVal());
// _raycaster->SetViewParams(_translateX.getVal(),
// _translateY.getVal(),
// _translateZ.getVal());
// // Render
// if (!_raycaster->Render(_elapsedTime.getVal())) {
// LDEBUG("!_raycaster->Render(_elapsedTime.getVal())");
// exit(1);
// }
//
// // Save screenshot
// if (_config->TakeScreenshot()) sgct::Engine::instance()->takeScreenshot();
//
// // Update animator with synchronized time
// _animator->SetPaused(_animationPaused.getVal());
// _animator->SetFPSMode(_fpsMode.getVal());
// _animator->Update(_elapsedTime.getVal());
// _animator->ManualTimestep(_manualTimestep.getVal());
//}
//
//void Flare::initNavigation() {
// _animationPaused.setVal(false);
// _reloadFlag.setVal(false);
//
// // FPS mode should be OFF for cluster syncing
// _fpsMode.setVal(true);
// _manualTimestep.setVal(0);
//
// // Read initial values from config
// _pitch.setVal(_config->StartPitch());
// _yaw.setVal(_config->StartYaw());
// _roll.setVal(_config->StartRoll());
//
// _translateX.setVal(_config->TranslateX());
// _translateY.setVal(_config->TranslateY());
// _translateZ.setVal(_config->TranslateZ());
//}
//
//void Flare::init() {
// // Start with reading a config file
// _config = Config::New(absPath("${CONFIG}/flareConfig.txt"));
// if (!_config) {
// LDEBUG("!_Config");
// exit(1);
// }
//
// initNavigation();
// _reloadFlag.setVal(false);
//
// // Get the viewport coordinates from OpenGL
// GLint currentViewPort[4];
// glGetIntegerv( GL_VIEWPORT, currentViewPort);
//
// // Make sure texture width/height and global kernel worksizes are
// // multiples of the local worksize
//
// // Window dimensions
// unsigned int width = currentViewPort[2] - currentViewPort[0];
// unsigned int height = currentViewPort[3] - currentViewPort[1];
// unsigned int xFactor = width/_config->LocalWorkSizeX();
// unsigned int yFactor = height/_config->LocalWorkSizeY();
// width = xFactor * _config->LocalWorkSizeX();
// height = yFactor * _config->LocalWorkSizeY();
// width /= _config->TextureDivisionFactor();
// height /= _config->TextureDivisionFactor();
//
//
// // Create TSP structure from file
// TSP *tsp = TSP::New(_config);
// if (!tsp->ReadHeader()) {
// LDEBUG("!tsp->ReadHeader()");
// exit(1);
// }
// // Read cache if it exists, calculate otherwise
// if (tsp->ReadCache()) {
// INFO("\nUsing cached TSP file");
// } else {
// INFO("\nNo cached TSP file found");
// if (!tsp->Construct()) {
// LDEBUG("!tsp->Construct()");
// exit(1);
// }
// if (_config->CalculateError() == 0) {
// INFO("Not calculating errors");
// } else {
// if (!tsp->CalculateSpatialError()) {
// LDEBUG("!tsp->CalculateSpatialError()");
// exit(1);
// }
// if (!tsp->CalculateTemporalError()) {
// LDEBUG("!tsp->CalculateTemporalError()");
// exit(1);
// }
// if (!tsp->WriteCache()) {
// LDEBUG("!tsp->WriteCache()");
// exit(1);
// }
// }
// }
//
// // Create brick manager and init (has to be done after init OpenGL!)
// BrickManager *brickManager= BrickManager::New(_config);
// if (!brickManager->ReadHeader()) {
// LDEBUG("!brickManager->ReadHeader()");
// exit(1);
// }
// if (!brickManager->InitAtlas()) {
// LDEBUG("!brickManager->InitAtlas()");
// exit(1);
// }
//
// using ghoul::opengl::ShaderObject;
// using ghoul::opengl::ProgramObject;
//
// ProgramObject* cubeShaderProgram = nullptr;
// ShaderObject* cubeShaderProgram_vs = new ShaderObject(ShaderObject::ShaderType::ShaderTypeVertex,
// _config->CubeShaderVertFilename(),
// "cubeShaderProgram_vs"
// );
// ShaderObject* cubeShaderProgram_fs = new ShaderObject(ShaderObject::ShaderType::ShaderTypeFragment,
// _config->CubeShaderFragFilename(),
// "cubeShaderProgram_fs"
// );
//
// cubeShaderProgram = new ProgramObject;
// cubeShaderProgram->attachObject(cubeShaderProgram_vs);
// cubeShaderProgram->attachObject(cubeShaderProgram_fs);
//
// if( ! cubeShaderProgram->compileShaderObjects())
// LDEBUG("Could not compile cubeShaderProgram");
// if( ! cubeShaderProgram->linkProgramObject())
// LDEBUG("Could not link cubeShaderProgram");
//
// ProgramObject* quadShaderProgram = nullptr;
// ShaderObject* quadShaderProgram_vs = new ShaderObject(ShaderObject::ShaderType::ShaderTypeVertex,
// _config->QuadShaderVertFilename(),
// "quadShaderProgram_vs"
// );
// ShaderObject* quadShaderProgram_fs = new ShaderObject(ShaderObject::ShaderType::ShaderTypeFragment,
// _config->QuadShaderFragFilename(),
// "quadShaderProgram_fs"
// );
//
// quadShaderProgram = new ProgramObject;
// quadShaderProgram->attachObject(quadShaderProgram_vs);
// quadShaderProgram->attachObject(quadShaderProgram_fs);
//
// if( ! quadShaderProgram->compileShaderObjects())
// LDEBUG("Could not compile quadShaderProgram");
// if( ! quadShaderProgram->linkProgramObject())
// LDEBUG("Could not link quadShaderProgram");
//
// // Create shaders for color cube and output textured quad
// /*
// ShaderProgram *cubeShaderProgram = ShaderProgram::New();
// cubeShaderProgram->CreateShader(ShaderProgram::VERTEX,
// _config->CubeShaderVertFilename());
// cubeShaderProgram->CreateShader(ShaderProgram::FRAGMENT,
// _config->CubeShaderFragFilename());
// cubeShaderProgram->CreateProgram();
//
// ShaderProgram *quadShaderProgram = ShaderProgram::New();
// quadShaderProgram->CreateShader(ShaderProgram::VERTEX,
// _config->QuadShaderVertFilename());
// quadShaderProgram->CreateShader(ShaderProgram::FRAGMENT,
// _config->QuadShaderFragFilename());
// quadShaderProgram->CreateProgram();
// */
//
// // Create two textures to hold the color cube
// std::vector<unsigned int> dimensions(2);
// dimensions[0] = width;
// dimensions[1] = height;
// ghoul::opengl::Texture* cubeFrontTex = new ghoul::opengl::Texture(glm::size3_t(width, height, 1),
// ghoul::opengl::Texture::Format::RGBA, GL_RGBA, GL_FLOAT);
// cubeFrontTex->uploadTexture();
// ghoul::opengl::Texture* cubeBackTex = new ghoul::opengl::Texture(glm::size3_t(width, height, 1),
// ghoul::opengl::Texture::Format::RGBA, GL_RGBA, GL_FLOAT);
// cubeBackTex->uploadTexture();
// /*
// Texture2D *cubeFrontTex = Texture2D::New(dimensions);
// Texture2D *cubeBackTex = Texture2D::New(dimensions);
// cubeFrontTex->Init();
// cubeBackTex->Init();
//*/
// // Create an output texture to write to
// ghoul::opengl::Texture* quadTex = new ghoul::opengl::Texture(glm::size3_t(width, height, 1),
// ghoul::opengl::Texture::Format::RGBA, GL_RGBA, GL_FLOAT);
// quadTex->uploadTexture();
//
// //Texture2D *quadTex = Texture2D::New(dimensions);
// //quadTex->Init();
//
// // Create transfer functions
// TransferFunction *transferFunction = TransferFunction::New();
// transferFunction->SetInFilename(_config->TFFilename());
// if (!transferFunction->ReadFile()) exit_msg("!transferFunction->ReadFile()");
// if (!transferFunction->ConstructTexture()) exit_msg("!transferFunction->ConstructTexture()");
//
//
// // Create animator
// _animator = Animator::New(_config);
// // Use original (not adjusted) number of timesteps for animator
// _animator->SetNumTimesteps(brickManager->NumOrigTimesteps());
//
// // Create CL manager
// CLManager *clManager = CLManager::New();
//
// // Set up the raycaster
// _raycaster = Raycaster::New(_config);
// _raycaster->SetWinWidth(width);
// _raycaster->SetWinHeight(height);
// if (!_raycaster->InitCube()) exit_msg("!_raycaster->InitCube()");
// if (!_raycaster->InitQuad()) exit_msg("!_raycaster->InitQuad()");
// _raycaster->SetBrickManager(brickManager);
// _raycaster->SetCubeFrontTexture(cubeFrontTex);
// _raycaster->SetCubeBackTexture(cubeBackTex);
// _raycaster->SetQuadTexture(quadTex);
// _raycaster->SetCubeShaderProgram(cubeShaderProgram);
// _raycaster->SetQuadShaderProgram(quadShaderProgram);
// if (!_raycaster->InitFramebuffers()) exit_msg("!_raycaster->InitFramebuffers()");
// _raycaster->SetAnimator(_animator);
// _raycaster->AddTransferFunction(transferFunction);
//
// // Tie CL manager to renderer
// _raycaster->SetCLManager(clManager);
// _raycaster->SetTSP(tsp);
//
// if (!_raycaster->InitCL()) exit_msg("!_raycaster->InitCL()");
// if (!_raycaster->InitPipeline()) exit_msg("!_raycaster->InitCL()");
//}
//
//void Flare::keyboard(int key, int action) {
// if (action == GLFW_PRESS) {
// switch(key) {
// case 32: // space bar
// // Toggle animation paused
// INFO("Pausing");
// _animationPaused.setVal(!_animationPaused.getVal());
// break;
// case 'Z':
// case 'z':
// // Decrease timestep
// // NOTE: Can't decrease timestep with double buffered approach atm
// //manualTimestep_.setVal(-1);
// break;
// case 'X':
// case 'x':
// // Increase timestep
// _manualTimestep.setVal(1);
// break;
// case 'D':
// case 'd':
// _translateX.setVal(_translateX.getVal() + _config->ZoomFactor());
// break;
// case 'A':
// case 'a':
// _translateX.setVal(_translateX.getVal() - _config->ZoomFactor());
// break;
// case 'W':
// case 'w':
// _translateY.setVal(_translateY.getVal() + _config->ZoomFactor());
// break;
// case 'S':
// case 's':
// _translateY.setVal(_translateY.getVal() - _config->ZoomFactor());
// break;
// case 'Q':
// case 'q':
// _translateZ.setVal(_translateZ.getVal() + _config->ZoomFactor());
// break;
// case 'E':
// case 'e':
// _translateZ.setVal(_translateZ.getVal() - _config->ZoomFactor());
// break;
// case 'R':
// case 'r':
// _reloadFlag.setVal(true);
// break;
// case 'F':
// case 'f':
// _fpsMode.setVal(!_fpsMode.getVal());
// if (_fpsMode.getVal()) {
// INFO("Updating animation ASAP");
// } else {
// INFO("Using refresh interval variable");
// }
// break;
// }
// }
//}
//
//void Flare::mouse(int button, int action) {
// switch (button) {
// case GLFW_MOUSE_BUTTON_LEFT:
// _leftMouseButton = (action == GLFW_PRESS) ? true : false;
// std::size_t winId = sgct::Engine::instance()->getActiveWindowPtr()->getId();
// sgct::Engine::getMousePos(winId, &_lastMouseX, &_lastMouseY);
// }
//}
//
//void Flare::preSync() {
// // Update time
// _oldTime = _currentTime;
// _currentTime = static_cast<float>(sgct::Engine::getTime());
// _elapsedTime.setVal(_currentTime - _oldTime);
// _timeStep.setVal(_animator->CurrentTimestep());
//
// // Update automatic model transform
// if (!_animationPaused.getVal()) {
// _pitch.setVal(_pitch.getVal() + _config->PitchSpeed());
// _roll.setVal(_roll.getVal() + _config->RollSpeed());
// _yaw.setVal(_yaw.getVal() + _config->YawSpeed());
// }
//
// // Update mouse
// if (_leftMouseButton) {
// std::size_t winId = sgct::Engine::instance()->getActiveWindowPtr()->getId();
// sgct::Engine::getMousePos(winId ,&_currentMouseX, &_currentMouseY);
// _pitch.setVal(_pitch.getVal() + _config->MousePitchFactor() *
// static_cast<float>(_currentMouseX-_lastMouseX));
// _roll.setVal(_roll.getVal() + _config->MouseRollFactor() *
// static_cast<float>(_currentMouseY-_lastMouseY));
// }
//}
//
//void Flare::postSyncPreDraw() {
// _animator->SetCurrentTimestep(static_cast<unsigned int>(_timeStep.getVal()));
//}
//
//void Flare::postDraw() {
// // Reset manual timestep
// _manualTimestep.setVal(0);
//
// // Reset reload flag
// _reloadFlag.setVal(false);
//}
//
//void Flare::encode() {
// sgct::SharedData::instance()->writeInt(&_timeStep);
// sgct::SharedData::instance()->writeBool(&_animationPaused);
// sgct::SharedData::instance()->writeBool(&_fpsMode);
// sgct::SharedData::instance()->writeFloat(&_elapsedTime);
// sgct::SharedData::instance()->writeInt(&_manualTimestep);
// sgct::SharedData::instance()->writeFloat(&_pitch);
// sgct::SharedData::instance()->writeFloat(&_yaw);
// sgct::SharedData::instance()->writeFloat(&_roll);
// sgct::SharedData::instance()->writeFloat(&_translateX);
// sgct::SharedData::instance()->writeFloat(&_translateY);
// sgct::SharedData::instance()->writeFloat(&_translateZ);
// sgct::SharedData::instance()->writeBool(&_reloadFlag);
//}
//
//void Flare::decode() {
// sgct::SharedData::instance()->readInt(&_timeStep);
// sgct::SharedData::instance()->readBool(&_animationPaused);
// sgct::SharedData::instance()->readBool(&_fpsMode);
// sgct::SharedData::instance()->readFloat(&_elapsedTime);
// sgct::SharedData::instance()->readInt(&_manualTimestep);
// sgct::SharedData::instance()->readFloat(&_pitch);
// sgct::SharedData::instance()->readFloat(&_yaw);
// sgct::SharedData::instance()->readFloat(&_roll);
// sgct::SharedData::instance()->readFloat(&_translateX);
// sgct::SharedData::instance()->readFloat(&_translateY);
// sgct::SharedData::instance()->readFloat(&_translateZ);
// sgct::SharedData::instance()->readBool(&_reloadFlag);
//}
//
//} // namespace openspace
//
//