Introduced Drawable::CreateVertexArrayStateCallback to enable customization of how VertexArrayState objects.
Added public accessors to the Drawable::VertexArrayStateList.
This commit is contained in:
@@ -278,7 +278,53 @@ class OSG_EXPORT Drawable : public Node
|
||||
*/
|
||||
virtual void compileGLObjects(RenderInfo& renderInfo) const;
|
||||
|
||||
virtual VertexArrayState* createVertexArrayState(RenderInfo& renderInfo) const;
|
||||
|
||||
/** Callback class for overriding the default Drawable::createCreateVertexArrayStateImplementation().*/
|
||||
struct CreateVertexArrayStateCallback : public virtual osg::Object
|
||||
{
|
||||
CreateVertexArrayStateCallback() {}
|
||||
|
||||
CreateVertexArrayStateCallback(const CreateVertexArrayStateCallback& rhs,const CopyOp& copyop):
|
||||
Object(rhs, copyop) {}
|
||||
|
||||
META_Object(osg, CreateVertexArrayStateCallback);
|
||||
|
||||
/** do customized createVertexArrayState .*/
|
||||
virtual osg::VertexArrayState* createVertexArrayStateImplementation(osg::RenderInfo& renderInfo, const osg::Drawable* drawable) const
|
||||
{
|
||||
return drawable->createVertexArrayStateImplementation(renderInfo);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/** Set the callback to override the default Drawable::createCreateVertexArrayStateImplementation().*/
|
||||
void setCreateVertexArrayStateCallback(CreateVertexArrayStateCallback* cb) { _createVertexArrayStateCallback = cb; }
|
||||
|
||||
/** Get the callback that overrides the default Drawable::createCreateVertexArrayStateImplementation().*/
|
||||
CreateVertexArrayStateCallback* getCreateVertexArrayStateCallback() { return _createVertexArrayStateCallback.get(); }
|
||||
|
||||
/** Get the const callback that overrides the default Drawable::createCreateVertexArrayStateImplementation().*/
|
||||
const CreateVertexArrayStateCallback* getCreateVertexArrayStateCallback() const { return _createVertexArrayStateCallback.get(); }
|
||||
|
||||
|
||||
/** Craeate tje VertexArrayState object used to track vertex array and vertex array object state. This method will be called automatically during rendering setup so users should not call this themselves.*/
|
||||
inline VertexArrayState* createVertexArrayState(RenderInfo& renderInfo) const
|
||||
{
|
||||
if (_createVertexArrayStateCallback.valid()) return _createVertexArrayStateCallback->createVertexArrayStateImplementation(renderInfo, this);
|
||||
else return createVertexArrayStateImplementation(renderInfo);
|
||||
}
|
||||
|
||||
/** Implementaion of Craeate tje VertexArrayState object.*/
|
||||
virtual VertexArrayState* createVertexArrayStateImplementation(RenderInfo& renderInfo) const;
|
||||
|
||||
typedef buffered_object< osg::ref_ptr<VertexArrayState> > VertexArrayStateList;
|
||||
|
||||
void setVertexArrayStateList(VertexArrayStateList& vasl) { _vertexArrayStateList = vasl; }
|
||||
|
||||
VertexArrayStateList& getVertexArrayStateList() { return _vertexArrayStateList; }
|
||||
|
||||
const VertexArrayStateList& getVertexArrayStateList() const { return _vertexArrayStateList; }
|
||||
|
||||
|
||||
|
||||
/** Set whether to use a mutex to ensure ref() and unref() are thread safe.*/
|
||||
@@ -491,10 +537,10 @@ class OSG_EXPORT Drawable : public Node
|
||||
typedef osg::buffered_value<GLuint> GLObjectList;
|
||||
mutable GLObjectList _globjList;
|
||||
|
||||
typedef buffered_object< osg::ref_ptr<VertexArrayState> > VertexArrayStateList;
|
||||
mutable VertexArrayStateList _vertexArrayStateList;
|
||||
|
||||
ref_ptr<DrawCallback> _drawCallback;
|
||||
ref_ptr<CreateVertexArrayStateCallback> _createVertexArrayStateCallback;
|
||||
};
|
||||
|
||||
#ifdef INLINE_DRAWABLE_DRAW
|
||||
|
||||
Reference in New Issue
Block a user