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_render_action 4 #ifndef tools_sg_render_action 5 #define tools_sg_render_action 5 #define tools_sg_render_action 6 6 7 #include "matrix_action" 7 #include "matrix_action" 8 8 9 #include "../glprims" 9 #include "../glprims" 10 #include "../vdata" 10 #include "../vdata" 11 #include "../colorf" 11 #include "../colorf" 12 12 13 namespace tools { 13 namespace tools { 14 namespace sg { 14 namespace sg { 15 class render_manager; 15 class render_manager; 16 }} 16 }} 17 17 18 18 19 namespace tools { 19 namespace tools { 20 namespace sg { 20 namespace sg { 21 21 22 typedef size_t bufpos; 22 typedef size_t bufpos; 23 23 24 class render_action : public matrix_action { 24 class render_action : public matrix_action { 25 TOOLS_ACTION_NO_COPY(render_action,tools::sg 25 TOOLS_ACTION_NO_COPY(render_action,tools::sg::render_action,matrix_action) 26 public: 26 public: 27 typedef unsigned int gstoid; 27 typedef unsigned int gstoid; 28 public: 28 public: 29 virtual void load_proj_matrix(const mat4f&) 29 virtual void load_proj_matrix(const mat4f&) = 0; 30 virtual void load_model_matrix(const mat4f&) 30 virtual void load_model_matrix(const mat4f&) = 0; 31 public: 31 public: 32 virtual void draw_vertex_array(gl::mode_t,si 32 virtual void draw_vertex_array(gl::mode_t,size_t,const float*) = 0; 33 virtual void draw_vertex_array_xy(gl::mode_t 33 virtual void draw_vertex_array_xy(gl::mode_t,size_t,const float*) = 0; 34 virtual void draw_vertex_color_array(gl::mod 34 virtual void draw_vertex_color_array(gl::mode_t,size_t,const float*,const float*) = 0; 35 virtual void draw_vertex_normal_array(gl::mo 35 virtual void draw_vertex_normal_array(gl::mode_t,size_t,const float*,const float*) = 0; 36 virtual void draw_vertex_color_normal_array( 36 virtual void draw_vertex_color_normal_array(gl::mode_t,size_t,const float*,const float*,const float*) = 0; 37 37 38 //////////////////////////////////////////// 38 ///////////////////////////////////////////////////////////////// 39 /// texture //////////////////////////////// 39 /// texture ///////////////////////////////////////////////////// 40 //////////////////////////////////////////// 40 ///////////////////////////////////////////////////////////////// 41 virtual void draw_vertex_array_texture(gl::m 41 virtual void draw_vertex_array_texture(gl::mode_t,size_t,const float*,gstoid,const float*) = 0; 42 virtual void draw_vertex_normal_array_textur 42 virtual void draw_vertex_normal_array_texture(gl::mode_t,size_t,const float*,const float*,gstoid,const float*) = 0; 43 43 44 //////////////////////////////////////////// 44 ///////////////////////////////////////////////////////////////// 45 /// VBO //////////////////////////////////// 45 /// VBO ///////////////////////////////////////////////////////// 46 //////////////////////////////////////////// 46 ///////////////////////////////////////////////////////////////// 47 virtual void begin_gsto(gstoid) = 0; 47 virtual void begin_gsto(gstoid) = 0; 48 virtual void draw_gsto_v(gl::mode_t,size_t,b 48 virtual void draw_gsto_v(gl::mode_t,size_t,bufpos) = 0; 49 virtual void draw_gsto_vc(gl::mode_t,size_t, 49 virtual void draw_gsto_vc(gl::mode_t,size_t,bufpos,bufpos) = 0; 50 virtual void draw_gsto_vn(gl::mode_t,size_t, 50 virtual void draw_gsto_vn(gl::mode_t,size_t,bufpos,bufpos) = 0; 51 virtual void draw_gsto_vcn(gl::mode_t,size_t 51 virtual void draw_gsto_vcn(gl::mode_t,size_t,bufpos,bufpos,bufpos) = 0; 52 virtual void end_gsto() = 0; 52 virtual void end_gsto() = 0; 53 //////////////////////////////////////////// 53 ///////////////////////////////////////////////////////////////// 54 //////////////////////////////////////////// 54 ///////////////////////////////////////////////////////////////// 55 //////////////////////////////////////////// 55 ///////////////////////////////////////////////////////////////// 56 56 57 virtual void clear_color(float,float,float,f 57 virtual void clear_color(float,float,float,float) = 0; 58 virtual void color4f(float,float,float,float 58 virtual void color4f(float,float,float,float) = 0; 59 virtual void line_width(float) = 0; 59 virtual void line_width(float) = 0; 60 virtual void point_size(float) = 0; 60 virtual void point_size(float) = 0; 61 virtual void set_polygon_offset(bool) = 0; 61 virtual void set_polygon_offset(bool) = 0; 62 virtual void set_winding(winding_type) = 0; 62 virtual void set_winding(winding_type) = 0; 63 virtual void set_shade_model(shade_type) = 0 63 virtual void set_shade_model(shade_type) = 0; 64 virtual void set_cull_face(bool) = 0; 64 virtual void set_cull_face(bool) = 0; 65 virtual void set_point_smooth(bool) = 0; 65 virtual void set_point_smooth(bool) = 0; 66 virtual void set_line_smooth(bool) = 0; 66 virtual void set_line_smooth(bool) = 0; 67 virtual void normal(float,float,float) = 0; 67 virtual void normal(float,float,float) = 0; 68 virtual void set_depth_test(bool) = 0; 68 virtual void set_depth_test(bool) = 0; 69 virtual unsigned int max_lights() = 0; 69 virtual unsigned int max_lights() = 0; 70 virtual void enable_light(unsigned int, 70 virtual void enable_light(unsigned int, 71 float,float,float, << 71 float,float,float, //directrion 72 float,float,float, << 72 float,float,float,float) = 0; //RGBA 73 float,float,float, << 74 virtual void set_lighting(bool) = 0; 73 virtual void set_lighting(bool) = 0; 75 virtual void set_blend(bool) = 0; 74 virtual void set_blend(bool) = 0; 76 virtual void restore_state(unsigned int) = 0 75 virtual void restore_state(unsigned int) = 0; 77 76 78 virtual sg::render_manager& render_manager() 77 virtual sg::render_manager& render_manager() = 0; //sg:: is needed. 79 public: 78 public: 80 render_action(std::ostream& a_out,unsigned i 79 render_action(std::ostream& a_out,unsigned int a_ww,unsigned int a_wh) 81 :parent(a_out,a_ww,a_wh) 80 :parent(a_out,a_ww,a_wh) 82 ,m_do_transparency(false) 81 ,m_do_transparency(false) 83 ,m_have_to_do_transparency(false) 82 ,m_have_to_do_transparency(false) 84 {} 83 {} 85 virtual ~render_action(){} 84 virtual ~render_action(){} 86 public: 85 public: 87 render_action(const render_action& a_from) 86 render_action(const render_action& a_from) 88 :parent(a_from) 87 :parent(a_from) 89 ,m_do_transparency(a_from.m_do_transparency) 88 ,m_do_transparency(a_from.m_do_transparency) 90 ,m_have_to_do_transparency(a_from.m_have_to_ 89 ,m_have_to_do_transparency(a_from.m_have_to_do_transparency) 91 {} 90 {} 92 render_action& operator=(const render_action 91 render_action& operator=(const render_action& a_from){ 93 parent::operator=(a_from); 92 parent::operator=(a_from); 94 m_do_transparency = a_from.m_do_transparen 93 m_do_transparency = a_from.m_do_transparency; 95 m_have_to_do_transparency = a_from.m_have_ 94 m_have_to_do_transparency = a_from.m_have_to_do_transparency; 96 return *this; 95 return *this; 97 } 96 } 98 public: 97 public: 99 void set_do_transparency(bool a_value) {m_do 98 void set_do_transparency(bool a_value) {m_do_transparency = a_value;} 100 bool do_transparency() const {return m_do_tr 99 bool do_transparency() const {return m_do_transparency;} 101 void set_have_to_do_transparency(bool a_valu 100 void set_have_to_do_transparency(bool a_value) {m_have_to_do_transparency = a_value;} 102 bool have_to_do_transparency() const {return 101 bool have_to_do_transparency() const {return m_have_to_do_transparency;} 103 102 104 bool have_to_render() { 103 bool have_to_render() { 105 bool transparent = state().m_color.a()!=1. << 104 bool transparent = state().m_color.a()!=1?true:false; 106 if(transparent && state().m_GL_BLEND) { << 105 if(transparent) { 107 if(m_do_transparency) return true; 106 if(m_do_transparency) return true; 108 m_have_to_do_transparency = true; 107 m_have_to_do_transparency = true; 109 return false; 108 return false; 110 } 109 } 111 if(m_do_transparency) return false; 110 if(m_do_transparency) return false; 112 return true; 111 return true; 113 } 112 } 114 113 115 void load_matrices_to_identity() { 114 void load_matrices_to_identity() { 116 load_proj_matrix(m_identity); 115 load_proj_matrix(m_identity); 117 load_model_matrix(m_identity); 116 load_model_matrix(m_identity); 118 } 117 } 119 void load_matrices_from_state() { 118 void load_matrices_from_state() { 120 const sg::state& _state = state(); 119 const sg::state& _state = state(); 121 load_proj_matrix(_state.m_proj); 120 load_proj_matrix(_state.m_proj); 122 load_model_matrix(_state.m_model); 121 load_model_matrix(_state.m_model); 123 } 122 } 124 123 125 void clear_color(const colorf& a_color){ 124 void clear_color(const colorf& a_color){ 126 clear_color(a_color[0],a_color[1],a_color[ 125 clear_color(a_color[0],a_color[1],a_color[2],a_color[3]); 127 } 126 } 128 void color4f(const colorf& a_color){ 127 void color4f(const colorf& a_color){ 129 color4f(a_color[0],a_color[1],a_color[2],a 128 color4f(a_color[0],a_color[1],a_color[2],a_color[3]); 130 } 129 } 131 130 132 void enable_light(unsigned int a_light, 131 void enable_light(unsigned int a_light, 133 const vec3f& a_dir, 132 const vec3f& a_dir, 134 const colorf& a_col,const << 133 const colorf& a_col) { 135 enable_light(a_light, 134 enable_light(a_light, 136 a_dir[0],a_dir[1],a_dir[2], 135 a_dir[0],a_dir[1],a_dir[2], 137 a_col[0],a_col[1],a_col[2],a_ << 136 a_col[0],a_col[1],a_col[2],1); 138 a_ambient[0],a_ambient[1],a_a << 139 } 137 } 140 138 141 void draw_vertex_array(gl::mode_t a_mode,con 139 void draw_vertex_array(gl::mode_t a_mode,const std::vector<float>& a_xyzs){ 142 const float* _xyzs = vec_data<float>(a_xyz 140 const float* _xyzs = vec_data<float>(a_xyzs); 143 draw_vertex_array(a_mode,a_xyzs.size(),_xy 141 draw_vertex_array(a_mode,a_xyzs.size(),_xyzs); 144 } 142 } 145 143 146 void draw_vertex_array_xy(gl::mode_t a_mode, 144 void draw_vertex_array_xy(gl::mode_t a_mode,const std::vector<float>& a_xys){ 147 const float* _xys = vec_data<float>(a_xys) 145 const float* _xys = vec_data<float>(a_xys); 148 draw_vertex_array_xy(a_mode,a_xys.size(),_ 146 draw_vertex_array_xy(a_mode,a_xys.size(),_xys); 149 } 147 } 150 148 151 void draw_vertex_color_array(gl::mode_t a_mo 149 void draw_vertex_color_array(gl::mode_t a_mode, 152 const std::vect 150 const std::vector<float>& a_xyzs, 153 const std::vect 151 const std::vector<float>& a_rgbas){ 154 const float* _xyzs = vec_data<float>(a_xyz 152 const float* _xyzs = vec_data<float>(a_xyzs); 155 const float* _rgbas = vec_data<float>(a_rg 153 const float* _rgbas = vec_data<float>(a_rgbas); 156 draw_vertex_color_array(a_mode,a_xyzs.size 154 draw_vertex_color_array(a_mode,a_xyzs.size(),_xyzs,_rgbas); 157 } 155 } 158 156 159 void draw_vertex_normal_array(gl::mode_t a_m 157 void draw_vertex_normal_array(gl::mode_t a_mode, 160 const std::vec 158 const std::vector<float>& a_xyzs, 161 const std::vec 159 const std::vector<float>& a_nms){ 162 const float* _xyzs = vec_data<float>(a_xyz 160 const float* _xyzs = vec_data<float>(a_xyzs); 163 const float* _nms = vec_data<float>(a_nms) 161 const float* _nms = vec_data<float>(a_nms); 164 draw_vertex_normal_array(a_mode,a_xyzs.siz 162 draw_vertex_normal_array(a_mode,a_xyzs.size(),_xyzs,_nms); 165 } 163 } 166 164 167 void draw_vertex_color_normal_array(gl::mode 165 void draw_vertex_color_normal_array(gl::mode_t a_mode, 168 const st 166 const std::vector<float>& a_xyzs, 169 const st 167 const std::vector<float>& a_rgbas, 170 const st 168 const std::vector<float>& a_nms){ 171 const float* _xyzs = vec_data<float>(a_xyz 169 const float* _xyzs = vec_data<float>(a_xyzs); 172 const float* _rgbas = vec_data<float>(a_rg 170 const float* _rgbas = vec_data<float>(a_rgbas); 173 const float* _nms = vec_data<float>(a_nms) 171 const float* _nms = vec_data<float>(a_nms); 174 draw_vertex_color_normal_array(a_mode,a_xy 172 draw_vertex_color_normal_array(a_mode,a_xyzs.size(),_xyzs,_rgbas,_nms); 175 } 173 } 176 174 177 void normal(const vec3f& a_vec) {normal(a_ve 175 void normal(const vec3f& a_vec) {normal(a_vec[0],a_vec[1],a_vec[2]);} 178 176 179 public: 177 public: 180 // for sphere::visit template. 178 // for sphere::visit template. 181 bool add_triangles_normal(size_t a_floatn,co 179 bool add_triangles_normal(size_t a_floatn,const float* a_xyzs,const float* a_nms) { 182 draw_vertex_normal_array(gl::triangles(),a 180 draw_vertex_normal_array(gl::triangles(),a_floatn,a_xyzs,a_nms); 183 return true; 181 return true; 184 } 182 } 185 bool add_triangle_fan_normal(size_t a_floatn 183 bool add_triangle_fan_normal(size_t a_floatn,const float* a_xyzs,const float* a_nms) { 186 draw_vertex_normal_array(gl::triangle_fan( 184 draw_vertex_normal_array(gl::triangle_fan(),a_floatn,a_xyzs,a_nms); 187 return true; 185 return true; 188 } 186 } 189 bool add_triangle_fan_normal_rgba(size_t a_f 187 bool add_triangle_fan_normal_rgba(size_t a_floatn,const float* a_xyzs,float* a_nms,const float* a_rgbas) { 190 draw_vertex_color_normal_array(gl::triangl 188 draw_vertex_color_normal_array(gl::triangle_fan(),a_floatn,a_xyzs,a_rgbas,a_nms); 191 return true; 189 return true; 192 } 190 } 193 bool add_triangle_strip_normal(size_t a_floa 191 bool add_triangle_strip_normal(size_t a_floatn,const float* a_xyzs,const float* a_nms) { 194 draw_vertex_normal_array(gl::triangle_stri 192 draw_vertex_normal_array(gl::triangle_strip(),a_floatn,a_xyzs,a_nms); 195 return true; 193 return true; 196 } 194 } 197 bool add_triangle_strip_normal_rgba(size_t a 195 bool add_triangle_strip_normal_rgba(size_t a_floatn,const float* a_xyzs,const float* a_nms,const float* a_rgbas) { 198 draw_vertex_color_normal_array(gl::triangl 196 draw_vertex_color_normal_array(gl::triangle_strip(),a_floatn,a_xyzs,a_rgbas,a_nms); 199 return true; 197 return true; 200 } 198 } 201 bool add_lines(size_t a_floatn,const float* 199 bool add_lines(size_t a_floatn,const float* a_xyzs) { 202 draw_vertex_array(gl::lines(),a_floatn,a_x 200 draw_vertex_array(gl::lines(),a_floatn,a_xyzs); 203 return true; 201 return true; 204 } 202 } 205 bool add_line_loop(size_t a_floatn,const flo 203 bool add_line_loop(size_t a_floatn,const float* a_xyzs) { 206 draw_vertex_array(gl::line_loop(),a_floatn 204 draw_vertex_array(gl::line_loop(),a_floatn,a_xyzs); 207 return true; 205 return true; 208 } 206 } 209 bool add_line_strip(size_t a_floatn,const fl 207 bool add_line_strip(size_t a_floatn,const float* a_xyzs) { 210 draw_vertex_array(gl::line_strip(),a_float 208 draw_vertex_array(gl::line_strip(),a_floatn,a_xyzs); 211 return true; 209 return true; 212 } 210 } 213 bool add_points(size_t a_floatn,const float* 211 bool add_points(size_t a_floatn,const float* a_xyzs) { 214 draw_vertex_array(gl::points(),a_floatn,a_ 212 draw_vertex_array(gl::points(),a_floatn,a_xyzs); 215 return true; 213 return true; 216 } 214 } 217 215 218 /* 216 /* 219 bool add_triangles_texture(size_t a_floatn,c 217 bool add_triangles_texture(size_t a_floatn,const float* a_xyzs,gstoid a_tex,const float* a_texs){ 220 draw_vertex_array_texture(gl::triangles(), 218 draw_vertex_array_texture(gl::triangles(),a_floatn,a_xyzs,a_tex,a_texs); 221 return true; 219 return true; 222 } 220 } 223 bool add_triangle_fan_texture(size_t a_float 221 bool add_triangle_fan_texture(size_t a_floatn,const float* a_xyzs,gstoid a_tex,const float* a_texs){ 224 draw_vertex_array_texture(gl::triangle_fan 222 draw_vertex_array_texture(gl::triangle_fan(),a_floatn,a_xyzs,a_tex,a_texs); 225 return true; 223 return true; 226 } 224 } 227 bool add_triangle_strip_texture(size_t a_flo 225 bool add_triangle_strip_texture(size_t a_floatn,const float* a_xyzs,gstoid a_tex,const float* a_texs){ 228 draw_vertex_array_texture(gl::triangle_str 226 draw_vertex_array_texture(gl::triangle_strip(),a_floatn,a_xyzs,a_tex,a_texs); 229 return true; 227 return true; 230 } 228 } 231 */ 229 */ 232 bool add_triangle_fan_texture_normal(size_t 230 bool add_triangle_fan_texture_normal(size_t a_floatn,const float* a_xyzs,const float* a_nms,gstoid a_tex,const float* a_texs){ 233 draw_vertex_normal_array_texture(gl::trian 231 draw_vertex_normal_array_texture(gl::triangle_fan(),a_floatn,a_xyzs,a_nms,a_tex,a_texs); 234 return true; 232 return true; 235 } 233 } 236 bool add_triangle_strip_texture_normal(size_ 234 bool add_triangle_strip_texture_normal(size_t a_floatn,const float* a_xyzs,const float* a_nms,gstoid a_tex,const float* a_texs){ 237 draw_vertex_normal_array_texture(gl::trian 235 draw_vertex_normal_array_texture(gl::triangle_strip(),a_floatn,a_xyzs,a_nms,a_tex,a_texs); 238 return true; 236 return true; 239 } 237 } 240 238 241 bool add_line_loop(const std::vector<float>& 239 bool add_line_loop(const std::vector<float>& a_xyzs){ 242 const float* _xyzs = vec_data<float>(a_xyz 240 const float* _xyzs = vec_data<float>(a_xyzs); 243 draw_vertex_array(gl::line_loop(),a_xyzs.s 241 draw_vertex_array(gl::line_loop(),a_xyzs.size(),_xyzs); 244 return true; 242 return true; 245 } 243 } 246 244 247 bool add_line_strip(const std::vector<float> 245 bool add_line_strip(const std::vector<float>& a_xyzs){ 248 const float* _xyzs = vec_data<float>(a_xyz 246 const float* _xyzs = vec_data<float>(a_xyzs); 249 draw_vertex_array(gl::line_strip(),a_xyzs. 247 draw_vertex_array(gl::line_strip(),a_xyzs.size(),_xyzs); 250 return true; 248 return true; 251 } 249 } 252 250 253 /* 251 /* 254 //////////////////////////////////////////// 252 ///////////////////////////////////////////////////////// 255 /// for sg::markers and gstos : //////////// 253 /// for sg::markers and gstos : ///////////////////////// 256 //////////////////////////////////////////// 254 ///////////////////////////////////////////////////////// 257 bool add_lines(const std::vector<float>& a_x 255 bool add_lines(const std::vector<float>& a_xyzs){ 258 const float* _xyzs = vec_data<float>(a_xyz 256 const float* _xyzs = vec_data<float>(a_xyzs); 259 draw_vertex_array(gl::lines(),a_xyzs.size( 257 draw_vertex_array(gl::lines(),a_xyzs.size(),_xyzs); 260 return true; 258 return true; 261 } 259 } 262 bool add_triangles_normal(const std::vector< 260 bool add_triangles_normal(const std::vector<float>& a_xyzs,const std::vector<float>& a_nms){ 263 if(a_xyzs.size()!=a_nms.size()) return fal 261 if(a_xyzs.size()!=a_nms.size()) return false; 264 const float* _xyzs = vec_data<float>(a_xyz 262 const float* _xyzs = vec_data<float>(a_xyzs); 265 const float* _nms = vec_data<float>(a_nms) 263 const float* _nms = vec_data<float>(a_nms); 266 draw_vertex_normal_array(gl::triangles(),a 264 draw_vertex_normal_array(gl::triangles(),a_xyzs.size(),_xyzs,_nms); 267 return true; 265 return true; 268 } 266 } 269 bool project_point(const mat4f& a_model_matr 267 bool project_point(const mat4f& a_model_matrix,const mat4f& a_projection_matrix, 270 float& a_x,float& a_y,flo 268 float& a_x,float& a_y,float& a_z,float& a_w) { 271 //return project_point(a_x,a_y,a_z,a_w); 269 //return project_point(a_x,a_y,a_z,a_w); 272 a_w = 1; 270 a_w = 1; 273 a_model_matrix.mul_4f(a_x,a_y,a_z,a_w); 271 a_model_matrix.mul_4f(a_x,a_y,a_z,a_w); 274 a_projection_matrix.mul_4f(a_x,a_y,a_z,a_w 272 a_projection_matrix.mul_4f(a_x,a_y,a_z,a_w); 275 if(a_w==0.0F) return false; 273 if(a_w==0.0F) return false; 276 a_x /= a_w; 274 a_x /= a_w; 277 a_y /= a_w; 275 a_y /= a_w; 278 a_z /= a_w; 276 a_z /= a_w; 279 return true; 277 return true; 280 } 278 } 281 //////////////////////////////////////////// 279 ///////////////////////////////////////////////////////// 282 //////////////////////////////////////////// 280 ///////////////////////////////////////////////////////// 283 //////////////////////////////////////////// 281 ///////////////////////////////////////////////////////// 284 */ 282 */ 285 283 286 bool add_triangle_strip_as_triangles(size_t 284 bool add_triangle_strip_as_triangles(size_t a_floatn,const float* a_xyzs,const float* a_nms) { //used in sg::sphere, icosahedron_sphere. 287 // It appears that if glShadeModel is GL_F 285 // It appears that if glShadeModel is GL_FLAT, triangle strip does not look the same in "gsto mode" where it is rendered as triangles. 288 // We use this function for immediate rend 286 // We use this function for immediate rendering, in case we want the same rendering as "gsto mode". 289 287 290 size_t num = a_floatn/3; 288 size_t num = a_floatn/3; 291 if(num<3) return false; 289 if(num<3) return false; 292 size_t nxyzs = (num-2)*3*3; 290 size_t nxyzs = (num-2)*3*3; 293 291 294 std::vector<float> m_xyzs(nxyzs); 292 std::vector<float> m_xyzs(nxyzs); 295 std::vector<float> m_nms(nxyzs); 293 std::vector<float> m_nms(nxyzs); 296 294 297 {float* pxyzs = vec_data<float>(m_xyzs); 295 {float* pxyzs = vec_data<float>(m_xyzs); 298 float* pnms = vec_data<float>(m_nms); 296 float* pnms = vec_data<float>(m_nms); 299 gl::triangle_strip_to_triangles_nms(num,a_ 297 gl::triangle_strip_to_triangles_nms(num,a_xyzs,a_nms,pxyzs,pnms);} 300 298 301 return add_triangles_normal(nxyzs,vec_data 299 return add_triangles_normal(nxyzs,vec_data<float>(m_xyzs),vec_data<float>(m_nms)); 302 } 300 } 303 301 304 void dump_vertex_array_xy(std::ostream& a_ou 302 void dump_vertex_array_xy(std::ostream& a_out,gl::mode_t /*a_mode*/,size_t a_floatn,const float* a_xys) { 305 size_t num = a_floatn/2; 303 size_t num = a_floatn/2; 306 if(!num) return; 304 if(!num) return; 307 a_out << "dump_vertex_array_xy : begin : " 305 a_out << "dump_vertex_array_xy : begin : " << num << std::endl; 308 for(size_t index=0;index<num;index++) { 306 for(size_t index=0;index<num;index++) { 309 a_out << "xy : " << index 307 a_out << "xy : " << index 310 << " " << a_xys[2*index] 308 << " " << a_xys[2*index] 311 << " " << a_xys[2*index+1] 309 << " " << a_xys[2*index+1] 312 << std::endl; 310 << std::endl; 313 } 311 } 314 a_out << "dump_vertex_array_xy : end." << 312 a_out << "dump_vertex_array_xy : end." << std::endl; 315 } 313 } 316 protected: 314 protected: 317 bool m_do_transparency; 315 bool m_do_transparency; 318 bool m_have_to_do_transparency; 316 bool m_have_to_do_transparency; 319 }; 317 }; 320 318 321 }} 319 }} 322 320 323 #endif 321 #endif