Eidolon
OgreRenderTypes.h
Go to the documentation of this file.
1 /*
2  * Eidolon Biomedical Framework
3  * Copyright (C) 2016-8 Eric Kerfoot, King's College London, all rights reserved
4  *
5  * This file is part of Eidolon.
6  *
7  * Eidolon is free software: you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation, either version 3 of the License, or
10  * (at your option) any later version.
11  *
12  * Eidolon is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License along
18  * with this program (LICENSE.txt). If not, see <http://www.gnu.org/licenses/>
19  */
20 
21 #ifndef RENDERSCENE_H_
22 #define RENDERSCENE_H_
23 
24 #include <Ogre.h>
25 #include <OgrePlugin.h>
26 #include <OgreOverlaySystem.h>
27 #include <OgreFontManager.h>
28 
29 #include "RenderTypes.h"
30 
31 #define TOSTR(v) Ogre::StringConverter::toString(v)
32 
33 #define THROW_RENDEREX(e) throw RenderException(e.getFullDescription().c_str(),__FILE__,__LINE__)
34 
35 #define MAXNAMECOUNT 1000000 // maximum number to append to names when creating unique names
36 
37 namespace OgreRenderTypes
38 {
39 
40 using namespace RenderTypes;
41 
42 typedef std::pair<vec3,vec3> planevert;
43 
44 class OgreRenderScene;
45 
47 void setNodeFigParent(Ogre::SceneNode* node,Figure *fig,OgreRenderScene* scene);
48 
50 void setCameraVisibility(const Camera* cam,Ogre::MovableObject* obj, bool isVisible,OgreRenderScene* scene);
51 
53 void destroySceneNode(Ogre::SceneNode *node,Ogre::MovableObject* obj,OgreRenderScene *scene);
54 
55 inline Ogre::ColourValue convert(const color & c)
56 {
57  return Ogre::ColourValue(c.r(), c.g(), c.b(), c.a());
58 }
59 
60 inline color convert(const Ogre::ColourValue & c)
61 {
62  return color(c.r, c.g, c.b, c.a);
63 }
64 
65 inline Ogre::Vector3 convert(const vec3 & v)
66 {
67  return Ogre::Vector3((float)v.x(),(float)v.y(),(float)v.z());
68 }
69 
70 inline vec3 convert(const Ogre::Vector3 & v)
71 {
72  return vec3(v.x,v.y,v.z);
73 }
74 
75 inline Ogre::Quaternion convert(const rotator & r)
76 {
77  return Ogre::Quaternion((float)r.w(),(float)r.x(),(float)r.y(),(float)r.z());
78 }
79 
80 inline rotator convert(const Ogre::Quaternion & r)
81 {
82  rotator rr;
83  rr.set(r.x,r.y,r.z,r.w);
84  return rr;
85 }
86 
87 inline Ogre::GpuProgramType convert(ProgramType pt)
88 {
89  switch(pt){
90  case PT_FRAGMENT : return Ogre::GPT_FRAGMENT_PROGRAM;
91  case PT_GEOMETRY : return Ogre::GPT_GEOMETRY_PROGRAM;
92  case PT_VERTEX :
93  default : return Ogre::GPT_VERTEX_PROGRAM;
94  }
95 }
96 
97 inline Ogre::PixelFormat convert(TextureFormat format)
98 {
99  switch(format){
100  case TF_RGBA32 : return Ogre::PF_R8G8B8A8;
101  case TF_ARGB32 : return Ogre::PF_A8R8G8B8;
102  case TF_RGB24 : return Ogre::PF_R8G8B8;
103  case TF_ALPHA8 : return Ogre::PF_A8;
104  case TF_LUM8 : return Ogre::PF_L8;
105  case TF_LUM16 : return Ogre::PF_L16;
106  case TF_ALPHALUM8 : return Ogre::PF_A4L4;
107  default : return Ogre::PF_UNKNOWN;
108  }
109 }
110 
111 inline TextureFormat convert(Ogre::PixelFormat format)
112 {
113  switch(format){
114  case Ogre::PF_R8G8B8A8 : return TF_RGBA32;
115  case Ogre::PF_A8R8G8B8 : return TF_ARGB32;
116  case Ogre::PF_R8G8B8 : return TF_RGB24;
117  case Ogre::PF_A8 : return TF_ALPHA8;
118  case Ogre::PF_L8 : return TF_LUM8;
119  case Ogre::PF_L16 : return TF_LUM16;
120  case Ogre::PF_A4L4 : return TF_ALPHALUM8;
121  default : return TF_UNKNOWN;
122  }
123 }
124 
125 inline Ogre::RenderOperation::OperationType convert(FigureType type)
126 {
127  switch(type){
128  case FT_POINTLIST : return Ogre::RenderOperation::OT_POINT_LIST;
129  case FT_LINELIST : return Ogre::RenderOperation::OT_LINE_LIST;
130  case FT_TRISTRIP : return Ogre::RenderOperation::OT_TRIANGLE_STRIP;
131  case FT_TRILIST :
132  default : return Ogre::RenderOperation::OT_TRIANGLE_LIST;
133  }
134 }
135 
136 inline mat4 convert(const Ogre::Matrix4& m)
137 {
138  mat4 out(
139  m[0][0],m[0][1],m[0][2],m[0][3],
140  m[1][0],m[1][1],m[1][2],m[1][3],
141  m[2][0],m[2][1],m[2][2],m[2][3],
142  m[3][0],m[3][1],m[3][2],m[3][3]
143  );
144 
145  return out;
146 }
147 
156 {
157 public:
159  std::string parentname;
160  ResourceOp(std::string parentname="") : parentname(parentname) {}
162  virtual void op() {}
163 };
164 
166 template<typename T>
167 class CommitOp : public ResourceOp
168 {
169 public:
170  T* obj;
171  CommitOp(T* obj) : ResourceOp(obj->getName()), obj(obj){}
172  virtual void op() { obj->commit(); }
173 };
174 
176 template<typename M>
178 {
179 public:
180  std::string name;
181  RemoveResourceOp(const std::string &name) : name(name) {}
182  virtual void op(){ M::getSingleton().remove(name); }
183 };
184 
187 {
188 public:
189  Ogre::MovableObject* obj;
190  Ogre::SceneNode *node;
192  DestroySceneNodeOp(Ogre::MovableObject* obj,Ogre::SceneNode *node,OgreRenderScene *scene) : obj(obj), node(node),scene(scene) {}
193  virtual void op();
194 };
195 
196 class DLLEXPORT OgreImage : public Image
197 {
198  Ogre::Image img;
199 public:
200  OgreImage(const Ogre::Image& i) :img(i) {}
201  virtual ~OgreImage() {}
202 
203  virtual TextureFormat getFormat() const { return convert(img.getFormat()); }
204  virtual sval getWidth() const { return sval(img.getWidth()); }
205  virtual sval getHeight() const { return sval(img.getHeight()); }
206  virtual sval getDepth() const { return sval(img.getDepth()); }
207 
208  virtual size_t getDataSize() const { return img.getSize(); }
209  virtual u8* getData() { return (u8*)img.getData(); }
210  virtual std::string encode(const std::string& format)
211  {
212  Ogre::DataStreamPtr p= img.encode(format);
213  return p->getAsString();
214  }
215 
216  virtual void fillRealMatrix(RealMatrix* mat) throw(IndexException)
217  {
218  if(getWidth()!=mat->m())
219  throw IndexException("Matrix has incorrect number of columns",mat->m(),getWidth());
220 
221  if(getHeight()!=mat->n())
222  throw IndexException("Matrix has incorrect number of rows",mat->n(),getHeight());
223 
224  const char* data=(const char*)getData();
225 
226  switch(getFormat()){
227  case TF_ALPHA8:
228  case TF_LUM8: convertUByteStreamToRealMatrix(data,mat);break;
229  case TF_LUM16: convertUShortStreamToRealMatrix(data,mat);break;
230 
231  // not used?
232  //case TF_RGBA32: convertRGBA32StreamToRealMatrix(data,mat); break;
233  //case TF_RGB24:
234  //case TF_ALPHALUM8: break;
235 
236  default:
237  Ogre::PixelBox pb=img.getPixelBox();
238  sval w=_min<sval>(getWidth(),mat->m());
239  sval h=_min<sval>(getHeight(),mat->n());
240 
241  for(sval y=0;y<h;y++)
242  for(sval x=0;x<w;x++){
243  Ogre::ColourValue cv=pb.getColourAt(x,y,0);
244  mat->setAt((cv.r+cv.g+cv.b)/3.0,y,x);
245  }
246 
247  }
248  }
249 
250  virtual void fillColorMatrix(ColorMatrix* mat) throw(IndexException)
251  {
252  }
253 };
254 
256 {
257 protected:
258  Ogre::Camera *camera;
259  Ogre::Viewport *port;
262 
263  Ogre::TexturePtr rtt_texture;
264 
265  vec3 position,lookat;
266 public:
267  OgreCamera(Ogre::Camera * camera, Ogre::Viewport *port, OgreRenderScene * scene,u32 id) :
268  camera(camera), port(port), scene(scene),id(id)
269  {
270  rtt_texture.setNull();
271  }
272 
273  virtual ~OgreCamera();
274 
275  virtual const char* getName() const
276  {
277  return camera->getName().c_str();
278  }
279 
280  virtual vec3 getPosition() const { return position;}
281  virtual vec3 getLookAt() const { return lookat;}
282 
283  virtual rotator getRotation() const { return convert(camera->getDerivedOrientation()); }
284 
285  virtual vec3 getScreenPosition(vec3 pos) const
286  {
287  Ogre::Vector4 p = camera->getProjectionMatrix() * camera->getViewMatrix() * Ogre::Vector4(pos.x(),pos.y(),pos.z(),1);
288  real w=port->getActualWidth(),h=port->getActualHeight();
289 
290  return vec3(fround(w*(0.5+0.5*(p.x/p.w))),fround(h*(0.5-0.5*(p.y/p.w))));
291  }
292 
293  virtual mat4 getViewMatrix() const
294  {
295  Ogre::Matrix4 m=camera->getViewMatrix();
296 
297  return convert(m);
298  }
299 
300  virtual mat4 getProjMatrix() const
301  {
302  Ogre::Matrix4 m=camera->getProjectionMatrix();
303 
304  return convert(m);
305  }
306 
307  virtual void setPosition(const vec3& v)
308  {
309  camera->setPosition(v.x(), v.y(), v.z());
310  position=v;
311  }
312 
313  virtual void setLookAt(const vec3 & v)
314  {
315  camera->lookAt(v.x(), v.y(), v.z());
316  lookat=v;
317  }
318 
319  virtual void rotate(const rotator & r)
320  {
321  camera->rotate(convert(r));
322  }
323 
324  virtual void setRotation(const rotator& r)
325  {
326  camera->setOrientation(convert(r));
327  }
328 
329  virtual void setUp(const vec3 & v)
330  {
331  }
332 
333  virtual void setZUp()
334  {
335  // http://www.ogre3d.org/forums/viewtopic.php?f=2&t=62410
336 
337  Ogre::Vector3 look=convert(lookat);
338  Ogre::Vector3 pos=convert(position);
339 
340  Ogre::Vector3 v1 = look - pos;
341  Ogre::Vector3 v2 = v1.crossProduct(Ogre::Vector3::UNIT_Z);
342  Ogre::Vector3 v3 = v2.crossProduct(v1);
343  Ogre::Quaternion rot = camera->getOrientation().yAxis().getRotationTo(v3);
344  camera->rotate(rot);
345  }
346 
347  virtual void setNearClip(real dist)
348  {
349  camera->setNearClipDistance(_max<real>(0.0000001,dist));
350  }
351 
352  virtual void setFarClip(real dist)
353  {
354  camera->setFarClipDistance(_max<real>(0.0000001,dist));
355  }
356 
357  virtual void setVertFOV(real rads)
358  {
359  camera->setFOVy(Ogre::Radian(_max<real>(0.00001,rads)));
360  }
361 
362  virtual real getVertFOV() const
363  {
364  return camera->getFOVy().valueRadians();
365  }
366 
367  virtual real getNearClip() const
368  {
369  return camera->getNearClipDistance();
370  }
371 
372  virtual real getFarClip() const
373  {
374  return camera->getFarClipDistance();
375  }
376 
377  virtual sval getWidth() const
378  {
379  return port->getActualWidth();
380  }
381 
382  virtual sval getHeight() const
383  {
384  return port->getActualHeight();
385  }
386 
387  virtual u32 getVisibilityMask() const
388  {
389  return port->getVisibilityMask();
390  }
391 
392  virtual void setBGColor(const color & c)
393  {
394  port->setBackgroundColour(convert(c));
395  port->setClearEveryFrame(true,c.a()==1.0f ? Ogre::FBT_COLOUR|Ogre::FBT_DEPTH : Ogre::FBT_DEPTH);
396  }
397 
398  virtual void setAspectRatio(real rat)
399  {
400  camera->setAspectRatio(rat);
401  }
402 
403  virtual real getAspectRatio() const
404  {
405  return camera->getAspectRatio();
406  }
407 
408  virtual Ray* getProjectedRay(real x, real y, bool isAbsolute=true) const
409  {
410  if(isAbsolute){
411  real w=port->getActualWidth(),h=port->getActualHeight();
412 
413  if(w>0 && h>0){
414  x/=w;
415  y/=h;
416  }
417  }
418 
419  Ogre::Ray r=camera->getCameraToViewportRay(x,y);
420 
421  return new Ray(convert(r.getPoint(0.0)),convert(r.getDirection()));
422  }
423 
424  virtual void setViewport(real left=0.0f,real top=0.0f,real width=1.0f,real height=1.0f)
425  {
426  port->setDimensions(left,top,width,height);
427  if(camera->getProjectionType()==Ogre::PT_ORTHOGRAPHIC)
428  camera->setOrthoWindow((width-left)*port->getActualWidth(),(height-top)*port->getActualHeight());
429  }
430 
431  virtual void setOrtho(bool isOrtho)
432  {
433  camera->setProjectionType(isOrtho ? Ogre::PT_ORTHOGRAPHIC : Ogre::PT_PERSPECTIVE);
434  }
435 
436  virtual void setWireframe(bool isWireframe)
437  {
438  camera->setPolygonMode(isWireframe ? Ogre::PM_WIREFRAME : Ogre::PM_SOLID);
439  }
440 
441  virtual void setSecondaryCamera(bool secondary)
442  {
443  // primary cameras have 1 as their flag, secondaries have a bit corresponding to ID number
444  port->setVisibilityMask(secondary ? u32(1)<<(id+1) : 1);
445  port->setSkiesEnabled(!secondary); // doesn't work?
446  }
447 
448  virtual bool isPointInViewport(int x, int y) const
449  {
450  x-=port->getActualLeft();
451  y-=port->getActualTop();
452  return x>=0 && x<=port->getActualWidth() && y>=0 && y<=port->getActualHeight();
453  }
454 
455  virtual bool isSecondaryCamera() { return port->getVisibilityMask()!=1; }
456 
457  virtual void renderToFile(const std::string& filename,sval width,sval height, TextureFormat format=TF_RGB24,real stereoOffset=0.0) throw(RenderException)
458  {
459  renderToTexture(width,height,format,stereoOffset);
460  rtt_texture->getBuffer()->getRenderTarget()->writeContentsToFile(filename);
461  }
462 
463  virtual void renderToStream(void* stream,sval width,sval height, TextureFormat format=TF_RGB24,real stereoOffset=0.0) throw(RenderException)
464  {
465  renderToTexture(width,height,format,stereoOffset);
466  Ogre::PixelBox pb(width,height,1,convert(format),stream);
467  rtt_texture->getBuffer()->blitToMemory(pb);
468  }
469 
470  virtual Image* renderToImage(sval width,sval height, TextureFormat format=TF_RGB24,real stereoOffset=0.0) throw(RenderException)
471  {
472  Ogre::Image img;
473  Ogre::PixelFormat pf=convert(format);
474  Ogre::uchar* buf=OGRE_ALLOC_T(Ogre::uchar, Ogre::PixelUtil::getMemorySize(width,height,1,pf), Ogre::MEMCATEGORY_GENERAL);
475 
476  img.loadDynamicImage(buf,width,height,1,pf);
477  renderToStream((u8*)buf,width,height,format,stereoOffset);
478 
479  return new OgreImage(img);
480  }
481 
482 protected:
484  void renderToTexture(sval width,sval height,TextureFormat format,real stereoOffset) throw(RenderException);
485 };
486 
488 {
489  static const sval SPECWIDTH=100;
490 
491 protected:
494 
495  Ogre::MaterialPtr mat;
496  Ogre::Pass* t0p0;
497  Ogre::TextureUnitState* texunit;
501 
502  std::string fragname;
503  std::string geomname;
504  std::string vertname;
505 
506  Ogre::TexturePtr spectex;
507  Ogre::TextureUnitState* specunit;
508 
509 public:
510  OgreMaterial(Ogre::MaterialPtr mat,OgreRenderScene *scene) : mat(mat), scene(scene), bm(BM_ALPHA),
511  t0p0(mat->getTechnique(0)->getPass(0)),texunit(0),_useTexFiltering(true),
512  _isClampTexAddress(false),specunit(0)
513  {
514  mat->setLightingEnabled(true);
515 
516  t0p0->setDepthWriteEnabled(true); // use depth function in depth buffer
517  t0p0->setDepthCheckEnabled(true); // enable depth buffer checking
518  t0p0->setSceneBlending(Ogre::SBT_TRANSPARENT_ALPHA); // use alpha channel when blending pixels into depth buffer
519  t0p0->setAlphaRejectSettings(Ogre::CMPF_GREATER,2); // only draw pixels with an alpha channel value greater than this
520  t0p0->setTransparentSortingEnabled(true);
521  t0p0->setTransparentSortingForced(true);
522  t0p0->setVertexColourTracking(Ogre::TVC_AMBIENT|Ogre::TVC_DIFFUSE);
523  t0p0->setPointSize(2.0);
524  }
525 
526  virtual ~OgreMaterial();
527 
529  virtual Material* clone(const char* name) const;
530 
531  virtual void copyTo(Material* m,bool copyTex=false,bool copySpec=false,bool copyProgs=false) const
532  {
533  m->setAmbient(getAmbient());
534  m->setDiffuse(getDiffuse());
535  m->setSpecular(getSpecular());
536  m->setEmissive(getEmissive());
537 
538  m->setShininess(getShininess());
539  m->setPointSize(getPointSizeMin(),getPointSizeMax());
540  m->setPointSizeAbs(getPointSizeAbs());
541  m->setPointAttenuation(usesPointAttenuation());
542 
543  m->useVertexColor(usesVertexColor());
544  m->useDepthCheck(usesDepthCheck());
545  m->useDepthWrite(usesDepthWrite());
546  m->useTexFiltering(usesTexFiltering());
547  m->clampTexAddress(isClampTexAddress());
548  m->useFlatShading(usesFlatShading());
549  m->useLighting(usesLighting());
550  m->cullBackfaces(isCullBackfaces());
551  m->usePointSprites(usesPointSprites());
552 
553  m->setAlpha(getAlpha());
554  m->useInternalAlpha(usesInternalAlpha());
555  m->setBlendMode(bm);
556 
557  m->setLinearAlpha(isLinearAlpha());
558 
559  if(copyTex)
560  m->setTexture(getTexture());
561 
562  if(copySpec)
563  m->copySpectrumFrom(this);
564 
565  if(copyProgs){
566  m->setGPUProgram(getGPUProgram(PT_VERTEX),PT_VERTEX);
567  m->setGPUProgram(getGPUProgram(PT_FRAGMENT),PT_FRAGMENT);
568  m->setGPUProgram(getGPUProgram(PT_GEOMETRY),PT_GEOMETRY);
569  }
570  }
571 
572  virtual const char* getName() const { return mat->getName().c_str(); }
573 
574  virtual color getAmbient() const { return convert(t0p0->getAmbient()); }
575  virtual color getDiffuse() const { return convert(t0p0->getDiffuse()); }
576  virtual color getSpecular() const { return convert(t0p0->getSpecular()); }
577  virtual color getEmissive() const { return convert(t0p0->getSelfIllumination()); }
578 
579  virtual real getShininess() const { return t0p0->getShininess(); }
580  virtual real getPointSizeMin() const { return t0p0->getPointMinSize(); }
581  virtual real getPointSizeMax() const { return t0p0->getPointMaxSize(); }
582  virtual real getPointSizeAbs() const { return t0p0->getPointSize(); }
583 
584  virtual bool usesPointAttenuation() const { return t0p0->isPointAttenuationEnabled(); }
585 
586  virtual BlendMode getBlendMode() const { return bm; }
587 
588  virtual bool usesVertexColor() const {return t0p0->getVertexColourTracking() !=Ogre::TVC_NONE; }
589  virtual bool usesLighting() const { return t0p0->getLightingEnabled(); }
590  virtual bool usesFlatShading() const { return t0p0->getShadingMode() == Ogre::SO_FLAT; }
591  virtual bool usesDepthCheck() const { return t0p0->getDepthCheckEnabled(); }
592  virtual bool usesDepthWrite() const { return t0p0->getDepthWriteEnabled(); }
593  virtual bool usesTexFiltering() const { return _useTexFiltering; }
594  virtual bool isCullBackfaces() const { return t0p0->getCullingMode()!=Ogre::CULL_NONE; }
595  virtual bool usesPointSprites() const { return t0p0->getPointSpritesEnabled(); }
596  virtual const char* getTexture() const { return texunit!=NULL ? texunit->getTextureName().c_str() : ""; }
597 
598  virtual const char* getGPUProgram(ProgramType pt) const
599  {
600  switch(pt){
601  case PT_FRAGMENT : return fragname.c_str();
602  case PT_GEOMETRY : return geomname.c_str();
603  default:
604  case PT_VERTEX : return vertname.c_str();
605  }
606  }
607 
608  virtual void setAmbient(const color & c) { mat->setAmbient(c.r(),c.g(),c.b()); }
609  virtual void setDiffuse(const color & c) { mat->setDiffuse(c.r(),c.g(),c.b(),useAlpha ? alpha : c.a()); }
610  virtual void setSpecular(const color & c) { mat->setSpecular(c.r(),c.g(),c.b(),useAlpha ? alpha : c.a()); }
611  virtual void setEmissive(const color & c) { mat->setSelfIllumination(c.r(),c.g(),c.b()); }
612  virtual void setShininess(real c) { mat->setShininess(c); }
613 
614  virtual void setPointSize(real min,real max)
615  {
616  t0p0->setPointMinSize(min);
617  t0p0->setPointMaxSize(max);
618  }
619 
620  virtual void setPointSizeAbs(real size)
621  {
622  t0p0->setPointSize(size);
623  }
624 
625  virtual void setPointAttenuation(bool enabled,real constant=0.0f,real linear=1.0f, real quad=0.0f)
626  {
627  t0p0->setPointAttenuation(enabled,constant,linear,quad);
628  }
629 
630  virtual void setBlendMode(BlendMode bm)
631  {
632  this->bm=bm;
633  Ogre::SceneBlendType sbt=Ogre::SBT_TRANSPARENT_ALPHA;
634 
635  switch(bm){
636  case BM_ALPHA:
637  sbt=Ogre::SBT_TRANSPARENT_ALPHA;
638  break;
639  case BM_COLOR:
640  sbt=Ogre::SBT_TRANSPARENT_COLOUR;
641  break;
642  case BM_ADD:
643  sbt=Ogre::SBT_ADD;
644  break;
645  case BM_MOD:
646  sbt=Ogre::SBT_MODULATE;
647  break;
648  case BM_REPLACE:
649  sbt=Ogre::SBT_REPLACE;
650  break;
651  }
652 
653  t0p0->setSceneBlending(sbt);
654  }
655 
656  virtual void usePointSprites(bool useSprites)
657  {
658  t0p0->setPointSpritesEnabled(useSprites);
659  }
660 
661  virtual void useVertexColor(bool use)
662  {
663  t0p0->setVertexColourTracking(use ? (Ogre::TVC_AMBIENT|Ogre::TVC_DIFFUSE) : Ogre::TVC_NONE);
664  }
665 
666  virtual void useLighting(bool use)
667  {
668  t0p0->setLightingEnabled(use);
669  }
670 
671  virtual void useFlatShading(bool use)
672  {
673  t0p0->setShadingMode(use ? Ogre::SO_FLAT : Ogre::SO_GOURAUD);
674  }
675 
676  virtual void useDepthCheck(bool use) { t0p0->setDepthCheckEnabled(use); }
677  virtual void useDepthWrite(bool use) { t0p0->setDepthWriteEnabled(use); }
678 
679  virtual void useTexFiltering(bool use)
680  {
681  _useTexFiltering=use;
682  if(texunit!=NULL)
683  texunit->setTextureFiltering(use ? Ogre::TFO_BILINEAR :Ogre::TFO_NONE);
684  }
685 
686  virtual void clampTexAddress(bool use)
687  {
688  _isClampTexAddress=use;
689  if(texunit!=NULL)
690  texunit->setTextureAddressingMode(use ? Ogre::TextureUnitState::TAM_CLAMP : Ogre::TextureUnitState::TAM_WRAP);
691  }
692 
693  virtual void cullBackfaces(bool cull)
694  {
695  mat->setCullingMode(cull ? Ogre::CULL_CLOCKWISE : Ogre::CULL_NONE);
696  }
697 
698  virtual void setTexture(const char* name);
699 
700  virtual void useSpectrumTexture(bool use);
701 
702  virtual void updateSpectrum();
703 
705  void commit();
706 
707  virtual void setGPUProgram(const std::string& name, ProgramType pt)
708  {
709  Ogre::HighLevelGpuProgramPtr chosenprog=getGPUProgByNumberedName(name);
710  std::string chosenname=(chosenprog.isNull() || chosenprog->hasCompileError())? "" : chosenprog->getName();
711 
712  if(chosenname.size()==0 && strlen(getGPUProgram(pt))==0)
713  return;
714 
715  switch(pt){
716  case PT_FRAGMENT:
717  fragname=name;
718  t0p0->setFragmentProgram(chosenname);
719  break;
720  case PT_GEOMETRY:
721  geomname=name;
722  t0p0->setGeometryProgram(chosenname);
723  break;
724  case PT_VERTEX:
725  vertname=name;
726  t0p0->setVertexProgram(chosenname);
727  break;
728  }
729  }
730 
731  virtual bool setGPUParamInt(ProgramType pt,const std::string& name, int val)
732  {
733  Ogre::GpuProgramParametersSharedPtr params=getGPUParameters(pt);
734 
735  if(!params.isNull() && params->_findNamedConstantDefinition(name)!=NULL){
736  params->setNamedConstant(name,val);
737  return true;
738  }
739 
740  return false;
741  }
742 
743  virtual bool setGPUParamReal(ProgramType pt,const std::string& name, real val)
744  {
745  Ogre::GpuProgramParametersSharedPtr params=getGPUParameters(pt);
746 
747  if(!params.isNull() && params->_findNamedConstantDefinition(name)!=NULL){
748  params->setNamedConstant(name,float(val));
749  return true;
750  }
751 
752  return false;
753  }
754 
755  virtual bool setGPUParamVec3(ProgramType pt,const std::string& name, vec3 val)
756  {
757  Ogre::GpuProgramParametersSharedPtr params=getGPUParameters(pt);
758 
759  if(!params.isNull() && params->_findNamedConstantDefinition(name)!=NULL){
760  params->setNamedConstant(name,convert(val));
761  return true;
762  }
763 
764  return false;
765  }
766 
767  virtual bool setGPUParamColor(ProgramType pt,const std::string& name, color val)
768  {
769  Ogre::GpuProgramParametersSharedPtr params=getGPUParameters(pt);
770 
771  if(!params.isNull() && params->_findNamedConstantDefinition(name)!=NULL){
772  params->setNamedConstant(name,convert(val));
773  return true;
774  }
775 
776  return false;
777  }
778 
779 private:
780  Ogre::HighLevelGpuProgramPtr getGPUProgByNumberedName(const std::string& name)
781  {
782  Ogre::HighLevelGpuProgramPtr result;
783  std::string chosenname="";
784 
785  if(name.size()>0){
786  std::string namebar=name+"|";
787 
788  Ogre::HighLevelGpuProgramManager::ResourceMapIterator i=Ogre::HighLevelGpuProgramManager::getSingleton().getResourceIterator();
789 
790  while(i.hasMoreElements()){
791  Ogre::ResourcePtr p=i.getNext();
792  Ogre::HighLevelGpuProgramPtr prog=Ogre::HighLevelGpuProgramManager::getSingleton().getByName(p->getName()); //i.getNext();
793  std::string pname=prog->getName();
794 
795  if(pname.substr(0,namebar.size())==namebar && (pname.size()>chosenname.size() || pname.compare(name)>0)){
796  chosenname=pname;
797  result=prog;
798  }
799  }
800  }
801 
802  return result;
803  }
804 
805  Ogre::GpuProgramParametersSharedPtr getGPUParameters(ProgramType pt)
806  {
807  Ogre::GpuProgramParametersSharedPtr params;
808  std::string name(getGPUProgram(pt));
809 
810  if(name.size()>0){
811  switch(pt){
812  case PT_FRAGMENT: params=t0p0->getFragmentProgramParameters(); break;
813  case PT_GEOMETRY: params=t0p0->getGeometryProgramParameters(); break;
814  case PT_VERTEX: params=t0p0->getVertexProgramParameters(); break;
815  }
816 
817  if(params.isNull()){
818  Ogre::HighLevelGpuProgramPtr chosenprog=getGPUProgByNumberedName(name);
819 
820  if(!chosenprog.isNull() && !chosenprog->hasCompileError()){
821  params=chosenprog->createParameters();
822 
823  switch(pt){
824  case PT_FRAGMENT: t0p0->setFragmentProgramParameters(params); break;
825  case PT_GEOMETRY: t0p0->setGeometryProgramParameters(params); break;
826  case PT_VERTEX: t0p0->setVertexProgramParameters(params); break;
827  }
828  }
829  }
830  }
831 
832  return params;
833  }
834 };
835 
836 class DLLEXPORT OgreLight : public Light
837 {
838 protected:
839  Ogre::Light* light;
841 
842 public:
843  OgreLight(Ogre::Light* light, OgreRenderScene *scene) : light(light), scene(scene)
844  {}
845 
846  virtual ~OgreLight();
847 
848  virtual void setPosition(vec3 &v) { light->setPosition(convert(v)); }
849  virtual void setDirection(vec3 &v) { light->setDirection(convert(v)); }
850  virtual void setDiffuse(const color & c) { light->setDiffuseColour(convert(c)); }
851  virtual void setSpecular(const color & c) { light->setSpecularColour(convert(c)); }
852 
853  virtual void setDirectional() { light->setType(Ogre::Light::LT_DIRECTIONAL); }
854  virtual void setPoint() { light->setType(Ogre::Light::LT_POINT); }
855  virtual void setSpotlight(real radsInner, real radsOuter, real falloff=1.0f)
856  {
857  light->setType(Ogre::Light::LT_SPOTLIGHT);
858  light->setSpotlightRange(Ogre::Radian(radsInner),Ogre::Radian(radsOuter),falloff);
859  }
860 
861  virtual void setAttenuation(real range, real constant=0.0f,real linear=1.0f, real quad=0.0f)
862  {
863  light->setAttenuation(range,constant,linear,quad);
864  }
865 
866  virtual void setVisible(bool isVisible) { light->setVisible(isVisible); }
867 
868  virtual bool isVisible() const { return light->isVisible(); }
869 };
870 
871 
879 class OgreBaseRenderable : public Ogre::MovableObject, public Ogre::Renderable
880 {
881 public:
883  struct Vertex
884  {
885  float pos[3];
886  float norm[3];
887  Ogre::RGBA col;
888  float tex[3]; // 3D texture coordinates for volume textures
889  };
890 
891 protected:
892 
897 
899  static Ogre::HardwareBuffer::Usage vertexBufferUsage;
901  static Ogre::HardwareBuffer::Usage indexBufferUsage;
902 
903  Ogre::VertexData* vertexData;
904  Ogre::HardwareVertexBufferSharedPtr vertBuf;
905 
906  Ogre::IndexData* indexData;
907 
908  Ogre::RenderOperation::OperationType _opType;
909 
911 
912  size_t _numVertices;
913  size_t _numIndices;
914 
919 
920  Ogre::MaterialPtr mat;
921 
922  Ogre::AxisAlignedBox aabb;
923  Ogre::Real boundRad;
924 
925  Ogre::String movableType;
926 
929 
931 
932 public:
933  OgreBaseRenderable(const std::string& name,const std::string& matname,Ogre::RenderOperation::OperationType opType,Ogre::SceneManager *mgr) throw(RenderException);
934 
935  virtual ~OgreBaseRenderable() { destroyBuffers(); deleteLocalVertBuff(); deleteLocalIndBuff(); }
936 
937  void setParentObjects(Figure *parent,OgreRenderScene *scene) { this->parent=parent; this->scene=scene; }
938 
939  void setDepthSorting(bool val) { depthSorting=val; }
940 
941  Mutex* getMutex() { return &mutex; }
942 
944  virtual void createBuffers(size_t numVerts,size_t numInds,bool deferCreate=false);
945 
947  virtual void destroyBuffers();
948 
949  virtual void _updateRenderQueue(Ogre::RenderQueue* queue) ;
950  virtual void getRenderOperation(Ogre::RenderOperation& op);
951  virtual void _notifyCurrentCamera(Ogre::Camera* cam);
952 
954  Vertex* getLocalVertBuff();
955 
957  indexval* getLocalIndBuff();
958 
960  void commitBuffers(bool commitVert=true, bool commitInd=true);
962  void commitMatrices(const Matrix<Vertex>* verts,const IndexMatrix *inds);
963 
964  void deleteLocalVertBuff() { SAFE_DELETE(localVertBuff); }
965  void deleteLocalIndBuff() { SAFE_DELETE(localIndBuff); }
966 
967  void fillDefaultData(bool deferFill=false);
968 
969  size_t numVertices() const { return _numVertices; }
970  size_t numIndices() const { return _numIndices; }
971 
972  Ogre::RenderOperation::OperationType opType() const { return _opType; }
973 
974  Ogre::HardwareVertexBufferSharedPtr getVertexBuffer() const { return vertBuf; }
975  Ogre::HardwareIndexBufferSharedPtr getIndexBuffer() const { return indexData->indexBuffer;}
976 
977  virtual const Ogre::MaterialPtr& getMaterial() const { return mat; }
978 
979  virtual void setMaterial(const Ogre::MaterialPtr& m) { mat=m; }
980  virtual void setMaterial(const std::string &m) throw(RenderException)
981  {
982  try{
983  Ogre::MaterialPtr mattemp=Ogre::MaterialManager::getSingleton().getByName(m);
984 
985  if(mattemp.isNull()){
986  std::ostringstream out;
987  out << "Cannot find material " << m;
988  throw RenderException(out.str());
989  }
990  else
991  mat=mattemp;
992  } catch(Ogre::Exception &e){
993  THROW_RENDEREX(e);
994  }
995  }
996 
997  virtual void getWorldTransforms(Ogre::Matrix4 *xform) const { *xform = _getParentNodeFullTransform(); }
998 
999  virtual Ogre::Real getSquaredViewDepth(const Ogre::Camera* cam) const { return mParentNode->getSquaredViewDepth(cam); }
1000 
1001  virtual const Ogre::LightList& getLights() const { return queryLights(); }
1002 
1003  virtual const Ogre::String& getMovableType() const { return movableType; }
1004 
1005  virtual const Ogre::AxisAlignedBox& getBoundingBox() const { return aabb; }
1006 
1007  virtual Ogre::Real getBoundingRadius() const { return boundRad; }
1008 
1009  virtual void setBoundingBox(vec3 minv, vec3 maxv)
1010  {
1011  aabb.setExtents(convert(minv),convert(maxv));
1012  boundRad=Ogre::Math::boundingRadiusFromAABB(aabb);
1013  }
1014 
1015  virtual void visitRenderables(Ogre::Renderable::Visitor* visitor, bool debugRenderables) { visitor->visit(this, 0, false); }
1016 };
1017 
1027 template<typename T,typename F> // T <: OgreBaseRenderable, F <: Figure
1028 class OgreBaseFigure : public F
1029 {
1030 protected:
1031  T* obj;
1032  Ogre::SceneNode *node;
1034 
1035 public:
1036  OgreBaseFigure(T* obj,Ogre::SceneNode *node, OgreRenderScene *scene) : obj(obj),node(node),scene(scene) { if(obj) obj->setParentObjects(this,scene); }
1037 
1038  virtual ~OgreBaseFigure() { destroySceneNode(node,obj,scene); }
1039 
1040  T* getRenderable() const { return obj; }
1041 
1042  virtual const char* getName() { return obj->getName().c_str(); }
1043  virtual void setPosition(const vec3& v) { node->setPosition(convert(v)); }
1044  virtual void setRotation(const rotator& r) { node->setOrientation(convert(r)); }
1045  virtual void setScale(const vec3 &v) { node->setScale(convert(v)); }
1046 
1047  virtual void setMaterial(const char* mat) throw(RenderException) { obj->setMaterial(mat); }
1048 
1049  virtual const char* getMaterial() const
1050  {
1051  Ogre::MaterialPtr mat=obj->getMaterial();
1052  return mat.isNull() ? "" : mat->getName().c_str();
1053  }
1054 
1055  virtual std::pair<vec3,vec3> getAABB() const
1056  {
1057  Ogre::AxisAlignedBox aabb=obj->getBoundingBox();
1058  return std::pair<vec3,vec3>(convert(aabb.getMinimum()),convert(aabb.getMaximum()));
1059  }
1060 
1061  virtual void setParent(Figure *fig) { setNodeFigParent(node,fig,scene); }
1062 
1063  void setCameraVisibility(const Camera* cam, bool isVisible)
1064  {
1065  OgreRenderTypes::setCameraVisibility(cam,obj,isVisible,scene);
1066  }
1067 
1068  void setVisible(bool isVisible)
1069  {
1070  if(obj && node->numAttachedObjects()==0)
1071  node->attachObject(obj);
1072 
1073  node->setVisible(isVisible);
1074  }
1075 
1076  virtual bool isVisible() const { return obj && obj->isVisible(); }
1077 
1078  virtual bool isTransparent() const
1079  {
1080  return getRenderQueue()==Ogre::RENDER_QUEUE_6;
1081  }
1082 
1083  virtual bool isOverlay() const
1084  {
1085  return getRenderQueue()==Ogre::RENDER_QUEUE_OVERLAY;
1086  }
1087 
1088  virtual void setTransparent(bool isTrans)
1089  {
1090  setRenderQueue(isTrans ? Ogre::RENDER_QUEUE_6 : Ogre::RENDER_QUEUE_MAIN);
1091  }
1092 
1093  virtual void setOverlay(bool isOverlay)
1094  {
1095  setRenderQueue(isOverlay ? Ogre::RENDER_QUEUE_OVERLAY : Ogre::RENDER_QUEUE_MAIN);
1096  }
1097 
1098  virtual void setRenderQueue(sval queue)
1099  {
1100  if(queue<=Ogre::RENDER_QUEUE_MAX)
1101  obj->setRenderQueueGroup((Ogre::uint8)queue);
1102  }
1103  virtual sval getRenderQueue() const { return obj->getRenderQueueGroup(); }
1104 
1105  virtual vec3 getPosition(bool isDerived=false) const
1106  {
1107  Ogre::Vector3 v=node->getPosition();
1108 
1109  if(isDerived){
1110  node->needUpdate();
1111  v=node->_getDerivedPosition();
1112  }
1113 
1114  return convert(v);
1115  }
1116 
1117  virtual vec3 getScale(bool isDerived=false) const
1118  {
1119  Ogre::Vector3 v=node->getScale();
1120 
1121  if(isDerived){
1122  node->needUpdate();
1123  v=node->_getDerivedScale();
1124  }
1125 
1126  return convert(v);
1127  }
1128 
1129  virtual rotator getRotation(bool isDerived=false) const
1130  {
1131  Ogre::Quaternion q=node->getOrientation();
1132 
1133  if(isDerived){
1134  node->needUpdate();
1135  q=node->_getDerivedOrientation();
1136  }
1137 
1138  return convert(q);
1139  }
1140 
1141 };
1142 
1143 class DLLEXPORT OgreFigure : public OgreBaseFigure<OgreBaseRenderable,Figure>
1144 {
1145 protected:
1147 
1148 public:
1149  OgreFigure(const std::string& name,const std::string & matname,OgreRenderScene *scene,FigureType type) throw(RenderException);
1150 
1151  virtual ~OgreFigure(){}
1152 
1153  virtual void fillData(const VertexBuffer* vb, const IndexBuffer* ib,bool deferFill=false,bool doubleSided=false) throw(RenderException) ;
1154 };
1155 
1157 {
1158 protected:
1159  typedef std::vector<Ogre::BillboardSet*> bbsetlist;
1160  static const size_t SETSIZE=10000;
1161 
1162  Ogre::SceneNode *node;
1164  std::string matname;
1167 
1170 
1171  bbsetlist sets;
1172  std::string name;
1173 
1176 
1178 
1179 public:
1180  OgreBBSetFigure(const std::string & name,const std::string & matname,OgreRenderScene *scene,FigureType type) throw(RenderException);
1181 
1182  virtual ~OgreBBSetFigure();
1183 
1184  virtual void setParent(Figure *fig)
1185  {
1186  setNodeFigParent(node,fig,scene);
1187  }
1188 
1189  virtual const char* getName() { return name.c_str(); }
1190 
1191  virtual void setMaterial(const char* mat) throw(RenderException)
1192  {
1193  try{
1194  for(bbsetlist::iterator i=sets.begin();i!=sets.end();++i)
1195  (*i)->setMaterialName(mat);
1196  }
1197  catch(Ogre::Exception &e){
1198  THROW_RENDEREX(e);
1199  }
1200  }
1201 
1202  virtual const char* getMaterial() const
1203  {
1204  if(sets.size()==0)
1205  return "";
1206 
1207  Ogre::MaterialPtr mat=sets[0]->getMaterial();
1208  return mat.isNull() ? "" : mat->getName().c_str();
1209  }
1210 
1211  virtual std::pair<vec3,vec3> getAABB() const
1212  {
1213  vec3 minv,maxv;
1214 
1215  if(sets.size()>0){
1216  Ogre::AxisAlignedBox aabb=sets[0]->getBoundingBox();
1217  for(size_t i=1;i<sets.size();i++)
1218  aabb=aabb.intersection(sets[i]->getBoundingBox());
1219 
1220  minv=convert(aabb.getMinimum());
1221  maxv=convert(aabb.getMaximum());
1222  }
1223 
1224  return std::pair<vec3,vec3>(minv,maxv);
1225  }
1226 
1227  virtual void commit();
1228 
1229  virtual void fillData(const VertexBuffer* vb, const IndexBuffer* ib,bool deferFill=false,bool doubleSided=false) throw(RenderException) ;
1230 
1231  virtual void setVisible(bool isVisible);
1232 
1233  virtual void setCameraVisibility(const Camera* cam, bool isVisible);
1234 
1235  virtual bool isVisible() const
1236  {
1237  return sets.size()>0 && sets[0]->isVisible();
1238  }
1239 
1240  virtual bool isTransparent() const
1241  {
1242  return getRenderQueue()==Ogre::RENDER_QUEUE_6;
1243  }
1244 
1245  virtual bool isOverlay() const
1246  {
1247  return getRenderQueue()==Ogre::RENDER_QUEUE_OVERLAY;
1248  }
1249 
1250  virtual void setTransparent(bool isTrans)
1251  {
1252  setRenderQueue(isTrans ? Ogre::RENDER_QUEUE_6 : Ogre::RENDER_QUEUE_MAIN);
1253  }
1254 
1255  virtual void setOverlay(bool isOverlay)
1256  {
1257  setRenderQueue(isOverlay ? Ogre::RENDER_QUEUE_OVERLAY : Ogre::RENDER_QUEUE_MAIN);
1258  }
1259 
1260  virtual void setRenderQueue(sval queue)
1261  {
1262  if(queue<=Ogre::RENDER_QUEUE_MAX)
1263  for(bbsetlist::iterator i=sets.begin();i!=sets.end();++i)
1264  (*i)->setRenderQueueGroup((Ogre::uint8)queue);
1265  }
1266  virtual sval getRenderQueue() const { return sets.size()>0 ? sets[0]->getRenderQueueGroup() : 0; }
1267 
1268  virtual void setDimension(real width, real height)
1269  {
1270  this->width=width;
1271  this->height=height;
1272  for(bbsetlist::iterator i=sets.begin();i!=sets.end();++i)
1273  (*i)->setDefaultDimensions(width,height);
1274  }
1275 
1276  virtual real getWidth() const { return width; }
1277  virtual real getHeight() const { return height; }
1278 
1279  virtual void setUpVector(const vec3& v)
1280  {
1281  for(bbsetlist::iterator i=sets.begin();i!=sets.end();++i)
1282  (*i)->setCommonUpVector(convert(v));
1283  }
1284 
1285  virtual int numBillboards() const
1286  {
1287  int count=0;
1288  for(bbsetlist::const_iterator i=sets.begin();i!=sets.end();++i)
1289  count+=(*i)->getNumBillboards();
1290 
1291  return count;
1292  }
1293 
1294  virtual void setBillboardPos(indexval index, const vec3& pos) throw(IndexException)
1295  {
1296  Ogre::Billboard *b=getBillboard(index);
1297  b->mPosition=convert(pos);
1298  }
1299 
1300  virtual void setBillboardDir(indexval index, const vec3& dir) throw(IndexException)
1301  {
1302  Ogre::Billboard *b=getBillboard(index);
1303  b->mDirection=convert(dir);
1304  }
1305 
1306  virtual void setBillboardColor(indexval index, const color& col) throw(IndexException)
1307  {
1308  Ogre::Billboard *b=getBillboard(index);
1309  b->mColour=convert(col);
1310  }
1311 
1312  virtual void setPosition(const vec3& v) { node->setPosition(convert(v)); }
1313  virtual void setRotation(const rotator& r) { node->setOrientation(convert(r)); }
1314  virtual void setScale(const vec3 &v) { node->setScale(convert(v)); }
1315 
1316  virtual vec3 getPosition(bool isDerived=false) const
1317  {
1318  Ogre::Vector3 v=node->getPosition();
1319 
1320  if(isDerived){
1321  node->needUpdate();
1322  v=node->_getDerivedPosition();
1323  }
1324 
1325  return convert(v);
1326  }
1327 
1328  virtual vec3 getScale(bool isDerived=false) const
1329  {
1330  Ogre::Vector3 v=node->getScale();
1331 
1332  if(isDerived){
1333  node->needUpdate();
1334  v=node->_getDerivedScale();
1335  }
1336 
1337  return convert(v);
1338  }
1339 
1340  virtual rotator getRotation(bool isDerived=false) const
1341  {
1342  Ogre::Quaternion q=node->getOrientation();
1343 
1344  if(isDerived){
1345  node->needUpdate();
1346  q=node->_getDerivedOrientation();
1347  }
1348 
1349  return convert(q);
1350  }
1351 
1352 protected:
1353  void createBBSet();
1354 
1355  Ogre::Billboard* getBillboard(indexval index) const throw(IndexException) {
1356  for(bbsetlist::const_iterator i=sets.begin();index<(indexval)numBillboards() && i!=sets.end();++i)
1357  if(index<(indexval)(*i)->getNumBillboards())
1358  return (*i)->getBillboard(index);
1359  else
1360  index-=(*i)->getNumBillboards();
1361 
1362  throw IndexException("index",index,numBillboards());
1363  }
1364 };
1365 
1366 class DLLEXPORT OgreRibbonFigure : public RibbonFigure, public Ogre::RenderObjectListener
1367 {
1368 protected:
1369  Ogre::BillboardChain *bbchain;
1370  Ogre::SceneNode *node;
1372  std::string matname;
1373  std::string name;
1375 
1379 
1381 
1382 public:
1383  OgreRibbonFigure(const std::string & name,const std::string & matname,OgreRenderScene *scene) throw(RenderException);
1384  virtual ~OgreRibbonFigure();
1385 
1386  virtual void setParent(Figure *fig)
1387  {
1388  setNodeFigParent(node,fig,scene);
1389  }
1390 
1391  virtual void notifyRenderSingleObject(Ogre::Renderable* rend, const Ogre::Pass* pass, const Ogre::AutoParamDataSource* source,
1392  const Ogre::LightList* pLightList, bool suppressRenderStateChanges)
1393  {
1394  if(isVisible())
1395  setOrientation(orient);
1396  }
1397 
1398  virtual const char* getName() { return name.c_str(); }
1399 
1400  virtual void setMaterial(const char* mat) throw(RenderException)
1401  {
1402  try{
1403  bbchain->setMaterialName(mat);
1404  }
1405  catch(Ogre::Exception &e){
1406  THROW_RENDEREX(e);
1407  }
1408  }
1409 
1410  virtual const char* getMaterial() const
1411  {
1412  Ogre::MaterialPtr mat=bbchain->getMaterial();
1413  return mat.isNull() ? "" : mat->getName().c_str();
1414  }
1415 
1416  virtual std::pair<vec3,vec3> getAABB() const
1417  {
1418  Ogre::AxisAlignedBox aabb=bbchain->getBoundingBox();
1419  return std::pair<vec3,vec3>(convert(aabb.getMinimum()),convert(aabb.getMaximum()));
1420  }
1421 
1422  virtual void commit();
1423 
1424  virtual void fillData(const VertexBuffer* vb, const IndexBuffer* ib,bool deferFill=false,bool doubleSided=false) throw(RenderException);
1425 
1426  virtual void setVisible(bool isVisible)
1427  {
1428  node->setVisible(isVisible);
1429  }
1430 
1431  virtual void setCameraVisibility(const Camera* cam, bool isVisible);
1432 
1433  virtual bool isVisible() const { return bbchain->isVisible(); }
1434 
1435  virtual bool isTransparent() const
1436  {
1437  return getRenderQueue()==Ogre::RENDER_QUEUE_6;
1438  }
1439 
1440  virtual bool isOverlay() const
1441  {
1442  return getRenderQueue()==Ogre::RENDER_QUEUE_OVERLAY;
1443  }
1444 
1445  virtual void setTransparent(bool isTrans)
1446  {
1447  setRenderQueue(isTrans ? Ogre::RENDER_QUEUE_6 : Ogre::RENDER_QUEUE_MAIN);
1448  }
1449 
1450  virtual void setOverlay(bool isOverlay)
1451  {
1452  setRenderQueue(isOverlay ? Ogre::RENDER_QUEUE_OVERLAY : Ogre::RENDER_QUEUE_MAIN);
1453  }
1454 
1455  virtual void setRenderQueue(sval queue)
1456  {
1457  if(queue<=Ogre::RENDER_QUEUE_MAX)
1458  bbchain->setRenderQueueGroup((Ogre::uint8)queue);
1459  }
1460 
1461  virtual sval getRenderQueue() const { return bbchain->getRenderQueueGroup(); }
1462 
1463  virtual void setPosition(const vec3& v) { node->setPosition(convert(v)); }
1464  virtual void setRotation(const rotator& r) { node->setOrientation(convert(r)); }
1465  virtual void setScale(const vec3 &v) { node->setScale(convert(v)); }
1466 
1467  virtual vec3 getPosition(bool isDerived=false) const
1468  {
1469  Ogre::Vector3 v=node->getPosition();
1470 
1471  if(isDerived){
1472  node->needUpdate();
1473  v=node->_getDerivedPosition();
1474  }
1475 
1476  return convert(v);
1477  }
1478 
1479  virtual vec3 getScale(bool isDerived=false) const
1480  {
1481  Ogre::Vector3 v=node->getScale();
1482 
1483  if(isDerived){
1484  node->needUpdate();
1485  v=node->_getDerivedScale();
1486  }
1487 
1488  return convert(v);
1489  }
1490 
1491  virtual rotator getRotation(bool isDerived=false) const
1492  {
1493  Ogre::Quaternion q=node->getOrientation();
1494 
1495  if(isDerived){
1496  node->needUpdate();
1497  q=node->_getDerivedOrientation();
1498  }
1499 
1500  return convert(q);
1501  }
1502 
1503  virtual void setOrientation(const vec3& orient)
1504  {
1505  this->orient=orient;
1506  bbchain->setFaceCamera(orient.isZero(),convert(orient));
1507  }
1508 
1509  virtual bool isCameraOriented() const { return !orient.isZero(); }
1510 
1511  virtual vec3 getOrientation() const { return orient; }
1512 
1513  virtual void setNumRibbons(sval num)
1514  {
1515  bbchain->setNumberOfChains(num);
1516  }
1517 
1518  virtual sval numRibbons() const { return bbchain->getNumberOfChains(); }
1519 
1520  virtual sval numNodes(sval ribbon) const throw(IndexException)
1521  {
1522  if(ribbon>=numRibbons())
1523  throw IndexException("ribbon",ribbon,numRibbons());
1524 
1525  return bbchain->getNumChainElements(ribbon);
1526  }
1527 
1528  virtual void setMaxNodes(sval num)
1529  {
1530  bbchain->setMaxChainElements(num);
1531  }
1532 
1533  virtual sval getMaxNodes()
1534  {
1535  return bbchain->getMaxChainElements();
1536  }
1537 
1538  virtual void clearRibbons()
1539  {
1540  bbchain->clearAllChains();
1541  }
1542 
1543  virtual void removeRibbon(sval ribbon) throw(IndexException)
1544  {
1545  if(ribbon>=numRibbons())
1546  throw IndexException("ribbon",ribbon,numRibbons());
1547 
1548  bbchain->clearChain(ribbon);
1549  }
1550 
1551  virtual void removeNode(sval ribbon) throw(IndexException)
1552  {
1553  if(ribbon>=numRibbons())
1554  throw IndexException("ribbon",ribbon,numRibbons());
1555 
1556  bbchain->removeChainElement(ribbon);
1557  }
1558 
1559  virtual void addNode(sval ribbon,const vec3& pos, const color& col,real width, const rotator& rot=rotator(), real tex=0.0) throw(IndexException)
1560  {
1561  if(ribbon>=numRibbons())
1562  throw IndexException("ribbon",ribbon,numRibbons());
1563 
1564  Ogre::BillboardChain::Element elem(convert(pos),width,tex,convert(col),convert(rot));
1565  bbchain->addChainElement(ribbon,elem);
1566  }
1567 
1568  virtual void setNode(sval ribbon,sval node,const vec3& pos, const color& col,real width, const rotator& rot=rotator(), real tex=0.0) throw(IndexException)
1569  {
1570  if(ribbon>=numRibbons())
1571  throw IndexException("ribbon",ribbon,numRibbons());
1572 
1573  if(node>=numNodes(ribbon))
1574  throw IndexException("node",node,numNodes(ribbon));
1575 
1576  Ogre::BillboardChain::Element elem(convert(pos),width,tex,convert(col),convert(rot));
1577  bbchain->updateChainElement(ribbon,node,elem);
1578  }
1579 
1580  virtual vec3 getNode(sval ribbon,sval node) throw(IndexException)
1581  {
1582  if(ribbon>=numRibbons())
1583  throw IndexException("ribbon",ribbon,numRibbons());
1584 
1585  if(node>=numNodes(ribbon))
1586  throw IndexException("node",node,numNodes(ribbon));
1587 
1588  const Ogre::BillboardChain::Element &elem=bbchain->getChainElement(ribbon,node);
1589  return convert(elem.position);
1590  }
1591 
1593  {
1594  if(ribbon>=numRibbons())
1595  throw IndexException("ribbon",ribbon,numRibbons());
1596 
1597  if(node>=numNodes(ribbon))
1598  throw IndexException("node",node,numNodes(ribbon));
1599 
1600  const Ogre::BillboardChain::Element &elem=bbchain->getChainElement(ribbon,node);
1601 
1602  return quadruple<color,real,rotator,real>(convert(elem.colour),elem.width,convert(elem.orientation),elem.texCoord);
1603  }
1604 };
1605 
1607 
1609 {
1613 
1614  real heights[8];
1615  intersect bbintersects[6]; // stores the plane intersections with the bound box as index pairs plus xi value
1616  planevert interpts[6]; // stores the vertices where the plane intersects the bound box, which defines a (3,4,5,or 6)-sided polygon
1617 
1618  Matrix<OgreBaseRenderable::Vertex> vertices; // temporary store for calculated plane vertices
1619  IndexMatrix indices; // temporary store for calculated plane triangle indices
1620 
1621 public:
1622  TextureVolumeRenderable(const std::string &name,const std::string & matname,OgreTextureVolumeFigure *fig,Ogre::SceneManager *mgr)
1623  : OgreBaseRenderable(name,matname,Ogre::RenderOperation::OT_TRIANGLE_LIST ,mgr),
1624  fig(fig),vertices("tprverts",0,1,false), indices("tprinds",0,3,false)
1625  {
1626  depthSorting=false;
1627  }
1628 
1630 
1631  virtual void _updateRenderQueue(Ogre::RenderQueue* queue);
1632  virtual void _notifyCurrentCamera(Ogre::Camera* cam);
1633 
1634  std::pair<sval,planevert*> getPlaneIntersects(vec3 planept,vec3 planenorm);
1635 };
1636 
1637 class DLLEXPORT OgreTextureVolumeFigure : public OgreBaseFigure<TextureVolumeRenderable,TextureVolumeFigure>
1638 {
1641 
1646 
1647  vec3 boundcube[8]; // bound box cube, not axis aligned
1648  vec3 texcube[8]; // tex coordinates for each corner of the volume, axis-aligned in uvw space
1649 
1650  Ogre::RGBA vertexcol;
1651 
1652  void setCube(vec3 *cube,const vec3& minv, const vec3& maxv)
1653  {
1654  cube[0]=minv;
1655  cube[7]=maxv;
1656  cube[1]=vec3(maxv.x(),minv.y(),minv.z());
1657  cube[2]=vec3(minv.x(),maxv.y(),minv.z());
1658  cube[3]=vec3(maxv.x(),maxv.y(),minv.z());
1659  cube[4]=vec3(minv.x(),minv.y(),maxv.z());
1660  cube[5]=vec3(maxv.x(),minv.y(),maxv.z());
1661  cube[6]=vec3(minv.x(),maxv.y(),maxv.z());
1662  }
1663 
1664 public:
1666 
1667  OgreTextureVolumeFigure(const std::string &name,const std::string & matname,OgreRenderScene *scene) ;
1668 
1670 
1671  virtual void setNumPlanes(sval num){ numplanes=_max<sval>(1,num);}
1672  virtual sval getNumPlanes() const { return numplanes; }
1673 
1674  virtual real getAlpha() const { return alpha;}
1675  virtual void setAlpha(real a)
1676  {
1677  alpha=a;
1678  Ogre::RenderSystem* rs=Ogre::Root::getSingleton().getRenderSystem();
1679  rs->convertColourValue(Ogre::ColourValue(1.0f,1.0f,1.0f,alpha),&vertexcol);
1680  }
1681 
1682  virtual void setTexAABB(const vec3& minv, const vec3& maxv)
1683  {
1684  setCube(texcube,minv,maxv);
1685  }
1686 
1687  virtual void setAABB(const vec3& minv, const vec3& maxv)
1688  {
1689  if(minv.distTo(maxv)>0){
1690  bbminv=minv;
1691  bbmaxv=maxv;
1692  setCube(boundcube,minv,maxv);
1693  bbcenter=(maxv+minv)*0.5;
1694  bbradius=bbmaxv.distTo(bbcenter);
1695 
1696  vec3 minv1=minv, maxv1=maxv;
1697  minv1.setMinVals(maxv);
1698  maxv1.setMaxVals(minv);
1699  obj->setBoundingBox(minv1,maxv1);
1700  node->needUpdate();
1701  }
1702  }
1703 
1704  virtual vec3 getTexXiPos(vec3 pos) const
1705  {
1706  vec3 tpos=getTransform().inverse()*pos;
1707  vec3 relpos=lerpXi<vec3>(tpos,bbminv,bbmaxv);
1708 
1709  return lerp<vec3,vec3>(relpos,texcube[0],texcube[7]);
1710  }
1711 
1712  virtual vec3 getTexXiDir(vec3 pos) const
1713  {
1714  return ((getTransform().directional().inverse()*pos)*(bbmaxv-bbminv)).norm();
1715  }
1716 
1717  virtual sval getPlaneIntersects(vec3 planept, vec3 planenorm,vec3 buffer[6][2],bool transformPlane=false,bool isXiPoint=false)
1718  {
1719  transform t=getTransform(true);
1720 
1721  if(transformPlane){
1722  transform tinv=t.inverse();
1723  planept=tinv*planept;
1724  planenorm=tinv.directional()*planenorm;
1725  }
1726  else if(isXiPoint){
1727  real coeffs[8];
1728  basis_Hex1NL(planept.x(),planept.y(),planept.z(),coeffs);
1729  planept=vec3();
1730  for(sval i=0;i<8;i++)
1731  planept=planept+boundcube[i]*coeffs[i];
1732  }
1733 
1734  std::pair<sval,planevert*> result= obj->getPlaneIntersects(planept,planenorm.norm());
1735 
1736  for(sval i=0;i<result.first;i++){
1737  buffer[i][0]=transformPlane ? result.second[i].first*t : result.second[i].first;
1738  buffer[i][1]=result.second[i].second;
1739  }
1740 
1741  return result.first;
1742  }
1743 };
1744 
1745 class DLLEXPORT OgreGlyphFigure : public OgreBaseFigure<OgreBaseRenderable,GlyphFigure>
1746 {
1748  typedef std::map<std::string,glyphmesh> glyphmap;
1749 
1750  std::string glyphname;
1751  glyphmap glyphs;
1753 
1754  static void fillDefaultGlyphs(glyphmap &map);
1755 
1756 public:
1757  OgreGlyphFigure(const std::string& name,const std::string & matname,OgreRenderScene *scene) throw(RenderException);
1758  virtual ~OgreGlyphFigure(){}
1759 
1760  virtual void fillData(const VertexBuffer* vb, const IndexBuffer* ib,bool deferFill=false,bool doubleSided=false) throw(RenderException);
1761 
1762  virtual void setGlyphScale(vec3 v) { glyphscale=v; }
1763  virtual vec3 getGlyphScale() const { return glyphscale; }
1764  virtual void setGlyphName(const std::string& name)
1765  {
1766  if(glyphs.find(name)!=glyphs.end())
1767  glyphname=name;
1768  }
1769 
1770  virtual std::string getGlyphName() const {return glyphname; }
1771 
1772  virtual void addGlyphMesh(const std::string& name,const Vec3Matrix* nodes,const Vec3Matrix* norms, const IndexMatrix* inds)
1773  {
1774  glyphmap::iterator i=glyphs.find(name);
1775 
1776  if(i!=glyphs.end()){
1777  delete (*i).second.first;
1778  delete (*i).second.second;
1779  delete (*i).second.third;
1780  }
1781 
1782  glyphs[name]=glyphmesh(nodes->clone(),norms->clone(),inds->clone());
1783  }
1784 };
1785 
1787 {
1788  struct TextVertex
1789  {
1790  float x,y,z,u,v;
1791 
1792  void set(float _x, float _y, float _z, float _u, float _v, vec3& min, vec3& max)
1793  {
1794  x=_x;
1795  y=_y;
1796  z=_z;
1797  u=_u;
1798  v=_v;
1799  vec3 p(x,y,z);
1800  min.setMinVals(p);
1801  max.setMaxVals(p);
1802  }
1803  };
1804 
1805 public:
1806  std::string text;
1807  std::string fontname;
1808  std::string internalMatName;
1814 
1819 
1820  Ogre::HardwareVertexBufferSharedPtr colBuf;
1821 
1822  Ogre::Font *fontobj;
1823 
1824  TextRenderable(const std::string &name,Ogre::SceneManager *mgr):
1825  OgreBaseRenderable(name,"BaseWhite",Ogre::RenderOperation::OT_TRIANGLE_LIST ,mgr),isOverlay(false),
1826  updateCols(true), updateGeom(true),valign(V_TOP), halign(H_LEFT),textHeight(1.0),spaceWidth(0),
1827  isCameraAligned(true),fontname("DefaultFont"),fontobj(NULL),text("<NULL>")
1828  {
1829  movableType="MovableText";
1830  internalMatName=name+"TextMat";
1831  colBuf.setNull();
1832  setBoundingBox(vec3(),vec3(1)); // need to have a non-zero bound box to be visible
1833  }
1834 
1836  {
1837  if(!mat.isNull() && mat->getName()==internalMatName)
1838  Ogre::MaterialManager::getSingletonPtr()->remove(mat->getName());
1839  }
1840 
1841  virtual void setOverlay(bool isOverlay)
1842  {
1843  this->isOverlay=isOverlay;
1844  if(!mat.isNull()){
1845  mat->setDepthBias(1.0,1.0);
1846  mat->setDepthCheckEnabled(!isOverlay);
1847  mat->setDepthWriteEnabled(isOverlay);
1848  }
1849  }
1850 
1851  virtual void setFont(const std::string& fontname) throw(RenderException);
1852 
1853 protected:
1854  // binding index values
1855  static const short POS_TEX_BINDING=0;
1856  static const short COLOUR_BINDING=1;
1857 
1858  void updateColors();
1859  void updateGeometry();
1860 
1861  virtual void _notifyCurrentCamera(Ogre::Camera *cam);
1862  virtual void _updateRenderQueue(Ogre::RenderQueue* queue);
1863 
1864  virtual void visitRenderables(Ogre::Renderable::Visitor* visitor, bool debugRenderables){} // Add to build on Shoggoth (?)
1865 };
1866 
1867 // adapted from the MovableText type in http://www.ogre3d.org/tikiwiki/tiki-index.php?page=MovableText
1868 class DLLEXPORT OgreTextFigure : public OgreBaseFigure<TextRenderable,TextFigure>
1869 {
1870 public:
1871  OgreTextFigure(const std::string& name,OgreRenderScene *scene) throw(RenderException);
1872  virtual ~OgreTextFigure() {}
1873 
1874  virtual void setText(const std::string& text) { obj->text=text.size() ? text : "<NULL>"; obj->updateGeom=true; }
1875  virtual void setFont(const std::string& fontname) throw(RenderException) { obj->setFont(fontname);}
1876  virtual void setColor(const color& col) { obj->col=col; obj->updateCols=true; }
1877 
1878  virtual void setVAlign(VAlignType align){ obj->valign=align; obj->updateGeom=true; }
1879  virtual void setHAlign(HAlignType align){ obj->halign=align; obj->updateGeom=true; }
1880  virtual void setTextHeight(real height){ obj->textHeight=height; obj->updateGeom=true; }
1881  virtual void setSpaceWidth(real width) { obj->spaceWidth=width; obj->updateGeom=true; }
1882 
1883  virtual void setCameraAlign(bool align) { obj->isCameraAligned = align; }
1884 
1885  virtual std::string getText() const { return obj->text;}
1886  virtual std::string getFont() const { return obj->fontname;}
1887  virtual color getColor() const { return obj->col; }
1888 
1889  virtual VAlignType getVAlign() const { return obj->valign; }
1890  virtual HAlignType getHAlign() const { return obj->halign; }
1891  virtual real getTextHeight() const { return obj->textHeight; }
1892  virtual real getSpaceWidth() const { return obj->spaceWidth; }
1893 
1894  virtual bool isCameraAligned() const { return obj->isCameraAligned; }
1895 
1896  //virtual void setMaterial(const std::string &m) throw(RenderException)
1897  //{} // do not accept externally applied materials, this will mess up the internal material used to present text textures
1898 
1899  virtual void setOverlay(bool isOverlay)
1900  {
1901  OgreBaseFigure::setOverlay(isOverlay);
1902  obj->setOverlay(isOverlay);
1903  }
1904 };
1905 
1911 {
1912 protected:
1915 
1916  std::string filename;
1917  Ogre::TexturePtr ptr;
1919  size_t sizeBytes;
1920 
1921 public:
1922  OgreTexture(Ogre::TexturePtr ptr,const char *filename,OgreRenderScene *scene):
1923  ptr(ptr),filename(filename), scene(scene),buffer(0),sizeBytes(ptr->getBuffer()->getSizeInBytes())
1924  {}
1925 
1926  virtual ~OgreTexture();
1927 
1928  virtual void commit();
1929 
1930  virtual Ogre::PixelBox getPixelBuffer()
1931  {
1932  if(!buffer)
1933  buffer=new u8[sizeBytes];
1934 
1935  return Ogre::PixelBox(ptr->getWidth(),ptr->getHeight(),ptr->getDepth(),ptr->getFormat(),buffer);
1936  }
1937 
1938  virtual const char* getFilename() const {return filename.c_str();}
1939  virtual const char* getName() const { return ptr->getName().c_str(); }
1940  virtual sval getWidth() const { return sval(ptr->getWidth());}
1941  virtual sval getHeight() const { return sval(ptr->getHeight());}
1942  virtual sval getDepth() const { return sval(ptr->getDepth());}
1943  virtual bool hasAlpha() const {return ptr->hasAlpha();}
1944 
1945  virtual TextureFormat getFormat() const
1946  {
1947  switch(ptr->getFormat()){
1948  case Ogre::PF_R8G8B8A8:
1949  return TF_RGBA32;
1950  case Ogre::PF_R8G8B8:
1951  return TF_RGB24;
1952  case Ogre::PF_A8:
1953  return TF_ALPHA8;
1954  case Ogre::PF_L8:
1955  return TF_LUM8;
1956  case Ogre::PF_L16:
1957  return TF_LUM16;
1958  case Ogre::PF_A4L4:
1959  return TF_ALPHALUM8;
1960  default:
1961  return TF_UNKNOWN;
1962  }
1963  }
1964 
1965  virtual void fillBlack();
1966  virtual void fillColor(color col);
1967  virtual void fillColor(const ColorMatrix *mat,indexval depth) ;
1968  virtual void fillColor(const RealMatrix *mat,indexval depth,real minval=0.0,real maxval=1.0, const Material* colormat=NULL,const RealMatrix *alphamat=NULL,bool mulAlpha=true) ;
1969 };
1970 
1972 {
1974 
1975  Ogre::HighLevelGpuProgramPtr ptrProgram;
1976 
1977  std::string name;
1978  std::string namecounted;
1979  std::string language;
1980  std::string source;
1984 
1986  {
1987  std::ostringstream out;
1988  out << name << "|" << createCount;
1989  namecounted=out.str();
1990  createCount++;
1991 
1992  ptrProgram=Ogre::HighLevelGpuProgramManager::getSingleton().createProgram(
1993  namecounted, Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME,
1994  language, convert(ptype));
1995  }
1996 
1998  {
1999  if(ptrProgram.isNull() || ptrProgram->hasCompileError())
2000  return;
2001 
2002  const Ogre::GpuProgramParametersSharedPtr& params=ptrProgram->getDefaultParameters();
2003 
2004  struct AutoParamPair { Ogre::String name; Ogre::GpuProgramParameters::AutoConstantType type; };
2005 
2006  //A list of auto params that might be present in the shaders generated
2007  static const AutoParamPair autoparams[] = {
2008  { "vpWidth", Ogre::GpuProgramParameters::ACT_VIEWPORT_WIDTH },
2009  { "vpHeight", Ogre::GpuProgramParameters::ACT_VIEWPORT_HEIGHT },
2010  { "view", Ogre::GpuProgramParameters::ACT_VIEW_MATRIX },
2011  { "world", Ogre::GpuProgramParameters::ACT_WORLD_MATRIX },
2012  { "worldView", Ogre::GpuProgramParameters::ACT_WORLDVIEW_MATRIX },
2013  { "worldViewProj", Ogre::GpuProgramParameters::ACT_WORLDVIEWPROJ_MATRIX },
2014  { "invWorld", Ogre::GpuProgramParameters::ACT_INVERSE_WORLD_MATRIX },
2015  { "invProj", Ogre::GpuProgramParameters::ACT_INVERSE_PROJECTION_MATRIX },
2016  { "invView", Ogre::GpuProgramParameters::ACT_INVERSE_VIEW_MATRIX },
2017  { "flip", Ogre::GpuProgramParameters::ACT_RENDER_TARGET_FLIPPING },
2018  { "texSize", Ogre::GpuProgramParameters::ACT_TEXTURE_SIZE },
2019  { "texSizeInv", Ogre::GpuProgramParameters::ACT_INVERSE_TEXTURE_SIZE },
2020  //{ "lightDiffuseColor", Ogre::GpuProgramParameters::ACT_LIGHT_DIFFUSE_COLOUR },
2021  //{ "lightSpecularColor", Ogre::GpuProgramParameters::ACT_LIGHT_SPECULAR_COLOUR },
2022  //{ "lightFalloff", Ogre::GpuProgramParameters::ACT_LIGHT_ATTENUATION },
2023  //{ "lightPos", Ogre::GpuProgramParameters::ACT_LIGHT_POSITION_VIEW_SPACE },
2024  //{ "lightDir", Ogre::GpuProgramParameters::ACT_LIGHT_DIRECTION_VIEW_SPACE },
2025  { "spotParams", Ogre::GpuProgramParameters::ACT_SPOTLIGHT_PARAMS },
2026  { "farClipDistance", Ogre::GpuProgramParameters::ACT_FAR_CLIP_DISTANCE },
2027  { "shadowViewProjMat", Ogre::GpuProgramParameters::ACT_TEXTURE_VIEWPROJ_MATRIX },
2028  { "camPos", Ogre::GpuProgramParameters::ACT_CAMERA_POSITION },
2029  { "camPosObjectSpace", Ogre::GpuProgramParameters::ACT_CAMERA_POSITION_OBJECT_SPACE },
2030  { "depthRange", Ogre::GpuProgramParameters::ACT_SCENE_DEPTH_RANGE }
2031  };
2032 
2033  size_t numParams = sizeof(autoparams) / sizeof(AutoParamPair);
2034 
2035  for (size_t i=0; i<numParams; i++)
2036  if (params->_findNamedConstantDefinition(autoparams[i].name))
2037  params->setNamedAutoConstant(autoparams[i].name, autoparams[i].type);
2038  }
2039 
2040 public:
2041  OgreGPUProgram(const std::string& name,ProgramType ptype,OgreRenderScene *scene,const std::string& language="cg") :
2042  name(name),ptype(ptype), scene(scene),language(language),source(""),namecounted(""),createCount(0),hasCompileError(false)
2043  {
2044  createProgram();
2045 
2046  setDefaultProfiles();
2047  setEntryPoint("main");
2048  }
2049 
2050  virtual ~OgreGPUProgram();
2051 
2052  virtual std::string getName() const {return name; }
2053 
2054  virtual void setType(ProgramType pt)
2055  {
2056  ptype=pt;
2057  ptrProgram->setType(convert(pt));
2058  //setDefaultProfiles();
2059  }
2060 
2061  virtual ProgramType getType() const { return ptype; }
2062  virtual std::string getLanguage() const { return language; }
2063  virtual void setLanguage(const std::string& lang) { language=lang; }
2064  virtual bool hasError() const { return hasCompileError; }
2065  virtual std::string getSourceCode() const { return ptrProgram->getSource(); }
2066  virtual bool setParameter(const std::string& param, const std::string& val) { return ptrProgram->setParameter(param,val); }
2067  virtual std::string getParameter(const std::string& param) const
2068  {
2069  Ogre::ParameterList pl=ptrProgram->getParameters();
2070 
2071  for(size_t i=0;i<pl.size();i++)
2072  if(pl[i].name==param)
2073  return ptrProgram->getParameter(pl[i].name);
2074 
2075  return "";
2076  }
2077 
2078  // Set the program's code to the given string. This will involve creating a new Ogre program object if this isn't the first
2079  // time code has been assigned, which is necessary since programs can't be changed once compiled it seems.
2080  virtual void setSourceCode(const std::string& code)
2081  {
2082  std::string oldnamecounted=namecounted;
2083  bool isFirstSource=(source=="");
2084  std::ostringstream out;
2085 
2086  if(!isFirstSource){ // create a new program if this is not the first time code has been assigned
2087  Ogre::NameValuePairList nvp;
2088 
2089  const Ogre::ParameterList& params=ptrProgram->getParameters();
2090  for(Ogre::ParameterList::const_iterator i=params.begin();i!=params.end();i++){
2091  Ogre::String name=(*i).name;
2092  nvp[name]=ptrProgram->getParameter(name);
2093  }
2094 
2095  createProgram();
2096 
2097  ptrProgram->setParameterList(nvp);
2098  }
2099 
2100  ptrProgram->resetCompileError();
2101  ptrProgram->setSource(std::string(code));
2102  ptrProgram->load();
2103 
2104  if(ptrProgram->hasCompileError()){ // if we have an error set the code to be the old code
2105  hasCompileError=true;
2106  //ptrProgram->resetCompileError();
2107 
2108  if(!isFirstSource){ // restore old code
2109  ptrProgram->unload();
2110  ptrProgram->setSource(source);
2111  }
2112 
2113  out << "GPU Program '" << name << "' compile failed (" << namecounted << ")";
2114  }
2115  else{
2116  setAutoConstants();
2117  hasCompileError=false;
2118  source=code; // save new code definition
2119 
2120  out << "GPU Program '" << name << "' compile succeeded (" << namecounted << ")";
2121  }
2122 
2123  Ogre::LogManager::getSingleton().getDefaultLog()->logMessage(out.str());
2124 
2125  // if a new program was created to replace the initial one, find every material that was using the initial one and swap them over
2126  if(!isFirstSource){
2127  Ogre::ResourceManager::ResourceMapIterator i= Ogre::MaterialManager::getSingleton().getResourceIterator();
2128 
2129  while(i.hasMoreElements()){
2130  Ogre::ResourcePtr p=i.getNext();
2131  Ogre::MaterialPtr mat=Ogre::MaterialManager::getSingleton().getByName(p->getName()); //i.getNext();
2132  if(mat->getNumTechniques()==0 || mat->getTechnique(0)->getNumPasses()==0)
2133  continue;
2134 
2135  Ogre::Pass* pass=mat->getTechnique(0)->getPass(0);
2136 
2137  switch(ptype){
2138  case PT_FRAGMENT:
2139  if(pass->getFragmentProgramName()==oldnamecounted)
2140  pass->setFragmentProgram(namecounted,false);
2141  break;
2142  case PT_GEOMETRY:
2143  if(pass->getGeometryProgramName()==oldnamecounted)
2144  pass->setGeometryProgram(namecounted,false);
2145  break;
2146  case PT_VERTEX:
2147  if(pass->getVertexProgramName()==oldnamecounted)
2148  pass->setVertexProgram(namecounted,false);
2149  break;
2150  }
2151  }
2152 
2153  Ogre::HighLevelGpuProgramManager::getSingleton().remove(oldnamecounted);
2154  }
2155  }
2156 
2157  virtual std::vector<std::string> getParameterNames() const
2158  {
2159  std::vector<std::string> result;
2160 
2161  Ogre::ParameterList pl=ptrProgram->getParameters();
2162 
2163  for(size_t i=0;i<pl.size();i++)
2164  result.push_back(pl[i].name);
2165 
2166  return result;
2167  }
2168 
2170  {
2171  // arbfp1 arbvp1 fp20 fp30 fp40 glsl gp4fp gp4gp gp4vp gpu_fp gpu_gp gpu_vp nvgp4 vp30 vp40
2172  // hlsl ps_1_1 ps_1_2 ps_1_3 ps_1_4 ps_2_0 ps_2_a ps_2_b ps_2_x ps_3_0 vs_1_1 vs_2_0 vs_2_a vs_2_x vs_3_0
2173 
2174  switch(ptype){
2175  case PT_FRAGMENT : setProfiles("fp40 arbfp1 fp30 ps_2_x ps_2_0 ps_1_1"); break;
2176  case PT_GEOMETRY : setProfiles("vp40 arbvp1 vp30 vs_2_x vs_2_0 vs_1_1"); break;
2177  case PT_VERTEX : setProfiles("vp40 arbvp1 vp30 vs_2_x vs_2_0 vs_1_1"); break;
2178  }
2179  }
2180 };
2181 
2183 {
2184 public:
2185  Ogre::Root *root;
2186  Ogre::SceneManager *mgr;
2187  Ogre::RenderWindow *win;
2188  Ogre::OverlaySystem *overlay;
2190 
2192 
2193  OgreRenderAdapter(Config *config) throw(RenderException);
2194  virtual ~OgreRenderAdapter();
2195 
2196  virtual u64 createWindow(int width, int height) throw(RenderException);
2197  virtual void paint();
2198  virtual void resize(int x, int y,int width, int height);
2199 
2200  virtual RenderScene* getRenderScene();
2201 };
2202 
2204 {
2205 public:
2206  Ogre::Root *root;
2207  Ogre::SceneManager *mgr;
2208  Ogre::RenderWindow *win;
2210  std::string resGroupName;
2211 
2212  Ogre::MaterialPtr background;
2213 
2214  typedef std::map<std::string,Ogre::SceneNode*> nodemap;
2215 
2217  nodemap nmap;
2220 
2222 
2223  std::vector<ResourceOp*> pendingOps;
2225 
2226  OgreRenderScene(OgreRenderAdapter *adapt) : root(adapt->root), mgr(adapt->mgr), win(adapt->win),config(adapt->config),cameraCount(0),assetCount(0)
2227  {
2228  resGroupName=Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME;
2229  }
2230 
2231  virtual ~OgreRenderScene(){}
2232 
2233  virtual Camera* createCamera(const char* name, real left = 0.0f, real top = 0.0f, real width = 1.0f, real height = 1.0f) throw(RenderException);
2234  virtual void setAmbientLight(const color & c);
2235 
2236  virtual void addResourceDir(const char* dir);
2237 
2238  virtual void initializeResources();
2239 
2240  virtual Material* createMaterial(const char* name) throw(RenderException);
2241 
2242  virtual Figure* createFigure(const char* name, const char* mat,FigureType type) throw(RenderException);
2243 
2244  virtual Light* createLight() throw(RenderException);
2245 
2246  virtual Image* loadImageFile(const std::string &filename) throw(RenderException);
2247 
2248  virtual Texture* createTexture(const char* name,sval width, sval height, sval depth, TextureFormat format) throw(RenderException);
2249 
2250  virtual Texture* loadTextureFile(const char* name,const char* absFilename) throw(RenderException);
2251 
2252  virtual GPUProgram* createGPUProgram(const char* name,ProgramType ptype,const char* language) throw(RenderException);
2253 
2254  virtual void saveScreenshot(const char* filename,Camera* c=NULL,int width=0,int height=0,real stereoOffset=0.0,TextureFormat tf=TF_RGB24) throw(RenderException);
2255 
2256  virtual Config* getConfig() const { return config; }
2257 
2259  virtual void applyResourceOps()
2260  {
2261  critical(&sceneMutex){
2262  for(std::vector<ResourceOp*>::iterator i=pendingOps.begin();i!=pendingOps.end();++i){
2263  (*i)->op();
2264  delete *i;
2265  }
2266 
2267  pendingOps.clear();
2268  }
2269  }
2270 
2272  virtual void addResourceOp(ResourceOp *op)
2273  {
2274  critical(&sceneMutex){
2275  pendingOps.push_back(op);
2276  }
2277  }
2278 
2280  virtual void removeResourceOp(std::string parentname)
2281  {
2282  critical(&sceneMutex){
2283  for(std::vector<ResourceOp*>::iterator i=pendingOps.begin();i!=pendingOps.end();)
2284  if((*i)->parentname==parentname){
2285  delete *i;
2286  pendingOps.erase(i);
2287  }
2288  else
2289  ++i;
2290  }
2291  }
2292 
2293  virtual void logMessage(const char* msg)
2294  {
2295  Ogre::LogManager::getSingleton().getDefaultLog()->logMessage(msg);
2296  }
2297 
2298  virtual void setBGObject(color col,bool enabled)
2299  {
2300  if(background.isNull())
2301  background=Ogre::MaterialManager::getSingleton().create("background", Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, false);
2302 
2303  background->setAmbient(0,0,0);
2304  background->setDiffuse(0,0,0,0);
2305  background->setSelfIllumination(convert(col));
2306  //background->setLightingEnabled(false);
2307  mgr->setSkyBox(enabled,background->getName(),1000);
2308  }
2309 
2310  virtual Ogre::SceneNode* createNode(const std::string& name)
2311  {
2312  critical(&sceneMutex){ // used to ensure a nodes cannot be created, queried, or deleted simultaneously
2313  Ogre::SceneNode* node=mgr->getRootSceneNode()->createChildSceneNode();
2314  nmap[name]=node;
2315  return node;
2316  }
2317  }
2318 
2319  virtual Ogre::SceneNode* getNode(Figure *fig)
2320  {
2321  critical(&sceneMutex){ // used to ensure a nodes cannot be created, queried, or deleted simultaneously
2322  std::string name=fig->getName();
2323  if(nmap.find(name)!=nmap.end())
2324  return nmap[name];
2325  else
2326  return NULL;
2327  }
2328  }
2329 
2330  virtual void destroyNode(Ogre::SceneNode *node) throw(Ogre::InternalErrorException)
2331  {
2332  critical(&sceneMutex){ // used to ensure a nodes cannot be created, queried, or deleted simultaneously
2333  std::string name="";
2334  for(nodemap::iterator it=nmap.begin();!name.size() && it!=nmap.end();++it)
2335  if(it->second==node)
2336  name=it->first;
2337 
2338  if(name.size()){
2339  nmap.erase(name);
2340  mgr->destroySceneNode(node);
2341  }
2342  else
2343  OGRE_EXCEPT(Ogre::Exception::ERR_INTERNAL_ERROR,"Cannot find Figure for node","OgreRenderScene::destroyNode");
2344  }
2345  }
2346 
2347  std::string getUniqueEntityName(const std::string& name);
2348 
2349  std::string getUniqueFigureName(const std::string& name);
2350 
2351  std::string getUniqueResourceName(const std::string& name, Ogre::ResourceManager& rmgr) throw(Ogre::InternalErrorException);
2352 };
2353 
2354 
2355 } // namespace OgreRenderTypes
2356 #endif /* RENDERSCENE_H_ */
2357 
color col
Definition: OgreRenderTypes.h:1809
virtual void setTransparent(bool isTrans)
Set the transparency state of the figure, this doesn&#39;t actually change data but affects how the rende...
Definition: OgreRenderTypes.h:1445
virtual sval getWidth() const
Definition: OgreRenderTypes.h:377
Definition: OgreRenderTypes.h:1143
virtual void setDiffuse(const color &c)
Set the diffuse color to emit.
Definition: OgreRenderTypes.h:850
virtual void setSpecular(const color &c)
Sets the specular color, if usesInternalAlpha() returns true the alpha value will be set the internal...
Definition: OgreRenderTypes.h:610
virtual void setOrtho(bool isOrtho)
Definition: OgreRenderTypes.h:431
virtual void setScale(const vec3 &v)
Definition: OgreRenderTypes.h:1045
real x() const
Definition: RenderTypes.h:634
virtual ~OgreImage()
Definition: OgreRenderTypes.h:201
virtual void setEmissive(const color &c)
Definition: RenderTypes.h:2974
virtual mat4 getProjMatrix() const
Definition: OgreRenderTypes.h:300
virtual void useLighting(bool use)
Definition: OgreRenderTypes.h:666
virtual void setMaterial(const std::string &m)
Definition: OgreRenderTypes.h:980
Definition: RenderTypes.h:476
virtual ~OgreTextFigure()
Definition: OgreRenderTypes.h:1872
virtual const Ogre::String & getMovableType() const
Definition: OgreRenderTypes.h:1003
virtual color getAmbient() const
Definition: OgreRenderTypes.h:574
real spaceWidth
Definition: OgreRenderTypes.h:1813
virtual void setDiffuse(const color &c)
Sets the diffuse color, if usesInternalAlpha() returns true the alpha value will be set the internal ...
Definition: RenderTypes.h:2971
Definition: OgreRenderTypes.h:1156
virtual bool isVisible() const
Definition: OgreRenderTypes.h:1076
virtual real getFarClip() const
Definition: OgreRenderTypes.h:372
virtual bool isTransparent() const
Returns true if the figure includes transparent elements.
Definition: OgreRenderTypes.h:1435
Definition: RenderTypes.h:475
virtual void useDepthCheck(bool use)
Definition: RenderTypes.h:2989
Simple mutex type allowing locking and attempted locking with timeout.
Definition: RenderTypes.h:368
bool cameraMoved
Definition: OgreRenderTypes.h:1612
virtual bool hasError() const
Returns true if the source code given for the program has failed to parse.
Definition: OgreRenderTypes.h:2064
virtual void setRotation(const rotator &r)
Definition: OgreRenderTypes.h:1044
virtual color getSpecular() const
Definition: OgreRenderTypes.h:576
virtual void destroyNode(Ogre::SceneNode *node)
Definition: OgreRenderTypes.h:2330
virtual bool isVisible() const
Returns true if this light is actively illuminating the scene.
Definition: OgreRenderTypes.h:868
virtual bool isPointInViewport(int x, int y) const
Definition: OgreRenderTypes.h:448
Ogre::SceneNode * node
Definition: OgreRenderTypes.h:190
Mutex sceneMutex
Definition: OgreRenderTypes.h:2224
Ogre::RGBA vertexcol
Definition: OgreRenderTypes.h:1650
virtual void setPointAttenuation(bool enabled, real constant=0.0f, real linear=1.0f, real quad=0.0f)
Sets point attenuation, the given real values are constants the attenuation equation.
Definition: OgreRenderTypes.h:625
Definition: RenderTypes.h:444
virtual void setGPUProgram(const std::string &name, ProgramType pt)
Definition: RenderTypes.h:3000
virtual void setVisible(bool isVisible)
Set whether this light is currently illuminating or not.
Definition: OgreRenderTypes.h:866
Definition: RenderTypes.h:4101
virtual void setTexture(const char *name)
Definition: RenderTypes.h:2995
virtual bool usesVertexColor() const
Definition: OgreRenderTypes.h:588
OgreRenderScene * scene
Definition: OgreRenderTypes.h:260
virtual u32 getVisibilityMask() const
Definition: OgreRenderTypes.h:387
virtual std::string getLanguage() const
Definition: OgreRenderTypes.h:2062
Definition: RenderTypes.h:494
virtual vec3 getScale(bool isDerived=false) const
Get the figure&#39;s scale values.
Definition: OgreRenderTypes.h:1479
Represents a texture loaded into memory and available to the graphis hardware.
Definition: RenderTypes.h:2307
virtual void setColor(const color &col)
Definition: OgreRenderTypes.h:1876
void basis_Hex1NL(real xi0, real xi1, real xi2, real *coeffs)
Linear Nodal Lagrange hexahedron basis function, fills in `coeffs&#39; for the given xi value...
Definition: RenderTypes.cpp:308
virtual ~TextureVolumeRenderable()
Definition: OgreRenderTypes.h:1629
virtual void setPointAttenuation(bool enabled, real constant=0.0f, real linear=1.0f, real quad=0.0f)
Sets point attenuation, the given real values are constants the attenuation equation.
Definition: RenderTypes.h:2983
virtual bool isCameraAligned() const
Definition: OgreRenderTypes.h:1894
virtual sval getWidth() const
Get the image width.
Definition: OgreRenderTypes.h:204
virtual u8 * getData()
Get a pointer to the internal data buffer.
Definition: OgreRenderTypes.h:209
virtual void cullBackfaces(bool cull)
Definition: OgreRenderTypes.h:693
virtual const char * getName() const
Definition: OgreRenderTypes.h:572
std::string internalMatName
Definition: OgreRenderTypes.h:1808
Definition: RenderTypes.h:480
virtual Ogre::SceneNode * createNode(const std::string &name)
Definition: OgreRenderTypes.h:2310
virtual real getVertFOV() const
Definition: OgreRenderTypes.h:362
Definition: RenderTypes.h:1381
virtual mat4 getViewMatrix() const
Definition: OgreRenderTypes.h:293
virtual void fillColorMatrix(ColorMatrix *mat)
Transfer the image data into the given matrix.
Definition: OgreRenderTypes.h:250
Definition: RenderTypes.h:1432
virtual bool isVisible() const
Returns the figure&#39;s visibility state.
Definition: OgreRenderTypes.h:1433
float z
Definition: OgreRenderTypes.h:1790
OgreRenderScene * scene
Definition: OgreRenderTypes.h:191
virtual ~OgreBaseRenderable()
Definition: OgreRenderTypes.h:935
vec3 bbmaxv
Definition: OgreRenderTypes.h:1643
u32 sval
Definition: RenderTypes.h:107
Ogre::OverlaySystem * overlay
Definition: OgreRenderTypes.h:2188
virtual void renderToStream(void *stream, sval width, sval height, TextureFormat format=TF_RGB24, real stereoOffset=0.0)
Create an offscreen texture, render to it, then blit the contents to `stream&#39;, which must be large en...
Definition: OgreRenderTypes.h:463
virtual color getEmissive() const
Definition: OgreRenderTypes.h:577
virtual const char * getName()
Get the figure&#39;s name.
Definition: OgreRenderTypes.h:1189
virtual void setDiffuse(const color &c)
Sets the diffuse color, if usesInternalAlpha() returns true the alpha value will be set the internal ...
Definition: OgreRenderTypes.h:609
Definition: RenderTypes.h:275
virtual real getNearClip() const
Definition: OgreRenderTypes.h:367
def loadImageFile(filename, imgobj, pos=vec3(), rot=rotator(), spacing=(1.0, 1.0))
Definition: ImageAlgorithms.py:161
DestroySceneNodeOp(Ogre::MovableObject *obj, Ogre::SceneNode *node, OgreRenderScene *scene)
Definition: OgreRenderTypes.h:192
virtual void setVAlign(VAlignType align)
Definition: OgreRenderTypes.h:1878
float b() const
Definition: RenderTypes.h:562
FigureType
Defines the figure types which the Figure class and subclasses are capable of representing.
Definition: RenderTypes.h:441
OgreRenderScene * scene
The root scene which renders this object.
Definition: OgreRenderTypes.h:1914
virtual std::string getGlyphName() const
Definition: OgreRenderTypes.h:1770
OgreLight(Ogre::Light *light, OgreRenderScene *scene)
Definition: OgreRenderTypes.h:843
virtual void setSourceCode(const std::string &code)
Set the source code for the program, this must be done in the main thread.
Definition: OgreRenderTypes.h:2080
virtual void setRenderQueue(sval queue)
Get the render queue of this figure; queues set rendering order such that figures in lower queues are...
Definition: OgreRenderTypes.h:1455
BlendMode bm
Definition: OgreRenderTypes.h:498
size_t _numIndices
Definition: OgreRenderTypes.h:913
virtual const char * getName()
Get the figure&#39;s name.
Definition: RenderTypes.h:3856
virtual void setPointSize(real min, real max)
Set the minimum and maximum point size for attenuated points.
Definition: RenderTypes.h:2979
virtual void setPointSizeAbs(real size)
Set the absolute point size.
Definition: RenderTypes.h:2981
virtual void setVisible(bool isVisible)
Sets the figure&#39;s visibility.
Definition: OgreRenderTypes.h:1426
#define critical(m)
Definition: RenderTypes.h:436
virtual void setEmissive(const color &c)
Definition: OgreRenderTypes.h:611
Definition: OgreRenderTypes.h:1910
Definition: RenderTypes.h:3850
void setDefaultProfiles()
Definition: OgreRenderTypes.h:2169
virtual color getColor() const
Definition: OgreRenderTypes.h:1887
virtual ~OgreRenderScene()
Definition: OgreRenderTypes.h:2231
Definition: OgreRenderTypes.h:155
virtual vec3 getPosition(bool isDerived=false) const
Get the figure&#39;s position in world space.
Definition: OgreRenderTypes.h:1316
VAlignType valign
Definition: OgreRenderTypes.h:1810
virtual sval getHeight() const
Get the image height.
Definition: OgreRenderTypes.h:205
FigureType type
Definition: OgreRenderTypes.h:1146
Definition: OgreRenderTypes.h:196
Definition: OgreRenderTypes.h:1971
Ogre::MaterialPtr mat
Definition: OgreRenderTypes.h:920
Definition: RenderTypes.h:464
virtual void getWorldTransforms(Ogre::Matrix4 *xform) const
Definition: OgreRenderTypes.h:997
Definition: RenderTypes.h:3772
Definition: OgreRenderTypes.h:1745
Definition: RenderTypes.h:501
Definition: OgreRenderTypes.h:1637
real y() const
Definition: RenderTypes.h:635
virtual void setMaterial(const char *mat)
Definition: OgreRenderTypes.h:1047
OgreRenderScene * scene
Definition: OgreRenderTypes.h:1163
std::string name
Definition: OgreRenderTypes.h:1172
virtual VAlignType getVAlign() const
Definition: OgreRenderTypes.h:1889
virtual bool isOverlay() const
Definition: OgreRenderTypes.h:1083
OgreGPUProgram(const std::string &name, ProgramType ptype, OgreRenderScene *scene, const std::string &language="cg")
Definition: OgreRenderTypes.h:2041
virtual bool isTransparent() const
Definition: OgreRenderTypes.h:1078
virtual bool setGPUParamReal(ProgramType pt, const std::string &name, real val)
Definition: OgreRenderTypes.h:743
virtual vec3 getScale(bool isDerived=false) const
Definition: OgreRenderTypes.h:1117
bool isZero() const
Returns true if the length of the vector is within dEPSILON of 0.
Definition: RenderTypes.h:698
Represents a Red-Green-Blue-Alpha color with float channels. Note the lack of virtual members implies...
Definition: RenderTypes.h:529
TextureFormat
Definition: RenderTypes.h:473
virtual void setUpVector(const vec3 &v)
Definition: OgreRenderTypes.h:1279
virtual void setBillboardDir(indexval index, const vec3 &dir)
Definition: OgreRenderTypes.h:1300
virtual void setParent(Figure *fig)
Set the parent of this figure, if `fig&#39; is transformed then the transformation is applied to this fig...
Definition: OgreRenderTypes.h:1184
Definition: RenderTypes.h:3569
size_t numVertices() const
Definition: OgreRenderTypes.h:969
virtual void setPointSize(real min, real max)
Set the minimum and maximum point size for attenuated points.
Definition: OgreRenderTypes.h:614
virtual void copyTo(Material *m, bool copyTex=false, bool copySpec=false, bool copyProgs=false) const
Copy this material&#39;s settings to `mat&#39;.
Definition: OgreRenderTypes.h:531
virtual void setAttenuation(real range, real constant=0.0f, real linear=1.0f, real quad=0.0f)
Set the attenuation values for spot and point lights.
Definition: OgreRenderTypes.h:861
std::string filename
Definition: OgreRenderTypes.h:1916
Ogre::Root * root
Definition: OgreRenderTypes.h:2206
Ogre::Viewport * port
Definition: OgreRenderTypes.h:259
virtual void setRenderQueue(sval queue)
Get the render queue of this figure; queues set rendering order such that figures in lower queues are...
Definition: OgreRenderTypes.h:1260
Fixed definition of a vertex used in the renderer.
Definition: OgreRenderTypes.h:883
std::string vertname
Definition: OgreRenderTypes.h:504
Definition: OgreRenderTypes.h:879
virtual void setDirectional()
Make this a directional light, illuminating all scene objects in the set direction.
Definition: OgreRenderTypes.h:853
virtual std::string getText() const
Definition: OgreRenderTypes.h:1885
virtual void setMaterial(const char *mat)
Set the figure&#39;s material, this must name an existing material.
Definition: OgreRenderTypes.h:1191
virtual sval getRenderQueue() const
Definition: OgreRenderTypes.h:1103
void createProgram()
Definition: OgreRenderTypes.h:1985
Ogre::TextureUnitState * texunit
Definition: OgreRenderTypes.h:497
Ogre::SceneNode * node
The OgreBaseRenderable object which implements the actual rendering operations.
Definition: OgreRenderTypes.h:1032
virtual const Ogre::AxisAlignedBox & getBoundingBox() const
Definition: OgreRenderTypes.h:1005
virtual bool isOverlay() const
Returns true if the figure is part of the UI overlay rather than an object in space.
Definition: OgreRenderTypes.h:1440
virtual sval numNodes(sval ribbon) const
Definition: OgreRenderTypes.h:1520
Ogre::Pass * t0p0
Definition: OgreRenderTypes.h:496
size_t sizeBytes
Definition: OgreRenderTypes.h:1919
virtual std::string encode(const std::string &format)
Encode the image data as the byte stream for a file, the format of which is given by `format&#39; (eg...
Definition: OgreRenderTypes.h:210
virtual ~OgreGlyphFigure()
Definition: OgreRenderTypes.h:1758
This subtype of Figure represents a set of billboards, squares with textures in space which are orien...
Definition: RenderTypes.h:3935
Definition: RenderTypes.cpp:23
RemoveResourceOp(const std::string &name)
Definition: OgreRenderTypes.h:181
virtual real getWidth() const
Definition: OgreRenderTypes.h:1276
Definition: RenderTypes.h:465
virtual void setOverlay(bool isOverlay)
Definition: OgreRenderTypes.h:1841
virtual bool hasAlpha() const
Definition: OgreRenderTypes.h:1943
std::map< std::string, Ogre::SceneNode * > nodemap
Definition: OgreRenderTypes.h:2214
void setCameraVisibility(const Camera *cam, Ogre::MovableObject *obj, bool isVisible, OgreRenderScene *scene)
Set the visibility of `obj&#39; to be `isVisible&#39; for the camera `cam&#39;. If `cam&#39; is NULL then `obj&#39; becom...
Definition: OgreRenderTypes.cpp:60
virtual void setScale(const vec3 &v)
Set the figure&#39;s scale values.
Definition: OgreRenderTypes.h:1314
Ogre::Camera * camera
Definition: OgreRenderTypes.h:258
float a() const
Definition: RenderTypes.h:563
virtual sval getHeight() const
Definition: OgreRenderTypes.h:1941
virtual void setBillboardColor(indexval index, const color &col)
Definition: OgreRenderTypes.h:1306
bool hasCompileError
Definition: OgreRenderTypes.h:1983
vec3 bbminv
Definition: OgreRenderTypes.h:1642
const VertexBuffer * tempvb
Definition: OgreRenderTypes.h:1376
Definition: RenderTypes.h:477
OgreTexture(Ogre::TexturePtr ptr, const char *filename, OgreRenderScene *scene)
Definition: OgreRenderTypes.h:1922
virtual void setNode(sval ribbon, sval node, const vec3 &pos, const color &col, real width, const rotator &rot=rotator(), real tex=0.0)
Definition: OgreRenderTypes.h:1568
virtual void setLookAt(const vec3 &v)
Definition: OgreRenderTypes.h:313
virtual void setZUp()
Definition: OgreRenderTypes.h:333
virtual void setScale(const vec3 &v)
Set the figure&#39;s scale values.
Definition: OgreRenderTypes.h:1465
virtual void setPointSizeAbs(real size)
Set the absolute point size.
Definition: OgreRenderTypes.h:620
std::vector< Ogre::BillboardSet * > bbsetlist
Definition: OgreRenderTypes.h:1159
Definition: OgreRenderTypes.cpp:41
virtual Image * renderToImage(sval width, sval height, TextureFormat format=TF_RGB24, real stereoOffset=0.0)
Create an offscreen texture, render to it, then blit the contents to the returned Image object...
Definition: OgreRenderTypes.h:470
size_t numIndices() const
Definition: OgreRenderTypes.h:970
virtual void setPosition(const vec3 &v)
Set the figure&#39;s position in world space.
Definition: OgreRenderTypes.h:1463
Definition: RenderTypes.h:872
Config * config
Definition: OgreRenderTypes.h:2209
virtual void setOverlay(bool isOverlay)
Set the overlay state of the figure, this doesn&#39;t actually change data but affects how the renderer t...
Definition: OgreRenderTypes.h:1899
virtual void setPosition(const vec3 &v)
Definition: OgreRenderTypes.h:307
virtual void setVertFOV(real rads)
Definition: OgreRenderTypes.h:357
virtual void setParent(Figure *fig)
Set the parent of this figure, if `fig&#39; is transformed then the transformation is applied to this fig...
Definition: OgreRenderTypes.h:1386
Ogre::RenderOperation::OperationType _opType
Definition: OgreRenderTypes.h:908
Definition: RenderTypes.h:487
virtual vec3 getScale(bool isDerived=false) const
Get the figure&#39;s scale values.
Definition: OgreRenderTypes.h:1328
virtual const Ogre::LightList & getLights() const
Definition: OgreRenderTypes.h:1001
std::pair< vec3, vec3 > planevert
Definition: OgreRenderTypes.h:42
float g() const
Definition: RenderTypes.h:561
virtual Ogre::SceneNode * getNode(Figure *fig)
Definition: OgreRenderTypes.h:2319
CommitOp(T *obj)
Definition: OgreRenderTypes.h:171
virtual ~OgreTextureVolumeFigure()
Definition: OgreRenderTypes.h:1669
Represents a GPU program (vertex/fragment/geometry shader)
Definition: RenderTypes.h:2327
virtual sval getNumPlanes() const
Definition: OgreRenderTypes.h:1672
virtual bool setGPUParamVec3(ProgramType pt, const std::string &name, vec3 val)
Definition: OgreRenderTypes.h:755
virtual bool usesPointAttenuation() const
Definition: OgreRenderTypes.h:584
VAlignType
Definition: RenderTypes.h:499
virtual void setPosition(const vec3 &v)
Set the figure&#39;s position in world space.
Definition: OgreRenderTypes.h:1312
virtual void op()
Before each render operation, this method is called for every ResourceOp object the renderer stores...
Definition: OgreRenderTypes.h:182
Ogre::SceneNode * node
Definition: OgreRenderTypes.h:1162
virtual void fillRealMatrix(RealMatrix *mat)
Transfer the image data into the given matrix.
Definition: OgreRenderTypes.h:216
virtual bool usesDepthWrite() const
Definition: OgreRenderTypes.h:592
virtual void setViewport(real left=0.0f, real top=0.0f, real width=1.0f, real height=1.0f)
Definition: OgreRenderTypes.h:424
void setCube(vec3 *cube, const vec3 &minv, const vec3 &maxv)
Definition: OgreRenderTypes.h:1652
unsigned int u32
Definition: RenderTypes.h:103
virtual const char * getMaterial() const
Get the figure&#39;s material name.
Definition: OgreRenderTypes.h:1202
std::string fragname
Definition: OgreRenderTypes.h:502
const IndexBuffer * tempib
Definition: OgreRenderTypes.h:1377
Destroys the given object/node pair by detaching the node and detroying it, then deleting the object...
Definition: OgreRenderTypes.h:186
Definition: RenderTypes.h:478
virtual void useFlatShading(bool use)
Definition: RenderTypes.h:2988
bool deleteTemp
Definition: OgreRenderTypes.h:1378
virtual void setType(ProgramType pt)
Definition: OgreRenderTypes.h:2054
virtual void setHAlign(HAlignType align)
Definition: OgreRenderTypes.h:1879
Ogre::TextureUnitState * specunit
Definition: OgreRenderTypes.h:507
bool updateCols
Definition: OgreRenderTypes.h:1815
u32 cameraCount
Counts how many cameras have been created and assigns a unique number to each (up to 31) ...
Definition: OgreRenderTypes.h:2219
OgreCamera(Ogre::Camera *camera, Ogre::Viewport *port, OgreRenderScene *scene, u32 id)
Definition: OgreRenderTypes.h:267
virtual void op()
Before each render operation, this method is called for every ResourceOp object the renderer stores...
Definition: OgreRenderTypes.h:172
Definition: OgreRenderTypes.h:487
Definition: RenderTypes.h:1606
virtual rotator getRotation(bool isDerived=false) const
Get the figure&#39;s rotation.
Definition: OgreRenderTypes.h:1491
virtual const char * getMaterial() const
Get the figure&#39;s material name.
Definition: OgreRenderTypes.h:1410
virtual void clampTexAddress(bool use)
Definition: OgreRenderTypes.h:686
virtual void useVertexColor(bool use)
Definition: RenderTypes.h:2986
Ogre::VertexData * vertexData
Definition: OgreRenderTypes.h:903
Definition: OgreRenderTypes.h:2203
virtual int numBillboards() const
Definition: OgreRenderTypes.h:1285
OgreImage(const Ogre::Image &i)
Definition: OgreRenderTypes.h:200
Definition: RenderTypes.h:993
transform inverse() const
Get the inverse transform of `this&#39;, ie. for any transform t and vec3 v (t.inverse()*(t*v)) is a no-o...
Definition: RenderTypes.h:3680
virtual sval getMaxNodes()
Definition: OgreRenderTypes.h:1533
virtual void setOverlay(bool isOverlay)
Definition: OgreRenderTypes.h:1093
real fround(real r)
Definition: RenderTypes.h:190
virtual void setAlpha(real alpha)
Set the internal alpha value, resetting the diffuse and specular values expected a subtype to set the...
Definition: RenderTypes.h:2919
real distTo(const vec3 &v) const
Return the distance from `this&#39; to `v&#39;.
Definition: RenderTypes.h:671
Ogre::RenderWindow * win
Definition: OgreRenderTypes.h:2187
Definition: OgreRenderTypes.h:1366
virtual real getShininess() const
Definition: OgreRenderTypes.h:579
TextureVolumeRenderable(const std::string &name, const std::string &matname, OgreTextureVolumeFigure *fig, Ogre::SceneManager *mgr)
Definition: OgreRenderTypes.h:1622
virtual BlendMode getBlendMode() const
Definition: OgreRenderTypes.h:586
bool depthSorting
Definition: OgreRenderTypes.h:928
Vertex * localVertBuff
Vertex buffer in main memory used to stage data before being committed to video memory.
Definition: OgreRenderTypes.h:916
Ogre::HardwareVertexBufferSharedPtr getVertexBuffer() const
Definition: OgreRenderTypes.h:974
virtual void setCameraAlign(bool align)
Definition: OgreRenderTypes.h:1883
virtual void setMaterial(const Ogre::MaterialPtr &m)
Definition: OgreRenderTypes.h:979
virtual void usePointSprites(bool useSprites)
Definition: RenderTypes.h:2994
void setAutoConstants()
Definition: OgreRenderTypes.h:1997
std::string resGroupName
Definition: OgreRenderTypes.h:2210
virtual void setBoundingBox(vec3 minv, vec3 maxv)
Definition: OgreRenderTypes.h:1009
virtual vec3 getLookAt() const
Definition: OgreRenderTypes.h:281
bool _isClampTexAddress
Definition: OgreRenderTypes.h:500
virtual void setGlyphName(const std::string &name)
Definition: OgreRenderTypes.h:1764
virtual void useInternalAlpha(bool val)
Set whether to use the internal alpha value or use those specified in the diffuse and specular color ...
Definition: RenderTypes.h:2930
virtual void useTexFiltering(bool use)
Definition: RenderTypes.h:2991
real height
Definition: OgreRenderTypes.h:1175
virtual void setDirection(vec3 &v)
Set the direction to emit light at, only meaningful for directional and spot lights.
Definition: OgreRenderTypes.h:849
Definition: RenderTypes.h:4199
virtual real getPointSizeMax() const
Definition: OgreRenderTypes.h:581
Definition: RenderTypes.h:461
OgreRenderScene * scene
Definition: OgreRenderTypes.h:1033
virtual vec3 getNode(sval ribbon, sval node)
Definition: OgreRenderTypes.h:1580
u32 indexval
Definition: RenderTypes.h:110
virtual const char * getGPUProgram(ProgramType pt) const
Definition: OgreRenderTypes.h:598
virtual sval getRenderQueue() const
Get the figure&#39;s render queue.
Definition: OgreRenderTypes.h:1461
Definition: RenderTypes.h:489
virtual std::pair< vec3, vec3 > getAABB() const
Definition: OgreRenderTypes.h:1211
real width
Definition: OgreRenderTypes.h:1174
Definition: RenderTypes.h:446
virtual void setRotation(const rotator &r)
Set the figure&#39;s rotation.
Definition: OgreRenderTypes.h:1313
virtual void setAmbient(const color &c)
Definition: OgreRenderTypes.h:608
Definition: RenderTypes.h:445
real w() const
Definition: RenderTypes.h:1146
virtual quadruple< color, real, rotator, real > getNodeProps(sval ribbon, sval node)
Definition: OgreRenderTypes.h:1592
Ogre::GpuProgramParametersSharedPtr getGPUParameters(ProgramType pt)
Definition: OgreRenderTypes.h:805
void setNodeFigParent(Ogre::SceneNode *node, Figure *fig, OgreRenderScene *scene)
Set `node&#39; to have the same parent node as that of `fig&#39;.
Definition: OgreRenderTypes.cpp:47
bool isInitialized
Definition: OgreRenderTypes.h:1166
rotator lastCamRot
Definition: OgreRenderTypes.h:1611
virtual vec3 getTexXiPos(vec3 pos) const
Definition: OgreRenderTypes.h:1704
real bbradius
Definition: OgreRenderTypes.h:1645
Ogre::HighLevelGpuProgramPtr ptrProgram
Definition: OgreRenderTypes.h:1975
Ogre::ColourValue convert(const color &c)
Definition: OgreRenderTypes.h:55
std::vector< ResourceOp * > pendingOps
Definition: OgreRenderTypes.h:2223
bbsetlist sets
Definition: OgreRenderTypes.h:1171
virtual real getAspectRatio() const
Get the aspect ratio of the notional box this camera sees through and shall render to a target...
Definition: OgreRenderTypes.h:403
Definition: RenderTypes.h:2898
std::string namecounted
Definition: OgreRenderTypes.h:1978
virtual void setParent(Figure *fig)
Definition: OgreRenderTypes.h:1061
virtual void useFlatShading(bool use)
Definition: OgreRenderTypes.h:671
real textHeight
Definition: OgreRenderTypes.h:1812
Definition: OgreRenderTypes.h:1868
Figure * parent
Parent figure this renderable is used by.
Definition: OgreRenderTypes.h:894
Ogre::TexturePtr spectex
Definition: OgreRenderTypes.h:506
unsigned long long u64
Definition: RenderTypes.h:104
void deleteLocalVertBuff()
Definition: OgreRenderTypes.h:964
OgreRenderScene(OgreRenderAdapter *adapt)
Definition: OgreRenderTypes.h:2226
virtual color getDiffuse() const
Definition: OgreRenderTypes.h:575
virtual bool isCullBackfaces() const
Definition: OgreRenderTypes.h:594
T * obj
Definition: OgreRenderTypes.h:170
virtual bool isTransparent() const
Returns true if the figure includes transparent elements.
Definition: OgreRenderTypes.h:1240
virtual void setSpecular(const color &c)
Sets the specular color, if usesInternalAlpha() returns true the alpha value will be set the internal...
Definition: RenderTypes.h:2973
Ogre::MaterialPtr background
Definition: OgreRenderTypes.h:2212
virtual void op()
Before each render operation, this method is called for every ResourceOp object the renderer stores...
Definition: OgreRenderTypes.h:162
virtual real getPointSizeAbs() const
Definition: OgreRenderTypes.h:582
OgreRenderScene * scene
The root scene which renders this object.
Definition: OgreRenderTypes.h:493
Definition: RenderTypes.h:443
virtual vec3 getGlyphScale() const
Definition: OgreRenderTypes.h:1763
ProgramType ptype
Definition: OgreRenderTypes.h:1981
virtual void clampTexAddress(bool use)
Definition: RenderTypes.h:2992
Definition: RenderTypes.h:488
virtual HAlignType getHAlign() const
Definition: OgreRenderTypes.h:1890
bool _useTexFiltering
Definition: OgreRenderTypes.h:499
virtual void removeNode(sval ribbon)
Definition: OgreRenderTypes.h:1551
virtual ~TextRenderable()
Definition: OgreRenderTypes.h:1835
virtual void setFont(const std::string &fontname)
Definition: OgreRenderTypes.h:1875
Definition: RenderTypes.h:481
bool isCameraAligned
Definition: OgreRenderTypes.h:1818
std::string name
Definition: OgreRenderTypes.h:1977
virtual real getTextHeight() const
Definition: OgreRenderTypes.h:1891
Ogre::BillboardChain * bbchain
Definition: OgreRenderTypes.h:1369
FigureType type
Definition: OgreRenderTypes.h:1165
virtual void logMessage(const char *msg)
Log a message to the renderer log file.
Definition: OgreRenderTypes.h:2293
virtual void setMaxNodes(sval num)
Definition: OgreRenderTypes.h:1528
virtual vec3 getTexXiDir(vec3 pos) const
Definition: OgreRenderTypes.h:1712
vec3 position
Definition: OgreRenderTypes.h:265
The op() method calls the method commit() with the given object `obj&#39; as the receiver.
Definition: OgreRenderTypes.h:167
TextRenderable(const std::string &name, Ogre::SceneManager *mgr)
Definition: OgreRenderTypes.h:1824
virtual void useVertexColor(bool use)
Definition: OgreRenderTypes.h:661
virtual void setPosition(vec3 &v)
Set the position for this light, only meaningful for point and spot lights.
Definition: OgreRenderTypes.h:848
virtual void setPoint()
Make this a point light, illuminating all objects within range as defined by the attenuation settings...
Definition: OgreRenderTypes.h:854
Definition: RenderTypes.h:479
Definition: RenderTypes.h:3056
virtual void setBlendMode(BlendMode bm)
Definition: OgreRenderTypes.h:630
virtual void setBlendMode(BlendMode bm)
Definition: RenderTypes.h:2985
virtual rotator getRotation() const
Definition: OgreRenderTypes.h:283
sval numplanes
Definition: OgreRenderTypes.h:1639
virtual void setBillboardPos(indexval index, const vec3 &pos)
Definition: OgreRenderTypes.h:1294
OgreMaterial(Ogre::MaterialPtr mat, OgreRenderScene *scene)
Definition: OgreRenderTypes.h:510
std::string matname
Definition: OgreRenderTypes.h:1372
virtual void setLanguage(const std::string &lang)
Set the language for the source of the program, eg. cg.
Definition: OgreRenderTypes.h:2063
const VertexBuffer * tempvb
Definition: OgreRenderTypes.h:1168
vec3 bbcenter
Definition: OgreRenderTypes.h:1644
std::string fontname
Definition: OgreRenderTypes.h:1807
virtual void cullBackfaces(bool cull)
Definition: RenderTypes.h:2993
void setParentObjects(Figure *parent, OgreRenderScene *scene)
Definition: OgreRenderTypes.h:937
virtual void setSpecular(const color &c)
Set the specular color to reflect.
Definition: OgreRenderTypes.h:851
Mutex mutex
Definition: OgreRenderTypes.h:1177
virtual ProgramType getType() const
Definition: OgreRenderTypes.h:2061
Ogre::HardwareIndexBufferSharedPtr getIndexBuffer() const
Definition: OgreRenderTypes.h:975
Definition: OgreRenderTypes.h:1608
Represents a ray emanating from a point and moving in a direction. It provides methods for doing inte...
Definition: RenderTypes.h:3277
virtual real getSpaceWidth() const
Definition: OgreRenderTypes.h:1892
Ogre::Root * root
Definition: OgreRenderTypes.h:2185
virtual const Ogre::MaterialPtr & getMaterial() const
Definition: OgreRenderTypes.h:977
vec3 lastCamPos
Definition: OgreRenderTypes.h:927
Ogre::TexturePtr rtt_texture
Definition: OgreRenderTypes.h:263
bool updateGeom
Definition: OgreRenderTypes.h:1816
virtual bool usesTexFiltering() const
Definition: OgreRenderTypes.h:593
Ogre::Image img
Definition: OgreRenderTypes.h:198
virtual std::pair< vec3, vec3 > getAABB() const
Definition: OgreRenderTypes.h:1055
virtual bool isOverlay() const
Returns true if the figure is part of the UI overlay rather than an object in space.
Definition: OgreRenderTypes.h:1245
virtual sval getDepth() const
Definition: OgreRenderTypes.h:1942
void setCameraVisibility(const Camera *cam, bool isVisible)
Definition: OgreRenderTypes.h:1063
real z() const
Definition: RenderTypes.h:636
Ogre::SceneManager * mgr
Definition: OgreRenderTypes.h:2207
#define THROW_RENDEREX(e)
Definition: OgreRenderTypes.h:33
std::string language
Definition: OgreRenderTypes.h:1979
virtual void useDepthCheck(bool use)
Definition: OgreRenderTypes.h:676
virtual void useDepthWrite(bool use)
Definition: OgreRenderTypes.h:677
Definition: RenderTypes.h:3015
virtual bool usesFlatShading() const
Definition: OgreRenderTypes.h:590
virtual vec3 getPosition(bool isDerived=false) const
Get the figure&#39;s position in world space.
Definition: OgreRenderTypes.h:1467
virtual bool setGPUParamInt(ProgramType pt, const std::string &name, int val)
Definition: OgreRenderTypes.h:731
virtual const char * getFilename() const
Definition: OgreRenderTypes.h:1938
Definition: OgreRenderTypes.h:1786
OgreRenderScene * scene
Definition: OgreRenderTypes.h:1371
virtual void setNumRibbons(sval num)
Definition: OgreRenderTypes.h:1513
unsigned char u8
Definition: RenderTypes.h:102
virtual ~OgreFigure()
Definition: OgreRenderTypes.h:1151
virtual void setBGColor(const color &c)
Definition: OgreRenderTypes.h:392
virtual const char * getName() const
Definition: OgreRenderTypes.h:275
Definition: OgreRenderTypes.h:836
virtual void setUp(const vec3 &v)
Definition: OgreRenderTypes.h:329
virtual real getPointSizeMin() const
Definition: OgreRenderTypes.h:580
nodemap nmap
Maps Figure objects to SceneNode objects created for them.
Definition: OgreRenderTypes.h:2217
virtual void setNumPlanes(sval num)
Definition: OgreRenderTypes.h:1671
virtual void setLinearAlpha(bool b)
Definition: RenderTypes.h:2808
virtual void setRotation(const rotator &r)
Set the figure&#39;s rotation.
Definition: OgreRenderTypes.h:1464
virtual sval getPlaneIntersects(vec3 planept, vec3 planenorm, vec3 buffer[6][2], bool transformPlane=false, bool isXiPoint=false)
Definition: OgreRenderTypes.h:1717
void setMinVals(const vec3 &v)
Set each component of `this&#39; to minimum of its component and the equivalent in `v&#39;.
Definition: RenderTypes.h:678
Ogre::AxisAlignedBox aabb
Definition: OgreRenderTypes.h:922
virtual vec3 getPosition(bool isDerived=false) const
Definition: OgreRenderTypes.h:1105
Image objects represented loaded image files. These are used to access image data in code rather than...
Definition: RenderTypes.h:3739
virtual sval numRibbons() const
Definition: OgreRenderTypes.h:1518
Definition: OgreRenderTypes.h:2182
The all-important 3-space vector type. Note the lack of virtual members implies no vtable pointer...
Definition: RenderTypes.h:622
#define SAFE_DELETE(p)
Definition: RenderTypes.h:90
virtual bool isSecondaryCamera()
Definition: OgreRenderTypes.h:455
it
Definition: __init__.py:85
An IndexBuffer is used by Figure objects to read in the topologies for the figures to render...
Definition: RenderTypes.h:3081
virtual void setTextHeight(real height)
Definition: OgreRenderTypes.h:1880
virtual void setRotation(const rotator &r)
Definition: OgreRenderTypes.h:324
float r() const
Definition: RenderTypes.h:560
Definition: RenderTypes.h:3994
virtual sval getWidth() const
Definition: OgreRenderTypes.h:1940
std::string name
Definition: OgreRenderTypes.h:1373
virtual void useTexFiltering(bool use)
Definition: OgreRenderTypes.h:679
virtual bool isCameraOriented() const
Definition: OgreRenderTypes.h:1509
virtual TextureFormat getFormat() const
Get the loaded data&#39;s format.
Definition: OgreRenderTypes.h:203
virtual Ogre::Real getSquaredViewDepth(const Ogre::Camera *cam) const
Definition: OgreRenderTypes.h:999
ProgramType
Definition: RenderTypes.h:485
virtual bool usesLighting() const
Definition: OgreRenderTypes.h:589
T * getRenderable() const
Definition: OgreRenderTypes.h:1040
Ogre::Real boundRad
Definition: OgreRenderTypes.h:923
Mutex * getMutex()
Definition: OgreRenderTypes.h:941
virtual void setOverlay(bool isOverlay)
Set the overlay state of the figure, this doesn&#39;t actually change data but affects how the renderer t...
Definition: OgreRenderTypes.h:1255
virtual void setOverlay(bool isOverlay)
Set the overlay state of the figure, this doesn&#39;t actually change data but affects how the renderer t...
Definition: OgreRenderTypes.h:1450
Matrix< OgreBaseRenderable::Vertex > vertices
Definition: OgreRenderTypes.h:1618
Mutex mutex
Definition: OgreRenderTypes.h:930
Ogre::HighLevelGpuProgramPtr getGPUProgByNumberedName(const std::string &name)
Definition: OgreRenderTypes.h:780
virtual void setBGObject(color col, bool enabled)
Set the background skybox to the given color if `enabled&#39; is true, otherwise disable it...
Definition: OgreRenderTypes.h:2298
Ogre::MovableObject * obj
Definition: OgreRenderTypes.h:189
virtual void setAABB(const vec3 &minv, const vec3 &maxv)
Definition: OgreRenderTypes.h:1687
virtual bool setParameter(const std::string &param, const std::string &val)
Definition: OgreRenderTypes.h:2066
virtual std::string getFont() const
Definition: OgreRenderTypes.h:1886
virtual const char * getName()
Get the figure&#39;s name.
Definition: OgreRenderTypes.h:1398
virtual void addNode(sval ribbon, const vec3 &pos, const color &col, real width, const rotator &rot=rotator(), real tex=0.0)
Definition: OgreRenderTypes.h:1559
Definition: RenderTypes.h:462
virtual void setWireframe(bool isWireframe)
Definition: OgreRenderTypes.h:436
virtual std::vector< std::string > getParameterNames() const
Definition: OgreRenderTypes.h:2157
virtual void setSecondaryCamera(bool secondary)
Definition: OgreRenderTypes.h:441
virtual void removeRibbon(sval ribbon)
Definition: OgreRenderTypes.h:1543
Ogre::RGBA col
Definition: OgreRenderTypes.h:887
OgreBaseFigure(T *obj, Ogre::SceneNode *node, OgreRenderScene *scene)
Definition: OgreRenderTypes.h:1036
real alpha
Definition: OgreRenderTypes.h:1640
virtual void setShininess(real c)
Set the amount of specular hightlighting to apply.
Definition: OgreRenderTypes.h:612
Ogre::RenderOperation::OperationType opType() const
Definition: OgreRenderTypes.h:972
void destroySceneNode(Ogre::SceneNode *node, Ogre::MovableObject *obj, OgreRenderScene *scene)
Deletes the `node&#39; and `obj&#39; objects in a thread-safe manner at some future time (probably next rende...
Definition: OgreRenderTypes.cpp:76
Matrix< T > * clone(const char *newname=NULL, bool isShared=false) const
Copy the contents of this matrix into a newly allocated one (which can be shared if isShared is true)...
Definition: RenderTypes.h:1669
virtual void setDimension(real width, real height)
Definition: OgreRenderTypes.h:1268
virtual bool usesPointSprites() const
Definition: OgreRenderTypes.h:595
T * obj
Definition: OgreRenderTypes.h:1031
u32 id
Definition: OgreRenderTypes.h:261
indexval * localIndBuff
Index buffer in main memory used to stage data before being committed to video memory.
Definition: OgreRenderTypes.h:918
virtual void copySpectrumFrom(const Spectrum *s)
Definition: RenderTypes.h:2716
bool isOverlay
Definition: OgreRenderTypes.h:1817
vec3 norm() const
Return the normalized version of `this&#39;, or a zero vector if `this&#39; is zero-length.
Definition: RenderTypes.h:669
OgreTextureVolumeFigure * fig
Definition: OgreRenderTypes.h:1610
virtual bool usesDepthCheck() const
Definition: OgreRenderTypes.h:591
virtual void usePointSprites(bool useSprites)
Definition: OgreRenderTypes.h:656
Ogre::TexturePtr ptr
Definition: OgreRenderTypes.h:1917
virtual void setTransparent(bool isTrans)
Set the transparency state of the figure, this doesn&#39;t actually change data but affects how the rende...
Definition: OgreRenderTypes.h:1250
std::string source
Definition: OgreRenderTypes.h:1980
static Ogre::HardwareBuffer::Usage indexBufferUsage
Sets index buffer to be write only.
Definition: OgreRenderTypes.h:901
OgreRenderScene * scene
Definition: OgreRenderTypes.h:2191
std::string glyphname
Definition: OgreRenderTypes.h:1750
virtual void applyResourceOps()
Iterate over all queued ResourceOp objects, calling their op() method, deleting them, and clearing the queue.
Definition: OgreRenderTypes.h:2259
Mutex mutex
Definition: OgreRenderTypes.h:1380
virtual void setAmbient(const color &c)
Definition: RenderTypes.h:2969
triple< const Vec3Matrix *, const Vec3Matrix *, const IndexMatrix * > glyphmesh
Definition: OgreRenderTypes.h:1747
ResourceOp(std::string parentname="")
Definition: OgreRenderTypes.h:160
vec3 orient
Definition: OgreRenderTypes.h:1374
u32 assetCount
Definition: OgreRenderTypes.h:2221
Definition: RenderTypes.h:463
Ogre::Billboard * getBillboard(indexval index) const
Definition: OgreRenderTypes.h:1355
std::string text
Definition: OgreRenderTypes.h:1806
virtual std::string getParameter(const std::string &param) const
Definition: OgreRenderTypes.h:2067
Ogre::IndexData * indexData
Definition: OgreRenderTypes.h:906
virtual void addResourceOp(ResourceOp *op)
Add the resource operation to the queue, this assigns responsibility to delete `op&#39; to the OgreRender...
Definition: OgreRenderTypes.h:2272
virtual const char * getTexture() const
Definition: OgreRenderTypes.h:596
virtual std::string getSourceCode() const
Return the text of the source for this program.
Definition: OgreRenderTypes.h:2065
virtual real getHeight() const
Definition: OgreRenderTypes.h:1277
Ogre::MaterialPtr mat
Definition: OgreRenderTypes.h:495
real x() const
Definition: RenderTypes.h:1147
virtual void useLighting(bool use)
Definition: RenderTypes.h:2987
virtual sval getHeight() const
Definition: OgreRenderTypes.h:382
virtual bool isVisible() const
Returns the figure&#39;s visibility state.
Definition: OgreRenderTypes.h:1235
virtual void addGlyphMesh(const std::string &name, const Vec3Matrix *nodes, const Vec3Matrix *norms, const IndexMatrix *inds)
Definition: OgreRenderTypes.h:1772
virtual vec3 getOrientation() const
Definition: OgreRenderTypes.h:1511
Definition: OgreRenderTypes.h:1028
virtual void clearRibbons()
Definition: OgreRenderTypes.h:1538
bool deferFillOp
Definition: OgreRenderTypes.h:910
Definition: OgreRenderTypes.h:1788
u8 * buffer
Definition: OgreRenderTypes.h:1918
bool deleteTemp
Definition: OgreRenderTypes.h:1169
void convertUByteStreamToRealMatrix(const char *stream, RealMatrix *mat)
Definition: RenderTypes.cpp:240
virtual void visitRenderables(Ogre::Renderable::Visitor *visitor, bool debugRenderables)
Definition: OgreRenderTypes.h:1015
virtual void rotate(const rotator &r)
Definition: OgreRenderTypes.h:319
virtual TextureFormat getFormat() const
Definition: OgreRenderTypes.h:1945
virtual void removeResourceOp(std::string parentname)
Remove operations with the given parent name from the queue.
Definition: OgreRenderTypes.h:2280
IndexMatrix indices
Definition: OgreRenderTypes.h:1619
virtual void setSpaceWidth(real width)
Definition: OgreRenderTypes.h:1881
sval createCount
Definition: OgreRenderTypes.h:1982
Ogre::HardwareVertexBufferSharedPtr colBuf
Definition: OgreRenderTypes.h:1820
Given a resource manager type M, calls remove() with the given name on the singleton instance of M...
Definition: OgreRenderTypes.h:177
virtual real getAlpha() const
Definition: OgreRenderTypes.h:1674
HAlignType
Definition: RenderTypes.h:492
glyphmap glyphs
Definition: OgreRenderTypes.h:1751
virtual const char * getName() const
Definition: OgreRenderTypes.h:1939
virtual rotator getRotation(bool isDerived=false) const
Definition: OgreRenderTypes.h:1129
virtual void setText(const std::string &text)
Definition: OgreRenderTypes.h:1874
Config * config
Definition: OgreRenderTypes.h:2189
real y() const
Definition: RenderTypes.h:1148
std::string geomname
Definition: OgreRenderTypes.h:503
virtual std::string getName() const
Definition: OgreRenderTypes.h:2052
BlendMode
Definition: RenderTypes.h:459
virtual void setShininess(real c)
Set the amount of specular hightlighting to apply.
Definition: RenderTypes.h:2976
transform directional() const
Get the directional version of this transform which is suitable for transforming directional vectors ...
Definition: RenderTypes.h:3686
virtual Ray * getProjectedRay(real x, real y, bool isAbsolute=true) const
Definition: OgreRenderTypes.h:408
Ogre::Font * fontobj
Definition: OgreRenderTypes.h:1822
void setVisible(bool isVisible)
Definition: OgreRenderTypes.h:1068
Definition: RenderTypes.h:482
Ogre::SceneNode * node
Definition: OgreRenderTypes.h:1370
void setDepthSorting(bool val)
Definition: OgreRenderTypes.h:939
std::string name
Definition: OgreRenderTypes.h:180
size_t _numVertices
Definition: OgreRenderTypes.h:912
virtual const char * getName()
Definition: OgreRenderTypes.h:1042
virtual void setSpotlight(real radsInner, real radsOuter, real falloff=1.0f)
Make this a spot light with the given beam angles and falloff values.
Definition: OgreRenderTypes.h:855
virtual void setMaterial(const char *mat)
Set the figure&#39;s material, this must name an existing material.
Definition: OgreRenderTypes.h:1400
virtual void setAlpha(real a)
Definition: OgreRenderTypes.h:1675
virtual void setGPUProgram(const std::string &name, ProgramType pt)
Definition: OgreRenderTypes.h:707
virtual void setTexAABB(const vec3 &minv, const vec3 &maxv)
Definition: OgreRenderTypes.h:1682
virtual std::pair< vec3, vec3 > getAABB() const
Definition: OgreRenderTypes.h:1416
virtual sval getDepth() const
Get the image depth.
Definition: OgreRenderTypes.h:206
virtual vec3 getPosition() const
Definition: OgreRenderTypes.h:280
Ogre::SceneManager * mgr
Definition: OgreRenderTypes.h:2186
OgreRenderScene * scene
Definition: OgreRenderTypes.h:840
OgreRenderScene * scene
The root scene which renders this object.
Definition: OgreRenderTypes.h:896
virtual Config * getConfig() const
Returns the Config object used to define properties for the scene.
Definition: OgreRenderTypes.h:2256
virtual void setTransparent(bool isTrans)
Definition: OgreRenderTypes.h:1088
virtual bool setGPUParamColor(ProgramType pt, const std::string &name, color val)
Definition: OgreRenderTypes.h:767
std::string matname
Definition: OgreRenderTypes.h:1164
virtual size_t getDataSize() const
Get the image data size in bytes.
Definition: OgreRenderTypes.h:208
virtual void setFarClip(real dist)
Definition: OgreRenderTypes.h:352
virtual void setNearClip(real dist)
Definition: OgreRenderTypes.h:347
OgreRenderScene * scene
Definition: OgreRenderTypes.h:1973
virtual void setOrientation(const vec3 &orient)
Definition: OgreRenderTypes.h:1503
std::string parentname
Name of parent object which created this op and whose internal state is associated with it...
Definition: OgreRenderTypes.h:159
virtual void renderToFile(const std::string &filename, sval width, sval height, TextureFormat format=TF_RGB24, real stereoOffset=0.0)
Create an offscreen texture, render to it, then write the contents to the file `filename&#39;, assuming it&#39;s extension is for an understood format.
Definition: OgreRenderTypes.h:457
virtual vec3 getScreenPosition(vec3 pos) const
Returns the (x,y) screen coordinate of the vector `pos&#39; as drawn with the current camera configuratio...
Definition: OgreRenderTypes.h:285
virtual const char * getMaterial() const
Definition: OgreRenderTypes.h:1049
Ogre::String movableType
Definition: OgreRenderTypes.h:925
virtual void setPosition(const vec3 &v)
Definition: OgreRenderTypes.h:1043
Ogre::RenderWindow * win
Definition: OgreRenderTypes.h:2208
void deleteLocalIndBuff()
Definition: OgreRenderTypes.h:965
double real
Definition: RenderTypes.h:108
real z() const
Definition: RenderTypes.h:1149
virtual void notifyRenderSingleObject(Ogre::Renderable *rend, const Ogre::Pass *pass, const Ogre::AutoParamDataSource *source, const Ogre::LightList *pLightList, bool suppressRenderStateChanges)
Definition: OgreRenderTypes.h:1391
Ogre::Light * light
Definition: OgreRenderTypes.h:839
virtual void setGlyphScale(vec3 v)
Definition: OgreRenderTypes.h:1762
vec3 glyphscale
Definition: OgreRenderTypes.h:1752
void set(const rotator &r)
Copy the values of `r&#39; into `this&#39;.
Definition: RenderTypes.h:1126
virtual void setAspectRatio(real rat)
Definition: OgreRenderTypes.h:398
Definition: RenderTypes.h:4051
HAlignType halign
Definition: OgreRenderTypes.h:1811
std::map< std::string, glyphmesh > glyphmap
Definition: OgreRenderTypes.h:1748
virtual sval getRenderQueue() const
Get the figure&#39;s render queue.
Definition: OgreRenderTypes.h:1266
Ogre::HardwareVertexBufferSharedPtr vertBuf
Definition: OgreRenderTypes.h:904
virtual Ogre::PixelBox getPixelBuffer()
Definition: OgreRenderTypes.h:1930
virtual rotator getRotation(bool isDerived=false) const
Get the figure&#39;s rotation.
Definition: OgreRenderTypes.h:1340
virtual ~OgreBaseFigure()
Definition: OgreRenderTypes.h:1038
virtual void useDepthWrite(bool use)
Definition: RenderTypes.h:2990
#define DLLEXPORT
Definition: RenderTypes.h:76
static Ogre::HardwareBuffer::Usage vertexBufferUsage
Sets vertex buffer to be write only.
Definition: OgreRenderTypes.h:899
virtual Ogre::Real getBoundingRadius() const
Definition: OgreRenderTypes.h:1007
Definition: OgreRenderTypes.h:255
void convertUShortStreamToRealMatrix(const char *stream, RealMatrix *mat)
Definition: RenderTypes.cpp:245
virtual void visitRenderables(Ogre::Renderable::Visitor *visitor, bool debugRenderables)
Definition: OgreRenderTypes.h:1864
virtual void setRenderQueue(sval queue)
Definition: OgreRenderTypes.h:1098