25#include <util/common.h>
26#include <osg/Drawable>
27#include <osg/Geometry>
28#include <OpenThreads/Mutex>
37class PLUGIN_UTILEXPORT
coSphere :
public osg::Drawable
39 friend class SphereIntersector;
44 RENDER_METHOD_CPU_BILLBOARDS = 0,
45 RENDER_METHOD_CG_SHADER = 1,
46 RENDER_METHOD_ARB_POINT_SPRITES = 2,
47 RENDER_METHOD_PARTICLE_CLOUD = 4,
48 RENDER_METHOD_DISC = 5,
49 RENDER_METHOD_TEXTURE = 6,
50 RENDER_METHOD_CG_SHADER_INVERTED = 7
57 void updateCoords(
const float *x_c,
const float *y_c,
const float *z_c);
58 void updateCoords(
const double *x_c,
const double *y_c,
const double *z_c);
61 void setCoords(
int no_of_points,
const float *x,
const float *y,
const float *z,
const float *r);
62 void setCoords(
int no_of_points,
const double *x,
const double *y,
const double *z,
const double *r);
63 void setCoords(
int no_of_points,
const float *x,
const float *y,
const float *z,
float r=1.f);
64 void setCoords(
int no_of_points,
const osg::Vec3Array* coords,
const float *r);
70 void setColor(
int index,
float r,
float g,
float b,
float a);
71 void updateColors(
const float *r,
const float *g,
const float *b,
const float *a = NULL);
83 void setVertexAttribArray(
unsigned int index,
const osg::Array *array, osg::Array::Binding binding = osg::Array::BIND_UNDEFINED);
86#if OSG_VERSION_GREATER_OR_EQUAL(3, 3, 2)
87 virtual osg::BoundingBox computeBoundingBox()
const;
96 virtual osg::Object *cloneType()
const
100 virtual osg::Object *clone(
const osg::CopyOp ©op)
const
105 coSphere(
const coSphere &,
const osg::CopyOp ©op = osg::CopyOp::SHALLOW_COPY);
113 static void setTexture(
const char *chTexFile);
115 static void getBitmapImageData(
const char *pFileName, BMPImage *pImage);
116 static bool loadTexture(
int context,
const char *pFilename,
int iTextureMode = 0,
int colorR = 0,
int colorG = 0,
int colorB = 0);
118 float m_defaultColor[4];
120 static bool s_overrideTransparency;
124 static float s_alpha;
125 static float s_scale;
127 bool m_useVertexArrays;
128 std::vector<int> *m_sortedRadiusIndices;
132 float m_extMaxRadius;
134 mutable RenderMethod m_renderMethod;
135 bool m_overrideBounds;
137 static bool loadCgPrograms(
int context);
138 bool unbindProgramAndParams(
int context)
const;
139 void bindMatrices(
int context)
const;
140 bool bindProgramAndParams(
int context)
const;
141 static void initTexture(
int context);
143 static bool *s_CgChecked;
144 static bool s_pointSpritesChecked;
145 static bool s_configured;
146 static bool s_useVertexArrays;
150 static CGprogram *s_FragmentProgramParticleCloud;
153 static CGprogram *s_FragmentProgramTexture;
154 static CGprogram *s_FragmentProgramInverted;
165 static CGparameter *s_CGFragParamInverted_glAmbient;
166 static CGparameter *s_CGFragParamInverted_glDiffuse;
167 static CGparameter *s_CGFragParamInverted_glSpecular;
169 static CGparameter *s_CGVertexParamDisc_modelViewProj;
171 static CGparameter *s_CGVertexParamDisc_modelViewIT;
177 static CGparameter *s_CGFragParamTexture_glAmbient;
178 static CGparameter *s_CGFragParamTexture_glDiffuse;
179 static CGparameter *s_CGFragParamTexture_glSpecular;
180 static GLuint *s_textureID;
181 static char *s_chTexFile;
182 static void(APIENTRY *s_glPointParameterfARB)(GLenum, GLfloat);
183 static void(APIENTRY *s_glPointParameterfvARB)(GLenum,
const GLfloat *);
185 static OpenThreads::Mutex *mutex()
187 static OpenThreads::Mutex mutex;
191 static int s_maxcontext;
193 void allocateColor();
struct _CGprogram * CGprogram
Definition: coSphere.h:32
struct _CGparameter * CGparameter
Definition: coSphere.h:33
Definition: ARToolKit.h:33
Definition: coSphere.h:38
RenderMethod
Definition: coSphere.h:43
void updateCoordsFromMatrices(float *const *matrices)
static void setScale(float scale)
void updateRadii(double r)
static void setTransparency(float alpha)
void updateCoords(const float *x_c, const float *y_c, const float *z_c)
void setCoords(int no_of_points, const float *x, const float *y, const float *z, const float *r)
void setMaxRadius(float m)
Definition: coSphere.h:79
void updateCoords(const double *x_c, const double *y_c, const double *z_c)
void updateColors(const int *pc)
void updateNormals(const float *nx, const float *ny, const float *nz)
void setCoords(int no_of_points, const osg::Vec3Array *coords, const float *r)
void updateRadii(const float *r)
void overrideBoundingBox(const osg::BoundingBox &bb)
virtual osg::BoundingBox computeBound() const
void updateColors(const float *r, const float *g, const float *b, const float *a=NULL)
void setColor(int index, float r, float g, float b, float a)
static void enableTransparencyOverride(bool)
void setCoords(int no_of_points, const float *x, const float *y, const float *z, float r=1.f)
void setColorBinding(int colorbinding)
void updateRadii(const double *r)
void setVertexAttribArray(unsigned int index, const osg::Array *array, osg::Array::Binding binding=osg::Array::BIND_UNDEFINED)
void setRenderMethod(RenderMethod rm)
virtual void drawImplementation(osg::RenderInfo &renderInfo) const
void updateCoords(int i, const osg::Vec3 &pos)
void setNumberOfSpheres(int n)
void setCoords(int no_of_points, const double *x, const double *y, const double *z, const double *r)