shattered_ogrerb 0.5.0.1 → 0.5.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (82) hide show
  1. data/lib/shattered_ogrerb/mesh_instance.rb +9 -0
  2. data/vendor/Navi/js3250.dll +0 -0
  3. data/vendor/Navi/nspr4.dll +0 -0
  4. data/vendor/Navi/plc4.dll +0 -0
  5. data/vendor/Navi/plds4.dll +0 -0
  6. data/vendor/Navi/xpcom.dll +0 -0
  7. data/vendor/Navi/xul.dll +0 -0
  8. data/vendor/ogrerb/CHANGELOG +7 -0
  9. data/vendor/ogrerb/README +7 -2
  10. data/vendor/ogrerb/Rakefile +98 -10
  11. data/vendor/ogrerb/build/ogre/extconf.rb +6 -0
  12. data/vendor/ogrerb/build/ois/extconf.rb +8 -1
  13. data/vendor/ogrerb/doc_src/ogre.rb +97 -3
  14. data/vendor/ogrerb/lib/OIS.so +0 -0
  15. data/vendor/ogrerb/{samples → lib}/application.rb +0 -0
  16. data/vendor/ogrerb/{samples → lib}/application_frame_listener.rb +1 -1
  17. data/vendor/ogrerb/{samples → lib}/application_loading_bar.rb +12 -12
  18. data/vendor/ogrerb/lib/constants.rb +16 -0
  19. data/vendor/ogrerb/lib/method_fixes.rb +42 -0
  20. data/vendor/ogrerb/lib/navi.dll +0 -0
  21. data/vendor/ogrerb/lib/ogre.dll +0 -0
  22. data/vendor/ogrerb/lib/ogre.so +0 -0
  23. data/vendor/ogrerb/lib/ruby_ois.dll +0 -0
  24. data/vendor/ogrerb/lib/ruby_ois.so +0 -0
  25. data/vendor/ogrerb/ogre/OgreAxisAlignedBox.i +6 -0
  26. data/vendor/ogrerb/ogre/OgreHardwareIndexBuffer.i +14 -0
  27. data/vendor/ogrerb/ogre/OgreHardwareVertexBuffer.i +33 -1
  28. data/vendor/ogrerb/ogre/OgreMaterialManager.i +1 -1
  29. data/vendor/ogrerb/ogre/OgreMesh.i +32 -0
  30. data/vendor/ogrerb/ogre/OgreQuaternion.i +5 -0
  31. data/vendor/ogrerb/ogre/OgreRenderSystemCapabilities.i +4 -0
  32. data/vendor/ogrerb/ogre/OgreShadowTextureManager.i +6 -1
  33. data/vendor/ogrerb/ogre/OgreStaticGeometry.i +272 -0
  34. data/vendor/ogrerb/ogre/OgreStringVector.i +20 -0
  35. data/vendor/ogrerb/ogre/OgreSubMesh.i +4 -0
  36. data/vendor/ogrerb/ogre/OgreTextureUnitState.i +3 -0
  37. data/vendor/ogrerb/ogre/OgreVector4.i +4 -0
  38. data/vendor/ogrerb/ogre/ogre_rb.i +26 -18
  39. data/vendor/ogrerb/ogre.rb +5 -3
  40. data/vendor/ogrerb/samples/bsp.rb +2 -0
  41. data/vendor/ogrerb/samples/cel_shading.rb +85 -0
  42. data/vendor/ogrerb/samples/grass.rb +325 -0
  43. data/vendor/ogrerb/samples/lighting.rb +2 -0
  44. data/vendor/ogrerb/samples/media/materials/programs/CelShading.cg +63 -0
  45. data/vendor/ogrerb/samples/media/materials/programs/Grass.cg +30 -0
  46. data/vendor/ogrerb/samples/media/materials/programs/OffsetMapping.cg +97 -0
  47. data/vendor/ogrerb/samples/media/materials/programs/OffsetMapping.hlsl +135 -0
  48. data/vendor/ogrerb/samples/media/materials/programs/OffsetMappingFp.glsl +69 -0
  49. data/vendor/ogrerb/samples/media/materials/programs/OffsetMappingVp.glsl +54 -0
  50. data/vendor/ogrerb/samples/media/materials/programs/OffsetMapping_specular.asm +44 -0
  51. data/vendor/ogrerb/samples/media/materials/scripts/CelShading.material +68 -0
  52. data/vendor/ogrerb/samples/media/materials/scripts/CubeMapping.material +34 -0
  53. data/vendor/ogrerb/samples/media/materials/scripts/Grass.material +63 -0
  54. data/vendor/ogrerb/samples/media/materials/scripts/Offset.material +124 -0
  55. data/vendor/ogrerb/samples/media/materials/scripts/RZR-002.material +15 -0
  56. data/vendor/ogrerb/samples/media/materials/textures/RZR-002.png +0 -0
  57. data/vendor/ogrerb/samples/media/materials/textures/cel_shading_diffuse.png +0 -0
  58. data/vendor/ogrerb/samples/media/materials/textures/cel_shading_edge.png +0 -0
  59. data/vendor/ogrerb/samples/media/materials/textures/cel_shading_specular.png +0 -0
  60. data/vendor/ogrerb/samples/media/materials/textures/gras_02.png +0 -0
  61. data/vendor/ogrerb/samples/media/materials/textures/grass_1024.jpg +0 -0
  62. data/vendor/ogrerb/samples/media/materials/textures/rockwall.tga +0 -0
  63. data/vendor/ogrerb/samples/media/materials/textures/rockwall_NH.tga +0 -0
  64. data/vendor/ogrerb/samples/media/models/RZR-002.mesh +0 -0
  65. data/vendor/ogrerb/samples/media/models/geosphere4500.mesh +0 -0
  66. data/vendor/ogrerb/samples/media/models/geosphere8000.mesh +0 -0
  67. data/vendor/ogrerb/samples/media/models/sphere.mesh +0 -0
  68. data/vendor/ogrerb/samples/media/overlays/CubeMapping.overlay +139 -0
  69. data/vendor/ogrerb/samples/media.cfg +22 -0
  70. data/vendor/ogrerb/samples/plugins.cfg +1 -0
  71. data/vendor/ogrerb/samples/render_to_texture.rb +2 -0
  72. data/vendor/ogrerb/samples/resources.cfg +2 -0
  73. data/vendor/ogrerb/samples/sky_box.rb +2 -0
  74. data/vendor/ogrerb/samples/sky_dome.rb +2 -0
  75. data/vendor/ogrerb/samples/sky_plane.rb +3 -0
  76. data/vendor/ogrerb/samples/smoke.rb +2 -0
  77. data/vendor/ogrerb/samples/work/cube_mapping.rb +686 -0
  78. data/vendor/ogrerb/src_headers/wrappers/IndexBufferProxy.h +49 -0
  79. data/vendor/ogrerb/src_headers/wrappers/StaticGeometryProxies.h +867 -0
  80. data/vendor/ogrerb/src_headers/wrappers/VertexBufferProxy.h +245 -0
  81. data/vendor/ogrerb/website/index.html +9 -0
  82. metadata +54 -6
@@ -0,0 +1,867 @@
1
+ /**
2
+ * Proxy definitions of the inner-classes of StaticGeometry
3
+ *
4
+ * Thanks OgreDotNet!
5
+ */
6
+
7
+ #ifndef __STATIC_GEOMETRY_PROXIES__H__
8
+ #define __STATIC_GEOMETRY_PROXIES__H__
9
+
10
+ namespace Ogre {
11
+ class SGSubMeshLodGeometryLink;
12
+ class SGSubMeshLodGeometryLinkList;
13
+ class SGQueuedSubMesh;
14
+ class SGQueuedGeometry;
15
+
16
+ class SGLODBucketVectorIterator;
17
+ class SGMaterialBucketMapIterator;
18
+ class SGGeometryBucketVectorIterator;
19
+
20
+ class SGGeometryBucket;
21
+ class SGMaterialBucket;
22
+ class SGLODBucket;
23
+ class SGRegion;
24
+
25
+
26
+
27
+ class SGSubMeshLodGeometryLink
28
+ {
29
+ protected:
30
+ StaticGeometry::SubMeshLodGeometryLink *myOBJ;
31
+ bool mICreated;
32
+ bool mShouldRelease;
33
+ public:
34
+ SGSubMeshLodGeometryLink() {
35
+ myOBJ = new StaticGeometry::SubMeshLodGeometryLink();
36
+ mICreated=true;
37
+ mShouldRelease=true;
38
+ }
39
+ SGSubMeshLodGeometryLink(StaticGeometry::SubMeshLodGeometryLink *p) {
40
+ myOBJ=p;
41
+ mICreated=false;
42
+ mShouldRelease=false;
43
+ }
44
+ virtual ~SGSubMeshLodGeometryLink() {
45
+ if ( (mICreated) && (mShouldRelease) )
46
+ delete myOBJ;
47
+ }
48
+
49
+ //## these functions Not for swig
50
+ StaticGeometry::SubMeshLodGeometryLink * get_myOBJ() { return myOBJ; }
51
+ bool getICreated() { return mICreated; }
52
+ bool getShouldRelease() { return mShouldRelease; }
53
+ void setShouldRelease(bool value) { mShouldRelease = value; }
54
+ //##
55
+
56
+ VertexData* getVertexData()
57
+ { if (myOBJ!=0) return myOBJ->vertexData; else return 0; }
58
+ void setVertexData(VertexData* value)
59
+ { if (myOBJ!=0) myOBJ->vertexData = value; }
60
+
61
+ IndexData* getIndexData()
62
+ { if (myOBJ!=0) return myOBJ->indexData; else return 0; }
63
+ void setIndexData(IndexData* value)
64
+ { if (myOBJ!=0) myOBJ->indexData = value; }
65
+
66
+ };
67
+
68
+
69
+
70
+
71
+ //typedef std::vector<SubMeshLodGeometryLink> SubMeshLodGeometryLinkList;
72
+ class SGSubMeshLodGeometryLinkList
73
+ {
74
+ protected:
75
+ typedef std::vector<StaticGeometry::SubMeshLodGeometryLink> tVECTOR;
76
+ tVECTOR *myOBJ;
77
+ bool mICreated;
78
+ bool mShouldRelease;
79
+ public:
80
+ SGSubMeshLodGeometryLinkList() {
81
+ myOBJ= new std::vector<StaticGeometry::SubMeshLodGeometryLink>;
82
+ mICreated=true;
83
+ mShouldRelease=true;
84
+ }
85
+ SGSubMeshLodGeometryLinkList(std::vector<StaticGeometry::SubMeshLodGeometryLink> *p) {
86
+ myOBJ=p;
87
+ mICreated=false;
88
+ mShouldRelease=false;
89
+ }
90
+ virtual ~SGSubMeshLodGeometryLinkList() {
91
+ if ( (mICreated) && (mShouldRelease) )
92
+ delete myOBJ;
93
+ }
94
+ //## these functions Not for swig
95
+ std::vector<StaticGeometry::SubMeshLodGeometryLink> * get_myOBJ() { return myOBJ; }
96
+ bool getICreated() { return mICreated; }
97
+ bool getShouldRelease() { return mShouldRelease; }
98
+ void setShouldRelease(bool value) { mShouldRelease = value; }
99
+ //##
100
+
101
+ size_t size()
102
+ { if (myOBJ==0) return 0;
103
+ return myOBJ->size();
104
+ }
105
+ void addItem(SGSubMeshLodGeometryLink *pnewItem)
106
+ { if (myOBJ==0) return;
107
+ // a vector of non ptr types creates a new copy of the object
108
+ myOBJ->push_back( *pnewItem->get_myOBJ() );
109
+ }
110
+ SGSubMeshLodGeometryLink *getFirst()
111
+ { if (myOBJ==0) return 0;
112
+ tVECTOR::iterator it =myOBJ->begin();
113
+ if (it == myOBJ->end()) return 0;
114
+ else return new SGSubMeshLodGeometryLink( (StaticGeometry::SubMeshLodGeometryLink*)&(*it) );
115
+ }
116
+ SGSubMeshLodGeometryLink *getLast()
117
+ { if (myOBJ==0) return 0;
118
+ tVECTOR::reverse_iterator rit =myOBJ->rbegin();
119
+ if (rit == myOBJ->rend()) return 0;
120
+ else return new SGSubMeshLodGeometryLink( (StaticGeometry::SubMeshLodGeometryLink*)&(*rit) );
121
+ }
122
+ SGSubMeshLodGeometryLink *getByIndex(int index)
123
+ { if (myOBJ==0) return 0;
124
+ tVECTOR::iterator it =myOBJ->begin();
125
+ if (it == myOBJ->end()) return 0;
126
+ std::advance(it, index);
127
+ if (it == myOBJ->end()) return 0;
128
+ else return new SGSubMeshLodGeometryLink( (StaticGeometry::SubMeshLodGeometryLink*)&(*it) );
129
+ }
130
+ };
131
+ //typedef std::map<SubMesh*, SubMeshLodGeometryLinkList*> SubMeshGeometryLookup;
132
+
133
+
134
+
135
+
136
+ //----------------------------------------------------------------
137
+ // custom code to handle StaticGeometry::QueuedSubMesh
138
+ class SGQueuedSubMesh
139
+ {
140
+ protected:
141
+ StaticGeometry::QueuedSubMesh *myOBJ;
142
+ bool mICreated;
143
+ bool mShouldRelease;
144
+ public:
145
+ SGQueuedSubMesh() {
146
+ myOBJ = new StaticGeometry::QueuedSubMesh();
147
+ mICreated=true;
148
+ mShouldRelease = true;
149
+ }
150
+ SGQueuedSubMesh(StaticGeometry::QueuedSubMesh *p) {
151
+ myOBJ=p;
152
+ mICreated=false;
153
+ mShouldRelease = false;
154
+ }
155
+ virtual ~SGQueuedSubMesh() {
156
+ if ( (mICreated) && (mShouldRelease) )
157
+ delete myOBJ;
158
+ }
159
+ //## these functions Not for swig
160
+ StaticGeometry::QueuedSubMesh * get_myOBJ() { return myOBJ; }
161
+ bool getICreated() { return mICreated; }
162
+ bool getShouldRelease() { return mShouldRelease; }
163
+ void setShouldRelease(bool value) { mShouldRelease = value; }
164
+ //##
165
+
166
+ SubMesh* getSubmesh()
167
+ { if (myOBJ!=0) return myOBJ->submesh; else return 0; }
168
+ void setSubmesh(SubMesh* value)
169
+ { if (myOBJ!=0) myOBJ->submesh = value; }
170
+
171
+ SGSubMeshLodGeometryLinkList* getGeometryLodList()
172
+ { if (myOBJ!=0) return new SGSubMeshLodGeometryLinkList(myOBJ->geometryLodList );
173
+ else return 0; }
174
+ void setGeometryLodList(SGSubMeshLodGeometryLinkList* value)
175
+ {
176
+ if (myOBJ==0) return;
177
+ if (value->getICreated())
178
+ value->setShouldRelease(false);
179
+ myOBJ->geometryLodList = value->get_myOBJ();
180
+ }
181
+
182
+ const String& getMaterialName()
183
+ { if (myOBJ!=0) return myOBJ->materialName; else return ""; }
184
+ void setMaterialName(const String& value)
185
+ { if (myOBJ!=0) myOBJ->materialName = value; }
186
+
187
+ const Vector3& getPosition()
188
+ { if (myOBJ!=0) return myOBJ->position; else return Vector3::ZERO; }
189
+ void setPosition(const Vector3& value)
190
+ { if (myOBJ!=0) myOBJ->position = value; }
191
+
192
+ const Quaternion& getOrientation()
193
+ { if (myOBJ!=0) return myOBJ->orientation; else return Quaternion::IDENTITY; }
194
+ void setOrientation(const Quaternion& value)
195
+ { if (myOBJ!=0) myOBJ->orientation = value; }
196
+
197
+ const Vector3& getScale()
198
+ { if (myOBJ!=0) return myOBJ->scale; else return Vector3::ZERO; }
199
+ void setScale(const Vector3& value)
200
+ { if (myOBJ!=0) myOBJ->scale = value; }
201
+
202
+ AxisAlignedBox* getWorldBounds()
203
+ { if (myOBJ!=0) return &myOBJ->worldBounds; else return 0; }
204
+ };
205
+ //typedef std::vector<QueuedSubMesh*> QueuedSubMeshList;
206
+
207
+
208
+
209
+
210
+ /// Structure recording a queued geometry for low level builds
211
+ class SGQueuedGeometry
212
+ {
213
+ protected:
214
+ StaticGeometry::QueuedGeometry *myOBJ;
215
+ bool mICreated;
216
+ bool mShouldRelease;
217
+ public:
218
+ SGQueuedGeometry() {
219
+ myOBJ = new StaticGeometry::QueuedGeometry();
220
+ mICreated=true;
221
+ mShouldRelease = true;
222
+ }
223
+ SGQueuedGeometry(StaticGeometry::QueuedGeometry *p) {
224
+ myOBJ=p;
225
+ mICreated=false;
226
+ mShouldRelease = false;
227
+ }
228
+ virtual ~SGQueuedGeometry() {
229
+ if ( (mICreated) && (mShouldRelease) )
230
+ delete myOBJ;
231
+ }
232
+ //## these functions Not for swig
233
+ StaticGeometry::QueuedGeometry * get_myOBJ() { return myOBJ; }
234
+ bool getICreated() { return mICreated; }
235
+ bool getShouldRelease() { return mShouldRelease; }
236
+ void setShouldRelease(bool value) { mShouldRelease = value; }
237
+ //##
238
+
239
+ SGSubMeshLodGeometryLink* getGeometry()
240
+ { if (myOBJ!=0) return new SGSubMeshLodGeometryLink(myOBJ->geometry );
241
+ else return 0; }
242
+ void setGeometry(SGSubMeshLodGeometryLink* value)
243
+ { if (myOBJ!=0) myOBJ->geometry = value->get_myOBJ(); }
244
+
245
+ const Vector3& getPosition()
246
+ { if (myOBJ!=0) return myOBJ->position; else return Vector3::ZERO; }
247
+ void setPosition(const Vector3& value)
248
+ { if (myOBJ!=0) myOBJ->position = value; }
249
+
250
+ const Quaternion& getOrientation()
251
+ { if (myOBJ!=0) return myOBJ->orientation; else return Quaternion::IDENTITY; }
252
+ void setOrientation(const Quaternion& value)
253
+ { if (myOBJ!=0) myOBJ->orientation = value; }
254
+
255
+ const Vector3& getScale()
256
+ { if (myOBJ!=0) return myOBJ->scale; else return Vector3::ZERO; }
257
+ void setScale(const Vector3& value)
258
+ { if (myOBJ!=0) myOBJ->scale = value; }
259
+
260
+ };
261
+ //typedef std::vector<QueuedGeometry*> QueuedGeometryList;
262
+
263
+
264
+
265
+
266
+ //----------------------------------------------------------------
267
+ // custom code to handle StaticGeometry::GeometryBucket
268
+ class SGGeometryBucket //StaticGeometry::GeometryBucket is a Renderable
269
+ {
270
+ protected:
271
+ StaticGeometry::GeometryBucket *myOBJ;
272
+ bool mICreated;
273
+ bool mShouldRelease;
274
+ public:
275
+ SGGeometryBucket(SGMaterialBucket* parent, const String& formatString, const VertexData* vData, const IndexData* iData);
276
+ SGGeometryBucket(StaticGeometry::GeometryBucket *p) {
277
+ myOBJ=p;
278
+ mICreated=false;
279
+ mShouldRelease=false;
280
+ }
281
+ virtual ~SGGeometryBucket() {
282
+ if ( (mICreated) && (mShouldRelease) )
283
+ delete myOBJ;
284
+ }
285
+
286
+ //## these functions Not for swig
287
+ StaticGeometry::GeometryBucket * get_myOBJ() { return myOBJ; }
288
+ bool getICreated() { return mICreated; }
289
+ bool getShouldRelease() { return mShouldRelease; }
290
+ void setShouldRelease(bool value) { mShouldRelease = value; }
291
+ //##
292
+
293
+ Ogre::Renderable * asRenderable() {
294
+ return (Ogre::Renderable *)myOBJ;
295
+ }
296
+ SGMaterialBucket* getParent(void);
297
+
298
+ const VertexData* getVertexData(void) const {
299
+ if (myOBJ==0) return 0;
300
+ return myOBJ->getVertexData();
301
+ }
302
+ const IndexData* getIndexData(void) const {
303
+ if (myOBJ==0) return 0;
304
+ return myOBJ->getIndexData();
305
+ }
306
+ const MaterialPtr& getMaterial(void) const {
307
+ //if (myOBJ==0) return 0;
308
+ return myOBJ->getMaterial();
309
+ }
310
+ Technique* getTechnique(void) const {
311
+ if (myOBJ==0) return 0;
312
+ return myOBJ->getTechnique();
313
+ }
314
+
315
+ void setCustomParameter(size_t index, const Vector4& value) {
316
+ if (myOBJ == 0) return;
317
+ myOBJ->setCustomParameter(index, value);
318
+ }
319
+
320
+ //void getRenderOperation(RenderOperation& op) { return myOBJ->getParent(); }
321
+ //########## RenderOperation access
322
+ //because RenderOperation is not exported use these to access its fields
323
+ const Renderable * GetRO_Renderable() {
324
+ RenderOperation op;
325
+ myOBJ->getRenderOperation(op);
326
+ return op.srcRenderable;
327
+ }
328
+ IndexData * GetRO_IndexData() {
329
+ RenderOperation op;
330
+ myOBJ->getRenderOperation(op);
331
+ return op.indexData;
332
+ }
333
+ void SetRO_IndexData(IndexData * v) {
334
+ RenderOperation op;
335
+ myOBJ->getRenderOperation(op);
336
+ op.indexData = v;
337
+ }
338
+ bool GetRO_UseIndexes() {
339
+ RenderOperation op;
340
+ myOBJ->getRenderOperation(op);
341
+ return op.useIndexes;
342
+ }
343
+ void SetRO_UseIndexes(bool v) {
344
+ RenderOperation op;
345
+ myOBJ->getRenderOperation(op);
346
+ op.useIndexes = v;
347
+ }
348
+ int GetRO_OperationType() {
349
+ RenderOperation op;
350
+ myOBJ->getRenderOperation(op);
351
+ return (int)op.operationType;
352
+ }
353
+ void SetRO_OperationType(int v) {
354
+ RenderOperation op;
355
+ myOBJ->getRenderOperation(op);
356
+ op.operationType = (RenderOperation::OperationType)v;
357
+ }
358
+ VertexData * GetRO_VertexData() {
359
+ RenderOperation op;
360
+ myOBJ->getRenderOperation(op);
361
+ return op.vertexData;
362
+ }
363
+ void SetRO_VertexData(VertexData * v) {
364
+ RenderOperation op;
365
+ myOBJ->getRenderOperation(op);
366
+ op.vertexData = v;
367
+ }
368
+ //########## RenderOperation access
369
+
370
+
371
+ void getWorldTransforms(Matrix4* xform) const {
372
+ if (myOBJ==0) return;
373
+ myOBJ->getWorldTransforms(xform);
374
+ }
375
+ const Quaternion& getWorldOrientation(void) const {
376
+ //if (myOBJ==0) return 0;
377
+ return myOBJ->getWorldOrientation();
378
+ }
379
+ const Vector3& getWorldPosition(void) const {
380
+ //if (myOBJ==0) return 0;
381
+ return myOBJ->getWorldPosition();
382
+ }
383
+ Real getSquaredViewDepth(const Camera* cam) const {
384
+ if (myOBJ==0) return 0;
385
+ return myOBJ->getSquaredViewDepth(cam);
386
+ }
387
+ const LightList& getLights(void) const {
388
+ //if (myOBJ==0) return 0;
389
+ return myOBJ->getLights();
390
+ }
391
+ bool getCastsShadows(void) const {
392
+ if (myOBJ==0) return false;
393
+ return myOBJ->getCastsShadows();
394
+ }
395
+ bool assign(SGQueuedGeometry* qsm)
396
+ {
397
+ if (myOBJ==0) return false;
398
+ //this is a vector of Ptr objects, make sure the does not delete when it is distroied.
399
+ if (qsm->getICreated())
400
+ qsm->setShouldRelease(false);
401
+ return myOBJ->assign( qsm->get_myOBJ() );
402
+ }
403
+ void build(bool stencilShadows) {
404
+ if (myOBJ==0) return;
405
+ myOBJ->build(stencilShadows);
406
+ }
407
+ };
408
+
409
+
410
+
411
+
412
+ /***
413
+ * a custom VectorIterator proxy for StaticGeometry::MaterialBucket::GeometryIterator
414
+ * typedef std::vector<GeometryBucket*> GeometryBucketList;
415
+ * typedef VectorIterator<GeometryBucketList> GeometryIterator;
416
+ ***/
417
+ class SGGeometryBucketVectorIterator
418
+ {
419
+ private:
420
+ StaticGeometry::MaterialBucket::GeometryIterator *myOBJ;
421
+ public:
422
+ SGGeometryBucketVectorIterator() { myOBJ = 0; }
423
+ SGGeometryBucketVectorIterator(StaticGeometry::MaterialBucket::GeometryIterator *p) { myOBJ = p; }
424
+ virtual ~SGGeometryBucketVectorIterator() {
425
+ if (myOBJ != 0)
426
+ delete myOBJ;
427
+ }
428
+ bool hasMoreElements(void) const {
429
+ if (myOBJ==0) return false;
430
+ return myOBJ->hasMoreElements();
431
+ }
432
+ void moveNext(void) {
433
+ if (myOBJ==0) return;
434
+ myOBJ->moveNext();
435
+ }
436
+ SGGeometryBucket* peekNext(void) {
437
+ if (myOBJ==0) return 0;
438
+ return new SGGeometryBucket( (StaticGeometry::GeometryBucket*)myOBJ->peekNext() );
439
+ }
440
+ SGGeometryBucket* getNext(void) {
441
+ if (myOBJ==0) return 0;
442
+ return new SGGeometryBucket( (StaticGeometry::GeometryBucket*)myOBJ->getNext() );
443
+ }
444
+ SGGeometryBucket* next() {
445
+ if (myOBJ==0) return 0;
446
+ if (myOBJ->hasMoreElements())
447
+ return new SGGeometryBucket( (StaticGeometry::GeometryBucket*)myOBJ->getNext() );
448
+ else
449
+ throw( Ogre::Exception( Exception::ERR_ITEM_NOT_FOUND, "StopIteration at end", "SGGeometryBucketVectorIterator", "Exception", __FILE__, __LINE__ ) );
450
+ }
451
+ };
452
+
453
+
454
+
455
+
456
+ // class _OgreExport MaterialBucket
457
+ class SGMaterialBucket
458
+ {
459
+ protected:
460
+ StaticGeometry::MaterialBucket *myOBJ;
461
+ bool mICreated;
462
+ bool mShouldRelease;
463
+ public:
464
+ SGMaterialBucket(SGLODBucket* parent, const String& materialName);
465
+ SGMaterialBucket(StaticGeometry::MaterialBucket *p) {
466
+ myOBJ=p;
467
+ mICreated=false;
468
+ mShouldRelease=false;
469
+ }
470
+ virtual ~SGMaterialBucket() {
471
+ if ( (mICreated) && (mShouldRelease) )
472
+ delete myOBJ;
473
+ }
474
+
475
+ //## these functions Not for swig
476
+ StaticGeometry::MaterialBucket * get_myOBJ() { return myOBJ; }
477
+ bool getICreated() { return mICreated; }
478
+ bool getShouldRelease() { return mShouldRelease; }
479
+ void setShouldRelease(bool value) { mShouldRelease = value; }
480
+ //##
481
+
482
+ SGLODBucket* getParent(void);
483
+ const String& getMaterialName(void) const {
484
+ if (myOBJ==0) return "";
485
+ return myOBJ->getMaterialName();
486
+ }
487
+ void assign(SGQueuedGeometry* qsm) {
488
+ if (myOBJ==0) return;
489
+ if (qsm->getICreated())
490
+ qsm->setShouldRelease(false);
491
+ return myOBJ->assign(qsm->get_myOBJ());
492
+ }
493
+ void build(bool stencilShadows) {
494
+ if (myOBJ==0) return;
495
+ myOBJ->build(stencilShadows);
496
+ }
497
+ void addRenderables(RenderQueue* queue, RenderQueueGroupID group, Real camSquaredDist) {
498
+ if (myOBJ==0) return;
499
+ myOBJ->addRenderables(queue, group, camSquaredDist);
500
+ }
501
+ const MaterialPtr& getMaterial(void) const {
502
+
503
+ return myOBJ->getMaterial();
504
+ }
505
+
506
+ //typedef std::vector<GeometryBucket*> GeometryBucketList;
507
+ //typedef VectorIterator<GeometryBucketList> GeometryIterator;
508
+ //GeometryIterator getGeometryIterator(void);
509
+ SGGeometryBucketVectorIterator* getGeometryIterator(void) {
510
+ if (myOBJ==0) return 0;
511
+ Ogre::StaticGeometry::MaterialBucket::GeometryIterator * jresult;
512
+ SwigValueWrapper<Ogre::VectorIterator<std::vector<Ogre::StaticGeometry::GeometryBucket*> > > result;
513
+
514
+ result = myOBJ->getGeometryIterator();
515
+ jresult = new Ogre::StaticGeometry::MaterialBucket::GeometryIterator((Ogre::StaticGeometry::MaterialBucket::GeometryIterator &)result);
516
+
517
+ return new SGGeometryBucketVectorIterator( jresult );
518
+ }
519
+
520
+ Technique* getCurrentTechnique(void) const {
521
+ if (myOBJ==0) return 0;
522
+ return myOBJ->getCurrentTechnique();
523
+ }
524
+ };
525
+
526
+
527
+
528
+
529
+ /***
530
+ * a custom MapIterator proxy for StaticGeometry::LODBucket::MaterialIterator
531
+ * typedef std::map<String, MaterialBucket*> MaterialBucketMap;
532
+ * typedef MapIterator<MaterialBucketMap> MaterialIterator;
533
+ ***/
534
+ class SGMaterialBucketMapIterator
535
+ {
536
+ private:
537
+ StaticGeometry::LODBucket::MaterialIterator *myOBJ;
538
+ public:
539
+ SGMaterialBucketMapIterator() { myOBJ = 0; }
540
+ SGMaterialBucketMapIterator(StaticGeometry::LODBucket::MaterialIterator *p) { myOBJ = p; }
541
+ virtual ~SGMaterialBucketMapIterator() {
542
+ if (myOBJ != 0)
543
+ delete myOBJ;
544
+ }
545
+
546
+ bool hasMoreElements(void) const {
547
+ if (myOBJ==0) return false;
548
+ return myOBJ->hasMoreElements();
549
+ }
550
+ void moveNext(void) {
551
+ if (myOBJ==0) return;
552
+ myOBJ->moveNext();
553
+ }
554
+ const String& peekNextKey(void) {
555
+ if (myOBJ==0) return "";
556
+ return myOBJ->peekNextKey();
557
+ }
558
+ SGMaterialBucket* peekNextValue(void) {
559
+ if (myOBJ==0) return 0;
560
+ return new SGMaterialBucket( (StaticGeometry::MaterialBucket*)myOBJ->peekNextValue() );
561
+ }
562
+ SGMaterialBucket* getNext(void) {
563
+ if (myOBJ==0) return 0;
564
+ return new SGMaterialBucket( (StaticGeometry::MaterialBucket*)myOBJ->getNext() );
565
+ }
566
+ SGMaterialBucket* next() {
567
+ if (myOBJ==0) return 0;
568
+ if (myOBJ->hasMoreElements())
569
+ return new SGMaterialBucket( (StaticGeometry::MaterialBucket*)myOBJ->getNext() );
570
+ else
571
+ throw( Ogre::Exception( Exception::ERR_ITEM_NOT_FOUND, "StopIteration at end", "SGMaterialBucketMapIterator", "Exception", __FILE__, __LINE__ ) );
572
+ }
573
+ };
574
+
575
+
576
+
577
+
578
+ // class _OgreExport LODBucket
579
+ class SGLODBucket
580
+ {
581
+ protected:
582
+ StaticGeometry::LODBucket *myOBJ;
583
+ bool mICreated;
584
+ bool mShouldRelease;
585
+ public:
586
+ SGLODBucket(SGRegion* parent, unsigned short lod, Real lodDist);
587
+ SGLODBucket(StaticGeometry::LODBucket *p) {
588
+ myOBJ=p;
589
+ mICreated=false;
590
+ mShouldRelease=false;
591
+ }
592
+ virtual ~SGLODBucket() {
593
+ if ( (mICreated) && (mShouldRelease) )
594
+ delete myOBJ;
595
+ }
596
+
597
+ //## these functions Not for swig
598
+ StaticGeometry::LODBucket * get_myOBJ() { return myOBJ; }
599
+ bool getICreated() { return mICreated; }
600
+ bool getShouldRelease() { return mShouldRelease; }
601
+ void setShouldRelease(bool value) { mShouldRelease = value; }
602
+ //##
603
+
604
+ SGRegion* getParent(void);
605
+ SGMaterialBucketMapIterator* getMaterialIterator(void);
606
+ unsigned short getLod(void) const {
607
+ if (myOBJ==0) return 0;
608
+ return myOBJ->getLod();
609
+ }
610
+ Real getSquaredDistance(void) const {
611
+ if (myOBJ==0) return 0;
612
+ return myOBJ->getSquaredDistance();
613
+ }
614
+ void assign(SGQueuedSubMesh* qsm, unsigned short atLod) {
615
+ if (myOBJ==0) return;
616
+ if (qsm->getICreated())
617
+ qsm->setShouldRelease(false);
618
+ return myOBJ->assign(qsm->get_myOBJ(), atLod);
619
+ }
620
+ void build(bool stencilShadows) {
621
+ if (myOBJ==0) return;
622
+ myOBJ->build(stencilShadows);
623
+ }
624
+ void addRenderables(RenderQueue* queue, RenderQueueGroupID group, Real camSquaredDistance) {
625
+ if (myOBJ==0) return;
626
+ myOBJ->addRenderables(queue, group, camSquaredDistance);
627
+ }
628
+ };
629
+
630
+
631
+
632
+ /***
633
+ * a custom VectorIterator proxy for StaticGeometry::Region::LODIterator
634
+ * typedef std::vector<LODBucket*> LODBucketList;
635
+ * typedef VectorIterator<LODBucketList> LODIterator;
636
+ ***/
637
+ class SGLODBucketVectorIterator
638
+ {
639
+ private:
640
+ StaticGeometry::Region::LODIterator *myOBJ;
641
+ public:
642
+ SGLODBucketVectorIterator() { myOBJ = 0; }
643
+ SGLODBucketVectorIterator(StaticGeometry::Region::LODIterator *p) { myOBJ = p; }
644
+ virtual ~SGLODBucketVectorIterator() {
645
+ if (myOBJ != 0)
646
+ delete myOBJ;
647
+ }
648
+
649
+ bool hasMoreElements(void) const {
650
+ if (myOBJ==0) return false;
651
+ return myOBJ->hasMoreElements();
652
+ }
653
+ void moveNext(void) {
654
+ if (myOBJ==0) return;
655
+ myOBJ->moveNext();
656
+ }
657
+ SGLODBucket* peekNext(void) {
658
+ if (myOBJ==0) return 0;
659
+ return new SGLODBucket( (StaticGeometry::LODBucket*)myOBJ->peekNext() );
660
+ }
661
+ SGLODBucket* getNext(void) {
662
+ if (myOBJ==0) return 0;
663
+ return new SGLODBucket( (StaticGeometry::LODBucket*)myOBJ->getNext() );
664
+ }
665
+ SGLODBucket* next() {
666
+ if (myOBJ==0) return 0;
667
+ if (myOBJ->hasMoreElements())
668
+ return new SGLODBucket( (StaticGeometry::LODBucket*)myOBJ->getNext() );
669
+ else
670
+ throw( Ogre::Exception( Exception::ERR_ITEM_NOT_FOUND, "StopIteration at end", "SGLODBucketVectorIterator", "Exception", __FILE__, __LINE__ ) );
671
+ }
672
+
673
+ };
674
+
675
+
676
+
677
+ //----------------------------------------------------------------
678
+ // custom code to handle StaticGeometry::Region
679
+ class SGRegion //StaticGeometry::Region is a MovableObject
680
+ {
681
+ protected:
682
+ StaticGeometry::Region *myOBJ;
683
+ bool mICreated;
684
+ bool mShouldRelease;
685
+ public:
686
+ SGRegion(StaticGeometry* parent, const String& name, SceneManager* mgr, uint32 regionID, const Vector3& centre) {
687
+ myOBJ = new StaticGeometry::Region(parent, name, mgr, regionID, centre);
688
+ mICreated=true;
689
+ mShouldRelease=true;
690
+ }
691
+ SGRegion(StaticGeometry::Region *p) {
692
+ myOBJ=p;
693
+ mICreated=false;
694
+ mShouldRelease=false;
695
+ }
696
+ virtual ~SGRegion() {
697
+ if ( (mICreated) && (mShouldRelease) )
698
+ delete myOBJ;
699
+ }
700
+
701
+ //## these functions Not for swig
702
+ StaticGeometry::Region * get_myOBJ() { return myOBJ; }
703
+ bool getICreated() { return mICreated; }
704
+ bool getShouldRelease() { return mShouldRelease; }
705
+ void setShouldRelease(bool value) { mShouldRelease = value; }
706
+ //##
707
+
708
+ Ogre::MovableObject * asMovableObject() { return (Ogre::MovableObject *)myOBJ; }
709
+ // more fields can be added in subclasses
710
+ StaticGeometry* getParent(void) const { return myOBJ->getParent(); }
711
+ /// Assign a queued mesh to this region, read for final build
712
+ void assign(SGQueuedSubMesh* qmesh) {
713
+ //this is a vector of Ptr objects, make sure the does not delete when it is distroied.
714
+ if (qmesh->getICreated())
715
+ qmesh->setShouldRelease(false);
716
+ return myOBJ->assign(qmesh->get_myOBJ());
717
+ }
718
+ void build(bool stencilShadows) { myOBJ->build( stencilShadows ); }
719
+ uint32 getID(void) const { return myOBJ->getID(); }
720
+ const Vector3& getCentre(void) const { return myOBJ->getCentre(); }
721
+ const String& getName(void) const { return myOBJ->getName(); }
722
+ const String& getMovableType(void) const { return myOBJ->getMovableType(); }
723
+ void _notifyCurrentCamera(Camera* cam) { return myOBJ->_notifyCurrentCamera(cam); }
724
+ const AxisAlignedBox& getBoundingBox(void) const { return myOBJ->getBoundingBox(); }
725
+ Real getBoundingRadius(void) const { return myOBJ->getBoundingRadius(); }
726
+ void _updateRenderQueue(RenderQueue* queue) { return myOBJ->_updateRenderQueue(queue); }
727
+ bool isVisible(void) const { return myOBJ->isVisible(); }
728
+ //typedef std::vector<LODBucket*> LODBucketList;
729
+ //typedef VectorIterator<LODBucketList> LODIterator;
730
+ //LODIterator getLODIterator(void);
731
+ SGLODBucketVectorIterator * getLodIterator(void) {
732
+ if (myOBJ==0) return 0;
733
+ Ogre::StaticGeometry::Region::LODIterator * jresult;
734
+ SwigValueWrapper<Ogre::VectorIterator<std::vector<Ogre::StaticGeometry::LODBucket * > > > result;
735
+
736
+ result = myOBJ->getLODIterator();
737
+ jresult = new Ogre::StaticGeometry::Region::LODIterator((Ogre::StaticGeometry::Region::LODIterator &)result);
738
+
739
+ return new SGLODBucketVectorIterator( jresult );
740
+ }
741
+ /// @copydoc ShadowCaster::getShadowVolumeRenderableIterator
742
+ //typedef std::vector<ShadowRenderable*> ShadowRenderableList;
743
+ //typedef VectorIterator<ShadowRenderableList> ShadowRenderableListIterator;
744
+ Ogre::ShadowCaster::ShadowRenderableListIterator getShadowVolumeRenderableIterator(
745
+ ShadowTechnique shadowTechnique, const Light* light,
746
+ HardwareIndexBufferSharedPtr* indexBuffer,
747
+ bool extrudeVertices, Real extrusionDistance, unsigned long flags = 0 )
748
+ {
749
+ Ogre::ShadowCaster::ShadowRenderableListIterator * jresult;
750
+ SwigValueWrapper<Ogre::VectorIterator<std::vector<Ogre::ShadowRenderable * > > > result;
751
+
752
+ result = myOBJ->getShadowVolumeRenderableIterator(shadowTechnique, light, indexBuffer,
753
+ extrudeVertices, extrusionDistance, flags );
754
+ jresult = new Ogre::ShadowCaster::ShadowRenderableListIterator((Ogre::ShadowCaster::ShadowRenderableListIterator &)result);
755
+
756
+ return *jresult;
757
+ }
758
+ /// Overridden from MovableObject
759
+ //EdgeData* getEdgeList(void);
760
+ };
761
+
762
+
763
+
764
+
765
+ /***
766
+ * a custom MapIterator proxy for StaticGeometry::RegionIterator
767
+ * typedef std::map<uint32, Region*> RegionMap;
768
+ * typedef MapIterator<RegionMap> RegionIterator;
769
+ ***/
770
+ class SGRegionMapIterator
771
+ {
772
+ private:
773
+ StaticGeometry::RegionIterator *myOBJ;
774
+ public:
775
+ SGRegionMapIterator() { myOBJ = 0; }
776
+ SGRegionMapIterator(StaticGeometry::RegionIterator *p) {
777
+ myOBJ = p;
778
+ //std::cout << "--SGRegionMapIterator myOBJ=" << (Ogre::uint32)myOBJ << std::endl;
779
+ }
780
+ virtual ~SGRegionMapIterator() {
781
+ if (myOBJ != 0)
782
+ delete myOBJ;
783
+ }
784
+
785
+ bool hasMoreElements(void) const {
786
+ if (myOBJ==0) return false;
787
+ return myOBJ->hasMoreElements();
788
+ }
789
+ void moveNext(void) {
790
+ if (myOBJ==0) return;
791
+ myOBJ->moveNext();
792
+ }
793
+ uint32 peekNextKey(void) {
794
+ if (myOBJ==0) return 0;
795
+ return myOBJ->peekNextKey();
796
+ }
797
+ SGRegion* peekNextValue(void) {
798
+ if (myOBJ==0) return 0;
799
+ return new SGRegion( (StaticGeometry::Region*)myOBJ->peekNextValue() );
800
+ }
801
+ SGRegion* getNext(void) {
802
+ if (myOBJ==0) return 0;
803
+ return new SGRegion( (StaticGeometry::Region*)myOBJ->getNext() );
804
+ }
805
+ SGRegion* next() {
806
+ if (myOBJ==0) return 0;
807
+ if (myOBJ->hasMoreElements())
808
+ return new SGRegion( (StaticGeometry::Region*)myOBJ->getNext() );
809
+ else
810
+ throw( Ogre::Exception( Exception::ERR_ITEM_NOT_FOUND, "StopIteration at end", "SGRegionMapIterator", "Exception", __FILE__, __LINE__ ) );
811
+ }
812
+ };
813
+
814
+
815
+
816
+
817
+ //------------------------------------------------------------------
818
+ // ### functions that need their body after the class defintions ###
819
+ SGGeometryBucket::SGGeometryBucket(SGMaterialBucket* parent, const String& formatString, const VertexData* vData, const IndexData* iData) {
820
+ myOBJ = new StaticGeometry::GeometryBucket(parent->get_myOBJ(), formatString, vData, iData);
821
+ mICreated=true;
822
+ mShouldRelease=true;
823
+ }
824
+ SGMaterialBucket* SGGeometryBucket::getParent(void) {
825
+ if (myOBJ==0) return 0;
826
+ return new SGMaterialBucket( myOBJ->getParent() );
827
+ }
828
+
829
+
830
+
831
+ SGMaterialBucket::SGMaterialBucket(SGLODBucket* parent, const String& materialName) {
832
+ myOBJ = new StaticGeometry::MaterialBucket(parent->get_myOBJ(), materialName);
833
+ mICreated=true;
834
+ mShouldRelease=true;
835
+ }
836
+ SGLODBucket* SGMaterialBucket::getParent(void) {
837
+ if (myOBJ==0) return 0;
838
+ return new SGLODBucket( myOBJ->getParent() );
839
+ }
840
+
841
+
842
+
843
+ SGLODBucket::SGLODBucket(SGRegion* parent, unsigned short lod, Real lodDist) {
844
+ myOBJ = new StaticGeometry::LODBucket(parent->get_myOBJ(), lod, lodDist);
845
+ mICreated=true;
846
+ mShouldRelease=true;
847
+ }
848
+ SGRegion* SGLODBucket::getParent(void) {
849
+ if (myOBJ==0) return 0;
850
+ return new SGRegion( myOBJ->getParent() );
851
+ }
852
+ //typedef std::map<String, MaterialBucket*> MaterialBucketMap;
853
+ //typedef MapIterator<MaterialBucketMap> MaterialIterator;
854
+ //MaterialIterator getMaterialIterator(void);
855
+ SGMaterialBucketMapIterator* SGLODBucket::getMaterialIterator(void) {
856
+ if (myOBJ==0) return 0;
857
+ Ogre::StaticGeometry::LODBucket::MaterialIterator * jresult;
858
+ SwigValueWrapper<Ogre::MapIterator<std::map<Ogre::String, Ogre::StaticGeometry::MaterialBucket*> > > result;
859
+
860
+ result = myOBJ->getMaterialIterator();
861
+ jresult = new Ogre::StaticGeometry::LODBucket::MaterialIterator((Ogre::StaticGeometry::LODBucket::MaterialIterator &)result);
862
+
863
+ return new SGMaterialBucketMapIterator( jresult );
864
+ }
865
+ }
866
+
867
+ #endif