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 #include <dae.h>
10 #include <dae/daeDom.h>
11 #include <dom/domLight.h>
12 #include <dae/daeMetaCMPolicy.h>
13 #include <dae/daeMetaSequence.h>
14 #include <dae/daeMetaChoice.h>
15 #include <dae/daeMetaGroup.h>
16 #include <dae/daeMetaAny.h>
17 #include <dae/daeMetaElementAttribute.h>
18
19 daeElementRef
create(DAE & dae)20 domLight::create(DAE& dae)
21 {
22 domLightRef ref = new domLight(dae);
23 return ref;
24 }
25
26
27 daeMetaElement *
registerElement(DAE & dae)28 domLight::registerElement(DAE& dae)
29 {
30 daeMetaElement* meta = dae.getMeta(ID());
31 if ( meta != NULL ) return meta;
32
33 meta = new daeMetaElement(dae);
34 dae.setMeta(ID(), *meta);
35 meta->setName( "light" );
36 meta->registerClass(domLight::create);
37
38 daeMetaCMPolicy *cm = NULL;
39 daeMetaElementAttribute *mea = NULL;
40 cm = new daeMetaSequence( meta, cm, 0, 1, 1 );
41
42 mea = new daeMetaElementAttribute( meta, cm, 0, 0, 1 );
43 mea->setName( "asset" );
44 mea->setOffset( daeOffsetOf(domLight,elemAsset) );
45 mea->setElementType( domAsset::registerElement(dae) );
46 cm->appendChild( mea );
47
48 mea = new daeMetaElementAttribute( meta, cm, 1, 1, 1 );
49 mea->setName( "technique_common" );
50 mea->setOffset( daeOffsetOf(domLight,elemTechnique_common) );
51 mea->setElementType( domLight::domTechnique_common::registerElement(dae) );
52 cm->appendChild( mea );
53
54 mea = new daeMetaElementArrayAttribute( meta, cm, 2, 0, -1 );
55 mea->setName( "technique" );
56 mea->setOffset( daeOffsetOf(domLight,elemTechnique_array) );
57 mea->setElementType( domTechnique::registerElement(dae) );
58 cm->appendChild( mea );
59
60 mea = new daeMetaElementArrayAttribute( meta, cm, 3, 0, -1 );
61 mea->setName( "extra" );
62 mea->setOffset( daeOffsetOf(domLight,elemExtra_array) );
63 mea->setElementType( domExtra::registerElement(dae) );
64 cm->appendChild( mea );
65
66 cm->setMaxOrdinal( 3 );
67 meta->setCMRoot( cm );
68
69 // Add attribute: id
70 {
71 daeMetaAttribute *ma = new daeMetaAttribute;
72 ma->setName( "id" );
73 ma->setType( dae.getAtomicTypes().get("xsID"));
74 ma->setOffset( daeOffsetOf( domLight , attrId ));
75 ma->setContainer( meta );
76
77 meta->appendAttribute(ma);
78 }
79
80 // Add attribute: name
81 {
82 daeMetaAttribute *ma = new daeMetaAttribute;
83 ma->setName( "name" );
84 ma->setType( dae.getAtomicTypes().get("xsNCName"));
85 ma->setOffset( daeOffsetOf( domLight , attrName ));
86 ma->setContainer( meta );
87
88 meta->appendAttribute(ma);
89 }
90
91 meta->setElementSize(sizeof(domLight));
92 meta->validate();
93
94 return meta;
95 }
96
97 daeElementRef
create(DAE & dae)98 domLight::domTechnique_common::create(DAE& dae)
99 {
100 domLight::domTechnique_commonRef ref = new domLight::domTechnique_common(dae);
101 return ref;
102 }
103
104
105 daeMetaElement *
registerElement(DAE & dae)106 domLight::domTechnique_common::registerElement(DAE& dae)
107 {
108 daeMetaElement* meta = dae.getMeta(ID());
109 if ( meta != NULL ) return meta;
110
111 meta = new daeMetaElement(dae);
112 dae.setMeta(ID(), *meta);
113 meta->setName( "technique_common" );
114 meta->registerClass(domLight::domTechnique_common::create);
115
116 meta->setIsInnerClass( true );
117 daeMetaCMPolicy *cm = NULL;
118 daeMetaElementAttribute *mea = NULL;
119 cm = new daeMetaChoice( meta, cm, 0, 0, 1, 1 );
120
121 mea = new daeMetaElementAttribute( meta, cm, 0, 1, 1 );
122 mea->setName( "ambient" );
123 mea->setOffset( daeOffsetOf(domLight::domTechnique_common,elemAmbient) );
124 mea->setElementType( domLight::domTechnique_common::domAmbient::registerElement(dae) );
125 cm->appendChild( mea );
126
127 mea = new daeMetaElementAttribute( meta, cm, 0, 1, 1 );
128 mea->setName( "directional" );
129 mea->setOffset( daeOffsetOf(domLight::domTechnique_common,elemDirectional) );
130 mea->setElementType( domLight::domTechnique_common::domDirectional::registerElement(dae) );
131 cm->appendChild( mea );
132
133 mea = new daeMetaElementAttribute( meta, cm, 0, 1, 1 );
134 mea->setName( "point" );
135 mea->setOffset( daeOffsetOf(domLight::domTechnique_common,elemPoint) );
136 mea->setElementType( domLight::domTechnique_common::domPoint::registerElement(dae) );
137 cm->appendChild( mea );
138
139 mea = new daeMetaElementAttribute( meta, cm, 0, 1, 1 );
140 mea->setName( "spot" );
141 mea->setOffset( daeOffsetOf(domLight::domTechnique_common,elemSpot) );
142 mea->setElementType( domLight::domTechnique_common::domSpot::registerElement(dae) );
143 cm->appendChild( mea );
144
145 cm->setMaxOrdinal( 0 );
146 meta->setCMRoot( cm );
147 // Ordered list of sub-elements
148 meta->addContents(daeOffsetOf(domLight::domTechnique_common,_contents));
149 meta->addContentsOrder(daeOffsetOf(domLight::domTechnique_common,_contentsOrder));
150
151 meta->addCMDataArray(daeOffsetOf(domLight::domTechnique_common,_CMData), 1);
152 meta->setElementSize(sizeof(domLight::domTechnique_common));
153 meta->validate();
154
155 return meta;
156 }
157
158 daeElementRef
create(DAE & dae)159 domLight::domTechnique_common::domAmbient::create(DAE& dae)
160 {
161 domLight::domTechnique_common::domAmbientRef ref = new domLight::domTechnique_common::domAmbient(dae);
162 return ref;
163 }
164
165
166 daeMetaElement *
registerElement(DAE & dae)167 domLight::domTechnique_common::domAmbient::registerElement(DAE& dae)
168 {
169 daeMetaElement* meta = dae.getMeta(ID());
170 if ( meta != NULL ) return meta;
171
172 meta = new daeMetaElement(dae);
173 dae.setMeta(ID(), *meta);
174 meta->setName( "ambient" );
175 meta->registerClass(domLight::domTechnique_common::domAmbient::create);
176
177 meta->setIsInnerClass( true );
178 daeMetaCMPolicy *cm = NULL;
179 daeMetaElementAttribute *mea = NULL;
180 cm = new daeMetaSequence( meta, cm, 0, 1, 1 );
181
182 mea = new daeMetaElementAttribute( meta, cm, 0, 1, 1 );
183 mea->setName( "color" );
184 mea->setOffset( daeOffsetOf(domLight::domTechnique_common::domAmbient,elemColor) );
185 mea->setElementType( domTargetableFloat3::registerElement(dae) );
186 cm->appendChild( mea );
187
188 cm->setMaxOrdinal( 0 );
189 meta->setCMRoot( cm );
190
191 meta->setElementSize(sizeof(domLight::domTechnique_common::domAmbient));
192 meta->validate();
193
194 return meta;
195 }
196
197 daeElementRef
create(DAE & dae)198 domLight::domTechnique_common::domDirectional::create(DAE& dae)
199 {
200 domLight::domTechnique_common::domDirectionalRef ref = new domLight::domTechnique_common::domDirectional(dae);
201 return ref;
202 }
203
204
205 daeMetaElement *
registerElement(DAE & dae)206 domLight::domTechnique_common::domDirectional::registerElement(DAE& dae)
207 {
208 daeMetaElement* meta = dae.getMeta(ID());
209 if ( meta != NULL ) return meta;
210
211 meta = new daeMetaElement(dae);
212 dae.setMeta(ID(), *meta);
213 meta->setName( "directional" );
214 meta->registerClass(domLight::domTechnique_common::domDirectional::create);
215
216 meta->setIsInnerClass( true );
217 daeMetaCMPolicy *cm = NULL;
218 daeMetaElementAttribute *mea = NULL;
219 cm = new daeMetaSequence( meta, cm, 0, 1, 1 );
220
221 mea = new daeMetaElementAttribute( meta, cm, 0, 1, 1 );
222 mea->setName( "color" );
223 mea->setOffset( daeOffsetOf(domLight::domTechnique_common::domDirectional,elemColor) );
224 mea->setElementType( domTargetableFloat3::registerElement(dae) );
225 cm->appendChild( mea );
226
227 cm->setMaxOrdinal( 0 );
228 meta->setCMRoot( cm );
229
230 meta->setElementSize(sizeof(domLight::domTechnique_common::domDirectional));
231 meta->validate();
232
233 return meta;
234 }
235
236 daeElementRef
create(DAE & dae)237 domLight::domTechnique_common::domPoint::create(DAE& dae)
238 {
239 domLight::domTechnique_common::domPointRef ref = new domLight::domTechnique_common::domPoint(dae);
240 return ref;
241 }
242
243
244 daeMetaElement *
registerElement(DAE & dae)245 domLight::domTechnique_common::domPoint::registerElement(DAE& dae)
246 {
247 daeMetaElement* meta = dae.getMeta(ID());
248 if ( meta != NULL ) return meta;
249
250 meta = new daeMetaElement(dae);
251 dae.setMeta(ID(), *meta);
252 meta->setName( "point" );
253 meta->registerClass(domLight::domTechnique_common::domPoint::create);
254
255 meta->setIsInnerClass( true );
256 daeMetaCMPolicy *cm = NULL;
257 daeMetaElementAttribute *mea = NULL;
258 cm = new daeMetaSequence( meta, cm, 0, 1, 1 );
259
260 mea = new daeMetaElementAttribute( meta, cm, 0, 1, 1 );
261 mea->setName( "color" );
262 mea->setOffset( daeOffsetOf(domLight::domTechnique_common::domPoint,elemColor) );
263 mea->setElementType( domTargetableFloat3::registerElement(dae) );
264 cm->appendChild( mea );
265
266 mea = new daeMetaElementAttribute( meta, cm, 1, 0, 1 );
267 mea->setName( "constant_attenuation" );
268 mea->setOffset( daeOffsetOf(domLight::domTechnique_common::domPoint,elemConstant_attenuation) );
269 mea->setElementType( domTargetableFloat::registerElement(dae) );
270 cm->appendChild( mea );
271
272 mea = new daeMetaElementAttribute( meta, cm, 2, 0, 1 );
273 mea->setName( "linear_attenuation" );
274 mea->setOffset( daeOffsetOf(domLight::domTechnique_common::domPoint,elemLinear_attenuation) );
275 mea->setElementType( domTargetableFloat::registerElement(dae) );
276 cm->appendChild( mea );
277
278 mea = new daeMetaElementAttribute( meta, cm, 3, 0, 1 );
279 mea->setName( "quadratic_attenuation" );
280 mea->setOffset( daeOffsetOf(domLight::domTechnique_common::domPoint,elemQuadratic_attenuation) );
281 mea->setElementType( domTargetableFloat::registerElement(dae) );
282 cm->appendChild( mea );
283
284 cm->setMaxOrdinal( 3 );
285 meta->setCMRoot( cm );
286
287 meta->setElementSize(sizeof(domLight::domTechnique_common::domPoint));
288 meta->validate();
289
290 return meta;
291 }
292
293 daeElementRef
create(DAE & dae)294 domLight::domTechnique_common::domSpot::create(DAE& dae)
295 {
296 domLight::domTechnique_common::domSpotRef ref = new domLight::domTechnique_common::domSpot(dae);
297 return ref;
298 }
299
300
301 daeMetaElement *
registerElement(DAE & dae)302 domLight::domTechnique_common::domSpot::registerElement(DAE& dae)
303 {
304 daeMetaElement* meta = dae.getMeta(ID());
305 if ( meta != NULL ) return meta;
306
307 meta = new daeMetaElement(dae);
308 dae.setMeta(ID(), *meta);
309 meta->setName( "spot" );
310 meta->registerClass(domLight::domTechnique_common::domSpot::create);
311
312 meta->setIsInnerClass( true );
313 daeMetaCMPolicy *cm = NULL;
314 daeMetaElementAttribute *mea = NULL;
315 cm = new daeMetaSequence( meta, cm, 0, 1, 1 );
316
317 mea = new daeMetaElementAttribute( meta, cm, 0, 1, 1 );
318 mea->setName( "color" );
319 mea->setOffset( daeOffsetOf(domLight::domTechnique_common::domSpot,elemColor) );
320 mea->setElementType( domTargetableFloat3::registerElement(dae) );
321 cm->appendChild( mea );
322
323 mea = new daeMetaElementAttribute( meta, cm, 1, 0, 1 );
324 mea->setName( "constant_attenuation" );
325 mea->setOffset( daeOffsetOf(domLight::domTechnique_common::domSpot,elemConstant_attenuation) );
326 mea->setElementType( domTargetableFloat::registerElement(dae) );
327 cm->appendChild( mea );
328
329 mea = new daeMetaElementAttribute( meta, cm, 2, 0, 1 );
330 mea->setName( "linear_attenuation" );
331 mea->setOffset( daeOffsetOf(domLight::domTechnique_common::domSpot,elemLinear_attenuation) );
332 mea->setElementType( domTargetableFloat::registerElement(dae) );
333 cm->appendChild( mea );
334
335 mea = new daeMetaElementAttribute( meta, cm, 3, 0, 1 );
336 mea->setName( "quadratic_attenuation" );
337 mea->setOffset( daeOffsetOf(domLight::domTechnique_common::domSpot,elemQuadratic_attenuation) );
338 mea->setElementType( domTargetableFloat::registerElement(dae) );
339 cm->appendChild( mea );
340
341 mea = new daeMetaElementAttribute( meta, cm, 4, 0, 1 );
342 mea->setName( "falloff_angle" );
343 mea->setOffset( daeOffsetOf(domLight::domTechnique_common::domSpot,elemFalloff_angle) );
344 mea->setElementType( domTargetableFloat::registerElement(dae) );
345 cm->appendChild( mea );
346
347 mea = new daeMetaElementAttribute( meta, cm, 5, 0, 1 );
348 mea->setName( "falloff_exponent" );
349 mea->setOffset( daeOffsetOf(domLight::domTechnique_common::domSpot,elemFalloff_exponent) );
350 mea->setElementType( domTargetableFloat::registerElement(dae) );
351 cm->appendChild( mea );
352
353 cm->setMaxOrdinal( 5 );
354 meta->setCMRoot( cm );
355
356 meta->setElementSize(sizeof(domLight::domTechnique_common::domSpot));
357 meta->validate();
358
359 return meta;
360 }
361
362