root/OpenSceneGraph/trunk/src/osgWrappers/deprecated-dotosg/osg/Program.cpp @ 13041

Revision 13041, 3.6 kB (checked in by robert, 2 years ago)

Ran script to remove trailing spaces and tabs

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
Line 
1#include "osg/Program"
2#include "osg/Shader"
3
4#include "osgDB/Registry"
5#include "osgDB/Input"
6#include "osgDB/Output"
7
8using namespace osg;
9using namespace osgDB;
10using namespace std;
11
12extern bool Geometry_matchPrimitiveModeStr(const char* str, GLenum& mode);
13extern const char* Geometry_getPrimitiveModeStr(GLenum mode);
14
15// forward declare functions to use later.
16bool Program_readLocalData(Object& obj, Input& fr);
17bool Program_writeLocalData(const Object& obj, Output& fw);
18
19// register the read and write functions with the osgDB::Registry.
20REGISTER_DOTOSGWRAPPER(Program)
21(
22    new osg::Program,
23    "Program",
24    "Object StateAttribute Program",
25    &Program_readLocalData,
26    &Program_writeLocalData
27);
28
29
30bool Program_readLocalData(Object& obj, Input& fr)
31{
32    bool iteratorAdvanced = false;
33
34    Program& program = static_cast<Program&>(obj);
35
36    if(fr.matchSequence("GeometryVerticesOut %i"))
37    {
38        unsigned int verticesOut;
39        fr[1].getUInt(verticesOut);
40        program.setParameter(GL_GEOMETRY_VERTICES_OUT_EXT, verticesOut);
41        fr += 2;
42        iteratorAdvanced = true;
43    }
44
45    if(fr.matchSequence("GeometryInputType %w"))
46    {
47        std::string primitiveMode = fr[1].getStr();
48        GLenum mode;
49        if(Geometry_matchPrimitiveModeStr(primitiveMode.c_str(), mode))
50            program.setParameter(GL_GEOMETRY_INPUT_TYPE_EXT, mode);
51        fr += 2;
52        iteratorAdvanced = true;
53    }
54
55    if(fr.matchSequence("GeometryOutputType %w"))
56    {
57        std::string primitiveMode = fr[1].getStr();
58        GLenum mode;
59        if(Geometry_matchPrimitiveModeStr(primitiveMode.c_str(), mode))
60            program.setParameter(GL_GEOMETRY_OUTPUT_TYPE_EXT, mode);
61        fr += 2;
62        iteratorAdvanced = true;
63    }
64
65    while(fr.matchSequence("AttribBindingLocation %i %w"))
66    {
67        unsigned int index;
68        fr[1].getUInt(index);
69        program.addBindAttribLocation(fr[2].getStr(), index);
70        fr += 3;
71        iteratorAdvanced = true;
72    }
73
74
75    while(fr.matchSequence("AttribBindingLocation %w %i"))
76    {
77        unsigned int index;
78        fr[2].getUInt(index);
79        program.addBindAttribLocation(fr[1].getStr(), index);
80        fr += 3;
81        iteratorAdvanced = true;
82    }
83
84    int num_shaders;
85    if (fr[0].matchWord("num_shaders") &&
86        fr[1].getInt(num_shaders))
87    {
88        // could allocate space for shaders here...
89        fr+=2;
90        iteratorAdvanced = true;
91    }
92
93    Object* object = NULL;
94    while((object=fr.readObject())!=NULL)
95    {
96        program.addShader(dynamic_cast<Shader*>(object));
97        iteratorAdvanced = true;
98    }
99
100    return iteratorAdvanced;
101}
102
103
104bool Program_writeLocalData(const Object& obj,Output& fw)
105{
106    const Program& program = static_cast<const Program&>(obj);
107
108    fw.indent() << "GeometryVerticesOut " << program.getParameter(GL_GEOMETRY_VERTICES_OUT_EXT) << std::endl;
109    fw.indent() << "GeometryInputType " << Geometry_getPrimitiveModeStr(program.getParameter(GL_GEOMETRY_INPUT_TYPE_EXT)) << std::endl;
110    fw.indent() << "GeometryOutputType " << Geometry_getPrimitiveModeStr(program.getParameter(GL_GEOMETRY_OUTPUT_TYPE_EXT)) << std::endl;
111
112    const Program::AttribBindingList& abl = program.getAttribBindingList();
113    Program::AttribBindingList::const_iterator i;
114    for(i=abl.begin(); i!=abl.end(); i++)
115    {
116        fw.indent() << "AttribBindingLocation " << (*i).first << " " << (*i).second << std::endl;
117    }
118
119    fw.indent() << "num_shaders " << program.getNumShaders() << std::endl;
120    for(unsigned int ic=0;ic<program.getNumShaders();++ic)
121    {
122        fw.writeObject(*program.getShader(ic));
123    }
124
125    return true;
126}
Note: See TracBrowser for help on using the browser.