Select Git revision
-
Francois .D authoredFrancois .D authored
Reveal.hpp 8.24 KiB
/***************************************************************************
* Reveal.hpp
* Part of Reveal
* 2015- Florent Berthaut
* hitmuri.net
****************************************************************************/
/*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#ifndef Reveal_h
#define Reveal_h
#include "modules/ContextHandler.hpp"
#include "modules/GroupModule.hpp"
class DepthCamModule;
class ProjectorsModule;
class SceneModule;
class RootSceneGroupModule;
class RevealedModule;
class SpacesModule;
class OutputManagerModule;
class PreviewModule;
class Geometry;
class ModuleListObserver;
class Reveal : public GroupModule {
public:
enum REVIL_PROGRAM {
PREVIEWPROG, SLICEPROG, SELECTPROG, RENDERPROG, CALIBPROG, POSTPROG
};
enum REVIL_UNIFORM {
VIEWMAT, VIEWPROJMAT, MODELMAT, INVMODELMAT, MIRRORED, MODELSCALE,
SUBSHAPEINVMAT,
VIEWPORTWIDTH, VIEWPORTHEIGHT,
SHAPECOLOR, SHAPEID, SHAPEIDBIT, SUBSHAPEID, SUBSHAPESNB,
SHAPEGEOM,
SURFACE, SURFACECOLOR, SURFACETHICKNESS,
AUDIOOUTPUT,
INSIDEVISIBLE, INSIDESTRUCT, STRUCTRATIO,
GRADIENTALPHA, GRADIENTTYPE, GRADIENTSTEPS, GRADIENTCURVERATIO,
GRADIENTTEXTURE,
DENSITYALPHA, DENSITYTYPE, DENSITYRATIO, DENSITYSIZE,
DENSITYCURVERATIO,
TEXALPHA, TEXBLEND, TEXOFFSET, TEXSCALE, TEXGRAY,
REACTIVITY,
BBOXMIN, BBOXSIZE, BBOXROT, BBOXLOCALSIZE,
REVSIZE, REVSURFACE, REVINSIDE, REVCENTER,
REVCURSOR, REVCOLOR, REVHISTO, REVVOXELS, REVEALEDBY,
OUTSHAPESIZE, OUTHISTOSIZE, OUTVOXELSIZE, OUTDEPTHSIZE, OUTNBDEPTH,
BRECT,
OUTPUTTEX, SLICETEX, SELECTTEX, INSIDETEX, SURFACETEX, COORDSTEX,
REACTTEX, SURFDISTEX,
CAMTEX, CAMTEXFIL, CAMXRESO, CAMYRESO, CAMXZFACTOR, CAMYZFACTOR,
CAMFILTER, CAMFLIP, CAMCONTOURTHRESH,
CAMMARKERS, MARKTEX, BACKGROUND,
DEPTHTYPE, DEPTHID, OUTPUTCURS,
PATW, PATPOSX, PATPOSY, PATNBX, PATNBY, PATBRIGHT, PATTERNTEX,
PATRANGE, PATOFFSET,
POSTFILTER, RENDERTEX,
AUDIOTEX, AUDIORATE, MAXAUDIOVALUE, AUDIOBUFSIZE, AUDIOMIXSIZE,
PROCESSAUDIO, AUDIONEXTBUF, AUDIONBTRACKS
};
enum GEOM_ID {
GEOM_BOX, GEOM_SPHERE, GEOM_TUBE, GEOM_CONE, GEOM_FRAME,
GEOM_PATH, GEOM_QUAD,
GEOM_CAM1280, GEOM_CAM640, GEOM_CAM320,
GEOM_MODEL
};
enum VISIBLE_FROM {
VISIBLE_FROM_NONE, VISIBLE_FROM_ALL
};
public:
static Reveal* getInstance();
~Reveal();
void init();
int run();
void update();
void planOpen(std::string);
void initPrograms();
static void openCallback(Module* mod, const std::string& f) {
dynamic_cast<Reveal*>(mod)->open(f);
}
void open(const std::string& f);
static void saveCallback(Module* mod, const std::string& f) {
dynamic_cast<Reveal*>(mod)->save(f);
}
void save(const std::string& f);
static void quitCallback(Module* mod) {
dynamic_cast<Reveal*>(mod)->askQuit();
}
void askQuit();
void quit();
static void ressourcesCallback(Module* mod, const std::string& f) {
dynamic_cast<Reveal*>(mod)->setRessourcesFolder(f);
}
void setRessourcesFolder(const std::string& f);
static void uploadCallback(Module* mod,
const std::vector<std::string>& vf
) {
dynamic_cast<Reveal*>(mod)->uploadRessource(vf);
}
void uploadRessource(const std::vector<std::string>& vf);
static void debugOscCallback(Module* mod, const std::vector<bool>& vf) {
dynamic_cast<Reveal*>(mod)->debugOSC(vf[0]);
}
void debugOSC(const bool& deb){m_debugOSC=deb;}
const bool& getDebugOSC() {return m_debugOSC;}
static void audioOutputCallback(Module* mod,
const std::vector<bool>& vf) {
dynamic_cast<Reveal*>(mod)->setAudioOutput(vf[0]);
}
void setAudioOutput(const bool& aud);
virtual void load(xmlNodePtr);
void addUpdateObserver(Module* upObs);
void removeUpdateObserver(Module* upObs);
void refreshModules();
Module* createModule(const std::string& typeStr);
Module* findModule(const std::string& fullName);
Attribute* findAttribute(const std::string& fullName);
int getVisibilityMask(const std::string& visibleFrom);
Listener* createListener(const std::string& typeStr);
inline SpacesModule* getSpaces(){return m_spaces;}
//Revealed modules
void registerRevealed(RevealedModule*);
void unregisterRevealed(RevealedModule*);
RevealedModule* getRevealedModule(const unsigned int& s) {
if(m_revealedMap.find(s)!=m_revealedMap.end()) {
return m_revealedMap[s];
}
return NULL;
}
unsigned int getNbRevealed(){return m_revealedVec.size();}
inline const int& getMaxNbRevealed(){return m_maxNbRevealed;}
void updateRevealed();
void registerOutputRevealed(RevealedModule* rev);
void unregisterOutputRevealed(RevealedModule* rev);
inline std::vector<RevealedModule*>& editRegisteredOutputRevealed() {
return m_registeredOutputRevealed;
}
void updateOutputRevealed();
inline const int& getMaxNbDepthCams(){return m_maxNbDepthCams;}
void registerOutputDepthCam(DepthCamModule* cam);
void unregisterOutputDepthCam(DepthCamModule* cam);
inline std::vector<DepthCamModule*>& editRegisteredOutputDepthCams() {
return m_registeredOutputDepthCams;
}
//removing things
void deleteListener(Listener*);
void deleteModule(Module*);
//Geometries
const std::vector<Geometry*>& getGeoms(){return m_geoms;}
Geometry* getGeom(const GEOM_ID& geomStr) {
return m_geomsMap[geomStr];
}
void registerGeom(Geometry* geom);
void unregisterGeom(Geometry* geom);
void addModuleListObserver(ModuleListObserver* obs);
void removeModuleListObserver(ModuleListObserver* obs);
void addContextHandler(ContextHandler* cont);
void removeContextHandler(ContextHandler* cont);
inline ContextHandler* getContextHandler(const int& id) {
return m_contextHandlers[id];
}
GLuint createProgram(const char* vertSource, const char* fragSource);
GLFWwindow* getPreviewWindow();
void measureStart();
void measureStore(const int& nbPixels);
const std::string& getCurrentFile(){return m_currentFile;}
private:
Reveal();
void testDelete();
private:
SpacesModule* m_spaces;
RootSceneGroupModule* m_scene;
PreviewModule* m_preview;
OutputManagerModule* m_output;
bool m_debugOSC;
bool m_audioOut;
int m_openPlanned;
std::string m_openPlannedName;
std::string m_currentFile;
std::map<std::string, Module*> m_typesMap;
std::vector<Module*> m_updateObservers;
unsigned int m_upObsIdCounter;
timeval m_prevTime;
std::map<std::string, Module*> m_modulesMap;
std::map<std::string, Attribute*> m_fullAttributesMap;
std::map<unsigned int, ModuleListObserver*> m_moduleListObservers;
std::map<GEOM_ID, Geometry*> m_geomsMap;
std::vector<Geometry*> m_geoms;
std::map<std::string, int> m_visibleFromMap;
std::vector<std::string> m_visibleFromVec;
int m_contextHandlersCounter;
std::map<unsigned int, ContextHandler*> m_contextHandlers;
std::vector<RevealedModule*> m_revealedVec;
std::map<unsigned int, RevealedModule*> m_revealedMap;
int m_maxNbRevealed;
std::vector<RevealedModule*> m_registeredOutputRevealed;
int m_maxNbDepthCams;
std::vector<DepthCamModule*> m_registeredOutputDepthCams;
std::vector<Listener*> m_listenersDeleteVec;
std::vector<Attribute*> m_attributesDeleteVec;
std::vector<Module*> m_modulesDeleteVec;
timeval m_measureTime;
bool m_measuring;
std::map<int, int> m_measurePixelTimes;
std::map<int, int> m_measurePixelNb;
};
class ModuleListObserver {
public:
virtual ~ModuleListObserver(){}
virtual void updateModulesList(const std::map<std::string, Module*>&)=0;
void setModuleListObsID(const unsigned int& id){m_moduleListObsID=id;}
const unsigned int& getModuleListObsID(){return m_moduleListObsID;}
protected:
unsigned int m_moduleListObsID;
};
#endif