HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
SHOP_Node.h
Go to the documentation of this file.
1 /*
2  * PROPRIETARY INFORMATION. This software is proprietary to
3  * Side Effects Software Inc., and is not to be reproduced,
4  * transmitted, or disclosed in any way without written permission.
5  *
6  * NAME: SHOP_Node.h ( SHOP Library, C++)
7  *
8  * COMMENTS: Shader OPs. These are nodes which collect all shading
9  * information for nodes into a nice compact encapsulation.
10  */
11 
12 #ifndef __SHOP_Node__
13 #define __SHOP_Node__
14 
15 #include "SHOP_API.h"
16 
17 #include "SHOP_ClerkCache.h"
18 #include "SHOP_Error.h"
19 
20 #include <OP/OP_Network.h>
21 #include <IMG/IMG_Raster.h>
22 #include <UT/UT_Map.h>
23 
24 class UT_Options;
25 class OP_OperatorTable;
26 class VOP_Language;
27 class SHOP_ReData;
28 class SHOP_Node;
29 class SHOP_Clerk;
31 
32 extern "C" {
34 }
35 
36 // Sub-class variables should start their local variables at SHOP_VAR_MAX_BASE
37 enum {
41 };
42 
43 #include "SHOP_NodeTypes.h"
44 
45 #define SHOP_RENDERTYPE_OPTION "rendertype"
46 #define SHOP_FPRECISION_OPTION "soho_precision"
47 #define SHOP_DEFAULT_CLERK "VMantra"
48 
50 {
51 public:
52  SHOP_Node(OP_Network *dad, const char *name,
53  OP_Operator *entry, SHOP_TYPE shader_type=SHOP_SURFACE);
54  virtual ~SHOP_Node();
55 
57  static CH_LocalVariable myVariableList[];
58 
59  /// Returns the list of obsolete parameters.
60  static PRM_Template *getObsolete(SHOP_TYPE type);
61 
62  const UT_String &getRenderMask() const { return myRenderMask; }
63 
64  virtual int getFirstParameter();
65  virtual int getLastParameter();
66 
67  virtual bool runCreateScript();
68  virtual void onCreated();
69 
70  // The options may contain:
71  // rendertype: The the shader for a specific renderer
72  virtual SHOP_Node *findShader(SHOP_TYPE shop_type, fpreal now,
73  const UT_Options *options);
74 
75  /// Returns true if the shop node provides a shader for a given shop_type.
76  virtual bool matchesShaderType(SHOP_TYPE shop_type);
77 
78  // Collect all shaders of the specific type which are hooked up.
79  // The return code is the number of shaders in the list.
80  virtual int collectShaders(UT_ValArray<SHOP_Node *>&list,
81  SHOP_TYPE shop_type,
82  fpreal now, const UT_Options *options);
83 
84  /// Returns true if co-shader parameters may have corresponding node inputs.
85  bool canHaveInputsForCoshaderParms() const;
86 
87  /// Returns the langauge used by this shop.
88  const VOP_Language *getLanguage() const;
89 
90  /// Collect all coshader parameter names on this node.
91  /// If is_coshader_array is not null, the bits are set for parms
92  /// that are coshader arrays (rather than just a co-shader).
93  void gatherCoShaderParmNames(UT_StringArray& coshaderparms,
94  UT_BitArray *is_coshader_array);
95 
96  /// Gets the input node corresponding to the given co-shader parameter.
97  SHOP_Node * getCoShaderInputNode(const char* parm_name);
98 
99  /// Obtain the coshader node(s) specified by the given parameter.
100  /// If there is an input node wired to the connector corresponding to
101  /// this parm, then it is used for constructing the list, otherwise,
102  /// parameter is evaluated and the op path is used for the list.
103  /// For parameters representing a single co-shader, the list will
104  /// contain zero or one entries (ie, the input node or node in parm path),
105  /// but for parameters representing co-shader arrays, the list may contain
106  /// more than one entry (eg, merge shop input would build a larger array).
107  void getCoShaderNodes(UT_ValArray<SHOP_Node *>&list,
108  const char* parm_name,
109  fpreal now, const UT_Options *options);
110 
111  /// Represents this shop as a coshader list. Usually just a single entry,
112  /// but some shops add several entries (eg, merge co-shaders shop).
113  virtual void representAsCoShader(UT_ValArray<SHOP_Node *>&list);
114 
115  /// Collect coshader nodes for this shop's shader of a given type.
116  virtual void gatherCoShaderNodes(UT_ValArray<SHOP_Node *>&list,
117  SHOP_TYPE main_shader_type,
118  fpreal now, const UT_Options *options);
119 
120  virtual int getInputTileLOD() const;
121  virtual int getOutputTileLOD() const;
122  virtual bool isInputVisible(int idx) const;
123  virtual bool isOutputVisible(int idx) const;
124 
125  virtual SHOP_Node *getOutputNode() const;
126  virtual void getInputName(UT_String &name, int idx) const;
127  virtual int getInputFromName(const UT_String &in) const;
128  virtual SHOP_TYPE getInputType(int idx) const;
129  virtual void getOutputName(UT_String &name, int idx) const;
130  virtual int getOutputFromName(const UT_String &out) const;
131  virtual SHOP_TYPE getOutputType(int idx) const;
132 
133  virtual void saveDialogScriptExtraInfo(std::ostream &os);
134  virtual void createGalleryEntry(OP_GalleryEntry &entry);
135 
137  { return myVisibleInputs; }
139  { return myVisibleOutputs; }
140 
141  // This is only called from a Clerk to find out the shader name (when
142  // building the render data). Note that the returned pointer may become
143  // invalidated, so make a copy of the data if it must be kept around.
144  virtual UT_StringHolder
145  getShaderName(bool forvex, SHOP_TYPE shoptype) const;
146  virtual SHOP_TYPE getShaderType() const;
147  virtual bool evalVariableValue(fpreal &v, int idx, int thread)
148  { return OP_Network::evalVariableValue(v, idx, thread); }
149  virtual bool evalVariableValue(UT_String &str, int idx, int thread);
150 
152  UT_BitArray &selection,
153  const CH_ChannelList &channels);
154  virtual bool createSpareParametersForLoad(
155  UT_StringArray &names,
156  PRM_ParmNameMap &nmap,
157  UT_String &errors);
158 
159  static void pushCallers(OP_Node *obj, OP_Node *sop);
160  static void popCallers();
161 
162  /// Obtain a clerk that matches the shop type of this node and the render
163  /// type. If the shop type of this node is multi-type, then the method
164  /// argument is used to interpret the multi type as a specific shop type,
165  /// which is then used to match the clerk.
166  SHOP_Clerk *getClerk(const char *rendertype,
167  SHOP_TYPE interpret_type = SHOP_INVALID );
168  SHOP_Clerk *getAnyClerk(bool only_string_generators);
169 
170  virtual void buildVexScript(UT_String &result,
171  fpreal t,
172  OP_Node *parent,
173  UT_Map<int, bool> *visitlist);
174  virtual void buildVexScript(UT_String &result,
175  fpreal t,
176  DEP_MicroNode *depnode,
177  UT_Map<int, bool> *visitlist);
178 
179  virtual bool buildShaderString(UT_String &result, fpreal now,
180  const UT_Options *options, OP_Node *obj=0, OP_Node *sop=0,
181  SHOP_TYPE interpret_type = SHOP_INVALID);
182  virtual bool buildShaderHandle(UT_String &result, fpreal now,
183  const UT_Options *options, OP_Node *obj=0, OP_Node *sop=0,
184  SHOP_TYPE interpret_type = SHOP_INVALID);
185  virtual bool buildShaderLanguage(UT_String &result, fpreal now,
186  const UT_Options *options, OP_Node *obj=0, OP_Node *sop=0,
187  SHOP_TYPE interpret_type = SHOP_INVALID);
188  virtual bool buildShaderData(SHOP_ReData &data, fpreal now,
189  const UT_Options *options, OP_Node *obj=0, OP_Node *sop=0,
190  SHOP_TYPE interpret_type = SHOP_INVALID);
191  virtual bool buildShaderBounds(UT_BoundingBox &box, fpreal now,
192  const UT_Options *options, OP_Node *obj=0, OP_Node *sop=0,
193  SHOP_TYPE interpret_type = SHOP_INVALID);
194  virtual bool buildCoShaderStrings(UT_StringArray &result,OP_NodeList &shops,
195  fpreal now, const UT_Options *options,
196  OP_Node *obj=0, OP_Node *sop=0,
197  SHOP_TYPE interpret_type = SHOP_INVALID);
198  virtual bool buildCoShaderHandles(UT_StringArray &result, fpreal now,
199  const UT_Options *options, OP_Node *obj=0, OP_Node *sop=0,
200  SHOP_TYPE interpret_type = SHOP_INVALID);
201  virtual bool buildCoShaderLanguages(UT_StringArray &result, fpreal now,
202  const UT_Options *options, OP_Node *obj=0, OP_Node *sop=0,
203  SHOP_TYPE interpret_type = SHOP_INVALID);
204 
205  /// Build a shader string for a VOP node. If the VOP isn't a code creator,
206  /// the code creator parent of the VOP will have its string generated.
207  virtual bool buildVopShaderString(VOP_Node *vop,
208  UT_String &result, fpreal now,
209  const UT_Options *options,
210  OP_Node *obj, OP_Node *sop,
211  SHOP_TYPE interpret_type = SHOP_INVALID);
212 
213  void destroyCache();
214  SHOP_ClerkCacheEntry *getClerkData(const SHOP_Clerk *clerk);
215  void destroyClerkData(const SHOP_Clerk *clerk);
216  void addClerkData(const SHOP_Clerk *clerk,
217  SHOP_ClerkCacheEntry *entry);
218 
219  /// Returns the shader types this shop outputs.
220  virtual void getOutputShaderTypes(UT_Array<SHOP_TYPE> & types);
221 
222  static void buildShaderTable(OP_OperatorTable &table);
223  static void initializeExpressions();
224  static OP_Operator *getManagementOperator();
225  static OP_Operator *getMaterialManagementOperator();
226 
227  // Convenience error methods
228  void addError(int code, const char *msg = 0)
229  { UTaddError("SHOP", code, msg);}
230  void addMessage(SHOP_ErrorCode code, const char *msg = 0)
231  { UTaddMessage("SHOP", code, msg);}
232  void addWarning(SHOP_ErrorCode code, const char *msg = 0)
233  { UTaddWarning("SHOP", code, msg);}
234  void addFatal(SHOP_ErrorCode code, const char *msg = 0)
235  { UTaddFatal("SHOP", code, msg);}
236  void addSystemError(const char *msg = 0)
237  { UTaddSystemError(msg);}
238  void addCommonError(UT_CommonErrorCode what, const char *msg = 0)
239  { UTaddCommonError(what, msg);}
240 
241  bool containsShopType(SHOP_TYPE type) const;
242  void bumpContainedType(SHOP_TYPE type, int dir);
243 
244  int getOGLScriptCacheState() const { return myOGLScriptCache; }
246  const char *vtxsrc, const char *geomsrc,
247  const char *fragsrc)
248  { myOGLScriptCache = val;
249  myOGLVtxSource.harden(vtxsrc);
250  myOGLGeomSource.harden(geomsrc);
251  myOGLFragSource.harden(fragsrc);
252  myOGLProgram.clear();
253  }
254  void setOGLShaderProgram(bool enable,
255  const char *program_file)
256  { myOGLScriptCache = enable ? 1 : -1;
257  myOGLVtxSource.clear();
258  myOGLGeomSource.clear();
259  myOGLFragSource.clear();
260  myOGLProgram.harden(program_file);
261  }
262  const char *getOGLVtxSource() const
263  { return (const char *) myOGLVtxSource; }
264  const char *getOGLGeomSource() const
265  { return (const char *) myOGLGeomSource; }
266  const char *getOGLFragSource() const
267  { return (const char *) myOGLFragSource; }
268 
269  const char *getOGLShaderProgram() const
270  { return (const char *) myOGLProgram; }
271 
272  // The following evaluator will evaluate the string parameter. However, it
273  // will also perform any bundle pattern expansion, or matrix evaluation
274  // based on the PRM_SpareData.
275  // The quoted bool returns whether the result should be considered to be a
276  // string (or whether it's another data type).
277  void evalStringParm(UT_String &result,
278  const char *parm_name,
279  int vector_index, fpreal now,
280  const PRM_Template *tplate,
281  bool &quoted,
282  const char *rtype, int fprecision);
283 
284  // Standard OP Network methods
285  static const char *theChildTableName;
286  virtual const char *getChildType() const;
287  virtual const char *getOpType() const;
288 
289  virtual OP_OpTypeId getChildTypeID() const;
290  virtual OP_OpTypeId getOpTypeID() const;
291 
292  // Absolute Width
293  virtual fpreal getW() const;
294  // Absolute Height
295  virtual fpreal getH() const;
296 
297  // SHOP Parameter Evaluation with options.
298  bool evalShopParameter(const char *name, int vec_idx,
299  fpreal now, int &value,
300  const UT_Options *options,
301  bool add_cook_dependency=false);
302  bool evalShopParameter(const char *name, int vec_idx,
303  fpreal now, fpreal &value,
304  const UT_Options *options,
305  bool add_cook_dependency=false);
306  bool evalShopParameter(const char *name, int vec_idx,
307  fpreal now, UT_String &value,
308  const UT_Options *options,
309  bool add_cook_dependency=false);
310 
311  // Overrides of OP_Node methods specific to materials
313  { return &myMaterialIconFilename; }
314  virtual void setMaterialIconFilename(const char *icon_file)
315  { myMaterialIconFilename.harden(icon_file); }
316 
318  { return &myMaterialIconImage; }
319 
321  { return myAllowIconRegeneration; }
322  virtual void setMaterialIconAllowRegenerateFlag(bool allow)
323  { myAllowIconRegeneration = allow; }
324 
325  virtual SHOP_TYPE getNamedInputType(
326  const OP_ConnectorId& input_name) const;
327  virtual SHOP_TYPE getNamedOutputType(
328  const OP_ConnectorId& output_name) const;
329 
330  /// Returns a procedural shader node of a given type, if the shop
331  /// indeed has such a node. Returns NULL otherwise.
332  virtual VOP_Node * getProcedural(VOP_Type type);
333 
334 protected:
335  virtual void changeParmTemplate(PRM_Template *new_template);
336  virtual const PRM_Template *getShaderParmTemplates();
337 
338  // Standard OP Node methods
339  virtual int getDataClass() const;
340  virtual OP_ERROR cookMe(OP_Context &);
341  virtual OP_ERROR bypassMe(OP_Context &, int &);
342  virtual const char *getFileExtension(int binary) const;
343 
344  virtual OP_DataType getCookedDataType() const;
345  virtual void deleteCookedData();
346  virtual int saveCookedData(const char *, OP_Context &);
347  virtual int saveCookedData(std::ostream &, OP_Context &, int);
348 
349  virtual bool cookedDataUsesAllParameters() const
350  { return true; }
351  virtual bool cookedDataNeedsErrors() const
352  { return true; }
353 
354  /// Disable parms whose corresponding input connectors are wired in.
355  virtual bool updateParmsFlags();
356 
357  // Regenerates the visible inputs and outputs arrays.
358  virtual void updateVisibleInputsAndOutputs();
359 
360  // This method will expand the pattern specified, possibly generating a
361  // bundle for expansion.
362  void resolveParmBundle(const char *parm_name,
363  int vector_index,
364  UT_String &pattern,
365  OP_Network *creator,
366  const char *filter,
367  bool expand_fullpath = false);
368 
369  // Instead of simply getting the node wired into the input specified, we
370  // also get the output number which it's wired from.
371  SHOP_Node *getFullInput(int input_idx, int &output_idx) const;
372 
373  void setShaderType(SHOP_TYPE t);
374 
375  /// Checks if the options specify a render mask that limit
376  /// the types of nodes that can be returned by findShader().
377  /// Returns this object if no clerk name is specified or if
378  /// the node maches the specified clerk. Otherwise, returns NULL.
379  SHOP_Node * checkRenderMask( const UT_Options *options);
380 
381  bool renderMatch(const char *rendertype) const;
382  bool renderMatch(const SHOP_Clerk &clerk) const;
383 
384  int myContainedShops[SHOP_MAX_TYPES];
392 
395 
399 
400 private:
401  // This is overriden to selectively save nodes for compiled assets.
402  virtual bool getAllowSavingChild(OP_Node *node,
403  const OP_SaveFlags &flags);
404 
405  static void installCommands();
406 
407  SHOP_TYPE myShaderType;
408 };
409 
410 // ============================================================================
412 {
413 public:
415  : myObject(obj)
416  , mySop(sop)
417  {
418  if (myObject || mySop)
419  SHOP_Node::pushCallers(obj, sop);
420  }
422  {
423  if (myObject || mySop)
425  }
426 
427 private:
428  OP_Node *myObject;
429  OP_Node *mySop;
430 };
431 
432 // ============================================================================
433 /// Filter used by material vop containers.
435 {
436 public:
437  void setContextName(const UT_StringHolder &context);
438  virtual bool allowOperatorAsChild(OP_Operator *op);
439 
440 private:
441  UT_StringHolder myContextName;
442 };
443 
444 
445 #endif
virtual int saveCookedData(std::ostream &os, OP_Context &, int binary=0)=0
Reprsents a language for which VOPs can generate source code.
Definition: VOP_Language.h:27
void addCommonError(UT_CommonErrorCode what, const char *msg=0)
Definition: SHOP_Node.h:238
virtual void createGalleryEntry(OP_GalleryEntry &entry)
int getOGLScriptCacheState() const
Definition: SHOP_Node.h:244
static void pushCallers(OP_Node *obj, OP_Node *sop)
virtual void buildVexScript(UT_String &script, fpreal t, OP_Node *owner, UT_Map< int, bool > *visitlist=0)
virtual bool updateParmsFlags()
void addWarning(SHOP_ErrorCode code, const char *msg=0)
Definition: SHOP_Node.h:232
virtual void getInputName(UT_String &in, int idx) const
Unsorted map container.
Definition: UT_Map.h:83
virtual fpreal getH() const
Node position/scale is used by the UI.
#define SYS_VISIBILITY_EXPORT
virtual IMG_Raster * getMaterialIconImage()
Definition: SHOP_Node.h:317
const GLdouble * v
Definition: glcorearb.h:836
SHOP_AutoPushCallers(OP_Node *obj, OP_Node *sop)
Definition: SHOP_Node.h:414
virtual OP_OpTypeId getOpTypeID() const =0
virtual bool createSpareParametersForLoad(UT_StringArray &, PRM_ParmNameMap &, UT_String &)
UT_API UT_ErrorSeverity UTaddFatal(const char *type, int code, const char *msg=0, const UT_SourceLocation *loc=0)
const GLuint GLenum const void * binary
Definition: glcorearb.h:1923
static const char * theChildTableName
Definition: SHOP_Node.h:285
UT_String myOGLGeomSource
Definition: SHOP_Node.h:389
Filter used by material vop containers.
Definition: SHOP_Node.h:434
const UT_IntArray & getVisibleOutputs() const
Definition: SHOP_Node.h:138
UT_ErrorSeverity
Definition: UT_Error.h:25
GLbitfield flags
Definition: glcorearb.h:1595
const char * getOGLGeomSource() const
Definition: SHOP_Node.h:264
virtual int getDataClass() const
virtual void setMaterialIconAllowRegenerateFlag(bool allow)
Definition: SHOP_Node.h:322
void addMessage(SHOP_ErrorCode code, const char *msg=0)
Definition: SHOP_Node.h:230
UT_IntArray myVisibleInputs
Definition: SHOP_Node.h:393
UT_API UT_ErrorSeverity UTaddMessage(const char *type, int code, const char *msg=0, const UT_SourceLocation *loc=0)
SYS_VISIBILITY_EXPORT void newShopOperator(OP_OperatorTable *)
UT_API UT_ErrorSeverity UTaddSystemError(const char *msg=0)
virtual OP_ERROR cookMe(OP_Context &context)=0
virtual bool getAllowSavingChild(OP_Node *node, const OP_SaveFlags &flags)
Returns true if the child at node can should be saved, false otherwise.
Definition: OP_Network.h:870
UT_String myOGLFragSource
Definition: SHOP_Node.h:390
virtual void setMaterialIconFilename(const char *icon_file)
Definition: SHOP_Node.h:314
virtual void saveDialogScriptExtraInfo(std::ostream &os)
#define SHOP_API
Definition: SHOP_API.h:10
UT_IntArray myVisibleOutputs
Definition: SHOP_Node.h:394
virtual const char * getOpType() const =0
const char * getOGLShaderProgram() const
Definition: SHOP_Node.h:269
int myOGLScriptCache
Definition: SHOP_Node.h:387
SHOP_ErrorCode
Definition: SHOP_Error.h:14
SHOP_TYPE
UT_String myMaterialIconFilename
Definition: SHOP_Node.h:396
UT_Map< SHOP_ClerkCacheKey, SHOP_ClerkCacheEntry * > myClerkCache
Definition: SHOP_Node.h:386
virtual int getOutputFromName(const UT_String &out) const
virtual fpreal getW() const
Node position/scale is used by the UI.
UT_String myOGLVtxSource
Definition: SHOP_Node.h:388
const char * getOGLVtxSource() const
Definition: SHOP_Node.h:262
GLboolean * data
Definition: glcorearb.h:130
GLuint const GLchar * name
Definition: glcorearb.h:785
virtual bool cookedDataUsesAllParameters() const
Definition: SHOP_Node.h:349
virtual OP_DataType getCookedDataType() const =0
virtual bool evalVariableValue(fpreal &v, int idx, int thread)
Definition: SHOP_Node.h:147
OP_OpTypeId
Definition: OP_Node.h:263
bool myAllowIconRegeneration
Definition: SHOP_Node.h:398
UT_API UT_ErrorSeverity UTaddCommonError(UT_CommonErrorCode what, const char *msg=0)
virtual bool createSpareParametersFromChannels(UT_BitArray &selection, const CH_ChannelList &channels)
void addSystemError(const char *msg=0)
Definition: SHOP_Node.h:236
UT_CommonErrorCode
Definition: UT_Error.h:42
virtual const char * getChildType() const
GLsizei const GLfloat * value
Definition: glcorearb.h:823
double fpreal
Definition: SYS_Types.h:269
A map of string to various well defined value types.
Definition: UT_Options.h:42
virtual const char * getFileExtension(int binary) const =0
const UT_IntArray & getVisibleInputs() const
Definition: SHOP_Node.h:136
UT_String myOGLProgram
Definition: SHOP_Node.h:391
virtual void changeParmTemplate(PRM_Template *new_template)
UT_String myRenderMask
Definition: SHOP_Node.h:385
UT_API UT_ErrorSeverity UTaddWarning(const char *type, int code, const char *msg=0, const UT_SourceLocation *loc=0)
virtual bool allowOperatorAsChild(OP_Operator *)
Definition: OP_Network.h:110
GLuint GLfloat * val
Definition: glcorearb.h:1607
virtual int getInputFromName(const UT_String &in) const
VOP_Type
Definition: VOP_Types.h:24
OP_DataType
Definition: OP_DataTypes.h:27
virtual OP_OpTypeId getChildTypeID() const =0
virtual bool runCreateScript()
virtual bool evalVariableValue(UT_String &val, int index, int thread)
GLint GLint GLsizei GLint GLenum GLenum type
Definition: glcorearb.h:107
void setOGLScriptCache(int val, const char *vtxsrc, const char *geomsrc, const char *fragsrc)
Definition: SHOP_Node.h:245
static void popCallers()
virtual void getOutputName(UT_String &out, int idx) const
void setOGLShaderProgram(bool enable, const char *program_file)
Definition: SHOP_Node.h:254
GLsizei GLenum GLenum * types
Definition: glcorearb.h:2541
const char * getOGLFragSource() const
Definition: SHOP_Node.h:266
virtual bool getMaterialIconAllowRegenerateFlag()
Definition: SHOP_Node.h:320
void addFatal(SHOP_ErrorCode code, const char *msg=0)
Definition: SHOP_Node.h:234
virtual UT_String * getMaterialIconFilename()
Definition: SHOP_Node.h:312
virtual void onCreated(void)
Overriden in VOPs.
Definition: OP_Node.h:2840
void addError(int code, const char *msg=0)
Definition: SHOP_Node.h:228
virtual OP_ERROR bypassMe(OP_Context &context, int &copied_input)=0
virtual bool cookedDataNeedsErrors() const
Definition: SHOP_Node.h:351
static OP_VariablePair myVariablePair
Definition: SHOP_Node.h:56
virtual const PRM_Template * getShaderParmTemplates()
const UT_String & getRenderMask() const
Definition: SHOP_Node.h:62
UT_API UT_ErrorSeverity UTaddError(const char *type, int code, const char *msg=0, const UT_SourceLocation *loc=0)
virtual void deleteCookedData()=0
GLint GLint GLint GLint GLint GLint GLint GLbitfield GLenum filter
Definition: glcorearb.h:1296
IMG_Raster myMaterialIconImage
Definition: SHOP_Node.h:397