1 #include "osg/TexEnvCombine"
2 #include <osg/io_utils>
3 
4 #include "osgDB/Registry"
5 #include "osgDB/Input"
6 #include "osgDB/Output"
7 
8 #include <string.h>
9 
10 using namespace osg;
11 using namespace osgDB;
12 
13 // forward declare functions to use later.
14 bool TexEnvCombine_readLocalData(Object& obj, Input& fr);
15 bool TexEnvCombine_writeLocalData(const Object& obj, Output& fw);
16 
17 bool TexEnvCombine_matchCombineParamStr(const char* str,GLint& value);
18 const char* TexEnvCombine_getCombineParamStr(GLint value);
19 
20 bool TexEnvCombine_matchSourceParamStr(const char* str,GLint& value);
21 const char* TexEnvCombine_getSourceParamStr(GLint value);
22 
23 bool TexEnvCombine_matchOperandParamStr(const char* str,GLint& value);
24 const char* TexEnvCombine_getOperandParamStr(GLint value);
25 
26 // register the read and write functions with the osgDB::Registry.
27 REGISTER_DOTOSGWRAPPER(TexEnvCombine)
28 (
29     new osg::TexEnvCombine,
30     "TexEnvCombine",
31     "Object StateAttribute TexEnvCombine",
32     &TexEnvCombine_readLocalData,
33     &TexEnvCombine_writeLocalData
34 );
35 
36 
TexEnvCombine_readLocalData(Object & obj,Input & fr)37 bool TexEnvCombine_readLocalData(Object& obj, Input& fr)
38 {
39     bool iteratorAdvanced = false;
40 
41     TexEnvCombine& texenv = static_cast<TexEnvCombine&>(obj);
42 
43     GLint value;
44     if (fr[0].matchWord("combine_RGB") && TexEnvCombine_matchCombineParamStr(fr[1].getStr(),value))
45     {
46         texenv.setCombine_RGB(value);
47         fr+=2;
48         iteratorAdvanced = true;
49     }
50     if (fr[0].matchWord("combine_Alpha") && TexEnvCombine_matchCombineParamStr(fr[1].getStr(),value))
51     {
52         texenv.setCombine_Alpha(value);
53         fr+=2;
54         iteratorAdvanced = true;
55     }
56 
57 
58     if (fr[0].matchWord("source0_RGB") && TexEnvCombine_matchSourceParamStr(fr[1].getStr(),value))
59     {
60         texenv.setSource0_RGB(value);
61         fr+=2;
62         iteratorAdvanced = true;
63     }
64     if (fr[0].matchWord("source1_RGB") && TexEnvCombine_matchSourceParamStr(fr[1].getStr(),value))
65     {
66         texenv.setSource1_RGB(value);
67         fr+=2;
68         iteratorAdvanced = true;
69     }
70     if (fr[0].matchWord("source2_RGB") && TexEnvCombine_matchSourceParamStr(fr[1].getStr(),value))
71     {
72         texenv.setSource2_RGB(value);
73         fr+=2;
74         iteratorAdvanced = true;
75     }
76 
77     if (fr[0].matchWord("source0_Alpha") && TexEnvCombine_matchSourceParamStr(fr[1].getStr(),value))
78     {
79         texenv.setSource0_Alpha(value);
80         fr+=2;
81         iteratorAdvanced = true;
82     }
83     if (fr[0].matchWord("source1_Alpha") && TexEnvCombine_matchSourceParamStr(fr[1].getStr(),value))
84     {
85         texenv.setSource1_Alpha(value);
86         fr+=2;
87         iteratorAdvanced = true;
88     }
89     if (fr[0].matchWord("source2_Alpha") && TexEnvCombine_matchSourceParamStr(fr[1].getStr(),value))
90     {
91         texenv.setSource2_Alpha(value);
92         fr+=2;
93         iteratorAdvanced = true;
94     }
95 
96 
97 
98     if (fr[0].matchWord("operand0_RGB") && TexEnvCombine_matchOperandParamStr(fr[1].getStr(),value))
99     {
100         texenv.setOperand0_RGB(value);
101         fr+=2;
102         iteratorAdvanced = true;
103     }
104     if (fr[0].matchWord("operand1_RGB") && TexEnvCombine_matchOperandParamStr(fr[1].getStr(),value))
105     {
106         texenv.setOperand1_RGB(value);
107         fr+=2;
108         iteratorAdvanced = true;
109     }
110     if (fr[0].matchWord("operand2_RGB") && TexEnvCombine_matchOperandParamStr(fr[1].getStr(),value))
111     {
112         texenv.setOperand2_RGB(value);
113         fr+=2;
114         iteratorAdvanced = true;
115     }
116 
117     if (fr[0].matchWord("operand0_Alpha") && TexEnvCombine_matchOperandParamStr(fr[1].getStr(),value))
118     {
119         texenv.setOperand0_Alpha(value);
120         fr+=2;
121         iteratorAdvanced = true;
122     }
123     if (fr[0].matchWord("operand1_Alpha") && TexEnvCombine_matchOperandParamStr(fr[1].getStr(),value))
124     {
125         texenv.setOperand1_Alpha(value);
126         fr+=2;
127         iteratorAdvanced = true;
128     }
129     if (fr[0].matchWord("operand2_Alpha") && TexEnvCombine_matchOperandParamStr(fr[1].getStr(),value))
130     {
131         texenv.setOperand2_Alpha(value);
132         fr+=2;
133         iteratorAdvanced = true;
134     }
135 
136     float scale;
137     if (fr[0].matchWord("scale_RGB") && fr[1].getFloat(scale))
138     {
139         texenv.setScale_RGB(scale);
140         fr+=2;
141         iteratorAdvanced = true;
142     }
143 
144     if (fr[0].matchWord("scale_Alpha") && fr[1].getFloat(scale))
145     {
146         texenv.setScale_Alpha(scale);
147         fr+=2;
148         iteratorAdvanced = true;
149     }
150 
151     if (fr.matchSequence("constantColor %f %f %f %f"))
152     {
153         osg::Vec4 color;
154         fr[1].getFloat(color[0]);
155         fr[2].getFloat(color[1]);
156         fr[3].getFloat(color[2]);
157         fr[4].getFloat(color[3]);
158 
159         texenv.setConstantColor(color);
160 
161         fr+=5;
162         iteratorAdvanced = true;
163     }
164 
165     return iteratorAdvanced;
166 }
167 
TexEnvCombine_writeLocalData(const Object & obj,Output & fw)168 bool TexEnvCombine_writeLocalData(const Object& obj, Output& fw)
169 {
170     const TexEnvCombine& texenv = static_cast<const TexEnvCombine&>(obj);
171 
172     fw.indent() << "combine_RGB " << TexEnvCombine_getCombineParamStr(texenv.getCombine_RGB()) << std::endl;
173     fw.indent() << "combine_Alpha " << TexEnvCombine_getCombineParamStr(texenv.getCombine_Alpha()) << std::endl;
174 
175     fw.indent() << "source0_RGB " << TexEnvCombine_getSourceParamStr(texenv.getSource0_RGB()) << std::endl;
176     fw.indent() << "source1_RGB " << TexEnvCombine_getSourceParamStr(texenv.getSource1_RGB()) << std::endl;
177     fw.indent() << "source2_RGB " << TexEnvCombine_getSourceParamStr(texenv.getSource2_RGB()) << std::endl;
178 
179     fw.indent() << "source0_Alpha " << TexEnvCombine_getSourceParamStr(texenv.getSource0_Alpha()) << std::endl;
180     fw.indent() << "source1_Alpha " << TexEnvCombine_getSourceParamStr(texenv.getSource1_Alpha()) << std::endl;
181     fw.indent() << "source2_Alpha " << TexEnvCombine_getSourceParamStr(texenv.getSource2_Alpha()) << std::endl;
182 
183     fw.indent() << "operand0_RGB " << TexEnvCombine_getOperandParamStr(texenv.getOperand0_RGB()) << std::endl;
184     fw.indent() << "operand1_RGB " << TexEnvCombine_getOperandParamStr(texenv.getOperand1_RGB()) << std::endl;
185     fw.indent() << "operand2_RGB " << TexEnvCombine_getOperandParamStr(texenv.getOperand2_RGB()) << std::endl;
186 
187     fw.indent() << "operand0_Alpha " << TexEnvCombine_getOperandParamStr(texenv.getOperand0_Alpha()) << std::endl;
188     fw.indent() << "operand1_Alpha " << TexEnvCombine_getOperandParamStr(texenv.getOperand1_Alpha()) << std::endl;
189     fw.indent() << "operand2_Alpha " << TexEnvCombine_getOperandParamStr(texenv.getOperand2_Alpha()) << std::endl;
190 
191     fw.indent() << "scale_RGB " << texenv.getScale_RGB() << std::endl;
192     fw.indent() << "scale_Alpha " << texenv.getScale_Alpha() << std::endl;
193 
194     fw.indent() << "constantColor " << texenv.getConstantColor() << std::endl;
195 
196     return true;
197 }
198 
199 
TexEnvCombine_matchCombineParamStr(const char * str,GLint & value)200 bool TexEnvCombine_matchCombineParamStr(const char* str,GLint& value)
201 {
202     if      (strcmp(str,"REPLACE")==0)      value = TexEnvCombine::REPLACE;
203     else if (strcmp(str,"MODULATE")==0)     value = TexEnvCombine::MODULATE;
204     else if (strcmp(str,"ADD")==0)          value = TexEnvCombine::ADD;
205     else if (strcmp(str,"ADD_SIGNED")==0)   value = TexEnvCombine::ADD_SIGNED;
206     else if (strcmp(str,"INTERPOLATE")==0)  value = TexEnvCombine::INTERPOLATE;
207     else if (strcmp(str,"SUBTRACT")==0)     value = TexEnvCombine::SUBTRACT;
208     else if (strcmp(str,"DOT3_RGB")==0)     value = TexEnvCombine::DOT3_RGB;
209     else if (strcmp(str,"DOT3_RGBA")==0)    value = TexEnvCombine::DOT3_RGBA;
210     else return false;
211     return true;
212 }
213 
TexEnvCombine_getCombineParamStr(GLint value)214 const char* TexEnvCombine_getCombineParamStr(GLint value)
215 {
216     switch(value)
217     {
218         case(TexEnvCombine::REPLACE):       return "REPLACE";
219         case(TexEnvCombine::MODULATE):      return "MODULATE";
220         case(TexEnvCombine::ADD):           return "ADD";
221         case(TexEnvCombine::ADD_SIGNED):    return "ADD_SIGNED";
222         case(TexEnvCombine::INTERPOLATE):   return "INTERPOLATE";
223         case(TexEnvCombine::SUBTRACT):      return "SUBTRACT";
224         case(TexEnvCombine::DOT3_RGB):      return "DOT3_RGB";
225         case(TexEnvCombine::DOT3_RGBA):     return "DOT3_RGBA";
226     }
227     return "";
228 }
229 
TexEnvCombine_matchSourceParamStr(const char * str,GLint & value)230 bool TexEnvCombine_matchSourceParamStr(const char* str,GLint& value)
231 {
232     if      (strcmp(str,"CONSTANT")==0)         value = TexEnvCombine::CONSTANT;
233     else if (strcmp(str,"PRIMARY_COLOR")==0)    value = TexEnvCombine::PRIMARY_COLOR;
234     else if (strcmp(str,"PREVIOUS")==0)         value = TexEnvCombine::PREVIOUS;
235     else if (strcmp(str,"TEXTURE")==0)          value = TexEnvCombine::TEXTURE;
236     else if (strcmp(str,"TEXTURE0")==0)         value = TexEnvCombine::TEXTURE0;
237     else if (strcmp(str,"TEXTURE1")==0)         value = TexEnvCombine::TEXTURE1;
238     else if (strcmp(str,"TEXTURE2")==0)         value = TexEnvCombine::TEXTURE2;
239     else if (strcmp(str,"TEXTURE3")==0)         value = TexEnvCombine::TEXTURE3;
240     else if (strcmp(str,"TEXTURE4")==0)         value = TexEnvCombine::TEXTURE4;
241     else if (strcmp(str,"TEXTURE5")==0)         value = TexEnvCombine::TEXTURE5;
242     else if (strcmp(str,"TEXTURE6")==0)         value = TexEnvCombine::TEXTURE6;
243     else if (strcmp(str,"TEXTURE7")==0)         value = TexEnvCombine::TEXTURE7;
244     else return false;
245     return true;
246 }
247 
TexEnvCombine_getSourceParamStr(GLint value)248 const char* TexEnvCombine_getSourceParamStr(GLint value)
249 {
250     switch(value)
251     {
252         case(TexEnvCombine::CONSTANT):      return "CONSTANT";
253         case(TexEnvCombine::PRIMARY_COLOR): return "PRIMARY_COLOR";
254         case(TexEnvCombine::PREVIOUS):      return "PREVIOUS";
255         case(TexEnvCombine::TEXTURE):       return "TEXTURE";
256         case(TexEnvCombine::TEXTURE0):      return "TEXTURE0";
257         case(TexEnvCombine::TEXTURE1):      return "TEXTURE1";
258         case(TexEnvCombine::TEXTURE2):      return "TEXTURE2";
259         case(TexEnvCombine::TEXTURE3):      return "TEXTURE3";
260         case(TexEnvCombine::TEXTURE4):      return "TEXTURE4";
261         case(TexEnvCombine::TEXTURE5):      return "TEXTURE5";
262         case(TexEnvCombine::TEXTURE6):      return "TEXTURE6";
263         case(TexEnvCombine::TEXTURE7):      return "TEXTURE7";
264     }
265     return "";
266 }
267 
TexEnvCombine_matchOperandParamStr(const char * str,GLint & value)268 bool TexEnvCombine_matchOperandParamStr(const char* str,GLint& value)
269 {
270     if      (strcmp(str,"SRC_COLOR")==0)            value = TexEnvCombine::SRC_COLOR;
271     else if (strcmp(str,"ONE_MINUS_SRC_COLOR")==0)  value = TexEnvCombine::ONE_MINUS_SRC_COLOR;
272     else if (strcmp(str,"SRC_ALPHA")==0)            value = TexEnvCombine::SRC_ALPHA;
273     else if (strcmp(str,"ONE_MINUS_SRC_ALPHA")==0)  value = TexEnvCombine::ONE_MINUS_SRC_ALPHA;
274     else return false;
275     return true;
276 }
277 
TexEnvCombine_getOperandParamStr(GLint value)278 const char* TexEnvCombine_getOperandParamStr(GLint value)
279 {
280     switch(value)
281     {
282         case(TexEnvCombine::SRC_COLOR):             return "SRC_COLOR";
283         case(TexEnvCombine::ONE_MINUS_SRC_COLOR):   return "ONE_MINUS_SRC_COLOR";
284         case(TexEnvCombine::SRC_ALPHA):             return "SRC_ALPHA";
285         case(TexEnvCombine::ONE_MINUS_SRC_ALPHA):   return "ONE_MINUS_SRC_ALPHA";
286     }
287     return "";
288 }
289 
290