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)132 TYPEDEF_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()135 inline uint32_t xr_ogf_v4::texture_l() const { return m_shader_id; }
shader_l()136 inline uint32_t xr_ogf_v4::shader_l() const { return m_shader_id; }
xform()137 inline 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()140 inline uint32_t xr_ogf_v4::ext_vb_index() const { return m_ext_vb_index; }
ext_vb_offset()141 inline uint32_t xr_ogf_v4::ext_vb_offset() const { return m_ext_vb_offset; }
ext_vb_size()142 inline uint32_t xr_ogf_v4::ext_vb_size() const { return m_ext_vb_size; }
ext_ib_index()143 inline uint32_t xr_ogf_v4::ext_ib_index() const { return m_ext_ib_index; }
ext_ib_offset()144 inline uint32_t xr_ogf_v4::ext_ib_offset() const { return m_ext_ib_offset; }
ext_ib_size()145 inline uint32_t xr_ogf_v4::ext_ib_size() const { return m_ext_ib_size; }
ext_swib_index()146 inline 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