1 #ifndef __GNUC__ 2 #pragma once 3 #endif 4 #ifndef __XR_OGF_V4_H__ 5 #define __XR_OGF_V4_H__ 6 7 #include <vector> 8 #include "xr_ogf.h" 9 10 namespace xray_re { 11 12 class xr_ogf_v4: public xr_ogf { 13 public: 14 xr_ogf_v4(); 15 virtual ~xr_ogf_v4(); 16 17 virtual void clear(); 18 virtual void load_ogf(xr_reader& r); 19 virtual bool load_omf(const char* path); 20 21 void set_ext_geom(const xr_vbuf_vec& ext_vbufs, 22 const xr_ibuf_vec& ext_ibufs, 23 const xr_swibuf_vec& ext_swibufs); 24 25 virtual bool hierarchical() const; 26 virtual bool skeletal() const; 27 virtual bool animated() const; 28 virtual bool progressive() const; 29 virtual bool versioned() const; 30 31 virtual const xr_ibuf& ib() const; 32 virtual uint32_t texture_l() const; 33 virtual uint32_t shader_l() const; 34 const fmatrix& xform() const; 35 // const ogf4_lod_face* lod_faces() const; 36 37 uint32_t ext_vb_index() const; 38 uint32_t ext_vb_offset() const; 39 uint32_t ext_vb_size() const; 40 41 uint32_t ext_ib_index() const; 42 uint32_t ext_ib_offset() const; 43 uint32_t ext_ib_size() const; 44 45 uint32_t ext_swib_index() const; 46 47 public: 48 struct bone_io; 49 struct partition_io; 50 struct motion_io; 51 struct bone_motion_io; 52 53 protected: 54 void load_omf(xr_reader& r); 55 void load_header(xr_reader& r); 56 void load_texture(xr_reader& r); 57 void load_vertices(xr_reader& r); 58 void load_p_map(xr_reader& r); 59 void load_indices(xr_reader& r); 60 void load_swidata(xr_reader& r); 61 void load_vcontainer(xr_reader& r); 62 void load_icontainer(xr_reader& r); 63 void load_children(xr_reader& r); 64 void load_children_l(xr_reader& r); 65 void load_loddef2(xr_reader& r); 66 void load_treedef2(xr_reader& r); 67 void load_s_bone_names(xr_reader& r); 68 void load_s_smparams(xr_reader& r); 69 void load_s_motions(xr_reader& r); 70 void load_s_ikdata(xr_reader& r); 71 void load_s_userdata(xr_reader& r); 72 void load_s_desc(xr_reader& r); 73 void load_s_motion_refs_0(xr_reader& r); 74 void load_s_motion_refs_1(xr_reader& r); 75 void load_swicontainer(xr_reader& r); 76 void load_gcontainer(xr_reader& r); 77 void load_fastpath(xr_reader& r); 78 void load_s_lods(xr_reader& r); 79 80 private: 81 void load_render_visual(xr_reader& r); 82 void load_visual(xr_reader& r); 83 void load_hierrarhy_visual(xr_reader& r); 84 void load_progressive(xr_reader& r); 85 void load_kinematics_animated(xr_reader& r); 86 void load_kinematics(xr_reader& r); 87 void load_skeletonx(xr_reader& r); 88 void load_skeletonx_pm(xr_reader& r); 89 void load_skeletonx_st(xr_reader& r); 90 void load_lod(xr_reader& r); 91 void load_tree_visual(xr_reader& r); 92 void load_tree_visual_st(xr_reader& r); 93 void load_particle_effect(xr_reader& r); 94 void load_particle_group(xr_reader& r); 95 void load_tree_visual_pm(xr_reader& r); 96 97 void setup_ib0(); 98 99 private: 100 uint32_t m_shader_id; // OGF_HEADER 101 102 xr_ibuf m_ib0; // proxy ib according to swi0 103 xr_swibuf m_swib; // OGF_SWIDATA or OGF_SWICONTAINER 104 105 //ogf4_lod_face m_lod_faces[8]; // OGF_LODDEF2 106 107 ogf4_5color m_c_scale; // OGF_TREEDEF2 108 ogf4_5color m_c_bias; 109 fmatrix m_tree_xform; 110 111 int m_fixme; // OGF_P_MAP chunk 112 113 std::string m_source; // OGF_S_DESC fields which do not fit in xr_object 114 std::string m_export_tool; 115 uint32_t m_export_time; 116 117 xr_ogf* m_fast; // OGF_FASTPATH chunk; 118 119 std::string m_s_lods; // Clear Sky version of OGF_S_LODS 120 121 uint32_t m_ext_vb_index; // OGF_VCONTAINER 122 uint32_t m_ext_vb_offset; 123 uint32_t m_ext_vb_size; 124 125 uint32_t m_ext_ib_index; // OGF_ICONTAINER 126 uint32_t m_ext_ib_offset; 127 uint32_t m_ext_ib_size; 128 129 uint32_t m_ext_swib_index; // OGF_SWICONTAINER 130 }; 131 TYPEDEF_STD_VECTOR_PTR(xr_ogf_v4)132TYPEDEF_STD_VECTOR_PTR(xr_ogf_v4) 133 134 inline const xr_ibuf& xr_ogf_v4::ib() const { return progressive() ? m_ib0 : m_ib; } texture_l()135inline uint32_t xr_ogf_v4::texture_l() const { return m_shader_id; } shader_l()136inline uint32_t xr_ogf_v4::shader_l() const { return m_shader_id; } xform()137inline const fmatrix& xr_ogf_v4::xform() const { return m_tree_xform; } 138 //inline const ogf4_lod_face* xr_ogf_v4::lod_faces() const { return m_lod_faces; } 139 ext_vb_index()140inline uint32_t xr_ogf_v4::ext_vb_index() const { return m_ext_vb_index; } ext_vb_offset()141inline uint32_t xr_ogf_v4::ext_vb_offset() const { return m_ext_vb_offset; } ext_vb_size()142inline uint32_t xr_ogf_v4::ext_vb_size() const { return m_ext_vb_size; } ext_ib_index()143inline uint32_t xr_ogf_v4::ext_ib_index() const { return m_ext_ib_index; } ext_ib_offset()144inline uint32_t xr_ogf_v4::ext_ib_offset() const { return m_ext_ib_offset; } ext_ib_size()145inline uint32_t xr_ogf_v4::ext_ib_size() const { return m_ext_ib_size; } ext_swib_index()146inline uint32_t xr_ogf_v4::ext_swib_index() const { return m_ext_swib_index; } 147 148 } // end of namespace xray_re 149 150 #endif 151