mirror of
https://github.com/OpenSpace/OpenSpace.git
synced 2026-01-07 04:00:37 -06:00
Fixed ABuffer to update shader when Scengraph is updated
This commit is contained in:
@@ -52,6 +52,8 @@ public:
|
||||
void addTransferFunction(const std::string& tag,ghoul::opengl::Texture* transferFunction);
|
||||
int addSamplerfile(const std::string& filename);
|
||||
|
||||
void invalidateABuffer();
|
||||
|
||||
protected:
|
||||
virtual std::string settings() = 0;
|
||||
|
||||
|
||||
@@ -252,7 +252,9 @@ vec4 calculate_final_color(uint frag_count) {
|
||||
#pragma openspace insert TRANSFERFUNC
|
||||
#endif
|
||||
|
||||
// if(frag_count == 1) {
|
||||
// if(frag_count == 0) {
|
||||
// final_color = vec4(0.5,0.5,0.5,1.0);
|
||||
// } else if(frag_count == 1) {
|
||||
// final_color = vec4(1.0,0.0,0.0,1.0);
|
||||
// } else if(frag_count == 2) {
|
||||
// final_color = vec4(0.0,1.0,0.0,1.0);
|
||||
|
||||
@@ -45,7 +45,7 @@ std::string padGeneratedString(const std::string& content) {
|
||||
|
||||
namespace openspace {
|
||||
|
||||
ABuffer::ABuffer(): _validShader(true) {
|
||||
ABuffer::ABuffer() : _validShader(false), _resolveShader(nullptr) {
|
||||
int x1, xSize, y1, ySize;
|
||||
sgct::Engine::instance()->getActiveWindowPtr()->getCurrentViewportPixelCoords(x1, y1, xSize, ySize);
|
||||
_width = xSize;
|
||||
@@ -69,7 +69,6 @@ ABuffer::~ABuffer() {
|
||||
for(auto file: _shaderFiles) {
|
||||
delete file;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
bool ABuffer::initializeABuffer() {
|
||||
@@ -93,10 +92,6 @@ bool ABuffer::initializeABuffer() {
|
||||
addFunc("${SHADERS}/PowerScaling/powerScaling_fs.hglsl");
|
||||
addFunc("${SHADERS}/PowerScaling/powerScaling_vs.hglsl");
|
||||
|
||||
_resolveShader = nullptr;
|
||||
generateShaderSource();
|
||||
updateShader();
|
||||
|
||||
// ============================
|
||||
// GEOMETRY (quad)
|
||||
// ============================
|
||||
@@ -127,7 +122,6 @@ void ABuffer::resolve() {
|
||||
_validShader = true;
|
||||
generateShaderSource();
|
||||
updateShader();
|
||||
|
||||
}
|
||||
|
||||
if(_resolveShader) {
|
||||
@@ -375,5 +369,9 @@ std::string ABuffer::openspaceTransferFunction() {
|
||||
return tf;
|
||||
}
|
||||
|
||||
void ABuffer::invalidateABuffer() {
|
||||
_validShader = false;
|
||||
}
|
||||
|
||||
|
||||
} // openspace
|
||||
@@ -283,7 +283,7 @@ bool OpenSpaceEngine::initialize()
|
||||
|
||||
|
||||
// initialize the RenderEngine, needs ${SCENEPATH} to be set
|
||||
_renderEngine.initialize();
|
||||
_renderEngine.initialize();
|
||||
sceneGraph->initialize();
|
||||
|
||||
std::string sceneDescriptionPath;
|
||||
@@ -292,7 +292,7 @@ bool OpenSpaceEngine::initialize()
|
||||
if (success)
|
||||
sceneGraph->scheduleLoadSceneFile(sceneDescriptionPath);
|
||||
|
||||
_renderEngine.setSceneGraph(sceneGraph);
|
||||
//_renderEngine.setSceneGraph(sceneGraph);
|
||||
|
||||
#ifdef FLARE_ONLY
|
||||
_flare = new Flare();
|
||||
|
||||
@@ -127,16 +127,6 @@ RenderableVolumeGL::~RenderableVolumeGL() {
|
||||
}
|
||||
|
||||
bool RenderableVolumeGL::initialize() {
|
||||
// assert(_filename != "");
|
||||
// ------ VOLUME READING ----------------
|
||||
// <<<<<<< HEAD
|
||||
// =======
|
||||
// _volume = loadVolume(_filename, _hintsDictionary);
|
||||
// _volume->uploadTexture();
|
||||
// _transferFunction = loadTransferFunction(_transferFunctionPath);
|
||||
// _transferFunction->uploadTexture();
|
||||
|
||||
// >>>>>>> feature/fieldlines
|
||||
// TODO: fix volume an transferfunction names
|
||||
if(_filename != "") {
|
||||
_volume = loadVolume(_filename, _hintsDictionary);
|
||||
|
||||
@@ -223,167 +223,6 @@ bool SceneGraph::initialize()
|
||||
double elapsed = std::chrono::duration_cast<second_>(clock_::now()-beginning).count();
|
||||
LINFO("Time to load shaders: " << elapsed);
|
||||
|
||||
/*
|
||||
|
||||
auto programCreator = [] ( const std::string& name,
|
||||
const std::string& vpath,
|
||||
const std::string& fpath)
|
||||
{
|
||||
const std::string vsPath = absPath(vpath);
|
||||
const std::string fsPath = absPath(fpath);
|
||||
const ShaderObject::ShaderType vsType = ShaderObject::ShaderType::ShaderTypeVertex;
|
||||
const ShaderObject::ShaderType fsType = ShaderObject::ShaderType::ShaderTypeFragment;
|
||||
|
||||
ProgramObject* po = new ProgramObject(name);
|
||||
ShaderObject* vs = new ShaderObject(vsType, vsPath, name + "Vertex");
|
||||
ShaderObject* fs = new ShaderObject(fsType, fsPath, name + "Fragment");
|
||||
po->attachObject(vs);
|
||||
po->attachObject(fs);
|
||||
if ( po->compileShaderObjects() && po->linkProgramObject())
|
||||
return po;
|
||||
|
||||
// unsuccessful compilation, cleanup and return nullptr
|
||||
delete po;
|
||||
po = nullptr;
|
||||
//<<<<<<< HEAD
|
||||
}
|
||||
|
||||
ShaderObject* powerscale_vs
|
||||
= new ShaderObject(ShaderObject::ShaderType::ShaderTypeVertex,
|
||||
absPath("${SHADERS}/pscstandard_vs.glsl"), "PS Vertex");
|
||||
ShaderObject* powerscale_fs
|
||||
= new ShaderObject(ShaderObject::ShaderType::ShaderTypeFragment,
|
||||
absPath("${SHADERS}/pscstandard_fs.glsl"), "PS Fragment");
|
||||
|
||||
po = new ProgramObject;
|
||||
po->attachObject(powerscale_vs);
|
||||
po->attachObject(powerscale_fs);
|
||||
|
||||
if (!po->compileShaderObjects())
|
||||
return false;
|
||||
if (!po->linkProgramObject())
|
||||
return false;
|
||||
|
||||
OsEng.ref().configurationManager().setValue("pscShader", po);
|
||||
|
||||
ProgramObject* _gridProgram = new ProgramObject("GridProgram");
|
||||
ShaderObject* gridvs = new ShaderObject(ShaderObject::ShaderTypeVertex,
|
||||
absPath("${SHADERS}/grid_vs.glsl"));
|
||||
ShaderObject* gridfs = new ShaderObject(ShaderObject::ShaderTypeFragment,
|
||||
absPath("${SHADERS}/grid_fs.glsl"));
|
||||
_gridProgram->attachObject(gridvs);
|
||||
_gridProgram->attachObject(gridfs);
|
||||
_gridProgram->compileShaderObjects();
|
||||
_gridProgram->linkProgramObject();
|
||||
|
||||
|
||||
// STAR HALO RENDERING
|
||||
ProgramObject* _starProgram = new ProgramObject("StarProgram");
|
||||
ShaderObject* starvs = new ShaderObject(ShaderObject::ShaderTypeVertex,
|
||||
absPath("${SHADERS}/star_vs.glsl"));
|
||||
ShaderObject* starge = new ShaderObject(ShaderObject::ShaderTypeGeometry,
|
||||
absPath("${SHADERS}/star_ge.glsl"));
|
||||
ShaderObject* starfs = new ShaderObject(ShaderObject::ShaderTypeFragment,
|
||||
absPath("${SHADERS}/star_fs.glsl"));
|
||||
_starProgram->attachObject(starvs);
|
||||
_starProgram->attachObject(starge);
|
||||
_starProgram->attachObject(starfs);
|
||||
_starProgram->compileShaderObjects();
|
||||
_starProgram->linkProgramObject();
|
||||
|
||||
// STAR POINT RENDERING
|
||||
ProgramObject* _pointProgram = new ProgramObject("PointProgram");
|
||||
ShaderObject* starvs_point = new ShaderObject(ShaderObject::ShaderTypeVertex,
|
||||
absPath("${SHADERS}/star_vs_points.glsl"));
|
||||
ShaderObject* starge_point = new ShaderObject(ShaderObject::ShaderTypeGeometry,
|
||||
absPath("${SHADERS}/star_ge_points.glsl"));
|
||||
ShaderObject* starfs_point = new ShaderObject(ShaderObject::ShaderTypeFragment,
|
||||
absPath("${SHADERS}/star_fs_points.glsl"));
|
||||
|
||||
_pointProgram->attachObject(starvs_point);
|
||||
_pointProgram->attachObject(starge_point);
|
||||
_pointProgram->attachObject(starfs_point);
|
||||
_pointProgram->compileShaderObjects();
|
||||
_pointProgram->linkProgramObject();
|
||||
|
||||
ProgramObject* _fboProgram = new ProgramObject("RaycastProgram");
|
||||
ShaderObject* vertexShader = new ShaderObject(ShaderObject::ShaderTypeVertex,
|
||||
absPath("${SHADERS}/exitpoints.vert"));
|
||||
ShaderObject* fragmentShader = new ShaderObject(ShaderObject::ShaderTypeFragment,
|
||||
absPath("${SHADERS}/exitpoints.frag"));
|
||||
_fboProgram->attachObject(vertexShader);
|
||||
_fboProgram->attachObject(fragmentShader);
|
||||
_fboProgram->compileShaderObjects();
|
||||
_fboProgram->linkProgramObject();
|
||||
|
||||
ProgramObject* _twopassProgram = new ProgramObject("TwoPassProgram");
|
||||
vertexShader = new ShaderObject(ShaderObject::ShaderTypeVertex,
|
||||
absPath("${SHADERS}/twopassraycaster.vert"));
|
||||
fragmentShader = new ShaderObject(ShaderObject::ShaderTypeFragment,
|
||||
absPath("${SHADERS}/twopassraycaster.frag"));
|
||||
_twopassProgram->attachObject(vertexShader);
|
||||
_twopassProgram->attachObject(fragmentShader);
|
||||
_twopassProgram->compileShaderObjects();
|
||||
_twopassProgram->linkProgramObject();
|
||||
_twopassProgram->setUniform("texBack", 0);
|
||||
_twopassProgram->setUniform("texFront", 1);
|
||||
_twopassProgram->setUniform("texVolume", 2);
|
||||
|
||||
ProgramObject* quad = new ProgramObject("Quad");
|
||||
ShaderObject* quadv = new ShaderObject(ShaderObject::ShaderTypeVertex,
|
||||
absPath("${SHADERS}/quadVert.glsl"));
|
||||
ShaderObject* quadf = new ShaderObject(ShaderObject::ShaderTypeFragment,
|
||||
absPath("${SHADERS}/quadFrag.glsl"));
|
||||
quad->attachObject(quadv);
|
||||
quad->attachObject(quadf);
|
||||
quad->compileShaderObjects();
|
||||
quad->linkProgramObject();
|
||||
quad->setUniform("quadTex", 0);
|
||||
|
||||
OsEng.ref().configurationManager().setValue("RaycastProgram", _fboProgram);
|
||||
OsEng.ref().configurationManager().setValue("TwoPassProgram", _twopassProgram);
|
||||
OsEng.ref().configurationManager().setValue("Quad", quad);
|
||||
OsEng.ref().configurationManager().setValue("PointProgram", _pointProgram);
|
||||
OsEng.ref().configurationManager().setValue("StarProgram", _starProgram);
|
||||
OsEng.ref().configurationManager().setValue("GridProgram", _gridProgram);
|
||||
|
||||
=======
|
||||
return po;
|
||||
};
|
||||
// pscstandard
|
||||
tmpProgram = programCreator("pscstandard",
|
||||
"${SHADERS}/pscstandard_vs.glsl",
|
||||
"${SHADERS}/pscstandard_fs.glsl");
|
||||
if( ! tmpProgram) return false;
|
||||
OsEng.ref().configurationManager().setValue("pscShader", tmpProgram);
|
||||
|
||||
// RaycastProgram
|
||||
tmpProgram = programCreator("RaycastProgram",
|
||||
"${SHADERS}/exitpoints.vert",
|
||||
"${SHADERS}/exitpoints.frag");
|
||||
if( ! tmpProgram) return false;
|
||||
OsEng.ref().configurationManager().setValue("RaycastProgram", tmpProgram);
|
||||
|
||||
|
||||
// TwoPassProgram
|
||||
tmpProgram = programCreator("TwoPassProgram",
|
||||
"${SHADERS}/twopassraycaster.vert",
|
||||
"${SHADERS}/twopassraycaster.frag");
|
||||
if( ! tmpProgram) return false;
|
||||
tmpProgram->setUniform("texBack", 0);
|
||||
tmpProgram->setUniform("texFront", 1);
|
||||
tmpProgram->setUniform("texVolume", 2);
|
||||
OsEng.ref().configurationManager().setValue("TwoPassProgram", tmpProgram);
|
||||
|
||||
// Quad
|
||||
tmpProgram = programCreator("Quad",
|
||||
"${SHADERS}/quadVert.glsl",
|
||||
"${SHADERS}/quadFrag.glsl");
|
||||
if( ! tmpProgram) return false;
|
||||
tmpProgram->setUniform("quadTex", 0);
|
||||
OsEng.ref().configurationManager().setValue("Quad", tmpProgram);
|
||||
*/
|
||||
//>>>>>>> develop
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -402,6 +241,8 @@ void SceneGraph::update(const UpdateData& data)
|
||||
_sceneGraphToLoad = "";
|
||||
if (!success)
|
||||
return;
|
||||
|
||||
OsEng.renderEngine().abuffer()->invalidateABuffer();
|
||||
}
|
||||
|
||||
for (auto node : _nodes)
|
||||
@@ -534,8 +375,8 @@ bool SceneGraph::loadSceneInternal(const std::string& sceneDescriptionFilePath)
|
||||
|
||||
// update the position of all nodes
|
||||
// TODO need to check this; unnecessary? (ab)
|
||||
for (auto node : _nodes)
|
||||
node->update({Time::ref().currentTime()});
|
||||
for (auto node : _nodes)
|
||||
node->update({ Time::ref().currentTime() });
|
||||
|
||||
// Calculate the bounding sphere for the scenegraph
|
||||
_root->calculateBoundingSphere();
|
||||
@@ -557,7 +398,7 @@ bool SceneGraph::loadSceneInternal(const std::string& sceneDescriptionFilePath)
|
||||
// TODO: Set scaling dependent on the position and distance
|
||||
// set position for camera
|
||||
const PowerScaledScalar bound = positionNode->calculateBoundingSphere();
|
||||
|
||||
|
||||
// this part is full of magic!
|
||||
glm::vec2 boundf = bound.vec2();
|
||||
glm::vec2 scaling{1.0f, -boundf[1]};
|
||||
|
||||
@@ -282,7 +282,8 @@ const std::vector<SceneGraphNode*>& SceneGraphNode::children() const{
|
||||
// bounding sphere
|
||||
PowerScaledScalar SceneGraphNode::calculateBoundingSphere(){
|
||||
// set the bounding sphere to 0.0
|
||||
_boundingSphere = 1000.0;
|
||||
_boundingSphere = 0.0;
|
||||
//_boundingSphere = 1000.0;
|
||||
|
||||
if (_children.size() > 0) { // node
|
||||
PowerScaledScalar maxChild;
|
||||
|
||||
Reference in New Issue
Block a user