Back to home page

EIC code displayed by LXR

 
 

    


Warning, /include/Geant4/toolx/sg/GL_viewer is written in an unsupported language. File is not indexed.

0001 // Copyright (C) 2010, Guy Barrand. All rights reserved.
0002 // See the file tools.license for terms.
0003 
0004 #ifndef toolx_sg_GL_viewer
0005 #define toolx_sg_GL_viewer
0006 
0007 #include <tools/sg/viewer>
0008 
0009 namespace tools{namespace sg{class render_manager;}}
0010 
0011 namespace toolx {
0012 namespace sg {
0013 
0014 template <class GL_MANAGER,class GL_ACTION>
0015 class GL_viewer_T : public tools::sg::viewer {
0016   TOOLS_T2_HEADER(GL_MANAGER,GL_ACTION,GL_viewer_T,toolx::sg::GL_viewer_T,tools::sg::viewer)
0017 public:
0018   void render() {
0019     if(!m_ww) return;
0020     if(!m_wh) return;
0021 
0022     if(!m_gl_mgr.begin_render(0,0,m_ww,m_wh,
0023                               m_clear_color.r(),
0024                               m_clear_color.g(),
0025                               m_clear_color.b(),
0026                               m_clear_color.a())) return;
0027 
0028     GL_ACTION action(m_gl_mgr,m_out,m_ww,m_wh);
0029     action.state().m_use_gsto = m_use_gsto;
0030 
0031     action.set_do_transparency(false);
0032     action.set_have_to_do_transparency(false);
0033     
0034     m_sg.render(action);
0035     if(!action.end()) { //check that matrices stack are ok.
0036       m_out << "toolx::sg::GL_viewer_T : bad gl_action end." << std::endl;
0037     } else {
0038       if(action.have_to_do_transparency()) {
0039         action.set_do_transparency(true);
0040         m_sg.render(action);
0041         if(!action.end()) { //check that matrices stack are ok.
0042           m_out << "toolx::sg::GL_viewer_T : bad gl_action end." << std::endl;
0043         }
0044       }
0045     }
0046 
0047     m_gl_mgr.end_render();
0048   }
0049 
0050 public:
0051   GL_viewer_T(std::ostream& a_out,unsigned int a_width,unsigned int a_height)
0052   :parent(a_out,a_width,a_height)
0053   ,m_gl_mgr(a_out)
0054   {}
0055   virtual ~GL_viewer_T(){
0056     //WARNING : nodes may refer m_gl_mgr (to handle gstos/texs), then
0057     //          we have to delete them first.
0058     m_sg.clear();
0059   }
0060 public:
0061   GL_viewer_T(const GL_viewer_T& a_from)
0062   :parent(a_from)
0063   ,m_gl_mgr(a_from.m_gl_mgr)
0064   {}
0065   GL_viewer_T& operator=(const GL_viewer_T& a_from){
0066     parent::operator=(a_from);
0067     m_gl_mgr = a_from.m_gl_mgr;
0068     return *this;
0069   }
0070 public:
0071   const tools::sg::render_manager& render_manager() const {return m_gl_mgr;}
0072   tools::sg::render_manager& render_manager() {return m_gl_mgr;}
0073 protected:
0074   GL_MANAGER m_gl_mgr;
0075 };
0076 
0077 }}
0078 
0079 #endif