Material Definition Language API nvidia_logo_transpbg.gif Up
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
itype.h
Go to the documentation of this file.
1 /***************************************************************************************************
2  * Copyright 2020 NVIDIA Corporation. All rights reserved.
3  **************************************************************************************************/
6 
7 #ifndef MI_NEURAYLIB_ITYPE_H
8 #define MI_NEURAYLIB_ITYPE_H
9 
11 
12 namespace mi {
13 
14 class IString;
15 
16 namespace neuraylib {
17 
43 class IAnnotation_block;
44 
48 class IType : public
49  mi::base::Interface_declare<0x242af675,0xeaa2,0x48b7,0x81,0x63,0xba,0x06,0xa5,0xfb,0x68,0xf0>
50 {
51 public:
53  enum Kind {
92  // Undocumented, for alignment only.
93  TK_FORCE_32_BIT = 0xffffffffU
94  };
95 
97  enum Modifier {
98  MK_NONE = 0,
99  MK_UNIFORM = 2,
101  MK_FORCE_32_BIT // Undocumented, for alignment only.
102  };
103 
105  virtual Kind get_kind() const = 0;
106 
114  virtual Uint32 get_all_type_modifiers() const = 0;
115 
121  virtual const IType* skip_all_type_aliases() const = 0;
122 };
123 
124 mi_static_assert( sizeof( IType::Kind) == sizeof( Uint32));
125 mi_static_assert( sizeof( IType::Modifier) == sizeof( Uint32));
126 
131 class IType_alias : public
132  mi::base::Interface_declare<0x69d8c70a,0xdfda,0x4e8e,0xaa,0x09,0x12,0x1f,0xa9,0x78,0xc6,0x6a,
133  neuraylib::IType>
134 {
135 public:
137  static const Kind s_kind = TK_ALIAS;
138 
140  virtual const IType* get_aliased_type() const = 0;
141 
143  virtual Uint32 get_type_modifiers() const = 0;
144 
146  virtual const char* get_symbol() const = 0;
147 };
148 
150 class IType_atomic : public
151  mi::base::Interface_declare<0x9d5f9116,0x3896,0x45c8,0xb4,0x5a,0x8b,0x03,0x84,0x49,0x0a,0x77,
152  neuraylib::IType>
153 {
154 };
155 
157 class IType_bool : public
158  mi::base::Interface_declare<0x831d8a38,0x26d3,0x4fd2,0xa7,0xf7,0x15,0xc2,0xa5,0x20,0x76,0x6c,
159  neuraylib::IType_atomic>
160 {
161 public:
163  static const Kind s_kind = TK_BOOL;
164 };
165 
167 class IType_int : public
168  mi::base::Interface_declare<0xbbad021c,0xbfe5,0x45de,0xaf,0x66,0xfd,0xe8,0x45,0xbe,0x48,0x49,
169  neuraylib::IType_atomic>
170 {
171 public:
173  static const Kind s_kind = TK_INT;
174 };
175 
177 class IType_enum : public
178  mi::base::Interface_declare<0x0e5b167c,0x9c3e,0x48bf,0xb5,0xfd,0x37,0x96,0xaa,0x47,0xaf,0xd1,
179  neuraylib::IType_atomic>
180 {
181 public:
184  EID_USER = -1,
187  EID_FORCE_32_BIT = 0x7fffffff // Undocumented, for alignment only.
188  };
189 
191  static const Kind s_kind = TK_ENUM;
192 
194  virtual const char* get_symbol() const = 0;
195 
197  virtual Size get_size() const = 0;
198 
203  virtual const char* get_value_name( Size index) const = 0;
204 
212  virtual Sint32 get_value_code( Size index, Sint32* errors = 0) const = 0;
213 
218  virtual Size find_value( const char* name) const = 0;
219 
224  virtual Size find_value( Sint32 code) const = 0;
225 
227  virtual Predefined_id get_predefined_id() const = 0;
228 
233  virtual const IAnnotation_block* get_annotations() const = 0;
234 
240  virtual const IAnnotation_block* get_value_annotations( Size index) const = 0;
241 };
242 
243 mi_static_assert( sizeof( IType_enum::Predefined_id) == sizeof( Uint32));
244 
246 class IType_float : public
247  mi::base::Interface_declare<0x613711b3,0x41f2,0x44a9,0xbb,0x78,0x43,0xe2,0x41,0x64,0xb3,0xda,
248  neuraylib::IType_atomic>
249 {
250 public:
252  static const Kind s_kind = TK_FLOAT;
253 };
254 
256 class IType_double : public
257  mi::base::Interface_declare<0xc381508b,0x7945,0x4c70,0x8a,0x20,0x57,0xd5,0x2b,0x36,0x35,0x40,
258  neuraylib::IType_atomic>
259 {
260 public:
262  static const Kind s_kind = TK_DOUBLE;
263 };
264 
266 class IType_string : public
267  mi::base::Interface_declare<0x4b4629bc,0xa2ce,0x4008,0xba,0x76,0xf6,0x4d,0x60,0x76,0x0a,0x85,
268  neuraylib::IType_atomic>
269 {
270 public:
272  static const Kind s_kind = TK_STRING;
273 };
274 
276 class IType_compound : public
277  mi::base::Interface_declare<0xc9ca497f,0xc38b,0x411f,0xa8,0x16,0xa7,0xd8,0x23,0x28,0xa5,0x40,
278  neuraylib::IType>
279 {
280 public:
282  virtual const IType* get_component_type( Size index) const = 0;
283 
285  virtual Size get_size() const = 0;
286 };
287 
292 class IType_vector : public
293  mi::base::Interface_declare<0x412a8a91,0x9062,0x46fd,0xaa,0xcf,0x46,0xbd,0xb3,0xde,0x5b,0x9c,
294  neuraylib::IType_compound>
295 {
296 public:
298  static const Kind s_kind = TK_VECTOR;
299 
306  virtual const IType_atomic* get_element_type() const = 0;
307 };
308 
315 class IType_matrix : public
316  mi::base::Interface_declare<0x6b76570e,0x51b2,0x4e9b,0x9f,0xe7,0xda,0x03,0x1c,0x37,0xbc,0x75,
317  neuraylib::IType_compound>
318 {
319 public:
321  static const Kind s_kind = TK_MATRIX;
322 
324  virtual const IType_vector* get_element_type() const = 0;
325 };
326 
330 class IType_color : public
331  mi::base::Interface_declare<0xedb16770,0xdf70,0x4def,0x83,0xa5,0xc4,0x4f,0xcd,0x09,0x47,0x0f,
332  neuraylib::IType_compound>
333 {
334 public:
336  static const Kind s_kind = TK_COLOR;
337 };
338 
340 class IType_array : public
341  mi::base::Interface_declare<0x21ab6abe,0x0e26,0x40da,0xa1,0x98,0x42,0xc0,0x89,0x71,0x5d,0x2a,
342  neuraylib::IType_compound>
343 {
344 public:
346  static const Kind s_kind = TK_ARRAY;
347 
349  virtual const IType* get_element_type() const = 0;
350 
352  virtual bool is_immediate_sized() const = 0;
353 
355  virtual Size get_size() const = 0;
356 
361  virtual const char* get_deferred_size() const = 0;
362 };
363 
365 class IType_struct : public
366  mi::base::Interface_declare<0x19566cb2,0x0b5d,0x41ca,0xa0,0x31,0x96,0xe2,0x9a,0xd4,0xc3,0x1a,
367  neuraylib::IType_compound>
368 {
369 public:
372  SID_USER = -1,
378  SID_FORCE_32_BIT = 0x7fffffff // Undocumented, for alignment only.
379  };
380 
382  static const Kind s_kind = TK_STRUCT;
383 
385  virtual const char* get_symbol() const = 0;
386 
391  virtual const IType* get_field_type( Size index) const = 0;
392 
397  virtual const char* get_field_name( Size index) const = 0;
398 
403  virtual Size find_field( const char* name) const = 0;
404 
406  virtual Predefined_id get_predefined_id() const = 0;
407 
412  virtual const IAnnotation_block* get_annotations() const = 0;
413 
419  virtual const IAnnotation_block* get_field_annotations( Size index) const = 0;
420 };
421 
423 
425 class IType_reference : public
426  mi::base::Interface_declare<0x3e12cdec,0xdaba,0x460c,0x9e,0x8a,0x21,0x4c,0x43,0x9a,0x1a,0x90,
427  neuraylib::IType>
428 {
429 };
430 
432 class IType_resource : public
433  mi::base::Interface_declare<0x142f5bea,0x139e,0x42e4,0xb1,0x1c,0xb3,0x4d,0xd8,0xe3,0xd9,0x8d,
434  neuraylib::IType_reference>
435 {
436 };
437 
439 class IType_texture : public
440  mi::base::Interface_declare<0x2f11253f,0xb8ac,0x4b7d,0x8d,0xd6,0x43,0x66,0xf5,0x97,0xd0,0x93,
441  neuraylib::IType_resource>
442 {
443 public:
445  static const Kind s_kind = TK_TEXTURE;
446 
448  enum Shape {
449  TS_2D = 0,
450  TS_3D = 1,
451  TS_CUBE = 2,
452  TS_PTEX = 3,
454  TS_FORCE_32_BIT = 0xffffffffU // Undocumented, for alignment only.
456  };
457 
459  virtual Shape get_shape() const = 0;
460 };
461 
462 mi_static_assert( sizeof( IType_texture::Shape) == sizeof( Uint32));
463 
465 class IType_light_profile : public
466  mi::base::Interface_declare<0x11b80cd8,0x14aa,0x4dfa,0x8b,0xf6,0x0e,0x56,0x0f,0x10,0x9c,0x37,
467  neuraylib::IType_resource>
468 {
469 public:
471  static const Kind s_kind = TK_LIGHT_PROFILE;
472 };
473 
476  mi::base::Interface_declare<0xf061d204,0xc649,0x4a6b,0xb6,0x2d,0x67,0xe6,0x47,0x53,0xa9,0xda,
477  neuraylib::IType_resource>
478 {
479 public:
482 };
483 
485 class IType_df : public
486  mi::base::Interface_declare<0xf4bcba08,0x7777,0x4662,0x8e,0x29,0x67,0xe1,0x52,0xac,0x05,0x3e,
487  neuraylib::IType_reference>
488 {
489 };
490 
492 class IType_bsdf : public
493  mi::base::Interface_declare<0x6542a02c,0xe1d2,0x485d,0x9a,0x51,0x7b,0xed,0xff,0x7f,0x24,0x7b,
494  neuraylib::IType_df>
495 {
496 public:
498  static const Kind s_kind = TK_BSDF;
499 };
500 
502 class IType_hair_bsdf : public
503  mi::base::Interface_declare<0x8eac6c90,0x2b8f,0x4650,0x8b,0x93,0x88,0xe0,0x42,0xff,0x19,0x9c,
504  neuraylib::IType_df>
505 {
506 public:
508  static const Kind s_kind = TK_HAIR_BSDF;
509 };
510 
512 class IType_edf : public
513  mi::base::Interface_declare<0x3e3ce697,0xa2a7,0x43ef,0xa2,0xec,0x52,0x5a,0x4c,0x27,0x8f,0xeb,
514  neuraylib::IType_df>
515 {
516 public:
518  static const Kind s_kind = TK_EDF;
519 };
520 
522 class IType_vdf : public
523  mi::base::Interface_declare<0x44782b21,0x9e60,0x40b2,0xba,0xae,0x41,0x74,0xc9,0x98,0xe1,0x86,
524  neuraylib::IType_df>
525 {
526 public:
528  static const Kind s_kind = TK_VDF;
529 };
530 
534 class IType_list : public
535  mi::base::Interface_declare<0x68a97390,0x22ea,0x4f03,0xa5,0xb5,0x5c,0x18,0x32,0x38,0x28,0x91>
536 {
537 public:
539  virtual Size get_size() const = 0;
540 
542  virtual Size get_index( const char* name) const = 0;
543 
545  virtual const char* get_name( Size index) const = 0;
546 
548  virtual const IType* get_type( Size index) const = 0;
549 
551  template <class T>
552  const T* get_type( Size index) const
553  {
554  const IType* ptr_type = get_type( index);
555  if( !ptr_type)
556  return 0;
557  const T* ptr_T = static_cast<const T*>( ptr_type->get_interface( typename T::IID()));
558  ptr_type->release();
559  return ptr_T;
560  }
561 
563  virtual const IType* get_type( const char* name) const = 0;
564 
566  template <class T>
567  const T* get_type( const char* name) const
568  {
569  const IType* ptr_type = get_type( name);
570  if( !ptr_type)
571  return 0;
572  const T* ptr_T = static_cast<const T*>( ptr_type->get_interface( typename T::IID()));
573  ptr_type->release();
574  return ptr_T;
575  }
576 
582  virtual Sint32 set_type( Size index, const IType* type) = 0;
583 
589  virtual Sint32 set_type( const char* name, const IType* type) = 0;
590 
596  virtual Sint32 add_type( const char* name, const IType* type) = 0;
597 };
598 
602 class IType_factory : public
603  mi::base::Interface_declare<0x353803c0,0x74a6,0x48ac,0xab,0xa1,0xe4,0x25,0x42,0x1d,0xa1,0xbc>
604 {
605 public:
607  virtual const IType_alias* create_alias(
608  const IType* type, Uint32 modifiers, const char* symbol) const = 0;
609 
611  virtual const IType_bool* create_bool() const = 0;
612 
614  virtual const IType_int* create_int() const = 0;
615 
617  virtual const IType_enum* create_enum( const char* symbol) const = 0;
618 
620  virtual const IType_float* create_float() const = 0;
621 
623  virtual const IType_double* create_double() const = 0;
624 
626  virtual const IType_string* create_string() const = 0;
627 
635  virtual const IType_vector* create_vector(
636  const IType_atomic* element_type, Size size) const = 0;
637 
644  virtual const IType_matrix* create_matrix(
645  const IType_vector* column_type, Size columns) const = 0;
646 
648  virtual const IType_color* create_color() const = 0;
649 
652  const IType* element_type, Size size) const = 0;
653 
656  const IType* element_type, const char* size) const = 0;
657 
659  virtual const IType_struct* create_struct( const char* symbol) const = 0;
660 
662  virtual const IType_texture* create_texture( IType_texture::Shape shape) const = 0;
663 
665  virtual const IType_light_profile* create_light_profile() const = 0;
666 
668  virtual const IType_bsdf_measurement* create_bsdf_measurement() const = 0;
669 
671  virtual const IType_bsdf* create_bsdf() const = 0;
672 
674  virtual const IType_hair_bsdf* create_hair_bsdf() const = 0;
675 
677  virtual const IType_edf* create_edf() const = 0;
678 
680  virtual const IType_vdf* create_vdf() const = 0;
681 
683  virtual IType_list* create_type_list() const = 0;
684 
686  virtual const IType_enum* get_predefined_enum( IType_enum::Predefined_id id) const = 0;
687 
689  virtual const IType_struct* get_predefined_struct( IType_struct::Predefined_id id) const = 0;
690 
714  virtual Sint32 compare( const IType* lhs, const IType* rhs) const = 0;
715 
729  virtual Sint32 compare( const IType_list* lhs, const IType_list* rhs) const = 0;
730 
752  virtual Sint32 is_compatible(const IType* src, const IType* dst) const = 0;
753 
763  virtual const IString* dump( const IType* type, Size depth = 0) const = 0;
764 
774  virtual const IString* dump( const IType_list* list, Size depth = 0) const = 0;
775 };
776  // end group mi_neuray_mdl_types
778 
779 } // namespace neuraylib
780 
781 } // namespace mi
782 
783 #endif // MI_NEURAYLIB_ITYPE_H