C++学习(三零七)AttributeDispatchers详解

Posted hankern

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++学习(三零七)AttributeDispatchers详解相关的知识,希望对你有一定的参考价值。

AttributeDispatchers称为属性调度器,用于将Geometry中的顶点属性(位置、颜色、法线等)派发到opengl中,用于几何图形的绘制。

AttributeDispatch属性调度类基类,又分为TemplateAttributeDispatch、TemplateTargetAttributeDispatch,由他们通过重载函数operator()执行具体的派发工作。

主要有如下几个类:

1、AttributeDispatch(属性调度)

osg/AttributeDispatchers
struct AttributeDispatch : public osg::Referenced
{
    virtual void assign(const GLvoid*) {}
    virtual void operator() (unsigned int) {};
};

2、TemplateAttributeDispatch

osg/AttributeDispatchers.cpp
template<typename T>
class TemplateAttributeDispatch : public AttributeDispatch
{}

3、TemplateTargetAttributeDispatch

osg/AttributeDispatchers.cpp
template<typename I, typename T>
class TemplateTargetAttributeDispatch : public AttributeDispatch
{
        typedef void (GL_APIENTRY * F) (I, const T*);
        virtual void operator () (unsigned int pos)
        {
            _functionPtr(_target, &(_array[pos * _stride]));
        }    
        F                       _functionPtr;
}

4、AttributeDispatchMap

osg/AttributeDispatchers.cpp
class AttributeDispatchMap
{}

2、AttributeDispatchers(属性调度器)

用于管理将各种属性数组(例如存储在 osg::Geometry 中)分派到 OpenGL 的助手类。

osg/AttributeDispatchers
/** Helper class for managing the dispatch to OpenGL of various attribute arrays such as stored in osg::Geometry.*/
class OSG_EXPORT AttributeDispatchers : public osg::Referenced
{}

生成

使用

在osg的状态机中定义了,AttributeDispatchers

osg/State
class OSG_EXPORT State : public Referenced
{
    /** Get the helper class for dispatching osg::Arrays as OpenGL attribute data.*/
    inline AttributeDispatchers& getAttributeDispatchers() { return _arrayDispatchers; }
    AttributeDispatchers            _arrayDispatchers;
}

以上是关于C++学习(三零七)AttributeDispatchers详解的主要内容,如果未能解决你的问题,请参考以下文章

C++学习(三零六)osg设置背景颜色

C++学习(三零一)吹气球效应

C++学习(三零二)知识图谱中的几种关系

C++学习(三零五)osg开启 关闭光照效果

C++学习(三零四)osg材质Material使用

C++学习(三零九)osg::VertexArrayState的作用