15 #define OSG_DRAWABLE 1
17 #include <osg/BoundingBox>
19 #include <osg/BufferObject>
20 #include <osg/PrimitiveSet>
21 #include <osg/RenderInfo>
25 #ifndef GL_NV_occlusion_query
27 #define GL_OCCLUSION_TEST_HP 0x8165
28 #define GL_OCCLUSION_TEST_RESULT_HP 0x8166
29 #define GL_PIXEL_COUNTER_BITS_NV 0x8864
30 #define GL_CURRENT_OCCLUSION_QUERY_ID_NV 0x8865
31 #define GL_PIXEL_COUNT_NV 0x8866
32 #define GL_PIXEL_COUNT_AVAILABLE_NV 0x8867
36 #ifndef GL_ARB_occlusion_query
38 #define GL_SAMPLES_PASSED_ARB 0x8914
39 #define GL_QUERY_COUNTER_BITS_ARB 0x8864
40 #define GL_CURRENT_QUERY_ARB 0x8865
41 #define GL_QUERY_RESULT_ARB 0x8866
42 #define GL_QUERY_RESULT_AVAILABLE_ARB 0x8867
47 #ifndef GL_TIME_ELAPSED
48 #define GL_TIME_ELAPSED 0x88BF
49 #define GL_TIMESTAMP 0x8E28
52 #ifndef GL_QUERY_RESULT
53 #define GL_QUERY_RESULT 0x8866
54 #define GL_QUERY_RESULT_AVAILABLE 0x8867
67 class ArrayDispatchers;
75 #define USE_SEPARATE_COMPILE_AND_EXECUTE
113 virtual void computeDataVariance();
128 if(!_boundingSphereComputed) getBoundingBox();
129 return _boundingSphere;
137 if(!_boundingSphereComputed)
139 _boundingBox = _initialBound;
141 if (_computeBoundCallback.valid())
142 _boundingBox.
expandBy(_computeBoundCallback->computeBound(*
this));
144 _boundingBox.expandBy(computeBoundingBox());
146 if(_boundingBox.valid()){
147 _boundingSphere.set(_boundingBox.center(), _boundingBox.radius());
149 _boundingSphere.init();
152 _boundingSphereComputed =
true;
209 void setSupportsDisplayList(
bool flag);
218 void setUseDisplayList(
bool flag);
224 inline GLuint&
getDisplayList(
unsigned int contextID)
const {
return _globjList[contextID]; }
228 virtual void setUseVertexBufferObjects(
bool flag);
235 virtual void dirtyDisplayList();
253 inline void draw(
RenderInfo& renderInfo)
const;
258 virtual void compileGLObjects(
RenderInfo& renderInfo)
const;
261 virtual void setThreadSafeRefUnref(
bool threadSafe);
264 virtual void resizeGLObjectBuffers(
unsigned int maxSize);
269 virtual void releaseGLObjects(
State* state=0)
const;
356 static GLuint generateDisplayList(
unsigned int contextID,
unsigned int sizeHint = 0);
359 static void setMinimumNumberOfDisplayListsToRetainInCache(
unsigned int minimum);
362 static unsigned int getMinimumNumberOfDisplayListsToRetainInCache();
368 static void deleteDisplayList(
unsigned int contextID,GLuint globj,
unsigned int sizeHint = 0);
372 static void flushAllDeletedDisplayLists(
unsigned int contextID);
378 static void discardAllDeletedDisplayLists(
unsigned int contextID);
382 static void flushDeletedDisplayLists(
unsigned int contextID,
double& availableTime);
392 SECONDARY_COLORS = 4,
397 TEXTURE_COORDS_0 = TEXTURE_COORDS,
398 TEXTURE_COORDS_1 = TEXTURE_COORDS_0+1,
399 TEXTURE_COORDS_2 = TEXTURE_COORDS_0+2,
400 TEXTURE_COORDS_3 = TEXTURE_COORDS_0+3,
401 TEXTURE_COORDS_4 = TEXTURE_COORDS_0+4,
402 TEXTURE_COORDS_5 = TEXTURE_COORDS_0+5,
403 TEXTURE_COORDS_6 = TEXTURE_COORDS_0+6,
404 TEXTURE_COORDS_7 = TEXTURE_COORDS_0+7
414 virtual void apply(AttributeType,
unsigned int,GLbyte*) {}
415 virtual void apply(AttributeType,
unsigned int,GLshort*) {}
416 virtual void apply(AttributeType,
unsigned int,GLint*) {}
418 virtual void apply(AttributeType,
unsigned int,GLubyte*) {}
419 virtual void apply(AttributeType,
unsigned int,GLushort*) {}
420 virtual void apply(AttributeType,
unsigned int,GLuint*) {}
422 virtual void apply(AttributeType,
unsigned int,
float*) {}
428 virtual void apply(AttributeType,
unsigned int,
double*) {}
450 virtual void apply(AttributeType,
unsigned int,
const GLbyte*) {}
451 virtual void apply(AttributeType,
unsigned int,
const GLshort*) {}
452 virtual void apply(AttributeType,
unsigned int,
const GLint*) {}
454 virtual void apply(AttributeType,
unsigned int,
const GLubyte*) {}
455 virtual void apply(AttributeType,
unsigned int,
const GLushort*) {}
456 virtual void apply(AttributeType,
unsigned int,
const GLuint*) {}
458 virtual void apply(AttributeType,
unsigned int,
const float*) {}
459 virtual void apply(AttributeType,
unsigned int,
const Vec2*) {}
460 virtual void apply(AttributeType,
unsigned int,
const Vec3*) {}
461 virtual void apply(AttributeType,
unsigned int,
const Vec4*) {}
464 virtual void apply(AttributeType,
unsigned int,
const double*) {}
465 virtual void apply(AttributeType,
unsigned int,
const Vec2d*) {}
466 virtual void apply(AttributeType,
unsigned int,
const Vec3d*) {}
467 virtual void apply(AttributeType,
unsigned int,
const Vec4d*) {}
535 #ifdef OSG_GL_DISPLAYLISTS_AVAILABLE
552 #ifdef USE_SEPARATE_COMPILE_AND_EXECUTE
554 glNewList( globj, GL_COMPILE );
564 glNewList( globj, GL_COMPILE_AND_EXECUTE );
GLuint & getDisplayList(unsigned int contextID) const
virtual void accept(PrimitiveIndexFunctor &) const
bool _boundingBoxComputed
virtual void apply(AttributeType, unsigned int, GLushort *)
virtual void apply(Vec3dArray &array)
BoundingBox _initialBound
ComputeBoundingBoxCallback()
ref_ptr< EventCallback > _drawableEventCallback
virtual void setDrawCallback(DrawCallback *dc)
virtual void apply(AttributeType, unsigned int, GLubyte *)
osg::buffered_value< GLuint > GLObjectList
unsigned int AttributeType
ConstAttributeFunctorArrayVisitor & operator=(const ConstAttributeFunctorArrayVisitor &)
virtual ~ConstAttributeFunctorArrayVisitor()
virtual void apply(Vec4ubArray &array)
static unsigned int s_numberNewDrawablesInLastFrame
DrawCallback(const DrawCallback &, const CopyOp &)
virtual void update(osg::NodeVisitor *, osg::Drawable *)
virtual void apply(AttributeType, unsigned int, const float *)
virtual void apply(const UShortArray &array)
AttributeFunctorArrayVisitor & operator=(const AttributeFunctorArrayVisitor &)
virtual void apply(AttributeType, unsigned int, const GLushort *)
virtual void apply(UShortArray &array)
ref_ptr< ComputeBoundingBoxCallback > _computeBoundCallback
virtual void apply(const ByteArray &array)
virtual void apply(AttributeType, unsigned int, const GLint *)
virtual void apply(const UByteArray &array)
void setComputeBoundingBoxCallback(ComputeBoundingBoxCallback *callback)
void draw(RenderInfo &renderInfo) const
virtual void apply(AttributeType, unsigned int, GLbyte *)
#define META_Node(library, name)
virtual void apply(AttributeType, unsigned int, Vec4 *)
UpdateCallback(const UpdateCallback &, const CopyOp &)
virtual void drawImplementation(RenderInfo &) const
virtual void apply(const FloatArray &array)
virtual void apply(const Vec4dArray &array)
virtual void event(osg::NodeVisitor *, osg::Drawable *)
virtual void apply(ByteArray &array)
virtual void apply(AttributeType, unsigned int, GLuint *)
virtual void apply(const DoubleArray &array)
virtual bool cull(osg::NodeVisitor *, osg::Drawable *, osg::State *) const
virtual void apply(const IntArray &array)
virtual void apply(AttributeType, unsigned int, const GLbyte *)
virtual void apply(UByteArray &array)
virtual ~AttributeFunctor()
void applyArray(Drawable::AttributeType type, const Array *array)
void applyArray(Drawable::AttributeType type, Array *array)
virtual void apply(AttributeType, unsigned int, const Vec4ub *)
virtual void apply(Vec4dArray &array)
virtual ~ConstAttributeFunctor()
virtual Drawable * asDrawable()
CullCallback(const CullCallback &, const CopyOp &)
ComputeBoundingBoxCallback * getComputeBoundingBoxCallback()
ref_ptr< UpdateCallback > _drawableUpdateCallback
EventCallback(const EventCallback &, const CopyOp &)
virtual void apply(AttributeType, unsigned int, const GLubyte *)
virtual void apply(UIntArray &array)
static GLuint generateDisplayList(unsigned int contextID, unsigned int sizeHint=0)
bool _supportsVertexBufferObjects
#define META_Object(library, name)
std::vector< Matrix > MatrixList
virtual void accept(PrimitiveFunctor &) const
static unsigned int s_numberDrawablesReusedLastInLastFrame
virtual unsigned int getGLObjectSizeHint() const
virtual bool run(osg::Object *object, osg::Object *data)
virtual void apply(Vec4Array &array)
bool _supportsDisplayList
bool isVertexBufferObjectSupported() const
virtual void apply(AttributeType, unsigned int, const Vec3 *)
virtual void apply(Vec2dArray &array)
void expandBy(const vec_type &v)
virtual void apply(ShortArray &array)
const BoundingSphere & getBound() const
virtual ~AttributeFunctorArrayVisitor()
Drawable::AttributeFunctor & _af
ComputeBoundingBoxCallback(const ComputeBoundingBoxCallback &, const CopyOp &)
bool getUseVertexBufferObjects() const
DrawCallback * getDrawCallback()
virtual void apply(AttributeType, unsigned int, GLint *)
virtual void accept(AttributeFunctor &)
ref_ptr< CullCallback > _drawableCullCallback
virtual void apply(AttributeType, unsigned int, const Vec2d *)
virtual void apply(AttributeType, unsigned int, double *)
bool getSupportsDisplayList() const
virtual BoundingBox computeBound(const osg::Drawable &) const
Drawable::AttributeType _type
virtual void apply(AttributeType, unsigned int, const Vec3d *)
AttributeFunctorArrayVisitor(Drawable::AttributeFunctor &af)
virtual void apply(AttributeType, unsigned int, Vec3 *)
virtual void apply(const Vec4ubArray &array)
const_reference front() const
const ComputeBoundingBoxCallback * getComputeBoundingBoxCallback() const
GLint GLenum GLsizei GLsizei GLsizei GLint GLenum GLenum type
virtual void apply(Vec3Array &array)
virtual void apply(AttributeType, unsigned int, const double *)
virtual bool supports(const PrimitiveFunctor &) const
virtual bool supports(const PrimitiveIndexFunctor &) const
virtual void apply(AttributeType, unsigned int, Vec2 *)
virtual void accept(ConstAttributeFunctor &) const
virtual void apply(const UIntArray &array)
virtual void apply(const Vec3dArray &array)
virtual void apply(AttributeType, unsigned int, const Vec4d *)
ConstAttributeFunctorArrayVisitor(Drawable::ConstAttributeFunctor &af)
virtual bool supports(const ConstAttributeFunctor &) const
virtual void apply(AttributeType, unsigned int, const Vec4 *)
virtual void apply(AttributeType, unsigned int, const GLuint *)
virtual void drawImplementation(osg::RenderInfo &, const osg::Drawable *) const
ref_ptr< DrawCallback > _drawCallback
const DrawCallback * getDrawCallback() const
virtual void apply(const Vec4Array &array)
void setShape(Shape *shape)
virtual void apply(const ShortArray &array)
virtual void accept(ArrayVisitor &)=0
bool _useVertexBufferObjects
unsigned int getContextID() const
virtual void apply(const Vec2dArray &array)
virtual void apply(AttributeType, unsigned int, float *)
virtual bool cull(osg::NodeVisitor *nv, osg::Drawable *drawable, osg::RenderInfo *renderInfo) const
virtual void apply(IntArray &array)
virtual void apply(Vec2Array &array)
const BoundingBox & getBoundingBox() const
Drawable::ConstAttributeFunctor & _af
virtual void apply(FloatArray &array)
virtual void apply(AttributeType, unsigned int, const GLshort *)
virtual void apply(DoubleArray &array)
Drawable::AttributeType _type
virtual void apply(AttributeType, unsigned int, Vec4d *)
const BoundingBox & getInitialBound() const
void setInitialBound(const osg::BoundingBox &bbox)
bool getUseDisplayList() const
virtual void apply(const Vec2Array &array)
virtual void apply(AttributeType, unsigned int, Vec3d *)
virtual void apply(AttributeType, unsigned int, GLshort *)
virtual void apply(const Vec3Array &array)
const Shape * getShape() const
virtual void apply(AttributeType, unsigned int, Vec4ub *)
virtual void apply(AttributeType, unsigned int, const Vec2 *)
virtual bool supports(const AttributeFunctor &) const
virtual const Drawable * asDrawable() const
virtual void apply(AttributeType, unsigned int, Vec2d *)
static unsigned int s_numberDeletedDrawablesInLastFrame