HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
SOP_OpenCL.proto.h
Go to the documentation of this file.
1 /* Automagically Generated by generate_proto.py
2  * Do not Edit
3  */
4 #pragma once
5 
6 #include <SOP/SOP_API.h>
7 #include <SOP/SOP_NodeVerb.h>
8 #include <SOP/SOP_GraphProxy.h>
9 
10 #include <OP/OP_Utils.h>
11 #include <PRM/PRM_Parm.h>
12 #include <UT/UT_IStream.h>
13 #include <UT/UT_NTStreamUtil.h>
14 #include <UT/UT_Ramp.h>
15 #include <UT/UT_SharedPtr.h>
16 #include <UT/UT_StringHolder.h>
17 #include <UT/UT_StringStream.h>
18 #include <UT/UT_VectorTypes.h>
19 #include <UT/UT_EnvControl.h>
20 #include <SYS/SYS_Types.h>
21 
22 class DEP_MicroNode;
23 namespace SOP_OpenCLEnums
24 {
25  enum class RunOver
26  {
27  ATTRIBUTE = 0,
28  VOLUME,
29  WORKSETS,
30  VDB
31  };
32  enum class Timemethod
33  {
34  INVERT = 0,
35  POW
36  };
37  enum class Precision
38  {
39  AUTO = 0,
40  _16,
41  _32,
42  _64
43  };
44  enum class Bindings_type
45  {
46  INT = 0,
47  FLOAT,
48  FLOAT3,
49  FLOAT4,
50  RAMP,
51  ATTRIBUTE,
52  VOLUME,
53  VDB
54  };
55  enum class Bindings_vdbtype
56  {
57  ANY = 0,
58  FLOAT,
59  VECTOR
60  };
62  {
63  DETAIL = 0,
64  PRIMITIVE,
65  POINT,
66  VERTEX
67  };
69  {
70  FLOAT = 0,
71  INT,
72  FLOATARRAY,
73  INTARRAY
74  };
75  enum class Bindings_precision
76  {
77  NODE = 0,
78  _16,
79  _32,
80  _64
81  };
82  enum class Bindings_timescale
83  {
84  NONE = 0,
85  MULT,
86  INVERT,
87  POW
88  };
89 }
90 
91 
93 {
94 public:
95  static int version() { return 1; }
96  struct Bindings
97  {
124 
125 
127  {
128  bindings_name = ""_UTsh;
129  bindings_type = 0;
130  bindings_ramp = UT_SharedPtr<UT_Ramp>(0);
131  bindings_rampsize = 1024;
132  bindings_input = 0;
133  bindings_volume = ""_UTsh;
134  bindings_vdbtype = 0;
135  bindings_forcealign = true;
136  bindings_resolution = false;
137  bindings_voxelsize = false;
138  bindings_xformtoworld = false;
139  bindings_xformtovoxel = false;
140  bindings_attribute = ""_UTsh;
141  bindings_attribclass = 2;
142  bindings_attribtype = 0;
143  bindings_attribsize = 1;
144  bindings_precision = 2;
145  bindings_readable = true;
146  bindings_writeable = false;
147  bindings_optional = false;
148  bindings_defval = false;
149  bindings_intval = 0;
150  bindings_fval = 0;
151  bindings_v3val = UT_Vector3D(0,0,0);
152  bindings_v4val = UT_Vector4D(0,0,0,0);
153  bindings_timescale = 0;
154 
155  }
156 
157  bool operator==(const Bindings &src) const
158  {
159  if (bindings_name != src.bindings_name) return false;
160  if (bindings_type != src.bindings_type) return false;
161  if (bindings_ramp != src.bindings_ramp) return false;
162  if (bindings_rampsize != src.bindings_rampsize) return false;
163  if (bindings_input != src.bindings_input) return false;
164  if (bindings_volume != src.bindings_volume) return false;
165  if (bindings_vdbtype != src.bindings_vdbtype) return false;
166  if (bindings_forcealign != src.bindings_forcealign) return false;
167  if (bindings_resolution != src.bindings_resolution) return false;
168  if (bindings_voxelsize != src.bindings_voxelsize) return false;
169  if (bindings_xformtoworld != src.bindings_xformtoworld) return false;
170  if (bindings_xformtovoxel != src.bindings_xformtovoxel) return false;
171  if (bindings_attribute != src.bindings_attribute) return false;
172  if (bindings_attribclass != src.bindings_attribclass) return false;
173  if (bindings_attribtype != src.bindings_attribtype) return false;
174  if (bindings_attribsize != src.bindings_attribsize) return false;
175  if (bindings_precision != src.bindings_precision) return false;
176  if (bindings_readable != src.bindings_readable) return false;
177  if (bindings_writeable != src.bindings_writeable) return false;
178  if (bindings_optional != src.bindings_optional) return false;
179  if (bindings_defval != src.bindings_defval) return false;
180  if (bindings_intval != src.bindings_intval) return false;
181  if (bindings_fval != src.bindings_fval) return false;
182  if (bindings_v3val != src.bindings_v3val) return false;
183  if (bindings_v4val != src.bindings_v4val) return false;
184  if (bindings_timescale != src.bindings_timescale) return false;
185 
186  return true;
187  }
188  bool operator!=(const Bindings &src) const
189  {
190  return !operator==(src);
191  }
192 
193  };
194 
196  {
198 
199  buf.strcat("[ ");
200  for (int i = 0; i < list.entries(); i++)
201  {
202  if (i)
203  buf.strcat(", ");
204  buf.strcat("( ");
205  buf.append("");
206  { UT_String tmp; tmp = UT_StringWrap(list(i).bindings_name).makeQuotedString('"'); buf.strcat(tmp); }
207  buf.append(", ");
208  buf.appendSprintf("%d", (int) list(i).bindings_type);
209  buf.append(", ");
210  if (list(i).bindings_ramp)
211  {
212  UT_OStringStream os;
213  UT_String tmp;
214  list(i).bindings_ramp->save(os);
215  tmp = UT_StringWrap(os.str().buffer()).makeQuotedString('"');
216  buf.strcat(tmp);
217  }
218  else buf.strcat("""");
219  buf.append(", ");
220  buf.appendSprintf("%d", (int) list(i).bindings_rampsize);
221  buf.append(", ");
222  buf.appendSprintf("%d", (int) list(i).bindings_input);
223  buf.append(", ");
224  { UT_String tmp; tmp = UT_StringWrap(list(i).bindings_volume).makeQuotedString('"'); buf.strcat(tmp); }
225  buf.append(", ");
226  buf.appendSprintf("%d", (int) list(i).bindings_vdbtype);
227  buf.append(", ");
228  buf.appendSprintf("%s", (list(i).bindings_forcealign) ? "true" : "false");
229  buf.append(", ");
230  buf.appendSprintf("%s", (list(i).bindings_resolution) ? "true" : "false");
231  buf.append(", ");
232  buf.appendSprintf("%s", (list(i).bindings_voxelsize) ? "true" : "false");
233  buf.append(", ");
234  buf.appendSprintf("%s", (list(i).bindings_xformtoworld) ? "true" : "false");
235  buf.append(", ");
236  buf.appendSprintf("%s", (list(i).bindings_xformtovoxel) ? "true" : "false");
237  buf.append(", ");
238  { UT_String tmp; tmp = UT_StringWrap(list(i).bindings_attribute).makeQuotedString('"'); buf.strcat(tmp); }
239  buf.append(", ");
240  buf.appendSprintf("%d", (int) list(i).bindings_attribclass);
241  buf.append(", ");
242  buf.appendSprintf("%d", (int) list(i).bindings_attribtype);
243  buf.append(", ");
244  buf.appendSprintf("%d", (int) list(i).bindings_attribsize);
245  buf.append(", ");
246  buf.appendSprintf("%d", (int) list(i).bindings_precision);
247  buf.append(", ");
248  buf.appendSprintf("%s", (list(i).bindings_readable) ? "true" : "false");
249  buf.append(", ");
250  buf.appendSprintf("%s", (list(i).bindings_writeable) ? "true" : "false");
251  buf.append(", ");
252  buf.appendSprintf("%s", (list(i).bindings_optional) ? "true" : "false");
253  buf.append(", ");
254  buf.appendSprintf("%s", (list(i).bindings_defval) ? "true" : "false");
255  buf.append(", ");
256  buf.appendSprintf("%d", (int) list(i).bindings_intval);
257  buf.append(", ");
258  buf.appendSprintf("%f", (list(i).bindings_fval));
259  buf.append(", ");
260  buf.appendSprintf("(%f, %f, %f)", list(i).bindings_v3val.x(), list(i).bindings_v3val.y(), list(i).bindings_v3val.z());
261  buf.append(", ");
262  buf.appendSprintf("(%f, %f, %f, %f)", list(i).bindings_v4val.x(), list(i).bindings_v4val.y(), list(i).bindings_v4val.z(), list(i).bindings_v4val.w());
263  buf.append(", ");
264  buf.appendSprintf("%d", (int) list(i).bindings_timescale);
265 
266  buf.strcat(" )");
267  }
268  buf.strcat(" ]");
269 
271  return result;
272  }
273 
275  {
276  myKernelName = "kernelName"_UTsh;
277  myUseCode = false;
278  myKernelFile = ""_UTsh;
279  myKernelCode = ""_UTsh;
280  myAtBinding = false;
281  myKernelOptions = ""_UTsh;
282  myKernelOptionAttrib = ""_UTsh;
283  myUseWriteBackKernel = false;
284  myWriteBackKernelName = "writeBack"_UTsh;
285  myRecompile = false;
286  myRunOver = 0;
287  myIterations = 1;
288  myWorksets_begin = ""_UTsh;
289  myWorksets_length = ""_UTsh;
290  mySingleworkgroup = false;
291  myFinish = true;
292  myTime = false;
293  myTimeInc = false;
294  myTimescale = 1;
295  myTimemethod = 0;
296  myXnoise = false;
297  myPrecision = 2;
298  myBindings.setSize(1);
299  myGeneratedCode = ""_UTsh;
300 
301  }
302 
303  explicit SOP_OpenCLParms(const SOP_OpenCLParms &) = default;
304  SOP_OpenCLParms &operator=(const SOP_OpenCLParms &) = default;
305  SOP_OpenCLParms(SOP_OpenCLParms &&) noexcept = default;
306  SOP_OpenCLParms &operator=(SOP_OpenCLParms &&) noexcept = default;
307 
308  ~SOP_OpenCLParms() override {}
309 
310  bool operator==(const SOP_OpenCLParms &src) const
311  {
312  if (myKernelName != src.myKernelName) return false;
313  if (myUseCode != src.myUseCode) return false;
314  if (myKernelFile != src.myKernelFile) return false;
315  if (myKernelCode != src.myKernelCode) return false;
316  if (myAtBinding != src.myAtBinding) return false;
317  if (myKernelOptions != src.myKernelOptions) return false;
318  if (myKernelOptionAttrib != src.myKernelOptionAttrib) return false;
319  if (myUseWriteBackKernel != src.myUseWriteBackKernel) return false;
320  if (myWriteBackKernelName != src.myWriteBackKernelName) return false;
321  if (myRecompile != src.myRecompile) return false;
322  if (myRunOver != src.myRunOver) return false;
323  if (myIterations != src.myIterations) return false;
324  if (myWorksets_begin != src.myWorksets_begin) return false;
325  if (myWorksets_length != src.myWorksets_length) return false;
326  if (mySingleworkgroup != src.mySingleworkgroup) return false;
327  if (myFinish != src.myFinish) return false;
328  if (myTime != src.myTime) return false;
329  if (myTimeInc != src.myTimeInc) return false;
330  if (myTimescale != src.myTimescale) return false;
331  if (myTimemethod != src.myTimemethod) return false;
332  if (myXnoise != src.myXnoise) return false;
333  if (myPrecision != src.myPrecision) return false;
334  if (myBindings != src.myBindings) return false;
335  if (myGeneratedCode != src.myGeneratedCode) return false;
336 
337  return true;
338  }
339  bool operator!=(const SOP_OpenCLParms &src) const
340  {
341  return !operator==(src);
342  }
352 
353 
354 
355  void buildFromOp(const OP_GraphProxy *graph, exint nodeidx, fpreal time, DEP_MicroNode *depnode)
356  {
357  myKernelName = "kernelName"_UTsh;
358  if (true)
359  graph->evalOpParm(myKernelName, nodeidx, "kernelname", time, 0);
360  myUseCode = false;
361  if (true)
362  graph->evalOpParm(myUseCode, nodeidx, "usecode", time, 0);
363  myKernelFile = ""_UTsh;
364  if (true && ( (true&&!(((getUseCode()!=0)))) ) )
365  graph->evalOpParm(myKernelFile, nodeidx, "kernelfile", time, 0);
366  myKernelCode = ""_UTsh;
367  if (true && ( (true&&!(((getUseCode()==0)))) ) )
368  graph->evalOpParm(myKernelCode, nodeidx, "kernelcode", time, 0);
369  myAtBinding = false;
370  if (true && ( (true&&!(((getUseCode()==0)))) ) )
371  graph->evalOpParm(myAtBinding, nodeidx, "atbinding", time, 0);
372  myKernelOptions = ""_UTsh;
373  if (true)
374  graph->evalOpParm(myKernelOptions, nodeidx, "kerneloptions", time, 0);
375  myKernelOptionAttrib = ""_UTsh;
376  if (true)
377  graph->evalOpParm(myKernelOptionAttrib, nodeidx, "kerneloptionattrib", time, 0);
378  myUseWriteBackKernel = false;
379  if (true)
380  graph->evalOpParm(myUseWriteBackKernel, nodeidx, "usewritebackkernel", time, 0);
381  myWriteBackKernelName = "writeBack"_UTsh;
382  if (true && ( (true&&!(((getUseWriteBackKernel()==0)))) ) )
383  graph->evalOpParm(myWriteBackKernelName, nodeidx, "writebackkernelname", time, 0);
384  myRecompile = false;
385  if (true)
386  graph->evalOpParm(myRecompile, nodeidx, "recompile", time, 0);
387  myRunOver = 0;
388  if (true)
389  graph->evalOpParm(myRunOver, nodeidx, "runover", time, 0);
390  myIterations = 1;
391  if (true)
392  graph->evalOpParm(myIterations, nodeidx, "iterations", time, 0);
393  myWorksets_begin = ""_UTsh;
394  if (true && ( (true&&!(((int64(getRunOver())!=2)))) ) )
395  graph->evalOpParm(myWorksets_begin, nodeidx, "worksets_begin", time, 0);
396  myWorksets_length = ""_UTsh;
397  if (true && ( (true&&!(((int64(getRunOver())!=2)))) ) )
398  graph->evalOpParm(myWorksets_length, nodeidx, "worksets_length", time, 0);
399  mySingleworkgroup = false;
400  if (true && ( (true&&!(((int64(getRunOver())!=2)))) ) )
401  graph->evalOpParm(mySingleworkgroup, nodeidx, "singleworkgroup", time, 0);
402  myFinish = true;
403  if (true)
404  graph->evalOpParm(myFinish, nodeidx, "finish", time, 0);
405  myTime = false;
406  if (true)
407  graph->evalOpParm(myTime, nodeidx, "time", time, 0);
408  myTimeInc = false;
409  if (true)
410  graph->evalOpParm(myTimeInc, nodeidx, "timeinc", time, 0);
411  myTimescale = 1;
412  if (true && ( (true&&!(((getTimeInc()==0)))) ) )
413  graph->evalOpParm(myTimescale, nodeidx, "timescale", time, 0);
414  myTimemethod = 0;
415  if (true && ( (true&&!(((getTimeInc()==0)))) ) )
416  graph->evalOpParm(myTimemethod, nodeidx, "timemethod", time, 0);
417  myXnoise = false;
418  if (true)
419  graph->evalOpParm(myXnoise, nodeidx, "xnoise", time, 0);
420  myPrecision = 2;
421  if (true)
422  graph->evalOpParm(myPrecision, nodeidx, "precision", time, 0);
423  if (true)
424  {
425  int64 length = 0;
426  graph->evalOpParm(length, nodeidx, "bindings", time, 0);
427  if (length < 0) length = 0;
428  myBindings.setSize(length);
429  for (exint i = 0; i < length; i++)
430  {
431  int parmidx[1];
432  int offsets[1];
433  parmidx[0] = i+1;
434  offsets[0] = 1;
435  auto && _curentry = myBindings(i);
436  (void) _curentry;
437  _curentry.bindings_name = ""_UTsh;
438  if (true)
439  graph->evalOpParmInst(_curentry.bindings_name, nodeidx, "bindings#_name", parmidx, offsets, time, 0, 2-1);
440  _curentry.bindings_type = 0;
441  if (true)
442  graph->evalOpParmInst(_curentry.bindings_type, nodeidx, "bindings#_type", parmidx, offsets, time, 0, 2-1);
443  _curentry.bindings_ramp = UT_SharedPtr<UT_Ramp>(0);
444  if (true && ( (true&&!(((_curentry.bindings_type!=4)))) ) )
445  graph->evalOpParmInst(_curentry.bindings_ramp, nodeidx, "bindings#_ramp", parmidx, offsets, time, 0, 2-1);
446  _curentry.bindings_rampsize = 1024;
447  if (true && ( (true&&!(((_curentry.bindings_type!=4)))) ) )
448  graph->evalOpParmInst(_curentry.bindings_rampsize, nodeidx, "bindings#_rampsize", parmidx, offsets, time, 0, 2-1);
449  _curentry.bindings_input = 0;
450  if (true && ( (true&&!(((_curentry.bindings_type!=6)&&(_curentry.bindings_type!=7)&&(_curentry.bindings_type!=5)))) ) )
451  graph->evalOpParmInst(_curentry.bindings_input, nodeidx, "bindings#_input", parmidx, offsets, time, 0, 2-1);
452  _curentry.bindings_volume = ""_UTsh;
453  if (true && ( (true&&!(((_curentry.bindings_type!=6)&&(_curentry.bindings_type!=7)))) ) )
454  graph->evalOpParmInst(_curentry.bindings_volume, nodeidx, "bindings#_volume", parmidx, offsets, time, 0, 2-1);
455  _curentry.bindings_vdbtype = 0;
456  if (true && ( (true&&!(((_curentry.bindings_type!=7)))) ) )
457  graph->evalOpParmInst(_curentry.bindings_vdbtype, nodeidx, "bindings#_vdbtype", parmidx, offsets, time, 0, 2-1);
458  _curentry.bindings_forcealign = true;
459  if (true && ( (true&&!(((_curentry.bindings_type!=6)))) ) )
460  graph->evalOpParmInst(_curentry.bindings_forcealign, nodeidx, "bindings#_forcealign", parmidx, offsets, time, 0, 2-1);
461  _curentry.bindings_resolution = false;
462  if (true && ( (true&&!(((_curentry.bindings_type!=6))||((_curentry.bindings_forcealign==1)))) ) )
463  graph->evalOpParmInst(_curentry.bindings_resolution, nodeidx, "bindings#_resolution", parmidx, offsets, time, 0, 2-1);
464  _curentry.bindings_voxelsize = false;
465  if (true && ( (true&&!(((_curentry.bindings_type!=6)&&(_curentry.bindings_type!=7))||((_curentry.bindings_forcealign==1)&&(_curentry.bindings_type==6)))) ) )
466  graph->evalOpParmInst(_curentry.bindings_voxelsize, nodeidx, "bindings#_voxelsize", parmidx, offsets, time, 0, 2-1);
467  _curentry.bindings_xformtoworld = false;
468  if (true && ( (true&&!(((_curentry.bindings_type!=6)&&(_curentry.bindings_type!=7))||((_curentry.bindings_forcealign==1)&&(_curentry.bindings_type==6)))) ) )
469  graph->evalOpParmInst(_curentry.bindings_xformtoworld, nodeidx, "bindings#_xformtoworld", parmidx, offsets, time, 0, 2-1);
470  _curentry.bindings_xformtovoxel = false;
471  if (true && ( (true&&!(((_curentry.bindings_type!=6)&&(_curentry.bindings_type!=7))||((_curentry.bindings_forcealign==1)&&(_curentry.bindings_type==6)))) ) )
472  graph->evalOpParmInst(_curentry.bindings_xformtovoxel, nodeidx, "bindings#_xformtovoxel", parmidx, offsets, time, 0, 2-1);
473  _curentry.bindings_attribute = ""_UTsh;
474  if (true && ( (true&&!(((_curentry.bindings_type!=5)))) ) )
475  graph->evalOpParmInst(_curentry.bindings_attribute, nodeidx, "bindings#_attribute", parmidx, offsets, time, 0, 2-1);
476  _curentry.bindings_attribclass = 2;
477  if (true && ( (true&&!(((_curentry.bindings_type!=5)))) ) )
478  graph->evalOpParmInst(_curentry.bindings_attribclass, nodeidx, "bindings#_attribclass", parmidx, offsets, time, 0, 2-1);
479  _curentry.bindings_attribtype = 0;
480  if (true && ( (true&&!(((_curentry.bindings_type!=5)))) ) )
481  graph->evalOpParmInst(_curentry.bindings_attribtype, nodeidx, "bindings#_attribtype", parmidx, offsets, time, 0, 2-1);
482  _curentry.bindings_attribsize = 1;
483  if (true && ( (true&&!(((_curentry.bindings_type!=5)))) ) )
484  graph->evalOpParmInst(_curentry.bindings_attribsize, nodeidx, "bindings#_attribsize", parmidx, offsets, time, 0, 2-1);
485  _curentry.bindings_precision = 2;
486  if (true)
487  graph->evalOpParmInst(_curentry.bindings_precision, nodeidx, "bindings#_precision", parmidx, offsets, time, 0, 2-1);
488  _curentry.bindings_readable = true;
489  if (true && ( (true&&!(((_curentry.bindings_type!=5)&&(_curentry.bindings_type!=6)))) ) )
490  graph->evalOpParmInst(_curentry.bindings_readable, nodeidx, "bindings#_readable", parmidx, offsets, time, 0, 2-1);
491  _curentry.bindings_writeable = false;
492  if (true && ( (true&&!(((_curentry.bindings_type!=5)&&(_curentry.bindings_type!=6)&&(_curentry.bindings_type!=7)))) ) )
493  graph->evalOpParmInst(_curentry.bindings_writeable, nodeidx, "bindings#_writeable", parmidx, offsets, time, 0, 2-1);
494  _curentry.bindings_optional = false;
495  if (true && ( (true&&!(((_curentry.bindings_type!=5)&&(_curentry.bindings_type!=6)&&(_curentry.bindings_type!=7)))) ) )
496  graph->evalOpParmInst(_curentry.bindings_optional, nodeidx, "bindings#_optional", parmidx, offsets, time, 0, 2-1);
497  _curentry.bindings_defval = false;
498  if (true && ( (true&&!(((_curentry.bindings_type!=5)&&(_curentry.bindings_type!=6)&&(_curentry.bindings_type!=7))||((_curentry.bindings_optional==0))||((_curentry.bindings_attribtype!=1)&&(_curentry.bindings_attribtype!=0)))) ) )
499  graph->evalOpParmInst(_curentry.bindings_defval, nodeidx, "bindings#_defval", parmidx, offsets, time, 0, 2-1);
500  _curentry.bindings_intval = 0;
501  if (true && ( (true&&!(((_curentry.bindings_type!=0)&&(_curentry.bindings_type!=5))||((_curentry.bindings_type==5)&&(_curentry.bindings_optional==0))||((_curentry.bindings_type==5)&&(_curentry.bindings_defval==0))||((_curentry.bindings_type==5)&&(_curentry.bindings_attribtype!=1)))) ) )
502  graph->evalOpParmInst(_curentry.bindings_intval, nodeidx, "bindings#_intval", parmidx, offsets, time, 0, 2-1);
503  _curentry.bindings_fval = 0;
504  if (true && ( (true&&!(((_curentry.bindings_type!=1)&&(_curentry.bindings_type!=5)&&(_curentry.bindings_type!=6)&&(_curentry.bindings_type!=7))||((_curentry.bindings_type==5)&&(_curentry.bindings_optional==0))||((_curentry.bindings_type==5)&&(_curentry.bindings_defval==0))||((_curentry.bindings_type==5)&&(_curentry.bindings_attribtype!=0))||((_curentry.bindings_type==5)&&(_curentry.bindings_attribtype==0)&&(_curentry.bindings_attribsize==3))||((_curentry.bindings_type==5)&&(_curentry.bindings_attribtype==0)&&(_curentry.bindings_attribsize==4))||((_curentry.bindings_type==6)&&(_curentry.bindings_optional==0))||((_curentry.bindings_type==6)&&(_curentry.bindings_defval==0))||((_curentry.bindings_type==7)&&(_curentry.bindings_optional==0))||((_curentry.bindings_type==7)&&(_curentry.bindings_defval==0)))) ) )
505  graph->evalOpParmInst(_curentry.bindings_fval, nodeidx, "bindings#_fval", parmidx, offsets, time, 0, 2-1);
506  _curentry.bindings_v3val = UT_Vector3D(0,0,0);
507  if (true && ( (true&&!(((_curentry.bindings_type!=2)&&(_curentry.bindings_type!=5))||((_curentry.bindings_type==5)&&(_curentry.bindings_optional==0))||((_curentry.bindings_type==5)&&(_curentry.bindings_defval==0))||((_curentry.bindings_type==5)&&(_curentry.bindings_attribtype!=0))||((_curentry.bindings_type==5)&&(_curentry.bindings_attribtype==0)&&(_curentry.bindings_attribsize!=3)))) ) )
508  graph->evalOpParmInst(_curentry.bindings_v3val, nodeidx, "bindings#_v3val", parmidx, offsets, time, 0, 2-1);
509  _curentry.bindings_v4val = UT_Vector4D(0,0,0,0);
510  if (true && ( (true&&!(((_curentry.bindings_type!=3)&&(_curentry.bindings_type!=5))||((_curentry.bindings_type==5)&&(_curentry.bindings_optional==0))||((_curentry.bindings_type==5)&&(_curentry.bindings_defval==0))||((_curentry.bindings_type==5)&&(_curentry.bindings_attribtype!=0))||((_curentry.bindings_type==5)&&(_curentry.bindings_attribtype==0)&&(_curentry.bindings_attribsize!=4)))) ) )
511  graph->evalOpParmInst(_curentry.bindings_v4val, nodeidx, "bindings#_v4val", parmidx, offsets, time, 0, 2-1);
512  _curentry.bindings_timescale = 0;
513  if (true && ( (true&&!(((_curentry.bindings_type!=1)))) ) )
514  graph->evalOpParmInst(_curentry.bindings_timescale, nodeidx, "bindings#_timescale", parmidx, offsets, time, 0, 2-1);
515 
516  }
517  }
518  else
519  myBindings.clear();
520  myGeneratedCode = ""_UTsh;
521  if (true && ( (true&&!((((graph->getInput(nodeidx,0)>=0)==0))||(((graph->getInput(nodeidx,0)>=0)==1)))) ) )
522  graph->evalOpParm(myGeneratedCode, nodeidx, "generatedcode", time, 0);
523 
524  }
525 
526 
527  void loadFromOpSubclass(const LoadParms &loadparms) override
528  {
529  buildFromOp(loadparms.graph(), loadparms.nodeIdx(), loadparms.context().getTime(), loadparms.depnode());
530  }
531 
532 
533  void copyFrom(const OP_NodeParms *src) override
534  {
535  *this = *((const SOP_OpenCLParms *)src);
536  }
537 
538  template <typename T>
539  void
540  doGetParmValue(TempIndex idx, TempIndex instance, T &value) const
541  {
542  if (idx.size() < 1)
543  return;
544  UT_ASSERT(idx.size() == instance.size()+1);
545  if (idx.size() != instance.size()+1)
546  return;
547  switch (idx[0])
548  {
549  case 0:
550  coerceValue(value, myKernelName);
551  break;
552  case 1:
553  coerceValue(value, myUseCode);
554  break;
555  case 2:
556  coerceValue(value, myKernelFile);
557  break;
558  case 3:
559  coerceValue(value, myKernelCode);
560  break;
561  case 4:
562  coerceValue(value, myAtBinding);
563  break;
564  case 5:
565  coerceValue(value, myKernelOptions);
566  break;
567  case 6:
568  coerceValue(value, myKernelOptionAttrib);
569  break;
570  case 7:
571  coerceValue(value, myUseWriteBackKernel);
572  break;
573  case 8:
574  coerceValue(value, myWriteBackKernelName);
575  break;
576  case 9:
577  coerceValue(value, myRecompile);
578  break;
579  case 10:
580  coerceValue(value, myRunOver);
581  break;
582  case 11:
583  coerceValue(value, myIterations);
584  break;
585  case 12:
586  coerceValue(value, myWorksets_begin);
587  break;
588  case 13:
589  coerceValue(value, myWorksets_length);
590  break;
591  case 14:
592  coerceValue(value, mySingleworkgroup);
593  break;
594  case 15:
595  coerceValue(value, myFinish);
596  break;
597  case 16:
598  coerceValue(value, myTime);
599  break;
600  case 17:
601  coerceValue(value, myTimeInc);
602  break;
603  case 18:
604  coerceValue(value, myTimescale);
605  break;
606  case 19:
607  coerceValue(value, myTimemethod);
608  break;
609  case 20:
610  coerceValue(value, myXnoise);
611  break;
612  case 21:
613  coerceValue(value, myPrecision);
614  break;
615  case 22:
616  if (idx.size() == 1)
617  coerceValue(value, myBindings.entries());
618  else if (instance[0] < myBindings.entries())
619  {
620  auto && _data = myBindings(instance[0]);
621  switch (idx[1])
622  {
623  case 0:
624  coerceValue(value, _data.bindings_name);
625  break;
626  case 1:
627  coerceValue(value, _data.bindings_type);
628  break;
629  case 2:
630  coerceValue(value, _data.bindings_ramp);
631  break;
632  case 3:
633  coerceValue(value, _data.bindings_rampsize);
634  break;
635  case 4:
636  coerceValue(value, _data.bindings_input);
637  break;
638  case 5:
639  coerceValue(value, _data.bindings_volume);
640  break;
641  case 6:
642  coerceValue(value, _data.bindings_vdbtype);
643  break;
644  case 7:
645  coerceValue(value, _data.bindings_forcealign);
646  break;
647  case 8:
648  coerceValue(value, _data.bindings_resolution);
649  break;
650  case 9:
651  coerceValue(value, _data.bindings_voxelsize);
652  break;
653  case 10:
654  coerceValue(value, _data.bindings_xformtoworld);
655  break;
656  case 11:
657  coerceValue(value, _data.bindings_xformtovoxel);
658  break;
659  case 12:
660  coerceValue(value, _data.bindings_attribute);
661  break;
662  case 13:
663  coerceValue(value, _data.bindings_attribclass);
664  break;
665  case 14:
666  coerceValue(value, _data.bindings_attribtype);
667  break;
668  case 15:
669  coerceValue(value, _data.bindings_attribsize);
670  break;
671  case 16:
672  coerceValue(value, _data.bindings_precision);
673  break;
674  case 17:
675  coerceValue(value, _data.bindings_readable);
676  break;
677  case 18:
678  coerceValue(value, _data.bindings_writeable);
679  break;
680  case 19:
681  coerceValue(value, _data.bindings_optional);
682  break;
683  case 20:
684  coerceValue(value, _data.bindings_defval);
685  break;
686  case 21:
687  coerceValue(value, _data.bindings_intval);
688  break;
689  case 22:
690  coerceValue(value, _data.bindings_fval);
691  break;
692  case 23:
693  coerceValue(value, _data.bindings_v3val);
694  break;
695  case 24:
696  coerceValue(value, _data.bindings_v4val);
697  break;
698  case 25:
699  coerceValue(value, _data.bindings_timescale);
700  break;
701 
702  }
703  }
704  break;
705  case 23:
706  coerceValue(value, myGeneratedCode);
707  break;
708 
709  }
710  }
711 
712  bool isParmColorRamp(exint idx) const override
713  {
714  switch (idx)
715  {
716 
717  }
718  return false;
719  }
720 
721  void getNestParmValue(TempIndex idx, TempIndex instance, exint &value) const override
722  { doGetParmValue(idx, instance, value); }
723  void getNestParmValue(TempIndex idx, TempIndex instance, fpreal &value) const override
724  { doGetParmValue(idx, instance, value); }
725  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector2D &value) const override
726  { doGetParmValue(idx, instance, value); }
727  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector3D &value) const override
728  { doGetParmValue(idx, instance, value); }
729  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector4D &value) const override
730  { doGetParmValue(idx, instance, value); }
731  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix2D &value) const override
732  { doGetParmValue(idx, instance, value); }
733  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix3D &value) const override
734  { doGetParmValue(idx, instance, value); }
735  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix4D &value) const override
736  { doGetParmValue(idx, instance, value); }
737  void getNestParmValue(TempIndex idx, TempIndex instance, UT_StringHolder &value) const override
738  { doGetParmValue(idx, instance, value); }
739  void getNestParmValue(TempIndex idx, TempIndex instance, UT_SharedPtr<UT_Ramp> &value) const override
740  { doGetParmValue(idx, instance, value); }
741  void getNestParmValue(TempIndex idx, TempIndex instance, PRM_DataItemHandle &value) const override
742  { doGetParmValue(idx, instance, value); }
743 
744  template <typename T>
745  void
746  doSetParmValue(TempIndex idx, TempIndex instance, const T &value)
747  {
748  if (idx.size() < 1)
749  return;
750  UT_ASSERT(idx.size() == instance.size()+1);
751  if (idx.size() != instance.size()+1)
752  return;
753  switch (idx[0])
754  {
755  case 0:
756  coerceValue(myKernelName, ( ( value ) ));
757  break;
758  case 1:
759  coerceValue(myUseCode, ( ( value ) ));
760  break;
761  case 2:
762  coerceValue(myKernelFile, ( ( value ) ));
763  break;
764  case 3:
765  coerceValue(myKernelCode, ( ( value ) ));
766  break;
767  case 4:
768  coerceValue(myAtBinding, ( ( value ) ));
769  break;
770  case 5:
771  coerceValue(myKernelOptions, ( ( value ) ));
772  break;
773  case 6:
774  coerceValue(myKernelOptionAttrib, ( ( value ) ));
775  break;
776  case 7:
777  coerceValue(myUseWriteBackKernel, ( ( value ) ));
778  break;
779  case 8:
780  coerceValue(myWriteBackKernelName, ( ( value ) ));
781  break;
782  case 9:
783  coerceValue(myRecompile, ( ( value ) ));
784  break;
785  case 10:
786  coerceValue(myRunOver, clampMinValue(0, clampMaxValue(3, value ) ));
787  break;
788  case 11:
789  coerceValue(myIterations, ( ( value ) ));
790  break;
791  case 12:
792  coerceValue(myWorksets_begin, ( ( value ) ));
793  break;
794  case 13:
795  coerceValue(myWorksets_length, ( ( value ) ));
796  break;
797  case 14:
798  coerceValue(mySingleworkgroup, ( ( value ) ));
799  break;
800  case 15:
801  coerceValue(myFinish, ( ( value ) ));
802  break;
803  case 16:
804  coerceValue(myTime, ( ( value ) ));
805  break;
806  case 17:
807  coerceValue(myTimeInc, ( ( value ) ));
808  break;
809  case 18:
810  coerceValue(myTimescale, ( ( value ) ));
811  break;
812  case 19:
813  coerceValue(myTimemethod, clampMinValue(0, clampMaxValue(1, value ) ));
814  break;
815  case 20:
816  coerceValue(myXnoise, ( ( value ) ));
817  break;
818  case 21:
819  coerceValue(myPrecision, clampMinValue(0, clampMaxValue(3, value ) ));
820  break;
821  case 22:
822  if (idx.size() == 1)
823  {
824  exint newsize;
825  coerceValue(newsize, value);
826  if (newsize < 0) newsize = 0;
827  myBindings.setSize(newsize);
828  }
829  else
830  {
831  if (instance[0] < 0)
832  return;
833  myBindings.setSizeIfNeeded(instance[0]+1);
834  auto && _data = myBindings(instance[0]);
835  switch (idx[1])
836  {
837  case 0:
838  coerceValue(_data.bindings_name, value);
839  break;
840  case 1:
841  coerceValue(_data.bindings_type, value);
842  break;
843  case 2:
844  coerceValue(_data.bindings_ramp, value);
845  break;
846  case 3:
847  coerceValue(_data.bindings_rampsize, value);
848  break;
849  case 4:
850  coerceValue(_data.bindings_input, value);
851  break;
852  case 5:
853  coerceValue(_data.bindings_volume, value);
854  break;
855  case 6:
856  coerceValue(_data.bindings_vdbtype, value);
857  break;
858  case 7:
859  coerceValue(_data.bindings_forcealign, value);
860  break;
861  case 8:
862  coerceValue(_data.bindings_resolution, value);
863  break;
864  case 9:
865  coerceValue(_data.bindings_voxelsize, value);
866  break;
867  case 10:
868  coerceValue(_data.bindings_xformtoworld, value);
869  break;
870  case 11:
871  coerceValue(_data.bindings_xformtovoxel, value);
872  break;
873  case 12:
874  coerceValue(_data.bindings_attribute, value);
875  break;
876  case 13:
877  coerceValue(_data.bindings_attribclass, value);
878  break;
879  case 14:
880  coerceValue(_data.bindings_attribtype, value);
881  break;
882  case 15:
883  coerceValue(_data.bindings_attribsize, value);
884  break;
885  case 16:
886  coerceValue(_data.bindings_precision, value);
887  break;
888  case 17:
889  coerceValue(_data.bindings_readable, value);
890  break;
891  case 18:
892  coerceValue(_data.bindings_writeable, value);
893  break;
894  case 19:
895  coerceValue(_data.bindings_optional, value);
896  break;
897  case 20:
898  coerceValue(_data.bindings_defval, value);
899  break;
900  case 21:
901  coerceValue(_data.bindings_intval, value);
902  break;
903  case 22:
904  coerceValue(_data.bindings_fval, value);
905  break;
906  case 23:
907  coerceValue(_data.bindings_v3val, value);
908  break;
909  case 24:
910  coerceValue(_data.bindings_v4val, value);
911  break;
912  case 25:
913  coerceValue(_data.bindings_timescale, value);
914  break;
915 
916  }
917  }
918  break;
919  case 23:
920  coerceValue(myGeneratedCode, ( ( value ) ));
921  break;
922 
923  }
924  }
925 
926  void setNestParmValue(TempIndex idx, TempIndex instance, const exint &value) override
927  { doSetParmValue(idx, instance, value); }
928  void setNestParmValue(TempIndex idx, TempIndex instance, const fpreal &value) override
929  { doSetParmValue(idx, instance, value); }
930  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector2D &value) override
931  { doSetParmValue(idx, instance, value); }
932  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector3D &value) override
933  { doSetParmValue(idx, instance, value); }
934  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector4D &value) override
935  { doSetParmValue(idx, instance, value); }
936  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix2D &value) override
937  { doSetParmValue(idx, instance, value); }
938  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix3D &value) override
939  { doSetParmValue(idx, instance, value); }
940  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix4D &value) override
941  { doSetParmValue(idx, instance, value); }
942  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_StringHolder &value) override
943  { doSetParmValue(idx, instance, value); }
944  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_SharedPtr<UT_Ramp> &value) override
945  { doSetParmValue(idx, instance, value); }
946  void setNestParmValue(TempIndex idx, TempIndex instance, const PRM_DataItemHandle &value) override
947  { doSetParmValue(idx, instance, value); }
948 
949  exint getNestNumParms(TempIndex idx) const override
950  {
951  if (idx.size() == 0)
952  return 24;
953  switch (idx[0])
954  {
955  case 22:
956  return 26;
957 
958  }
959  // Invalid
960  return 0;
961  }
962 
963  const char *getNestParmName(TempIndex fieldnum) const override
964  {
965  if (fieldnum.size() < 1)
966  return 0;
967  switch (fieldnum[0])
968  {
969  case 0:
970  return "kernelname";
971  case 1:
972  return "usecode";
973  case 2:
974  return "kernelfile";
975  case 3:
976  return "kernelcode";
977  case 4:
978  return "atbinding";
979  case 5:
980  return "kerneloptions";
981  case 6:
982  return "kerneloptionattrib";
983  case 7:
984  return "usewritebackkernel";
985  case 8:
986  return "writebackkernelname";
987  case 9:
988  return "recompile";
989  case 10:
990  return "runover";
991  case 11:
992  return "iterations";
993  case 12:
994  return "worksets_begin";
995  case 13:
996  return "worksets_length";
997  case 14:
998  return "singleworkgroup";
999  case 15:
1000  return "finish";
1001  case 16:
1002  return "time";
1003  case 17:
1004  return "timeinc";
1005  case 18:
1006  return "timescale";
1007  case 19:
1008  return "timemethod";
1009  case 20:
1010  return "xnoise";
1011  case 21:
1012  return "precision";
1013  case 22:
1014  if (fieldnum.size() == 1)
1015  return "bindings";
1016  switch (fieldnum[1])
1017  {
1018  case 0:
1019  return "bindings#_name";
1020  case 1:
1021  return "bindings#_type";
1022  case 2:
1023  return "bindings#_ramp";
1024  case 3:
1025  return "bindings#_rampsize";
1026  case 4:
1027  return "bindings#_input";
1028  case 5:
1029  return "bindings#_volume";
1030  case 6:
1031  return "bindings#_vdbtype";
1032  case 7:
1033  return "bindings#_forcealign";
1034  case 8:
1035  return "bindings#_resolution";
1036  case 9:
1037  return "bindings#_voxelsize";
1038  case 10:
1039  return "bindings#_xformtoworld";
1040  case 11:
1041  return "bindings#_xformtovoxel";
1042  case 12:
1043  return "bindings#_attribute";
1044  case 13:
1045  return "bindings#_attribclass";
1046  case 14:
1047  return "bindings#_attribtype";
1048  case 15:
1049  return "bindings#_attribsize";
1050  case 16:
1051  return "bindings#_precision";
1052  case 17:
1053  return "bindings#_readable";
1054  case 18:
1055  return "bindings#_writeable";
1056  case 19:
1057  return "bindings#_optional";
1058  case 20:
1059  return "bindings#_defval";
1060  case 21:
1061  return "bindings#_intval";
1062  case 22:
1063  return "bindings#_fval";
1064  case 23:
1065  return "bindings#_v3val";
1066  case 24:
1067  return "bindings#_v4val";
1068  case 25:
1069  return "bindings#_timescale";
1070 
1071  }
1072  return 0;
1073  case 23:
1074  return "generatedcode";
1075 
1076  }
1077  return 0;
1078  }
1079 
1080  ParmType getNestParmType(TempIndex fieldnum) const override
1081  {
1082  if (fieldnum.size() < 1)
1083  return PARM_UNSUPPORTED;
1084  switch (fieldnum[0])
1085  {
1086  case 0:
1087  return PARM_STRING;
1088  case 1:
1089  return PARM_INTEGER;
1090  case 2:
1091  return PARM_STRING;
1092  case 3:
1093  return PARM_STRING;
1094  case 4:
1095  return PARM_INTEGER;
1096  case 5:
1097  return PARM_STRING;
1098  case 6:
1099  return PARM_STRING;
1100  case 7:
1101  return PARM_INTEGER;
1102  case 8:
1103  return PARM_STRING;
1104  case 9:
1105  return PARM_INTEGER;
1106  case 10:
1107  return PARM_INTEGER;
1108  case 11:
1109  return PARM_INTEGER;
1110  case 12:
1111  return PARM_STRING;
1112  case 13:
1113  return PARM_STRING;
1114  case 14:
1115  return PARM_INTEGER;
1116  case 15:
1117  return PARM_INTEGER;
1118  case 16:
1119  return PARM_INTEGER;
1120  case 17:
1121  return PARM_INTEGER;
1122  case 18:
1123  return PARM_FLOAT;
1124  case 19:
1125  return PARM_INTEGER;
1126  case 20:
1127  return PARM_INTEGER;
1128  case 21:
1129  return PARM_INTEGER;
1130  case 22:
1131  if (fieldnum.size() == 1)
1132  return PARM_MULTIPARM;
1133  switch (fieldnum[1])
1134  {
1135  case 0:
1136  return PARM_STRING;
1137  case 1:
1138  return PARM_INTEGER;
1139  case 2:
1140  return PARM_RAMP;
1141  case 3:
1142  return PARM_INTEGER;
1143  case 4:
1144  return PARM_INTEGER;
1145  case 5:
1146  return PARM_STRING;
1147  case 6:
1148  return PARM_INTEGER;
1149  case 7:
1150  return PARM_INTEGER;
1151  case 8:
1152  return PARM_INTEGER;
1153  case 9:
1154  return PARM_INTEGER;
1155  case 10:
1156  return PARM_INTEGER;
1157  case 11:
1158  return PARM_INTEGER;
1159  case 12:
1160  return PARM_STRING;
1161  case 13:
1162  return PARM_INTEGER;
1163  case 14:
1164  return PARM_INTEGER;
1165  case 15:
1166  return PARM_INTEGER;
1167  case 16:
1168  return PARM_INTEGER;
1169  case 17:
1170  return PARM_INTEGER;
1171  case 18:
1172  return PARM_INTEGER;
1173  case 19:
1174  return PARM_INTEGER;
1175  case 20:
1176  return PARM_INTEGER;
1177  case 21:
1178  return PARM_INTEGER;
1179  case 22:
1180  return PARM_FLOAT;
1181  case 23:
1182  return PARM_VECTOR3;
1183  case 24:
1184  return PARM_VECTOR4;
1185  case 25:
1186  return PARM_INTEGER;
1187 
1188  }
1189  return PARM_UNSUPPORTED;
1190  case 23:
1191  return PARM_STRING;
1192 
1193  }
1194  return PARM_UNSUPPORTED;
1195  }
1196 
1197  // Boiler plate to load individual types.
1198  static void loadData(UT_IStream &is, int64 &v)
1199  { is.bread(&v, 1); }
1200  static void loadData(UT_IStream &is, bool &v)
1201  { int64 iv; is.bread(&iv, 1); v = iv; }
1202  static void loadData(UT_IStream &is, fpreal64 &v)
1203  { is.bread<fpreal64>(&v, 1); }
1204  static void loadData(UT_IStream &is, UT_Vector2D &v)
1205  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1); }
1206  static void loadData(UT_IStream &is, UT_Vector3D &v)
1207  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1);
1208  is.bread<fpreal64>(&v.z(), 1); }
1209  static void loadData(UT_IStream &is, UT_Vector4D &v)
1210  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1);
1211  is.bread<fpreal64>(&v.z(), 1); is.bread<fpreal64>(&v.w(), 1); }
1212  static void loadData(UT_IStream &is, UT_Matrix2D &v)
1213  { for (int r = 0; r < 2; r++) for (int c = 0; c < 2; c++) is.bread<fpreal64>(&v(r, c), 1); }
1214  static void loadData(UT_IStream &is, UT_Matrix3D &v)
1215  { for (int r = 0; r < 3; r++) for (int c = 0; c < 3; c++) is.bread<fpreal64>(&v(r, c), 1); }
1216  static void loadData(UT_IStream &is, UT_Matrix4D &v)
1217  { for (int r = 0; r < 4; r++) for (int c = 0; c < 4; c++) is.bread<fpreal64>(&v(r, c), 1); }
1218  static void loadData(UT_IStream &is, UT_Vector2I &v)
1219  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1); }
1220  static void loadData(UT_IStream &is, UT_Vector3I &v)
1221  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1);
1222  is.bread<int64>(&v.z(), 1); }
1223  static void loadData(UT_IStream &is, UT_Vector4I &v)
1224  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1);
1225  is.bread<int64>(&v.z(), 1); is.bread<int64>(&v.w(), 1); }
1227  { is.bread(v); }
1229  { UT_StringHolder rampdata;
1230  loadData(is, rampdata);
1231  if (rampdata.isstring())
1232  {
1233  v.reset(new UT_Ramp());
1234  UT_IStream istr((const char *) rampdata, rampdata.length(), UT_ISTREAM_ASCII);
1235  v->load(istr);
1236  }
1237  else v.reset();
1238  }
1241  loadData(is, data);
1242  if (data.isstring())
1243  {
1244  // Find the data type.
1245  const char *colon = UT_StringWrap(data).findChar(':');
1246  if (colon)
1247  {
1248  int typelen = colon - data.buffer();
1250  type.strncpy(data.buffer(), typelen);
1251  UT_IStream istr(((const char *) data) + typelen + 1, data.length() - (typelen + 1), UT_ISTREAM_BINARY);
1252 
1253  v = PRM_DataFactory::parseBinary(type.buffer(), istr);
1254  }
1255  }
1256  else v.reset();
1257  }
1258 
1259  static void saveData(std::ostream &os, int64 v)
1260  { UTwrite(os, &v); }
1261  static void saveData(std::ostream &os, bool v)
1262  { int64 iv = v; UTwrite(os, &iv); }
1263  static void saveData(std::ostream &os, fpreal64 v)
1264  { UTwrite<fpreal64>(os, &v); }
1265  static void saveData(std::ostream &os, UT_Vector2D v)
1266  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y()); }
1267  static void saveData(std::ostream &os, UT_Vector3D v)
1268  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y());
1269  UTwrite<fpreal64>(os, &v.z()); }
1270  static void saveData(std::ostream &os, UT_Vector4D v)
1271  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y());
1272  UTwrite<fpreal64>(os, &v.z()); UTwrite<fpreal64>(os, &v.w()); }
1273  static void saveData(std::ostream &os, UT_Matrix2D v)
1274  { for (int r = 0; r < 2; r++) for (int c = 0; c < 2; c++) UTwrite<fpreal64>(os, &v(r, c)); }
1275  static void saveData(std::ostream &os, UT_Matrix3D v)
1276  { for (int r = 0; r < 3; r++) for (int c = 0; c < 3; c++) UTwrite<fpreal64>(os, &v(r, c)); }
1277  static void saveData(std::ostream &os, UT_Matrix4D v)
1278  { for (int r = 0; r < 4; r++) for (int c = 0; c < 4; c++) UTwrite<fpreal64>(os, &v(r, c)); }
1279  static void saveData(std::ostream &os, UT_StringHolder s)
1280  { UT_StringWrap(s).saveBinary(os); }
1281  static void saveData(std::ostream &os, UT_SharedPtr<UT_Ramp> s)
1283  UT_OStringStream ostr;
1284  if (s) s->save(ostr);
1285  result = ostr.str();
1286  saveData(os, result);
1287  }
1288  static void saveData(std::ostream &os, PRM_DataItemHandle s)
1290  UT_OStringStream ostr;
1291  if (s)
1292  {
1293  ostr << s->getDataTypeToken();
1294  ostr << ":";
1295  s->saveBinary(ostr);
1296  }
1297  result = ostr.str();
1298  saveData(os, result);
1299  }
1300 
1301 
1302  void save(std::ostream &os) const
1303  {
1304  int32 v = version();
1305  UTwrite(os, &v);
1306  saveData(os, myKernelName);
1307  saveData(os, myUseCode);
1308  saveData(os, myKernelFile);
1309  saveData(os, myKernelCode);
1310  saveData(os, myAtBinding);
1311  saveData(os, myKernelOptions);
1312  saveData(os, myKernelOptionAttrib);
1313  saveData(os, myUseWriteBackKernel);
1314  saveData(os, myWriteBackKernelName);
1315  saveData(os, myRecompile);
1316  saveData(os, myRunOver);
1317  saveData(os, myIterations);
1318  saveData(os, myWorksets_begin);
1319  saveData(os, myWorksets_length);
1320  saveData(os, mySingleworkgroup);
1321  saveData(os, myFinish);
1322  saveData(os, myTime);
1323  saveData(os, myTimeInc);
1324  saveData(os, myTimescale);
1325  saveData(os, myTimemethod);
1326  saveData(os, myXnoise);
1327  saveData(os, myPrecision);
1328  {
1329  int64 length = myBindings.entries();
1330  UTwrite(os, &length);
1331  for (exint i = 0; i < length; i++)
1332  {
1333  auto && _curentry = myBindings(i);
1334  (void) _curentry;
1335  saveData(os, _curentry.bindings_name);
1336  saveData(os, _curentry.bindings_type);
1337  saveData(os, _curentry.bindings_ramp);
1338  saveData(os, _curentry.bindings_rampsize);
1339  saveData(os, _curentry.bindings_input);
1340  saveData(os, _curentry.bindings_volume);
1341  saveData(os, _curentry.bindings_vdbtype);
1342  saveData(os, _curentry.bindings_forcealign);
1343  saveData(os, _curentry.bindings_resolution);
1344  saveData(os, _curentry.bindings_voxelsize);
1345  saveData(os, _curentry.bindings_xformtoworld);
1346  saveData(os, _curentry.bindings_xformtovoxel);
1347  saveData(os, _curentry.bindings_attribute);
1348  saveData(os, _curentry.bindings_attribclass);
1349  saveData(os, _curentry.bindings_attribtype);
1350  saveData(os, _curentry.bindings_attribsize);
1351  saveData(os, _curentry.bindings_precision);
1352  saveData(os, _curentry.bindings_readable);
1353  saveData(os, _curentry.bindings_writeable);
1354  saveData(os, _curentry.bindings_optional);
1355  saveData(os, _curentry.bindings_defval);
1356  saveData(os, _curentry.bindings_intval);
1357  saveData(os, _curentry.bindings_fval);
1358  saveData(os, _curentry.bindings_v3val);
1359  saveData(os, _curentry.bindings_v4val);
1360  saveData(os, _curentry.bindings_timescale);
1361 
1362  }
1363  }
1364  saveData(os, myGeneratedCode);
1365 
1366  }
1367 
1368  bool load(UT_IStream &is)
1369  {
1370  int32 v;
1371  is.bread(&v, 1);
1372  if (version() != v)
1373  {
1374  // Fail incompatible versions
1375  return false;
1376  }
1377  loadData(is, myKernelName);
1378  loadData(is, myUseCode);
1379  loadData(is, myKernelFile);
1380  loadData(is, myKernelCode);
1381  loadData(is, myAtBinding);
1382  loadData(is, myKernelOptions);
1383  loadData(is, myKernelOptionAttrib);
1384  loadData(is, myUseWriteBackKernel);
1385  loadData(is, myWriteBackKernelName);
1386  loadData(is, myRecompile);
1387  loadData(is, myRunOver);
1388  loadData(is, myIterations);
1389  loadData(is, myWorksets_begin);
1390  loadData(is, myWorksets_length);
1391  loadData(is, mySingleworkgroup);
1392  loadData(is, myFinish);
1393  loadData(is, myTime);
1394  loadData(is, myTimeInc);
1395  loadData(is, myTimescale);
1396  loadData(is, myTimemethod);
1397  loadData(is, myXnoise);
1398  loadData(is, myPrecision);
1399  {
1400  int64 length;
1401  is.read(&length, 1);
1402  myBindings.setSize(length);
1403  for (exint i = 0; i < length; i++)
1404  {
1405  auto && _curentry = myBindings(i);
1406  (void) _curentry;
1407  loadData(is, _curentry.bindings_name);
1408  loadData(is, _curentry.bindings_type);
1409  loadData(is, _curentry.bindings_ramp);
1410  loadData(is, _curentry.bindings_rampsize);
1411  loadData(is, _curentry.bindings_input);
1412  loadData(is, _curentry.bindings_volume);
1413  loadData(is, _curentry.bindings_vdbtype);
1414  loadData(is, _curentry.bindings_forcealign);
1415  loadData(is, _curentry.bindings_resolution);
1416  loadData(is, _curentry.bindings_voxelsize);
1417  loadData(is, _curentry.bindings_xformtoworld);
1418  loadData(is, _curentry.bindings_xformtovoxel);
1419  loadData(is, _curentry.bindings_attribute);
1420  loadData(is, _curentry.bindings_attribclass);
1421  loadData(is, _curentry.bindings_attribtype);
1422  loadData(is, _curentry.bindings_attribsize);
1423  loadData(is, _curentry.bindings_precision);
1424  loadData(is, _curentry.bindings_readable);
1425  loadData(is, _curentry.bindings_writeable);
1426  loadData(is, _curentry.bindings_optional);
1427  loadData(is, _curentry.bindings_defval);
1428  loadData(is, _curentry.bindings_intval);
1429  loadData(is, _curentry.bindings_fval);
1430  loadData(is, _curentry.bindings_v3val);
1431  loadData(is, _curentry.bindings_v4val);
1432  loadData(is, _curentry.bindings_timescale);
1433 
1434  }
1435  }
1436  loadData(is, myGeneratedCode);
1437 
1438  return true;
1439  }
1440 
1441  const UT_StringHolder & getKernelName() const { return myKernelName; }
1442  void setKernelName(const UT_StringHolder & val) { myKernelName = val; }
1444  {
1445  SOP_Node *thissop = cookparms.getNode();
1446  if (!thissop) return getKernelName();
1448  OP_Utils::evalOpParm(result, thissop, "kernelname", cookparms.getCookTime(), 0);
1449  return result;
1450  }
1451  bool getUseCode() const { return myUseCode; }
1452  void setUseCode(bool val) { myUseCode = val; }
1453  bool opUseCode(const SOP_NodeVerb::CookParms &cookparms) const
1454  {
1455  SOP_Node *thissop = cookparms.getNode();
1456  if (!thissop) return getUseCode();
1457  bool result;
1458  OP_Utils::evalOpParm(result, thissop, "usecode", cookparms.getCookTime(), 0);
1459  return result;
1460  }
1461  const UT_StringHolder & getKernelFile() const { return myKernelFile; }
1462  void setKernelFile(const UT_StringHolder & val) { myKernelFile = val; }
1464  {
1465  SOP_Node *thissop = cookparms.getNode();
1466  if (!thissop) return getKernelFile();
1468  OP_Utils::evalOpParm(result, thissop, "kernelfile", cookparms.getCookTime(), 0);
1469  return result;
1470  }
1471  const UT_StringHolder & getKernelCode() const { return myKernelCode; }
1472  void setKernelCode(const UT_StringHolder & val) { myKernelCode = val; }
1474  {
1475  SOP_Node *thissop = cookparms.getNode();
1476  if (!thissop) return getKernelCode();
1478  OP_Utils::evalOpParm(result, thissop, "kernelcode", cookparms.getCookTime(), 0);
1479  return result;
1480  }
1481  bool getAtBinding() const { return myAtBinding; }
1482  void setAtBinding(bool val) { myAtBinding = val; }
1483  bool opAtBinding(const SOP_NodeVerb::CookParms &cookparms) const
1484  {
1485  SOP_Node *thissop = cookparms.getNode();
1486  if (!thissop) return getAtBinding();
1487  bool result;
1488  OP_Utils::evalOpParm(result, thissop, "atbinding", cookparms.getCookTime(), 0);
1489  return result;
1490  }
1491  const UT_StringHolder & getKernelOptions() const { return myKernelOptions; }
1492  void setKernelOptions(const UT_StringHolder & val) { myKernelOptions = val; }
1494  {
1495  SOP_Node *thissop = cookparms.getNode();
1496  if (!thissop) return getKernelOptions();
1498  OP_Utils::evalOpParm(result, thissop, "kerneloptions", cookparms.getCookTime(), 0);
1499  return result;
1500  }
1501  const UT_StringHolder & getKernelOptionAttrib() const { return myKernelOptionAttrib; }
1502  void setKernelOptionAttrib(const UT_StringHolder & val) { myKernelOptionAttrib = val; }
1504  {
1505  SOP_Node *thissop = cookparms.getNode();
1506  if (!thissop) return getKernelOptionAttrib();
1508  OP_Utils::evalOpParm(result, thissop, "kerneloptionattrib", cookparms.getCookTime(), 0);
1509  return result;
1510  }
1511  bool getUseWriteBackKernel() const { return myUseWriteBackKernel; }
1512  void setUseWriteBackKernel(bool val) { myUseWriteBackKernel = val; }
1513  bool opUseWriteBackKernel(const SOP_NodeVerb::CookParms &cookparms) const
1514  {
1515  SOP_Node *thissop = cookparms.getNode();
1516  if (!thissop) return getUseWriteBackKernel();
1517  bool result;
1518  OP_Utils::evalOpParm(result, thissop, "usewritebackkernel", cookparms.getCookTime(), 0);
1519  return result;
1520  }
1521  const UT_StringHolder & getWriteBackKernelName() const { return myWriteBackKernelName; }
1522  void setWriteBackKernelName(const UT_StringHolder & val) { myWriteBackKernelName = val; }
1524  {
1525  SOP_Node *thissop = cookparms.getNode();
1526  if (!thissop) return getWriteBackKernelName();
1528  OP_Utils::evalOpParm(result, thissop, "writebackkernelname", cookparms.getCookTime(), 0);
1529  return result;
1530  }
1531  bool getRecompile() const { return myRecompile; }
1532  void setRecompile(bool val) { myRecompile = val; }
1533  bool opRecompile(const SOP_NodeVerb::CookParms &cookparms) const
1534  {
1535  SOP_Node *thissop = cookparms.getNode();
1536  if (!thissop) return getRecompile();
1537  bool result;
1538  OP_Utils::evalOpParm(result, thissop, "recompile", cookparms.getCookTime(), 0);
1539  return result;
1540  }
1541  RunOver getRunOver() const { return RunOver(myRunOver); }
1542  void setRunOver(RunOver val) { myRunOver = int64(val); }
1544  {
1545  SOP_Node *thissop = cookparms.getNode();
1546  if (!thissop) return getRunOver();
1547  int64 result;
1548  OP_Utils::evalOpParm(result, thissop, "runover", cookparms.getCookTime(), 0);
1549  return RunOver(result);
1550  }
1551  int64 getIterations() const { return myIterations; }
1552  void setIterations(int64 val) { myIterations = val; }
1554  {
1555  SOP_Node *thissop = cookparms.getNode();
1556  if (!thissop) return getIterations();
1557  int64 result;
1558  OP_Utils::evalOpParm(result, thissop, "iterations", cookparms.getCookTime(), 0);
1559  return result;
1560  }
1561  const UT_StringHolder & getWorksets_begin() const { return myWorksets_begin; }
1562  void setWorksets_begin(const UT_StringHolder & val) { myWorksets_begin = val; }
1564  {
1565  SOP_Node *thissop = cookparms.getNode();
1566  if (!thissop) return getWorksets_begin();
1568  OP_Utils::evalOpParm(result, thissop, "worksets_begin", cookparms.getCookTime(), 0);
1569  return result;
1570  }
1571  const UT_StringHolder & getWorksets_length() const { return myWorksets_length; }
1572  void setWorksets_length(const UT_StringHolder & val) { myWorksets_length = val; }
1574  {
1575  SOP_Node *thissop = cookparms.getNode();
1576  if (!thissop) return getWorksets_length();
1578  OP_Utils::evalOpParm(result, thissop, "worksets_length", cookparms.getCookTime(), 0);
1579  return result;
1580  }
1581  bool getSingleworkgroup() const { return mySingleworkgroup; }
1582  void setSingleworkgroup(bool val) { mySingleworkgroup = val; }
1583  bool opSingleworkgroup(const SOP_NodeVerb::CookParms &cookparms) const
1584  {
1585  SOP_Node *thissop = cookparms.getNode();
1586  if (!thissop) return getSingleworkgroup();
1587  bool result;
1588  OP_Utils::evalOpParm(result, thissop, "singleworkgroup", cookparms.getCookTime(), 0);
1589  return result;
1590  }
1591  bool getFinish() const { return myFinish; }
1592  void setFinish(bool val) { myFinish = val; }
1593  bool opFinish(const SOP_NodeVerb::CookParms &cookparms) const
1594  {
1595  SOP_Node *thissop = cookparms.getNode();
1596  if (!thissop) return getFinish();
1597  bool result;
1598  OP_Utils::evalOpParm(result, thissop, "finish", cookparms.getCookTime(), 0);
1599  return result;
1600  }
1601  bool getTime() const { return myTime; }
1602  void setTime(bool val) { myTime = val; }
1603  bool opTime(const SOP_NodeVerb::CookParms &cookparms) const
1604  {
1605  SOP_Node *thissop = cookparms.getNode();
1606  if (!thissop) return getTime();
1607  bool result;
1608  OP_Utils::evalOpParm(result, thissop, "time", cookparms.getCookTime(), 0);
1609  return result;
1610  }
1611  bool getTimeInc() const { return myTimeInc; }
1612  void setTimeInc(bool val) { myTimeInc = val; }
1613  bool opTimeInc(const SOP_NodeVerb::CookParms &cookparms) const
1614  {
1615  SOP_Node *thissop = cookparms.getNode();
1616  if (!thissop) return getTimeInc();
1617  bool result;
1618  OP_Utils::evalOpParm(result, thissop, "timeinc", cookparms.getCookTime(), 0);
1619  return result;
1620  }
1621  fpreal64 getTimescale() const { return myTimescale; }
1622  void setTimescale(fpreal64 val) { myTimescale = val; }
1624  {
1625  SOP_Node *thissop = cookparms.getNode();
1626  if (!thissop) return getTimescale();
1627  fpreal64 result;
1628  OP_Utils::evalOpParm(result, thissop, "timescale", cookparms.getCookTime(), 0);
1629  return result;
1630  }
1631  Timemethod getTimemethod() const { return Timemethod(myTimemethod); }
1632  void setTimemethod(Timemethod val) { myTimemethod = int64(val); }
1634  {
1635  SOP_Node *thissop = cookparms.getNode();
1636  if (!thissop) return getTimemethod();
1637  int64 result;
1638  OP_Utils::evalOpParm(result, thissop, "timemethod", cookparms.getCookTime(), 0);
1639  return Timemethod(result);
1640  }
1641  bool getXnoise() const { return myXnoise; }
1642  void setXnoise(bool val) { myXnoise = val; }
1643  bool opXnoise(const SOP_NodeVerb::CookParms &cookparms) const
1644  {
1645  SOP_Node *thissop = cookparms.getNode();
1646  if (!thissop) return getXnoise();
1647  bool result;
1648  OP_Utils::evalOpParm(result, thissop, "xnoise", cookparms.getCookTime(), 0);
1649  return result;
1650  }
1651  Precision getPrecision() const { return Precision(myPrecision); }
1652  void setPrecision(Precision val) { myPrecision = int64(val); }
1654  {
1655  SOP_Node *thissop = cookparms.getNode();
1656  if (!thissop) return getPrecision();
1657  int64 result;
1658  OP_Utils::evalOpParm(result, thissop, "precision", cookparms.getCookTime(), 0);
1659  return Precision(result);
1660  }
1661  const UT_Array<Bindings> &getBindings() const { return myBindings; }
1662 void setBindings(const UT_Array<Bindings> &val) { myBindings = val; }
1663  exint opBindings(const SOP_NodeVerb::CookParms &cookparms) const
1664  {
1665  SOP_Node *thissop = cookparms.getNode();
1666  if (!thissop) return getBindings().entries();
1667  exint result;
1668  OP_Utils::evalOpParm(result, thissop, "bindings", cookparms.getCookTime(), 0);
1669  return result;
1670  }
1672  { return opinstBindings_bindings_name(cookparms, &_idx); }
1674  {
1675  SOP_Node *thissop = cookparms.getNode();
1676  if (!thissop) return (myBindings(_idx[0]).bindings_name);
1677  int _parmidx[2-1];
1678  _parmidx[1-1] = _idx[1-1] + 1;
1679 
1681  OP_Utils::evalOpParmInst(result, thissop, "bindings#_name", _parmidx, cookparms.getCookTime(), 0, 2-1);
1682  return (result);
1683  }
1684  int64 opBindings_bindings_type(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
1685  { return opinstBindings_bindings_type(cookparms, &_idx); }
1686  int64 opinstBindings_bindings_type(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
1687  {
1688  SOP_Node *thissop = cookparms.getNode();
1689  if (!thissop) return (myBindings(_idx[0]).bindings_type);
1690  int _parmidx[2-1];
1691  _parmidx[1-1] = _idx[1-1] + 1;
1692 
1693  int64 result;
1694  OP_Utils::evalOpParmInst(result, thissop, "bindings#_type", _parmidx, cookparms.getCookTime(), 0, 2-1);
1695  return (result);
1696  }
1698  { return opinstBindings_bindings_ramp(cookparms, &_idx); }
1700  {
1701  SOP_Node *thissop = cookparms.getNode();
1702  if (!thissop) return (myBindings(_idx[0]).bindings_ramp);
1703  int _parmidx[2-1];
1704  _parmidx[1-1] = _idx[1-1] + 1;
1705 
1707  OP_Utils::evalOpParmInst(result, thissop, "bindings#_ramp", _parmidx, cookparms.getCookTime(), 0, 2-1);
1708  return (result);
1709  }
1711  { return opinstBindings_bindings_rampsize(cookparms, &_idx); }
1712  int64 opinstBindings_bindings_rampsize(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
1713  {
1714  SOP_Node *thissop = cookparms.getNode();
1715  if (!thissop) return (myBindings(_idx[0]).bindings_rampsize);
1716  int _parmidx[2-1];
1717  _parmidx[1-1] = _idx[1-1] + 1;
1718 
1719  int64 result;
1720  OP_Utils::evalOpParmInst(result, thissop, "bindings#_rampsize", _parmidx, cookparms.getCookTime(), 0, 2-1);
1721  return (result);
1722  }
1723  int64 opBindings_bindings_input(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
1724  { return opinstBindings_bindings_input(cookparms, &_idx); }
1725  int64 opinstBindings_bindings_input(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
1726  {
1727  SOP_Node *thissop = cookparms.getNode();
1728  if (!thissop) return (myBindings(_idx[0]).bindings_input);
1729  int _parmidx[2-1];
1730  _parmidx[1-1] = _idx[1-1] + 1;
1731 
1732  int64 result;
1733  OP_Utils::evalOpParmInst(result, thissop, "bindings#_input", _parmidx, cookparms.getCookTime(), 0, 2-1);
1734  return (result);
1735  }
1737  { return opinstBindings_bindings_volume(cookparms, &_idx); }
1739  {
1740  SOP_Node *thissop = cookparms.getNode();
1741  if (!thissop) return (myBindings(_idx[0]).bindings_volume);
1742  int _parmidx[2-1];
1743  _parmidx[1-1] = _idx[1-1] + 1;
1744 
1746  OP_Utils::evalOpParmInst(result, thissop, "bindings#_volume", _parmidx, cookparms.getCookTime(), 0, 2-1);
1747  return (result);
1748  }
1750  { return opinstBindings_bindings_vdbtype(cookparms, &_idx); }
1751  int64 opinstBindings_bindings_vdbtype(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
1752  {
1753  SOP_Node *thissop = cookparms.getNode();
1754  if (!thissop) return (myBindings(_idx[0]).bindings_vdbtype);
1755  int _parmidx[2-1];
1756  _parmidx[1-1] = _idx[1-1] + 1;
1757 
1758  int64 result;
1759  OP_Utils::evalOpParmInst(result, thissop, "bindings#_vdbtype", _parmidx, cookparms.getCookTime(), 0, 2-1);
1760  return (result);
1761  }
1762  bool opBindings_bindings_forcealign(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
1763  { return opinstBindings_bindings_forcealign(cookparms, &_idx); }
1764  bool opinstBindings_bindings_forcealign(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
1765  {
1766  SOP_Node *thissop = cookparms.getNode();
1767  if (!thissop) return (myBindings(_idx[0]).bindings_forcealign);
1768  int _parmidx[2-1];
1769  _parmidx[1-1] = _idx[1-1] + 1;
1770 
1771  bool result;
1772  OP_Utils::evalOpParmInst(result, thissop, "bindings#_forcealign", _parmidx, cookparms.getCookTime(), 0, 2-1);
1773  return (result);
1774  }
1775  bool opBindings_bindings_resolution(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
1776  { return opinstBindings_bindings_resolution(cookparms, &_idx); }
1777  bool opinstBindings_bindings_resolution(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
1778  {
1779  SOP_Node *thissop = cookparms.getNode();
1780  if (!thissop) return (myBindings(_idx[0]).bindings_resolution);
1781  int _parmidx[2-1];
1782  _parmidx[1-1] = _idx[1-1] + 1;
1783 
1784  bool result;
1785  OP_Utils::evalOpParmInst(result, thissop, "bindings#_resolution", _parmidx, cookparms.getCookTime(), 0, 2-1);
1786  return (result);
1787  }
1788  bool opBindings_bindings_voxelsize(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
1789  { return opinstBindings_bindings_voxelsize(cookparms, &_idx); }
1790  bool opinstBindings_bindings_voxelsize(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
1791  {
1792  SOP_Node *thissop = cookparms.getNode();
1793  if (!thissop) return (myBindings(_idx[0]).bindings_voxelsize);
1794  int _parmidx[2-1];
1795  _parmidx[1-1] = _idx[1-1] + 1;
1796 
1797  bool result;
1798  OP_Utils::evalOpParmInst(result, thissop, "bindings#_voxelsize", _parmidx, cookparms.getCookTime(), 0, 2-1);
1799  return (result);
1800  }
1801  bool opBindings_bindings_xformtoworld(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
1802  { return opinstBindings_bindings_xformtoworld(cookparms, &_idx); }
1803  bool opinstBindings_bindings_xformtoworld(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
1804  {
1805  SOP_Node *thissop = cookparms.getNode();
1806  if (!thissop) return (myBindings(_idx[0]).bindings_xformtoworld);
1807  int _parmidx[2-1];
1808  _parmidx[1-1] = _idx[1-1] + 1;
1809 
1810  bool result;
1811  OP_Utils::evalOpParmInst(result, thissop, "bindings#_xformtoworld", _parmidx, cookparms.getCookTime(), 0, 2-1);
1812  return (result);
1813  }
1814  bool opBindings_bindings_xformtovoxel(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
1815  { return opinstBindings_bindings_xformtovoxel(cookparms, &_idx); }
1816  bool opinstBindings_bindings_xformtovoxel(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
1817  {
1818  SOP_Node *thissop = cookparms.getNode();
1819  if (!thissop) return (myBindings(_idx[0]).bindings_xformtovoxel);
1820  int _parmidx[2-1];
1821  _parmidx[1-1] = _idx[1-1] + 1;
1822 
1823  bool result;
1824  OP_Utils::evalOpParmInst(result, thissop, "bindings#_xformtovoxel", _parmidx, cookparms.getCookTime(), 0, 2-1);
1825  return (result);
1826  }
1828  { return opinstBindings_bindings_attribute(cookparms, &_idx); }
1830  {
1831  SOP_Node *thissop = cookparms.getNode();
1832  if (!thissop) return (myBindings(_idx[0]).bindings_attribute);
1833  int _parmidx[2-1];
1834  _parmidx[1-1] = _idx[1-1] + 1;
1835 
1837  OP_Utils::evalOpParmInst(result, thissop, "bindings#_attribute", _parmidx, cookparms.getCookTime(), 0, 2-1);
1838  return (result);
1839  }
1841  { return opinstBindings_bindings_attribclass(cookparms, &_idx); }
1842  int64 opinstBindings_bindings_attribclass(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
1843  {
1844  SOP_Node *thissop = cookparms.getNode();
1845  if (!thissop) return (myBindings(_idx[0]).bindings_attribclass);
1846  int _parmidx[2-1];
1847  _parmidx[1-1] = _idx[1-1] + 1;
1848 
1849  int64 result;
1850  OP_Utils::evalOpParmInst(result, thissop, "bindings#_attribclass", _parmidx, cookparms.getCookTime(), 0, 2-1);
1851  return (result);
1852  }
1854  { return opinstBindings_bindings_attribtype(cookparms, &_idx); }
1855  int64 opinstBindings_bindings_attribtype(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
1856  {
1857  SOP_Node *thissop = cookparms.getNode();
1858  if (!thissop) return (myBindings(_idx[0]).bindings_attribtype);
1859  int _parmidx[2-1];
1860  _parmidx[1-1] = _idx[1-1] + 1;
1861 
1862  int64 result;
1863  OP_Utils::evalOpParmInst(result, thissop, "bindings#_attribtype", _parmidx, cookparms.getCookTime(), 0, 2-1);
1864  return (result);
1865  }
1867  { return opinstBindings_bindings_attribsize(cookparms, &_idx); }
1868  int64 opinstBindings_bindings_attribsize(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
1869  {
1870  SOP_Node *thissop = cookparms.getNode();
1871  if (!thissop) return (myBindings(_idx[0]).bindings_attribsize);
1872  int _parmidx[2-1];
1873  _parmidx[1-1] = _idx[1-1] + 1;
1874 
1875  int64 result;
1876  OP_Utils::evalOpParmInst(result, thissop, "bindings#_attribsize", _parmidx, cookparms.getCookTime(), 0, 2-1);
1877  return (result);
1878  }
1880  { return opinstBindings_bindings_precision(cookparms, &_idx); }
1881  int64 opinstBindings_bindings_precision(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
1882  {
1883  SOP_Node *thissop = cookparms.getNode();
1884  if (!thissop) return (myBindings(_idx[0]).bindings_precision);
1885  int _parmidx[2-1];
1886  _parmidx[1-1] = _idx[1-1] + 1;
1887 
1888  int64 result;
1889  OP_Utils::evalOpParmInst(result, thissop, "bindings#_precision", _parmidx, cookparms.getCookTime(), 0, 2-1);
1890  return (result);
1891  }
1892  bool opBindings_bindings_readable(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
1893  { return opinstBindings_bindings_readable(cookparms, &_idx); }
1894  bool opinstBindings_bindings_readable(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
1895  {
1896  SOP_Node *thissop = cookparms.getNode();
1897  if (!thissop) return (myBindings(_idx[0]).bindings_readable);
1898  int _parmidx[2-1];
1899  _parmidx[1-1] = _idx[1-1] + 1;
1900 
1901  bool result;
1902  OP_Utils::evalOpParmInst(result, thissop, "bindings#_readable", _parmidx, cookparms.getCookTime(), 0, 2-1);
1903  return (result);
1904  }
1905  bool opBindings_bindings_writeable(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
1906  { return opinstBindings_bindings_writeable(cookparms, &_idx); }
1907  bool opinstBindings_bindings_writeable(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
1908  {
1909  SOP_Node *thissop = cookparms.getNode();
1910  if (!thissop) return (myBindings(_idx[0]).bindings_writeable);
1911  int _parmidx[2-1];
1912  _parmidx[1-1] = _idx[1-1] + 1;
1913 
1914  bool result;
1915  OP_Utils::evalOpParmInst(result, thissop, "bindings#_writeable", _parmidx, cookparms.getCookTime(), 0, 2-1);
1916  return (result);
1917  }
1918  bool opBindings_bindings_optional(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
1919  { return opinstBindings_bindings_optional(cookparms, &_idx); }
1920  bool opinstBindings_bindings_optional(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
1921  {
1922  SOP_Node *thissop = cookparms.getNode();
1923  if (!thissop) return (myBindings(_idx[0]).bindings_optional);
1924  int _parmidx[2-1];
1925  _parmidx[1-1] = _idx[1-1] + 1;
1926 
1927  bool result;
1928  OP_Utils::evalOpParmInst(result, thissop, "bindings#_optional", _parmidx, cookparms.getCookTime(), 0, 2-1);
1929  return (result);
1930  }
1931  bool opBindings_bindings_defval(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
1932  { return opinstBindings_bindings_defval(cookparms, &_idx); }
1933  bool opinstBindings_bindings_defval(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
1934  {
1935  SOP_Node *thissop = cookparms.getNode();
1936  if (!thissop) return (myBindings(_idx[0]).bindings_defval);
1937  int _parmidx[2-1];
1938  _parmidx[1-1] = _idx[1-1] + 1;
1939 
1940  bool result;
1941  OP_Utils::evalOpParmInst(result, thissop, "bindings#_defval", _parmidx, cookparms.getCookTime(), 0, 2-1);
1942  return (result);
1943  }
1945  { return opinstBindings_bindings_intval(cookparms, &_idx); }
1946  int64 opinstBindings_bindings_intval(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
1947  {
1948  SOP_Node *thissop = cookparms.getNode();
1949  if (!thissop) return (myBindings(_idx[0]).bindings_intval);
1950  int _parmidx[2-1];
1951  _parmidx[1-1] = _idx[1-1] + 1;
1952 
1953  int64 result;
1954  OP_Utils::evalOpParmInst(result, thissop, "bindings#_intval", _parmidx, cookparms.getCookTime(), 0, 2-1);
1955  return (result);
1956  }
1958  { return opinstBindings_bindings_fval(cookparms, &_idx); }
1959  fpreal64 opinstBindings_bindings_fval(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
1960  {
1961  SOP_Node *thissop = cookparms.getNode();
1962  if (!thissop) return (myBindings(_idx[0]).bindings_fval);
1963  int _parmidx[2-1];
1964  _parmidx[1-1] = _idx[1-1] + 1;
1965 
1966  fpreal64 result;
1967  OP_Utils::evalOpParmInst(result, thissop, "bindings#_fval", _parmidx, cookparms.getCookTime(), 0, 2-1);
1968  return (result);
1969  }
1971  { return opinstBindings_bindings_v3val(cookparms, &_idx); }
1972  UT_Vector3D opinstBindings_bindings_v3val(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
1973  {
1974  SOP_Node *thissop = cookparms.getNode();
1975  if (!thissop) return (myBindings(_idx[0]).bindings_v3val);
1976  int _parmidx[2-1];
1977  _parmidx[1-1] = _idx[1-1] + 1;
1978 
1980  OP_Utils::evalOpParmInst(result, thissop, "bindings#_v3val", _parmidx, cookparms.getCookTime(), 0, 2-1);
1981  return (result);
1982  }
1984  { return opinstBindings_bindings_v4val(cookparms, &_idx); }
1985  UT_Vector4D opinstBindings_bindings_v4val(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
1986  {
1987  SOP_Node *thissop = cookparms.getNode();
1988  if (!thissop) return (myBindings(_idx[0]).bindings_v4val);
1989  int _parmidx[2-1];
1990  _parmidx[1-1] = _idx[1-1] + 1;
1991 
1993  OP_Utils::evalOpParmInst(result, thissop, "bindings#_v4val", _parmidx, cookparms.getCookTime(), 0, 2-1);
1994  return (result);
1995  }
1997  { return opinstBindings_bindings_timescale(cookparms, &_idx); }
1998  int64 opinstBindings_bindings_timescale(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
1999  {
2000  SOP_Node *thissop = cookparms.getNode();
2001  if (!thissop) return (myBindings(_idx[0]).bindings_timescale);
2002  int _parmidx[2-1];
2003  _parmidx[1-1] = _idx[1-1] + 1;
2004 
2005  int64 result;
2006  OP_Utils::evalOpParmInst(result, thissop, "bindings#_timescale", _parmidx, cookparms.getCookTime(), 0, 2-1);
2007  return (result);
2008  }
2009 
2010  const UT_StringHolder & getGeneratedCode() const { return myGeneratedCode; }
2011  void setGeneratedCode(const UT_StringHolder & val) { myGeneratedCode = val; }
2013  {
2014  SOP_Node *thissop = cookparms.getNode();
2015  if (!thissop) return getGeneratedCode();
2017  OP_Utils::evalOpParm(result, thissop, "generatedcode", cookparms.getCookTime(), 0);
2018  return result;
2019  }
2020 
2021 private:
2022  UT_StringHolder myKernelName;
2023  bool myUseCode;
2024  UT_StringHolder myKernelFile;
2025  UT_StringHolder myKernelCode;
2026  bool myAtBinding;
2027  UT_StringHolder myKernelOptions;
2028  UT_StringHolder myKernelOptionAttrib;
2029  bool myUseWriteBackKernel;
2030  UT_StringHolder myWriteBackKernelName;
2031  bool myRecompile;
2032  int64 myRunOver;
2033  int64 myIterations;
2034  UT_StringHolder myWorksets_begin;
2035  UT_StringHolder myWorksets_length;
2036  bool mySingleworkgroup;
2037  bool myFinish;
2038  bool myTime;
2039  bool myTimeInc;
2040  fpreal64 myTimescale;
2041  int64 myTimemethod;
2042  bool myXnoise;
2043  int64 myPrecision;
2044  UT_Array<Bindings> myBindings;
2045  UT_StringHolder myGeneratedCode;
2046 
2047 };
const UT_StringHolder & getWorksets_length() const
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector2D &value) override
static void loadData(UT_IStream &is, PRM_DataItemHandle &v)
bool getRecompile() const
bool opXnoise(const SOP_NodeVerb::CookParms &cookparms) const
bool opinstBindings_bindings_optional(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
bool getUseWriteBackKernel() const
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glcorearb.h:2540
UT_StringHolder opGeneratedCode(const SOP_NodeVerb::CookParms &cookparms) const
static void loadData(UT_IStream &is, UT_Vector3D &v)
void setAtBinding(bool val)
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector3D &value) const override
UT_Vector3D opBindings_bindings_v3val(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
int int32
Definition: SYS_Types.h:39
void setKernelCode(const UT_StringHolder &val)
SOP_Node * getNode() const
Definition: SOP_NodeVerb.h:347
void setNestParmValue(TempIndex idx, TempIndex instance, const PRM_DataItemHandle &value) override
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector4D &value) override
bool opinstBindings_bindings_defval(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
void setWorksets_begin(const UT_StringHolder &val)
T clampMaxValue(fpreal maxvalue, const T &src) const
Definition: OP_NodeParms.h:315
int64 opinstBindings_bindings_rampsize(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
int64 opinstBindings_bindings_attribclass(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
UT_Vector3D opinstBindings_bindings_v3val(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
bool opUseCode(const SOP_NodeVerb::CookParms &cookparms) const
UT_StringHolder opBindings_bindings_name(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
Timemethod opTimemethod(const SOP_NodeVerb::CookParms &cookparms) const
void
Definition: png.h:1083
UT_SharedPtr< UT_Ramp > opinstBindings_bindings_ramp(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
UT_StringHolder opKernelName(const SOP_NodeVerb::CookParms &cookparms) const
exint bread(int32 *buffer, exint asize=1)
GLboolean * data
Definition: glcorearb.h:131
GT_API const UT_StringHolder time
constexpr SYS_FORCE_INLINE T & y() noexcept
Definition: UT_Vector4.h:493
const GLdouble * v
Definition: glcorearb.h:837
const UT_StringHolder & getKernelOptionAttrib() const
fpreal getTime() const
Definition: OP_Context.h:62
int64 opBindings_bindings_input(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
static void saveData(std::ostream &os, int64 v)
void setTimemethod(Timemethod val)
int64 opinstBindings_bindings_type(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
static void loadData(UT_IStream &is, UT_Vector4D &v)
ParmType getNestParmType(TempIndex fieldnum) const override
void setRecompile(bool val)
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector2D &value) const override
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_StringHolder &value) override
int64 opBindings_bindings_rampsize(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
UT_String makeQuotedString(char delimiter='\'', bool escape_nonprinting=false) const
const OP_Context & context() const
Definition: OP_NodeParms.h:97
void doGetParmValue(TempIndex idx, TempIndex instance, T &value) const
void setKernelFile(const UT_StringHolder &val)
void setKernelName(const UT_StringHolder &val)
bool opBindings_bindings_forcealign(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
constexpr SYS_FORCE_INLINE T & z() noexcept
Definition: UT_Vector3.h:667
int64 exint
Definition: SYS_Types.h:125
static void loadData(UT_IStream &is, UT_Vector2D &v)
static void saveData(std::ostream &os, fpreal64 v)
bool operator!=(const Bindings &src) const
SYS_FORCE_INLINE const char * buffer() const
bool opFinish(const SOP_NodeVerb::CookParms &cookparms) const
static void loadData(UT_IStream &is, UT_Matrix4D &v)
GLdouble s
Definition: glad.h:3009
int64 opBindings_bindings_type(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
UT_StringHolder opinstBindings_bindings_attribute(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
GLuint GLsizei GLsizei * length
Definition: glcorearb.h:795
fpreal64 opTimescale(const SOP_NodeVerb::CookParms &cookparms) const
UT_StringHolder opWorksets_length(const SOP_NodeVerb::CookParms &cookparms) const
const UT_StringHolder & getWriteBackKernelName() const
An output stream object that owns its own string buffer storage.
const char * getNestParmName(TempIndex fieldnum) const override
void setTime(bool val)
void getNestParmValue(TempIndex idx, TempIndex instance, UT_StringHolder &value) const override
UT_StringHolder bindings_volume
static void loadData(UT_IStream &is, UT_Vector3I &v)
const UT_StringHolder & getKernelOptions() const
int64 getIterations() const
**But if you need a result
Definition: thread.h:613
static void saveData(std::ostream &os, UT_Vector2D v)
fpreal64 opinstBindings_bindings_fval(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
UT_StringHolder opinstBindings_bindings_volume(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
T clampMinValue(fpreal minvalue, const T &src) const
Definition: OP_NodeParms.h:308
int64 opBindings_bindings_attribclass(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
exint nodeIdx() const
Definition: OP_NodeParms.h:95
static PRM_DataItemHandle parseBinary(const char *type, UT_IStream &is)
const UT_WorkBuffer & str()
Returns a read-only reference to the underlying UT_WorkBuffer.
static void saveData(std::ostream &os, UT_SharedPtr< UT_Ramp > s)
UT_StringHolder opKernelOptionAttrib(const SOP_NodeVerb::CookParms &cookparms) const
UT_StringHolder opBindings_bindings_attribute(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
int64 opinstBindings_bindings_intval(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
virtual NodeIdx getInput(NodeIdx idx, int input, bool markused=false) const =0
constexpr SYS_FORCE_INLINE T & x() noexcept
Definition: UT_Vector4.h:491
void save(std::ostream &os) const
void setKernelOptions(const UT_StringHolder &val)
GLuint GLsizei const GLuint const GLintptr * offsets
Definition: glcorearb.h:2621
void setTimescale(fpreal64 val)
const UT_StringHolder & getWorksets_begin() const
double fpreal64
Definition: SYS_Types.h:201
constexpr SYS_FORCE_INLINE T & x() noexcept
Definition: UT_Vector2.h:423
RunOver getRunOver() const
UT_StringHolder opWorksets_begin(const SOP_NodeVerb::CookParms &cookparms) const
bool operator==(const BaseDimensions< T > &a, const BaseDimensions< Y > &b)
Definition: Dimensions.h:137
static void saveData(std::ostream &os, UT_Matrix3D v)
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix4D &value) const override
fpreal64 getTimescale() const
const UT_StringHolder & getKernelFile() const
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_SharedPtr< UT_Ramp > &value) override
void setXnoise(bool val)
exint opBindings(const SOP_NodeVerb::CookParms &cookparms) const
bool opTime(const SOP_NodeVerb::CookParms &cookparms) const
static void saveData(std::ostream &os, PRM_DataItemHandle s)
bool getAtBinding() const
static void loadData(UT_IStream &is, UT_SharedPtr< UT_Ramp > &v)
int64 opinstBindings_bindings_vdbtype(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
exint length() const
static void saveData(std::ostream &os, UT_Vector4D v)
UT_SharedPtr< UT_Ramp > bindings_ramp
int64 opBindings_bindings_attribtype(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
static void loadData(UT_IStream &is, UT_Vector4I &v)
SYS_FORCE_INLINE const char * buffer() const
std::shared_ptr< T > UT_SharedPtr
Wrapper around std::shared_ptr.
Definition: UT_SharedPtr.h:36
void getNestParmValue(TempIndex idx, TempIndex instance, exint &value) const override
constexpr SYS_FORCE_INLINE T & z() noexcept
Definition: UT_Vector4.h:495
Precision getPrecision() const
bool getTime() const
void setWorksets_length(const UT_StringHolder &val)
void buildFromOp(const OP_GraphProxy *graph, exint nodeidx, fpreal time, DEP_MicroNode *depnode)
UT_StringHolder opWriteBackKernelName(const SOP_NodeVerb::CookParms &cookparms) const
bool opinstBindings_bindings_xformtoworld(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
exint read(bool *array, exint sz=1)
Definition: UT_IStream.h:276
const OP_GraphProxy * graph() const
Definition: OP_NodeParms.h:94
void setUseCode(bool val)
bool opBindings_bindings_defval(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
bool opBindings_bindings_voxelsize(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
void setPrecision(Precision val)
static void saveData(std::ostream &os, UT_StringHolder s)
bool opinstBindings_bindings_xformtovoxel(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
static void loadData(UT_IStream &is, UT_Vector2I &v)
void loadFromOpSubclass(const LoadParms &loadparms) override
UT_StringHolder opKernelFile(const SOP_NodeVerb::CookParms &cookparms) const
UT_Vector4D opBindings_bindings_v4val(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
UT_StringHolder bindings_name
static void saveData(std::ostream &os, UT_Vector3D v)
void setWriteBackKernelName(const UT_StringHolder &val)
bool getSingleworkgroup() const
bool opinstBindings_bindings_voxelsize(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix4D &value) override
virtual void evalOpParmInst(int64 &v, NodeIdx node, const char *parmname, const int *inst, const int *offsets, fpreal time, DEP_MicroNode *depnode, int nestlevel=1) const =0
long long int64
Definition: SYS_Types.h:116
void getNestParmValue(TempIndex idx, TempIndex instance, UT_SharedPtr< UT_Ramp > &value) const override
void getNestParmValue(TempIndex idx, TempIndex instance, fpreal &value) const override
UT_Vector3T< fpreal64 > UT_Vector3D
void setNestParmValue(TempIndex idx, TempIndex instance, const fpreal &value) override
bool opUseWriteBackKernel(const SOP_NodeVerb::CookParms &cookparms) const
bool opBindings_bindings_xformtoworld(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
bool opBindings_bindings_xformtovoxel(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
static void loadData(UT_IStream &is, int64 &v)
int64 opBindings_bindings_vdbtype(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix2D &value) override
void copyFrom(const OP_NodeParms *src) override
UT_StringHolder opBindings_bindings_volume(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
bool opSingleworkgroup(const SOP_NodeVerb::CookParms &cookparms) const
virtual void evalOpParm(int64 &v, NodeIdx node, const char *parmname, fpreal time, DEP_MicroNode *depnode) const =0
bool opBindings_bindings_writeable(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
exint getNestNumParms(TempIndex idx) const override
bool opTimeInc(const SOP_NodeVerb::CookParms &cookparms) const
static void loadData(UT_IStream &is, UT_Matrix3D &v)
SYS_FORCE_INLINE void strcat(const char *src)
void saveBinary(std::ostream &os) const
Save string to binary stream.
Definition: UT_String.h:296
UT_StringHolder createString(const UT_Array< Bindings > &list) const
int64 opBindings_bindings_precision(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
GT_API const UT_StringHolder version
int64 opinstBindings_bindings_input(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
exint entries() const
Alias of size(). size() is preferred.
Definition: UT_Array.h:648
UT_StringHolder bindings_attribute
void setGeneratedCode(const UT_StringHolder &val)
bool getXnoise() const
bool operator==(const SOP_OpenCLParms &src) const
UT_Vector4D opinstBindings_bindings_v4val(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
bool operator==(const Bindings &src) const
bool isParmColorRamp(exint idx) const override
int64 opinstBindings_bindings_attribtype(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
void setIterations(int64 val)
void setNestParmValue(TempIndex idx, TempIndex instance, const exint &value) override
int int appendSprintf(const char *fmt,...) SYS_PRINTF_CHECK_ATTRIBUTE(2
const UT_StringHolder & getKernelCode() const
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector4D &value) const override
void setFinish(bool val)
static void loadData(UT_IStream &is, fpreal64 &v)
void setRunOver(RunOver val)
static int version()
int64 opBindings_bindings_intval(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
void coerceValue(T &result, const S &src) const
Definition: OP_NodeParms.h:301
void setSingleworkgroup(bool val)
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix3D &value) override
bool opinstBindings_bindings_readable(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
bool getFinish() const
bool opRecompile(const SOP_NodeVerb::CookParms &cookparms) const
fpreal64 fpreal
Definition: SYS_Types.h:277
DEP_MicroNode * depnode() const
Definition: OP_NodeParms.h:99
int64 opinstBindings_bindings_precision(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
Timemethod getTimemethod() const
Utility class for containing a color ramp.
Definition: UT_Ramp.h:88
bool opAtBinding(const SOP_NodeVerb::CookParms &cookparms) const
bool load(UT_IStream &is)
void getNestParmValue(TempIndex idx, TempIndex instance, PRM_DataItemHandle &value) const override
const UT_StringHolder & getKernelName() const
constexpr SYS_FORCE_INLINE T & w() noexcept
Definition: UT_Vector4.h:497
SYS_FORCE_INLINE void append(char character)
bool opinstBindings_bindings_resolution(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
void setBindings(const UT_Array< Bindings > &val)
UT_StringHolder opinstBindings_bindings_name(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
void setUseWriteBackKernel(bool val)
GLuint GLfloat * val
Definition: glcorearb.h:1608
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix2D &value) const override
const UT_Array< Bindings > & getBindings() const
#define SOP_API
Definition: SOP_API.h:10
int64 opinstBindings_bindings_timescale(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
int64 opIterations(const SOP_NodeVerb::CookParms &cookparms) const
Precision opPrecision(const SOP_NodeVerb::CookParms &cookparms) const
const UT_StringHolder & getGeneratedCode() const
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector3D &value) override
fpreal getCookTime() const
Definition: SOP_NodeVerb.h:361
UT_StringHolder opKernelCode(const SOP_NodeVerb::CookParms &cookparms) const
bool operator!=(const SOP_OpenCLParms &src) const
int64 opinstBindings_bindings_attribsize(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
static void saveData(std::ostream &os, bool v)
const char * findChar(int c) const
Definition: UT_String.h:1385
#define UT_ASSERT(ZZ)
Definition: UT_Assert.h:156
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix3D &value) const override
Definition: core.h:1131
bool opBindings_bindings_resolution(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
GLboolean r
Definition: glcorearb.h:1222
int64 opBindings_bindings_timescale(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
bool opBindings_bindings_readable(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
fpreal64 opBindings_bindings_fval(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
bool getUseCode() const
static void saveData(std::ostream &os, UT_Matrix4D v)
UT_SharedPtr< UT_Ramp > opBindings_bindings_ramp(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
UT_Vector4T< fpreal64 > UT_Vector4D
constexpr SYS_FORCE_INLINE T & y() noexcept
Definition: UT_Vector3.h:665
bool getTimeInc() const
type
Definition: core.h:1059
static void loadData(UT_IStream &is, UT_Matrix2D &v)
bool opinstBindings_bindings_forcealign(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
void doSetParmValue(TempIndex idx, TempIndex instance, const T &value)
void setKernelOptionAttrib(const UT_StringHolder &val)
UT_StringHolder opKernelOptions(const SOP_NodeVerb::CookParms &cookparms) const
bool opBindings_bindings_optional(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
UT_SharedPtr< const PRM_DataItem > PRM_DataItemHandle
Definition: PRM_Parm.h:89
void setTimeInc(bool val)
constexpr SYS_FORCE_INLINE T & y() noexcept
Definition: UT_Vector2.h:425
SYS_FORCE_INLINE bool isstring() const
static void saveData(std::ostream &os, UT_Matrix2D v)
static void loadData(UT_IStream &is, bool &v)
OP_NodeParms & operator=(const OP_NodeParms &)=default
SYS_FORCE_INLINE void strncpy(const char *src, exint maxlen)
int64 opBindings_bindings_attribsize(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
RunOver opRunOver(const SOP_NodeVerb::CookParms &cookparms) const
static void loadData(UT_IStream &is, UT_StringHolder &v)
bool opinstBindings_bindings_writeable(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
GLenum src
Definition: glcorearb.h:1793
constexpr SYS_FORCE_INLINE T & x() noexcept
Definition: UT_Vector3.h:663