From df280811a1c192eb2c2cf236703afa46e9a519d2 Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Mon, 8 Jan 2018 10:52:35 +0000 Subject: [PATCH] Merged Program.cpp from shader_pipeline --- src/osgWrappers/serializers/osg/Program.cpp | 53 +++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/src/osgWrappers/serializers/osg/Program.cpp b/src/osgWrappers/serializers/osg/Program.cpp index fd5adba9e..c8b502577 100644 --- a/src/osgWrappers/serializers/osg/Program.cpp +++ b/src/osgWrappers/serializers/osg/Program.cpp @@ -242,6 +242,57 @@ struct ProgramRemoveShader : public osgDB::MethodObject } }; +struct ProgramAddBindAttribLocation : public osgDB::MethodObject +{ + virtual bool run(void* objectPtr, osg::Parameters& inputParameters, osg::Parameters& outputParameters) const + { + if (inputParameters.size()<2) return false; + + // decode name + std::string name; + osg::Object* nameObject = inputParameters[0].get(); + osg::StringValueObject* sno = dynamic_cast(nameObject); + if (sno) name = sno->getValue(); + + if (name.empty()) return false; + + // decode index + GLuint index = 0; + osg::ValueObject* indexObject = inputParameters[1]->asValueObject(); + if (indexObject) indexObject->getScalarValue(index); + + // assign the name and index to the program + osg::Program* program = reinterpret_cast(objectPtr); + program->addBindAttribLocation(name, index); + + return true; + } +}; + +/** Remove an attribute location binding. */ +// void removeBindAttribLocation( const std::string& name ); +struct ProgramRemoveBindAttribLocation : public osgDB::MethodObject +{ + virtual bool run(void* objectPtr, osg::Parameters& inputParameters, osg::Parameters& outputParameters) const + { + if (inputParameters.empty()) return false; + + // decode name + std::string name; + osg::Object* nameObject = inputParameters[0].get(); + osg::StringValueObject* sno = dynamic_cast(nameObject); + if (sno) name = sno->getValue(); + + if (name.empty()) return false; + + // assign the name and index to the program + osg::Program* program = reinterpret_cast(objectPtr); + program->removeBindAttribLocation(name); + + return true; + } +}; + REGISTER_OBJECT_WRAPPER( Program, new osg::Program, @@ -281,4 +332,6 @@ REGISTER_OBJECT_WRAPPER( Program, ADD_METHOD_OBJECT( "addShader", ProgramAddShader ); ADD_METHOD_OBJECT( "removeShader", ProgramRemoveShader ); + ADD_METHOD_OBJECT( "addBindAttribLocation", ProgramAddBindAttribLocation ); + ADD_METHOD_OBJECT( "removeBindAttribLocation", ProgramRemoveBindAttribLocation ); }