Geant4 Cross Reference |
1 // Copyright (C) 2010, Guy Barrand. All rights 1 // Copyright (C) 2010, Guy Barrand. All rights reserved. 2 // See the file tools.license for terms. 2 // See the file tools.license for terms. 3 3 4 #ifndef tools_sg_rgba 4 #ifndef tools_sg_rgba 5 #define tools_sg_rgba 5 #define tools_sg_rgba 6 6 7 #include "node" 7 #include "node" 8 8 9 #include "sf_vec" 9 #include "sf_vec" 10 #include "render_action" 10 #include "render_action" 11 #include "../colorfs" 11 #include "../colorfs" 12 12 13 namespace tools { 13 namespace tools { 14 namespace sg { 14 namespace sg { 15 15 16 class rgba : public node { 16 class rgba : public node { 17 TOOLS_NODE(rgba,tools::sg::rgba,node) 17 TOOLS_NODE(rgba,tools::sg::rgba,node) 18 public: 18 public: 19 sf_vec<colorf,float> color; 19 sf_vec<colorf,float> color; 20 public: 20 public: 21 virtual const desc_fields& node_desc_fields( 21 virtual const desc_fields& node_desc_fields() const { 22 TOOLS_FIELD_DESC_NODE_CLASS(tools::sg::rgb 22 TOOLS_FIELD_DESC_NODE_CLASS(tools::sg::rgba) 23 static const desc_fields s_v(parent::node_ 23 static const desc_fields s_v(parent::node_desc_fields(),1, //WARNING : take care of count. 24 TOOLS_ARG_FIELD_DESC(color) 24 TOOLS_ARG_FIELD_DESC(color) 25 ); 25 ); 26 return s_v; 26 return s_v; 27 } 27 } 28 private: 28 private: 29 void add_fields(){ 29 void add_fields(){ 30 add_field(&color); 30 add_field(&color); 31 } 31 } 32 public: 32 public: 33 virtual void render(render_action& a_action) 33 virtual void render(render_action& a_action) { 34 // GL-ES : ::glMaterialfv does not work. W 34 // GL-ES : ::glMaterialfv does not work. We then use : 35 // ::glEnable(GL_COLOR_MATERIAL) a 35 // ::glEnable(GL_COLOR_MATERIAL) and ::glColor. 36 36 37 //if(a_action.state().m_GL_LIGHTING) { 37 //if(a_action.state().m_GL_LIGHTING) { 38 // float params[4]; 38 // float params[4]; 39 // params[0] = rgb.value().r(); 39 // params[0] = rgb.value().r(); 40 // params[1] = rgb.value().g(); 40 // params[1] = rgb.value().g(); 41 // params[2] = rgb.value().b(); 41 // params[2] = rgb.value().b(); 42 // params[3] = rgb.value().a(); 42 // params[3] = rgb.value().a(); 43 // ::glMaterialfv(GL_FRONT,GL_DIFFUSE,par 43 // ::glMaterialfv(GL_FRONT,GL_DIFFUSE,params); 44 //} else { 44 //} else { 45 //} 45 //} 46 46 47 state& state = a_action.state(); 47 state& state = a_action.state(); 48 state.m_color = color.value(); 48 state.m_color = color.value(); 49 a_action.color4f(state.m_color); 49 a_action.color4f(state.m_color); 50 } 50 } 51 public: 51 public: 52 rgba() 52 rgba() 53 :parent() 53 :parent() 54 ,color(colorf_grey()) 54 ,color(colorf_grey()) 55 { 55 { 56 add_fields(); 56 add_fields(); 57 } 57 } 58 virtual ~rgba(){} 58 virtual ~rgba(){} 59 public: 59 public: 60 rgba(const rgba& a_from) 60 rgba(const rgba& a_from) 61 :parent(a_from) 61 :parent(a_from) 62 ,color(a_from.color) 62 ,color(a_from.color) 63 { 63 { 64 add_fields(); 64 add_fields(); 65 } 65 } 66 rgba& operator=(const rgba& a_from){ 66 rgba& operator=(const rgba& a_from){ 67 parent::operator=(a_from); 67 parent::operator=(a_from); 68 color = a_from.color; 68 color = a_from.color; 69 return *this; 69 return *this; 70 } 70 } 71 }; 71 }; 72 72 73 }} 73 }} 74 74 75 #endif 75 #endif