1/*
2* Copyright 2006 Sony Computer Entertainment Inc.
3*
4* Licensed under the MIT Open Source License, for details please see license.txt or the website
5* http://www.opensource.org/licenses/mit-license.php
6*
7*/
8
9#ifndef __domFx_surface_init_common_h__
10#define __domFx_surface_init_common_h__
11
12#include <dae/daeDocument.h>
13#include <dom/domTypes.h>
14#include <dom/domElements.h>
15
16#include <dom/domFx_surface_init_cube_common.h>
17#include <dom/domFx_surface_init_volume_common.h>
18#include <dom/domFx_surface_init_planar_common.h>
19#include <dom/domFx_surface_init_from_common.h>
20class DAE;
21
22/**
23 * The common set of initalization options for surfaces.  Choose which is
24 * appropriate for your surface based on type and other characteristics. described
25 * by the annotation docs on the child elements.
26 */
27class domFx_surface_init_common : public daeElement
28{
29public:
30	virtual COLLADA_TYPE::TypeEnum getElementType() const { return COLLADA_TYPE::FX_SURFACE_INIT_COMMON; }
31	static daeInt ID() { return 168; }
32	virtual daeInt typeID() const { return ID(); }
33public:
34	class domInit_as_null;
35
36	typedef daeSmartRef<domInit_as_null> domInit_as_nullRef;
37	typedef daeTArray<domInit_as_nullRef> domInit_as_null_Array;
38
39/**
40 * This surface is intended to be initialized later externally by a "setparam"
41 * element.  If it is used before being initialized there is profile and platform
42 * specific behavior.  Most elements on the surface element containing this
43 * will be ignored including mip_levels, mipmap_generate, size, viewport_ratio,
44 * and format.
45 */
46	class domInit_as_null : public daeElement
47	{
48	public:
49		virtual COLLADA_TYPE::TypeEnum getElementType() const { return COLLADA_TYPE::INIT_AS_NULL; }
50		static daeInt ID() { return 169; }
51		virtual daeInt typeID() const { return ID(); }
52
53	protected:
54		/**
55		 * Constructor
56		 */
57		domInit_as_null(DAE& dae) : daeElement(dae) {}
58		/**
59		 * Destructor
60		 */
61		virtual ~domInit_as_null() {}
62		/**
63		 * Overloaded assignment operator
64		 */
65		virtual domInit_as_null &operator=( const domInit_as_null &cpy ) { (void)cpy; return *this; }
66
67	public: // STATIC METHODS
68		/**
69		 * Creates an instance of this class and returns a daeElementRef referencing it.
70		 * @return a daeElementRef referencing an instance of this object.
71		 */
72		static DLLSPEC daeElementRef create(DAE& dae);
73		/**
74		 * Creates a daeMetaElement object that describes this element in the meta object reflection framework.
75		 * If a daeMetaElement already exists it will return that instead of creating a new one.
76		 * @return A daeMetaElement describing this COLLADA element.
77		 */
78		static DLLSPEC daeMetaElement* registerElement(DAE& dae);
79	};
80
81	class domInit_as_target;
82
83	typedef daeSmartRef<domInit_as_target> domInit_as_targetRef;
84	typedef daeTArray<domInit_as_targetRef> domInit_as_target_Array;
85
86/**
87 * Init as a target for depth, stencil, or color.  It does not need image
88 * data. Surface should not have mipmap_generate when using this.
89 */
90	class domInit_as_target : public daeElement
91	{
92	public:
93		virtual COLLADA_TYPE::TypeEnum getElementType() const { return COLLADA_TYPE::INIT_AS_TARGET; }
94		static daeInt ID() { return 170; }
95		virtual daeInt typeID() const { return ID(); }
96
97	protected:
98		/**
99		 * Constructor
100		 */
101		domInit_as_target(DAE& dae) : daeElement(dae) {}
102		/**
103		 * Destructor
104		 */
105		virtual ~domInit_as_target() {}
106		/**
107		 * Overloaded assignment operator
108		 */
109		virtual domInit_as_target &operator=( const domInit_as_target &cpy ) { (void)cpy; return *this; }
110
111	public: // STATIC METHODS
112		/**
113		 * Creates an instance of this class and returns a daeElementRef referencing it.
114		 * @return a daeElementRef referencing an instance of this object.
115		 */
116		static DLLSPEC daeElementRef create(DAE& dae);
117		/**
118		 * Creates a daeMetaElement object that describes this element in the meta object reflection framework.
119		 * If a daeMetaElement already exists it will return that instead of creating a new one.
120		 * @return A daeMetaElement describing this COLLADA element.
121		 */
122		static DLLSPEC daeMetaElement* registerElement(DAE& dae);
123	};
124
125
126
127protected:  // Elements
128/**
129 * This surface is intended to be initialized later externally by a "setparam"
130 * element.  If it is used before being initialized there is profile and platform
131 * specific behavior.  Most elements on the surface element containing this
132 * will be ignored including mip_levels, mipmap_generate, size, viewport_ratio,
133 * and format. @see domInit_as_null
134 */
135	domInit_as_nullRef elemInit_as_null;
136/**
137 * Init as a target for depth, stencil, or color.  It does not need image
138 * data. Surface should not have mipmap_generate when using this. @see domInit_as_target
139 */
140	domInit_as_targetRef elemInit_as_target;
141/**
142 * Init a CUBE from a compound image such as DDS @see domInit_cube
143 */
144	domFx_surface_init_cube_commonRef elemInit_cube;
145/**
146 * Init a 3D from a compound image such as DDS @see domInit_volume
147 */
148	domFx_surface_init_volume_commonRef elemInit_volume;
149/**
150 * Init a 1D,2D,RECT,DEPTH from a compound image such as DDS @see domInit_planar
151 */
152	domFx_surface_init_planar_commonRef elemInit_planar;
153/**
154 * Initialize the surface one sub-surface at a time by specifying combinations
155 * of mip, face, and slice which make sense for a particular surface type.
156 * Each sub-surface is initialized by a common 2D image, not a complex compound
157 * image such as DDS. If not all subsurfaces are initialized, it is invalid
158 * and will result in profile and platform specific behavior unless mipmap_generate
159 * is responsible for initializing the remainder of the sub-surfaces @see
160 * domInit_from
161 */
162	domFx_surface_init_from_common_Array elemInit_from_array;
163	/**
164	 * Used to preserve order in elements that do not specify strict sequencing of sub-elements.
165	 */
166	daeElementRefArray _contents;
167	/**
168	 * Used to preserve order in elements that have a complex content model.
169	 */
170	daeUIntArray       _contentsOrder;
171
172	/**
173	 * Used to store information needed for some content model objects.
174	 */
175	daeTArray< daeCharArray * > _CMData;
176
177
178public:	//Accessors and Mutators
179	/**
180	 * Gets the init_as_null element.
181	 * @return a daeSmartRef to the init_as_null element.
182	 */
183	const domInit_as_nullRef getInit_as_null() const { return elemInit_as_null; }
184	/**
185	 * Gets the init_as_target element.
186	 * @return a daeSmartRef to the init_as_target element.
187	 */
188	const domInit_as_targetRef getInit_as_target() const { return elemInit_as_target; }
189	/**
190	 * Gets the init_cube element.
191	 * @return a daeSmartRef to the init_cube element.
192	 */
193	const domFx_surface_init_cube_commonRef getInit_cube() const { return elemInit_cube; }
194	/**
195	 * Gets the init_volume element.
196	 * @return a daeSmartRef to the init_volume element.
197	 */
198	const domFx_surface_init_volume_commonRef getInit_volume() const { return elemInit_volume; }
199	/**
200	 * Gets the init_planar element.
201	 * @return a daeSmartRef to the init_planar element.
202	 */
203	const domFx_surface_init_planar_commonRef getInit_planar() const { return elemInit_planar; }
204	/**
205	 * Gets the init_from element array.
206	 * @return Returns a reference to the array of init_from elements.
207	 */
208	domFx_surface_init_from_common_Array &getInit_from_array() { return elemInit_from_array; }
209	/**
210	 * Gets the init_from element array.
211	 * @return Returns a constant reference to the array of init_from elements.
212	 */
213	const domFx_surface_init_from_common_Array &getInit_from_array() const { return elemInit_from_array; }
214	/**
215	 * Gets the _contents array.
216	 * @return Returns a reference to the _contents element array.
217	 */
218	daeElementRefArray &getContents() { return _contents; }
219	/**
220	 * Gets the _contents array.
221	 * @return Returns a constant reference to the _contents element array.
222	 */
223	const daeElementRefArray &getContents() const { return _contents; }
224
225protected:
226	/**
227	 * Constructor
228	 */
229	domFx_surface_init_common(DAE& dae) : daeElement(dae), elemInit_as_null(), elemInit_as_target(), elemInit_cube(), elemInit_volume(), elemInit_planar(), elemInit_from_array() {}
230	/**
231	 * Destructor
232	 */
233	virtual ~domFx_surface_init_common() { daeElement::deleteCMDataArray(_CMData); }
234	/**
235	 * Overloaded assignment operator
236	 */
237	virtual domFx_surface_init_common &operator=( const domFx_surface_init_common &cpy ) { (void)cpy; return *this; }
238
239public: // STATIC METHODS
240	/**
241	 * Creates an instance of this class and returns a daeElementRef referencing it.
242	 * @return a daeElementRef referencing an instance of this object.
243	 */
244	static DLLSPEC daeElementRef create(DAE& dae);
245	/**
246	 * Creates a daeMetaElement object that describes this element in the meta object reflection framework.
247	 * If a daeMetaElement already exists it will return that instead of creating a new one.
248	 * @return A daeMetaElement describing this COLLADA element.
249	 */
250	static DLLSPEC daeMetaElement* registerElement(DAE& dae);
251};
252
253
254#endif
255