⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uniform.cpp

📁 最新osg包
💻 CPP
字号:
// Mike Weiblen 2006-05-14#include "osg/Uniform"#include "osg/io_utils"#include "osg/Notify"#include "osgDB/Registry"#include "osgDB/Input"#include "osgDB/Output"#include "Matrix.h"using namespace osg;using namespace osgDB;using namespace std;// reuse from Geometry.cppbool Array_writeLocalData(const Array& array,Output& fw);Array* Array_readLocalData(Input& fr);// forward declare functions to use later.bool Uniform_readLocalData(Object& obj, Input& fr);bool Uniform_writeLocalData(const Object& obj, Output& fw);// register the read and write functions with the osgDB::Registry.RegisterDotOsgWrapperProxy g_UniformProxy(    new osg::Uniform,    "Uniform",    "Object Uniform",    &Uniform_readLocalData,    &Uniform_writeLocalData);bool Uniform_readLocalData(Object& obj, Input& fr){    bool iteratorAdvanced = false;    Uniform& uniform = static_cast<Uniform&>(obj);    if (fr[0].matchWord("type"))    {        // post-May 2006 format (OSG versions > 1.0)        uniform.setType( Uniform::getTypeId( fr[1].getStr() ) );        unsigned int numElements;        fr[2].getUInt(numElements);        uniform.setNumElements( numElements );        fr+=3;        iteratorAdvanced = true;        Array* data = Array_readLocalData(fr);        uniform.setArray( dynamic_cast<FloatArray*>(data) );        uniform.setArray( dynamic_cast<IntArray*>(data) );    }#if 1 //[// Deprecated; for backwards compatibility only.// when can we safely delete this code, I wonder...    else    {        // pre-May 2006 format (OSG versions <= 1.0)        uniform.setType( Uniform::getTypeId(fr[0].getStr()) );        fr+=1;        iteratorAdvanced = true;        switch( Uniform::getGlApiType(uniform.getType()) )        {            case(osg::Uniform::FLOAT):            {                float value;                if (fr[0].getFloat(value))                 {                    uniform.set(value);                    fr+=1;                    iteratorAdvanced = true;                }                break;            }            case(osg::Uniform::FLOAT_VEC2):            {                osg::Vec2 value;                if (fr[0].getFloat(value[0]) && fr[1].getFloat(value[1]))                 {                    uniform.set(value);                    fr+=2;                    iteratorAdvanced = true;                }                break;            }            case(osg::Uniform::FLOAT_VEC3):            {                osg::Vec3 value;                if (fr[0].getFloat(value[0]) && fr[1].getFloat(value[1]) && fr[2].getFloat(value[2]))                 {                    uniform.set(value);                    fr+=3;                    iteratorAdvanced = true;                }                break;            }            case(osg::Uniform::FLOAT_VEC4):            {                osg::Vec4 value;                if (fr[0].getFloat(value[0]) && fr[1].getFloat(value[1]) && fr[2].getFloat(value[2]) && fr[3].getFloat(value[3]))                 {                    uniform.set(value);                    fr+=4;                    iteratorAdvanced = true;                }                break;            }            case(osg::Uniform::INT):            {                int value;                if (fr[0].getInt(value))                 {                    uniform.set(value);                    fr+=1;                    iteratorAdvanced = true;                }                break;            }            case(osg::Uniform::INT_VEC2):            {                int value[2];                if (fr[0].getInt(value[0]) && fr[1].getInt(value[1]))                {                    uniform.set(value[0],value[1]);                    fr+=2;                    iteratorAdvanced = true;                }                break;            }            case(osg::Uniform::INT_VEC3):            {                int value[3];                if (fr[0].getInt(value[0]) && fr[1].getInt(value[1]) && fr[2].getInt(value[2]))                {                    uniform.set(value[0],value[1],value[2]);                    fr+=3;                    iteratorAdvanced = true;                }                break;            }            case(osg::Uniform::INT_VEC4):            {                int value[4];                if (fr[0].getInt(value[0]) && fr[1].getInt(value[1]) && fr[2].getInt(value[2]) && fr[3].getInt(value[3]))                {                    uniform.set(value[0],value[1],value[2],value[3]);                    fr+=4;                    iteratorAdvanced = true;                }                break;            }            case(osg::Uniform::FLOAT_MAT2):            {                osg::Matrix2 value;                if (fr[0].getFloat(value[0]) && fr[1].getFloat(value[1]) &&                    fr[2].getFloat(value[2]) && fr[3].getFloat(value[3]))                 {                    uniform.set(value);                    fr+=4;                    iteratorAdvanced = true;                }                break;            }            case(osg::Uniform::FLOAT_MAT3):            {                osg::Matrix3 value;                if (fr[0].getFloat(value[0]) && fr[1].getFloat(value[1]) && fr[2].getFloat(value[2]) &&                    fr[3].getFloat(value[3]) && fr[4].getFloat(value[4]) && fr[5].getFloat(value[5]) &&                    fr[6].getFloat(value[6]) && fr[7].getFloat(value[7]) && fr[8].getFloat(value[8]))                {                    uniform.set(value);                    fr+=9;                    iteratorAdvanced = true;                }                break;            }            case(osg::Uniform::FLOAT_MAT4):            {                Matrix value;                if( readMatrix(value,fr) )                {                    uniform.set(value);                   iteratorAdvanced = true;                }                break;            }            default:                break;        }    }#endif //]    static ref_ptr<Uniform::Callback> s_callback = new osg::Uniform::Callback;    while (fr.matchSequence("UpdateCallback {"))    {        int entry = fr[0].getNoNestedBrackets();        fr += 2;        Uniform::Callback* callback = dynamic_cast<Uniform::Callback*>(fr.readObjectOfType(*s_callback));        if (callback) {            uniform.setUpdateCallback(callback);        }        iteratorAdvanced = true;    }    while (fr.matchSequence("EventCallback {"))    {        int entry = fr[0].getNoNestedBrackets();        fr += 2;        Uniform::Callback* callback = dynamic_cast<Uniform::Callback*>(fr.readObjectOfType(*s_callback));        if (callback) {            uniform.setEventCallback(callback);        }        iteratorAdvanced = true;    }    return iteratorAdvanced;}bool Uniform_writeLocalData(const Object& obj,Output& fw){    const Uniform& uniform = static_cast<const Uniform&>(obj);    // post-May 2006 format (OSG versions > 1.0)    fw.indent() << "type "        << Uniform::getTypename( uniform.getType() ) << " "        << uniform.getNumElements() << " ";    if( uniform.getFloatArray() ) Array_writeLocalData( *uniform.getFloatArray(), fw );    if( uniform.getIntArray() )   Array_writeLocalData( *uniform.getIntArray(), fw );    if (uniform.getUpdateCallback())    {        fw.indent() << "UpdateCallback {" << std::endl;        fw.moveIn();        fw.writeObject(*uniform.getUpdateCallback());        fw.moveOut();        fw.indent() << "}" << std::endl;    }    if (uniform.getEventCallback())    {        fw.indent() << "EventCallback {" << std::endl;        fw.moveIn();        fw.writeObject(*uniform.getEventCallback());        fw.moveOut();        fw.indent() << "}" << std::endl;    }    return true;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -