MDL SDK API nvidia_logo_transpbg.gif Up
itype.h
Go to the documentation of this file.
1/***************************************************************************************************
2 * Copyright 2024 NVIDIA Corporation. All rights reserved.
3 **************************************************************************************************/
6
7#ifndef MI_NEURAYLIB_ITYPE_H
8#define MI_NEURAYLIB_ITYPE_H
9
11
12namespace mi {
13
14class IString;
15
16namespace neuraylib {
17
44class IAnnotation_block;
45
47class IStruct_category : public
48 mi::base::Interface_declare<0xdc79e614,0xad7e,0x4e4d,0xa9,0xc1,0x25,0x91,0xba,0x84,0x44,0x2d>
49{
50public:
53 CID_USER = -1,
55 CID_FORCE_32_BIT = 0x7fffffff // Undocumented, for alignment only.
56 };
57
59 virtual const char* get_symbol() const = 0;
60
62 virtual Predefined_id get_predefined_id() const = 0;
63
68 virtual const IAnnotation_block* get_annotations() const = 0;
69};
70
72
78 mi::base::Interface_declare<0x509417fe,0xaf4d,0x439e,0xa5,0xa2,0x09,0x56,0x2a,0x6c,0x04,0x2a>
79{
80public:
82 virtual Size get_size() const = 0;
83
85 virtual Size get_index( const char* name) const = 0;
86
88 virtual const char* get_name( Size index) const = 0;
89
91 virtual const IStruct_category* get_struct_category( Size index) const = 0;
92
94 template <class T>
95 const T* get_struct_category( Size index) const
96 {
97 const IStruct_category* ptr_struct_category = get_struct_category( index);
98 if( !ptr_struct_category)
99 return 0;
100 const T* ptr_T = static_cast<const T*>(
101 ptr_struct_category->get_interface( typename T::IID()));
102 ptr_struct_category->release();
103 return ptr_T;
104 }
105
107 virtual const IStruct_category* get_struct_category( const char* name) const = 0;
108
110 template <class T>
111 const T* get_struct_category( const char* name) const
112 {
113 const IStruct_category* ptr_struct_category = get_struct_category( name);
114 if( !ptr_struct_category)
115 return 0;
116 const T* ptr_T = static_cast<const T*>(
117 ptr_struct_category->get_interface( typename T::IID()));
118 ptr_struct_category->release();
119 return ptr_T;
120 }
121
127 virtual Sint32 set_struct_category( Size index, const IStruct_category* struct_category) = 0;
128
135 const char* name, const IStruct_category* struct_category) = 0;
136
143 const char* name, const IStruct_category* struct_category) = 0;
144};
145
149class IType : public
150 mi::base::Interface_declare<0x242af675,0xeaa2,0x48b7,0x81,0x63,0xba,0x06,0xa5,0xfb,0x68,0xf0>
151{
152public:
154 enum Kind {
193 // Undocumented, for alignment only.
194 TK_FORCE_32_BIT = 0xffffffffU
195 };
196
198 enum Modifier {
202 MK_FORCE_32_BIT // Undocumented, for alignment only.
203 };
204
206 virtual Kind get_kind() const = 0;
207
215 virtual Uint32 get_all_type_modifiers() const = 0;
216
222 virtual const IType* skip_all_type_aliases() const = 0;
223
225 virtual bool is_declarative() const = 0;
226};
227
228mi_static_assert( sizeof( IType::Kind) == sizeof( Uint32));
229mi_static_assert( sizeof( IType::Modifier) == sizeof( Uint32));
230
235class IType_alias : public
236 mi::base::Interface_declare<0x69d8c70a,0xdfda,0x4e8e,0xaa,0x09,0x12,0x1f,0xa9,0x78,0xc6,0x6a,
237 neuraylib::IType>
238{
239public:
241 static const Kind s_kind = TK_ALIAS;
242
244 virtual const IType* get_aliased_type() const = 0;
245
247 virtual Uint32 get_type_modifiers() const = 0;
248
250 virtual const char* get_symbol() const = 0;
251};
252
254class IType_atomic : public
255 mi::base::Interface_declare<0x9d5f9116,0x3896,0x45c8,0xb4,0x5a,0x8b,0x03,0x84,0x49,0x0a,0x77,
256 neuraylib::IType>
257{
258};
259
261class IType_bool : public
262 mi::base::Interface_declare<0x831d8a38,0x26d3,0x4fd2,0xa7,0xf7,0x15,0xc2,0xa5,0x20,0x76,0x6c,
263 neuraylib::IType_atomic>
264{
265public:
267 static const Kind s_kind = TK_BOOL;
268};
269
271class IType_int : public
272 mi::base::Interface_declare<0xbbad021c,0xbfe5,0x45de,0xaf,0x66,0xfd,0xe8,0x45,0xbe,0x48,0x49,
273 neuraylib::IType_atomic>
274{
275public:
277 static const Kind s_kind = TK_INT;
278};
279
281class IType_enum : public
282 mi::base::Interface_declare<0x0e5b167c,0x9c3e,0x48bf,0xb5,0xfd,0x37,0x96,0xaa,0x47,0xaf,0xd1,
283 neuraylib::IType_atomic>
284{
285public:
288 EID_USER = -1,
291 EID_FORCE_32_BIT = 0x7fffffff // Undocumented, for alignment only.
292 };
293
295 static const Kind s_kind = TK_ENUM;
296
298 virtual const char* get_symbol() const = 0;
299
301 virtual Size get_size() const = 0;
302
307 virtual const char* get_value_name( Size index) const = 0;
308
316 virtual Sint32 get_value_code( Size index, Sint32* errors = 0) const = 0;
317
322 virtual Size find_value( const char* name) const = 0;
323
328 virtual Size find_value( Sint32 code) const = 0;
329
331 virtual Predefined_id get_predefined_id() const = 0;
332
337 virtual const IAnnotation_block* get_annotations() const = 0;
338
344 virtual const IAnnotation_block* get_value_annotations( Size index) const = 0;
345};
346
348
350class IType_float : public
351 mi::base::Interface_declare<0x613711b3,0x41f2,0x44a9,0xbb,0x78,0x43,0xe2,0x41,0x64,0xb3,0xda,
352 neuraylib::IType_atomic>
353{
354public:
356 static const Kind s_kind = TK_FLOAT;
357};
358
360class IType_double : public
361 mi::base::Interface_declare<0xc381508b,0x7945,0x4c70,0x8a,0x20,0x57,0xd5,0x2b,0x36,0x35,0x40,
362 neuraylib::IType_atomic>
363{
364public:
366 static const Kind s_kind = TK_DOUBLE;
367};
368
370class IType_string : public
371 mi::base::Interface_declare<0x4b4629bc,0xa2ce,0x4008,0xba,0x76,0xf6,0x4d,0x60,0x76,0x0a,0x85,
372 neuraylib::IType_atomic>
373{
374public:
376 static const Kind s_kind = TK_STRING;
377};
378
380class IType_compound : public
381 mi::base::Interface_declare<0xc9ca497f,0xc38b,0x411f,0xa8,0x16,0xa7,0xd8,0x23,0x28,0xa5,0x40,
382 neuraylib::IType>
383{
384public:
386 virtual const IType* get_component_type( Size index) const = 0;
387
389 virtual Size get_size() const = 0;
390};
391
396class IType_vector : public
397 mi::base::Interface_declare<0x412a8a91,0x9062,0x46fd,0xaa,0xcf,0x46,0xbd,0xb3,0xde,0x5b,0x9c,
398 neuraylib::IType_compound>
399{
400public:
402 static const Kind s_kind = TK_VECTOR;
403
410 virtual const IType_atomic* get_element_type() const = 0;
411};
412
424class IType_matrix : public
425 mi::base::Interface_declare<0x6b76570e,0x51b2,0x4e9b,0x9f,0xe7,0xda,0x03,0x1c,0x37,0xbc,0x75,
426 neuraylib::IType_compound>
427{
428public:
430 static const Kind s_kind = TK_MATRIX;
431
433 virtual const IType_vector* get_element_type() const = 0;
434};
435
439class IType_color : public
440 mi::base::Interface_declare<0xedb16770,0xdf70,0x4def,0x83,0xa5,0xc4,0x4f,0xcd,0x09,0x47,0x0f,
441 neuraylib::IType_compound>
442{
443public:
445 static const Kind s_kind = TK_COLOR;
446};
447
449class IType_array : public
450 mi::base::Interface_declare<0x21ab6abe,0x0e26,0x40da,0xa1,0x98,0x42,0xc0,0x89,0x71,0x5d,0x2a,
451 neuraylib::IType_compound>
452{
453public:
455 static const Kind s_kind = TK_ARRAY;
456
458 virtual const IType* get_element_type() const = 0;
459
461 virtual bool is_immediate_sized() const = 0;
462
464 virtual Size get_size() const = 0;
465
468 virtual const char* get_deferred_size() const = 0;
469};
470
472class IType_struct : public
473 mi::base::Interface_declare<0x19566cb2,0x0b5d,0x41ca,0xa0,0x31,0x96,0xe2,0x9a,0xd4,0xc3,0x1a,
474 neuraylib::IType_compound>
475{
476public:
479 SID_USER = -1,
485 SID_FORCE_32_BIT = 0x7fffffff // Undocumented, for alignment only.
486 };
487
489 static const Kind s_kind = TK_STRUCT;
490
492 virtual const char* get_symbol() const = 0;
493
498 virtual const IType* get_field_type( Size index) const = 0;
499
504 virtual const char* get_field_name( Size index) const = 0;
505
510 virtual Size find_field( const char* name) const = 0;
511
513 virtual Predefined_id get_predefined_id() const = 0;
514
519 virtual const IAnnotation_block* get_annotations() const = 0;
520
526 virtual const IAnnotation_block* get_field_annotations( Size index) const = 0;
527
529 virtual const IStruct_category* get_struct_category() const = 0;
530};
531
533
535class IType_reference : public
536 mi::base::Interface_declare<0x3e12cdec,0xdaba,0x460c,0x9e,0x8a,0x21,0x4c,0x43,0x9a,0x1a,0x90,
537 neuraylib::IType>
538{
539};
540
542class IType_resource : public
543 mi::base::Interface_declare<0x142f5bea,0x139e,0x42e4,0xb1,0x1c,0xb3,0x4d,0xd8,0xe3,0xd9,0x8d,
544 neuraylib::IType_reference>
545{
546};
547
549class IType_texture : public
550 mi::base::Interface_declare<0x2f11253f,0xb8ac,0x4b7d,0x8d,0xd6,0x43,0x66,0xf5,0x97,0xd0,0x93,
551 neuraylib::IType_resource>
552{
553public:
555 static const Kind s_kind = TK_TEXTURE;
556
558 enum Shape {
559 TS_2D = 0,
560 TS_3D = 1,
563 TS_BSDF_DATA = 4,
565 TS_FORCE_32_BIT = 0xffffffffU // Undocumented, for alignment only.
566 };
567
569 virtual Shape get_shape() const = 0;
570};
571
572mi_static_assert( sizeof( IType_texture::Shape) == sizeof( Uint32));
573
576 mi::base::Interface_declare<0x11b80cd8,0x14aa,0x4dfa,0x8b,0xf6,0x0e,0x56,0x0f,0x10,0x9c,0x37,
577 neuraylib::IType_resource>
578{
579public:
582};
583
586 mi::base::Interface_declare<0xf061d204,0xc649,0x4a6b,0xb6,0x2d,0x67,0xe6,0x47,0x53,0xa9,0xda,
587 neuraylib::IType_resource>
588{
589public:
592};
593
595class IType_df : public
596 mi::base::Interface_declare<0xf4bcba08,0x7777,0x4662,0x8e,0x29,0x67,0xe1,0x52,0xac,0x05,0x3e,
597 neuraylib::IType_reference>
598{
599};
600
602class IType_bsdf : public
603 mi::base::Interface_declare<0x6542a02c,0xe1d2,0x485d,0x9a,0x51,0x7b,0xed,0xff,0x7f,0x24,0x7b,
604 neuraylib::IType_df>
605{
606public:
608 static const Kind s_kind = TK_BSDF;
609};
610
612class IType_hair_bsdf : public
613 mi::base::Interface_declare<0x8eac6c90,0x2b8f,0x4650,0x8b,0x93,0x88,0xe0,0x42,0xff,0x19,0x9c,
614 neuraylib::IType_df>
615{
616public:
618 static const Kind s_kind = TK_HAIR_BSDF;
619};
620
622class IType_edf : public
623 mi::base::Interface_declare<0x3e3ce697,0xa2a7,0x43ef,0xa2,0xec,0x52,0x5a,0x4c,0x27,0x8f,0xeb,
624 neuraylib::IType_df>
625{
626public:
628 static const Kind s_kind = TK_EDF;
629};
630
632class IType_vdf : public
633 mi::base::Interface_declare<0x44782b21,0x9e60,0x40b2,0xba,0xae,0x41,0x74,0xc9,0x98,0xe1,0x86,
634 neuraylib::IType_df>
635{
636public:
638 static const Kind s_kind = TK_VDF;
639};
640
644class IType_list : public
645 mi::base::Interface_declare<0x68a97390,0x22ea,0x4f03,0xa5,0xb5,0x5c,0x18,0x32,0x38,0x28,0x91>
646{
647public:
649 virtual Size get_size() const = 0;
650
652 virtual Size get_index( const char* name) const = 0;
653
655 virtual const char* get_name( Size index) const = 0;
656
658 virtual const IType* get_type( Size index) const = 0;
659
661 template <class T>
662 const T* get_type( Size index) const
663 {
664 const IType* ptr_type = get_type( index);
665 if( !ptr_type)
666 return 0;
667 const T* ptr_T = static_cast<const T*>( ptr_type->get_interface( typename T::IID()));
668 ptr_type->release();
669 return ptr_T;
670 }
671
673 virtual const IType* get_type( const char* name) const = 0;
674
676 template <class T>
677 const T* get_type( const char* name) const
678 {
679 const IType* ptr_type = get_type( name);
680 if( !ptr_type)
681 return 0;
682 const T* ptr_T = static_cast<const T*>( ptr_type->get_interface( typename T::IID()));
683 ptr_type->release();
684 return ptr_T;
685 }
686
692 virtual Sint32 set_type( Size index, const IType* type) = 0;
693
699 virtual Sint32 set_type( const char* name, const IType* type) = 0;
700
706 virtual Sint32 add_type( const char* name, const IType* type) = 0;
707};
708
714class IType_factory : public
715 mi::base::Interface_declare<0x353803c0,0x74a6,0x48ac,0xab,0xa1,0xe4,0x25,0x42,0x1d,0xa1,0xbc>
716{
717public:
719
720
722 virtual const IStruct_category* create_struct_category( const char* symbol) const = 0;
723
726
730
737 const IStruct_category_list* struct_category_list) const = 0;
738
746 virtual Sint32 compare( const IStruct_category* lhs, const IStruct_category* rhs) const = 0;
747
764 const IStruct_category_list* lhs, const IStruct_category_list* rhs) const = 0;
765
771 virtual const IString* dump( const IStruct_category* struct_category, Size depth = 0) const = 0;
772
782 virtual const IString* dump( const IStruct_category_list* list, Size depth = 0) const = 0;
783
785
787
789 virtual const IType_alias* create_alias(
790 const IType* type, Uint32 modifiers, const char* symbol) const = 0;
791
793 virtual const IType_bool* create_bool() const = 0;
794
796 virtual const IType_int* create_int() const = 0;
797
799 virtual const IType_enum* create_enum( const char* symbol) const = 0;
800
802 virtual const IType_float* create_float() const = 0;
803
805 virtual const IType_double* create_double() const = 0;
806
808 virtual const IType_string* create_string() const = 0;
809
818 const IType_atomic* element_type, Size size) const = 0;
819
827 const IType_vector* column_type, Size columns) const = 0;
828
830 virtual const IType_color* create_color() const = 0;
831
834 const IType* element_type, Size size) const = 0;
835
845 const IType* element_type, const char* size) const = 0;
846
848 virtual const IType_struct* create_struct( const char* symbol) const = 0;
849
851 virtual const IType_texture* create_texture( IType_texture::Shape shape) const = 0;
852
854 virtual const IType_light_profile* create_light_profile() const = 0;
855
858
860 virtual const IType_bsdf* create_bsdf() const = 0;
861
863 virtual const IType_hair_bsdf* create_hair_bsdf() const = 0;
864
866 virtual const IType_edf* create_edf() const = 0;
867
869 virtual const IType_vdf* create_vdf() const = 0;
870
872 virtual IType_list* create_type_list() const = 0;
873
876
879
887 virtual const IType* create_from_mdl_type_name( const char* name) const = 0;
888
896 template <class T>
897 const T* create_from_mdl_type_name( const char* name) const
898 {
899 const IType* ptr_type = create_from_mdl_type_name( name);
900 if( !ptr_type)
901 return 0;
902 const T* ptr_T = static_cast<const T*>( ptr_type->get_interface( typename T::IID()));
903 ptr_type->release();
904 return ptr_T;
905 }
906
908
910
915 virtual IType_list* clone( const IType_list* type_list) const = 0;
916
918
920
945 virtual Sint32 compare( const IType* lhs, const IType* rhs) const = 0;
946
960 virtual Sint32 compare( const IType_list* lhs, const IType_list* rhs) const = 0;
961
985 virtual Sint32 is_compatible( const IType* lhs, const IType* rhs) const = 0;
986
1000 virtual Sint32 from_same_struct_category( const IType* lhs, const IType* rhs) const = 0;
1001
1003
1004
1006
1016 virtual const IString* dump( const IType* type, Size depth = 0) const = 0;
1017
1027 virtual const IString* dump( const IType_list* list, Size depth = 0) const = 0;
1028
1030
1032
1040 virtual const IString* get_mdl_module_name( const IType* type) const = 0;
1041
1056 virtual const IString* get_mdl_type_name( const IType* type) const = 0;
1057
1059};
1060 // end group mi_neuray_mdl_types
1062
1063} // namespace neuraylib
1064
1065} // namespace mi
1066
1067#endif // MI_NEURAYLIB_ITYPE_H
A simple string class.
Definition: istring.h:22
Mixin class template for deriving new interface declarations.
Definition: interface_declare.h:43
An annotation block is an array of annotations.
Definition: iexpression.h:575
An ordered collection of struct categories identified by name or index.
Definition: itype.h:79
virtual const IStruct_category * get_struct_category(const char *name) const =0
Returns the struct category for name, or NULL if there is no such struct category.
virtual Sint32 set_struct_category(const char *name, const IStruct_category *struct_category)=0
Sets a struct category identified by name.
virtual const IStruct_category * get_struct_category(Size index) const =0
Returns the struct category for index, or NULL if there is no such struct category.
virtual Sint32 set_struct_category(Size index, const IStruct_category *struct_category)=0
Sets a struct category at a given index.
const T * get_struct_category(Size index) const
Returns the struct category for index, or NULL if there is no such struct category.
Definition: itype.h:95
const T * get_struct_category(const char *name) const
Returns the struct category for name, or NULL if there is no such struct category.
Definition: itype.h:111
virtual const char * get_name(Size index) const =0
Returns the name for the given index, or NULL if there is no such struct category.
virtual Size get_size() const =0
Returns the number of elements.
virtual Sint32 add_struct_category(const char *name, const IStruct_category *struct_category)=0
Adds a struct category at the end of the list.
virtual Size get_index(const char *name) const =0
Returns the index for the given name, or -1 if there is no such struct category.
Represents the optional struct category for struct types.
Definition: itype.h:49
virtual Predefined_id get_predefined_id() const =0
If this struct category is a predefined one, return its ID, else CID_USER.
Predefined_id
Identifiers of struct categories.
Definition: itype.h:52
@ CID_USER
A user-defined struct category.
Definition: itype.h:53
@ CID_MATERIAL_CATEGORY
The "::material_category" struct category.
Definition: itype.h:54
virtual const char * get_symbol() const =0
Returns the qualified name of this struct category.
virtual const IAnnotation_block * get_annotations() const =0
Returns the annotations of the struct category type.
The type of kind alias.
Definition: itype.h:238
virtual const IType * get_aliased_type() const =0
Returns the type aliased by this type.
virtual const char * get_symbol() const =0
Returns the qualified name of the type, or NULL if no such name exists.
static const Kind s_kind
The kind of this subclass.
Definition: itype.h:241
virtual Uint32 get_type_modifiers() const =0
Returns the modifiers of this type.
The type of kind array.
Definition: itype.h:452
virtual bool is_immediate_sized() const =0
Indicates whether the array is immediate-sized or deferred-sized.
static const Kind s_kind
The kind of this subclass.
Definition: itype.h:455
virtual const char * get_deferred_size() const =0
Returns the abstract size of the array in case of deferred-sized arrays, and NULL otherwise.
virtual const IType * get_element_type() const =0
Returns the type of the array elements.
virtual Size get_size() const =0
Returns the size of the array in case of immediate-sized arrays, and -1 otherwise.
An atomic type.
Definition: itype.h:257
The type of kind bool.
Definition: itype.h:264
static const Kind s_kind
The kind of this subclass.
Definition: itype.h:267
The type of kind bsdf_measurement.
Definition: itype.h:588
static const Kind s_kind
The kind of this subclass.
Definition: itype.h:591
The type of kind bsdf.
Definition: itype.h:605
static const Kind s_kind
The kind of this subclass.
Definition: itype.h:608
The type of kind color.
Definition: itype.h:442
static const Kind s_kind
The kind of this subclass.
Definition: itype.h:445
A compound type.
Definition: itype.h:383
virtual Size get_size() const =0
Returns the number of components.
virtual const IType * get_component_type(Size index) const =0
Returns the component type at index.
The type of distribution functions.
Definition: itype.h:598
The type of kind double.
Definition: itype.h:363
static const Kind s_kind
The kind of this subclass.
Definition: itype.h:366
The type of kind edf.
Definition: itype.h:625
static const Kind s_kind
The kind of this subclass.
Definition: itype.h:628
A type of kind enum.
Definition: itype.h:284
virtual const IAnnotation_block * get_annotations() const =0
Returns the annotations of the enum type.
static const Kind s_kind
The kind of this subclass.
Definition: itype.h:295
virtual const IAnnotation_block * get_value_annotations(Size index) const =0
Returns the annotations of a value.
virtual const char * get_symbol() const =0
Returns the qualified name of this enum type.
virtual Size find_value(Sint32 code) const =0
Returns the index of a value in linear time.
virtual Predefined_id get_predefined_id() const =0
If this enum is a predefined one, return its ID, else EID_USER.
Predefined_id
IDs to distinguish predefined enum types.
Definition: itype.h:287
@ EID_USER
A user-defined enum type.
Definition: itype.h:288
@ EID_TEX_GAMMA_MODE
The "::tex::gamma_mode" enum type.
Definition: itype.h:289
@ EID_INTENSITY_MODE
The "::intensity_mode" enum type.
Definition: itype.h:290
virtual const char * get_value_name(Size index) const =0
Returns the name of a value.
virtual Size get_size() const =0
Returns the number of values.
virtual Size find_value(const char *name) const =0
Returns the index of a value in linear time.
virtual Sint32 get_value_code(Size index, Sint32 *errors=0) const =0
Returns the code of a value.
The interface for creating types.
Definition: itype.h:716
virtual const IString * get_mdl_type_name(const IType *type) const =0
Returns the MDL type name of a type.
virtual Sint32 compare(const IStruct_category_list *lhs, const IStruct_category_list *rhs) const =0
Compares two instances of mi::neuraylib::IStruct_category_list.
virtual const IString * dump(const IStruct_category *struct_category, Size depth=0) const =0
Returns a textual representation of a struct category.
virtual const IType_alias * create_alias(const IType *type, Uint32 modifiers, const char *symbol) const =0
Creates a new instance of the type alias.
virtual IType_list * create_type_list() const =0
Creates a new type list.
virtual const IType_vector * create_vector(const IType_atomic *element_type, Size size) const =0
Creates a new instance of a vector type.
virtual const IType_enum * get_predefined_enum(IType_enum::Predefined_id id) const =0
Returns a registered enum type, or NULL if id is unknown.
virtual const IType_matrix * create_matrix(const IType_vector *column_type, Size columns) const =0
Creates a new instance of a matrix type.
virtual const IType_hair_bsdf * create_hair_bsdf() const =0
Creates a new instance of the type hair_bsdf.
virtual const IStruct_category * create_struct_category(const char *symbol) const =0
Returns a registered struct category, or NULL if symbol is invalid or unknown.
const T * create_from_mdl_type_name(const char *name) const
Creates a type based on its MDL type name.
Definition: itype.h:897
virtual const IStruct_category * get_predefined_struct_category(IStruct_category::Predefined_id id) const =0
Returns a registered struct category, or NULL if id is unknown.
virtual const IType_enum * create_enum(const char *symbol) const =0
Returns a registered enum type, or NULL if symbol is invalid or unknown.
virtual const IType_int * create_int() const =0
Creates a new instance of the type int.
virtual const IType_edf * create_edf() const =0
Creates a new instance of the type edf.
virtual const IType_bsdf * create_bsdf() const =0
Creates a new instance of the type bsdf.
virtual const IType_bool * create_bool() const =0
Creates a new instance of the type boolean.
virtual Sint32 compare(const IStruct_category *lhs, const IStruct_category *rhs) const =0
Compares two instances of mi::neuraylib::IStruct_category.
virtual const IType_string * create_string() const =0
Creates a new instance of the string type.
virtual const IType_light_profile * create_light_profile() const =0
Creates a new instance of the type light_profile.
virtual const IType_float * create_float() const =0
Creates a new instance of the float type.
virtual const IType_struct * get_predefined_struct(IType_struct::Predefined_id id) const =0
Returns a registered struct type, or NULL if id is unknown.
virtual const IType_struct * create_struct(const char *symbol) const =0
Returns a registered struct type, or NULL if symbol is invalid or unknown.
virtual IType_list * clone(const IType_list *type_list) const =0
Clones the given type list.
virtual Sint32 is_compatible(const IType *lhs, const IType *rhs) const =0
Checks whether two types are (cast-)compatible, i.e.
virtual Sint32 compare(const IType *lhs, const IType *rhs) const =0
Compares two instances of mi::neuraylib::IType.
virtual const IType_texture * create_texture(IType_texture::Shape shape) const =0
Creates a new instance of the type texture.
virtual const IType_array * create_deferred_sized_array(const IType *element_type, const char *size) const =0
Creates a new instance of a deferred-sized array type.
virtual const IType_double * create_double() const =0
Creates a new instance of the double type.
virtual const IType * create_from_mdl_type_name(const char *name) const =0
Creates a type based on its MDL type name.
virtual const IString * dump(const IType_list *list, Size depth=0) const =0
Returns a textual representation of a type list.
virtual Sint32 from_same_struct_category(const IType *lhs, const IType *rhs) const =0
Checks whether two types are from the same struct category, i.e., lhs can be decl-cast to rhs.
virtual const IString * get_mdl_module_name(const IType *type) const =0
Returns the MDL module name of the module which defines type.
virtual const IType_color * create_color() const =0
Creates a new instance of the type color.
virtual const IString * dump(const IStruct_category_list *list, Size depth=0) const =0
Returns a textual representation of a struct category list.
virtual const IString * dump(const IType *type, Size depth=0) const =0
Returns a textual representation of a type.
virtual const IType_bsdf_measurement * create_bsdf_measurement() const =0
Creates a new instance of the type bsdf_measurement.
virtual const IType_vdf * create_vdf() const =0
Creates a new instance of the type vdf.
virtual const IType_array * create_immediate_sized_array(const IType *element_type, Size size) const =0
Creates a new instance of an immediate-sized array type.
virtual IStruct_category_list * create_struct_category_list() const =0
Creates a new struct category list.
virtual Sint32 compare(const IType_list *lhs, const IType_list *rhs) const =0
Compares two instances of mi::neuraylib::IType_list.
virtual IStruct_category_list * clone(const IStruct_category_list *struct_category_list) const =0
Clones the given struct category list.
The type of kind float.
Definition: itype.h:353
static const Kind s_kind
The kind of this subclass.
Definition: itype.h:356
The type of kind bsdf.
Definition: itype.h:615
static const Kind s_kind
The kind of this subclass.
Definition: itype.h:618
The type of kind int.
Definition: itype.h:274
static const Kind s_kind
The kind of this subclass.
Definition: itype.h:277
The type of kind light_profile.
Definition: itype.h:578
static const Kind s_kind
The kind of this subclass.
Definition: itype.h:581
An ordered collection of types identified by name or index.
Definition: itype.h:646
virtual const IType * get_type(Size index) const =0
Returns the type for index, or NULL if there is no such type.
virtual const char * get_name(Size index) const =0
Returns the name for the given index, or NULL if there is no such type.
virtual Sint32 set_type(Size index, const IType *type)=0
Sets a type at a given index.
const T * get_type(const char *name) const
Returns the type for name, or NULL if there is no such type.
Definition: itype.h:677
virtual const IType * get_type(const char *name) const =0
Returns the type for name, or NULL if there is no such type.
virtual Sint32 add_type(const char *name, const IType *type)=0
Adds a type at the end of the list.
virtual Sint32 set_type(const char *name, const IType *type)=0
Sets a type identified by name.
virtual Size get_size() const =0
Returns the number of elements.
const T * get_type(Size index) const
Returns the type for index, or NULL if there is no such type.
Definition: itype.h:662
virtual Size get_index(const char *name) const =0
Returns the index for the given name, or -1 if there is no such type.
The type of kind matrix.
Definition: itype.h:427
virtual const IType_vector * get_element_type() const =0
Returns the type of the matrix elements, i.e., the type of a column vector.
static const Kind s_kind
The kind of this subclass.
Definition: itype.h:430
The reference types.
Definition: itype.h:538
A string valued resource type.
Definition: itype.h:545
The type of kind string.
Definition: itype.h:373
static const Kind s_kind
The kind of this subclass.
Definition: itype.h:376
The type of kind struct.
Definition: itype.h:475
virtual const IType * get_field_type(Size index) const =0
Returns a field type.
Predefined_id
IDs to distinguish predefined struct types.
Definition: itype.h:478
@ SID_MATERIAL_SURFACE
The "::material_surface" struct type.
Definition: itype.h:481
@ SID_MATERIAL_GEOMETRY
The "::material_geometry" struct type.
Definition: itype.h:483
@ SID_MATERIAL_VOLUME
The "::material_volume" struct type.
Definition: itype.h:482
@ SID_USER
A user-defined struct type.
Definition: itype.h:479
@ SID_MATERIAL
The "::material" struct type.
Definition: itype.h:484
@ SID_MATERIAL_EMISSION
The "::material_emission" struct type.
Definition: itype.h:480
virtual const IStruct_category * get_struct_category() const =0
Returns the corresponding struct category (or NULL if there is none).
virtual const char * get_symbol() const =0
Returns the qualified name of the struct type.
virtual Size find_field(const char *name) const =0
Returns the index of a field in linear time.
virtual const IAnnotation_block * get_field_annotations(Size index) const =0
Returns the annotations of a field.
static const Kind s_kind
The kind of this subclass.
Definition: itype.h:489
virtual const IAnnotation_block * get_annotations() const =0
Returns the annotations of the struct type.
virtual Predefined_id get_predefined_id() const =0
If this struct is a predefined one, return its ID, else SID_USER.
virtual const char * get_field_name(Size index) const =0
Returns a field name.
The type of kind texture.
Definition: itype.h:552
static const Kind s_kind
The kind of this subclass.
Definition: itype.h:555
Shape
The possible texture shapes.
Definition: itype.h:558
@ TS_CUBE
Cube map texture.
Definition: itype.h:561
@ TS_PTEX
PTEX texture.
Definition: itype.h:562
@ TS_3D
Three-dimensional texture.
Definition: itype.h:560
@ TS_BSDF_DATA
Three-dimensional texture representing a BSDF data table.
Definition: itype.h:563
@ TS_2D
Two-dimensional texture.
Definition: itype.h:559
virtual Shape get_shape() const =0
Returns the texture type.
The type of kind vdf.
Definition: itype.h:635
static const Kind s_kind
The kind of this subclass.
Definition: itype.h:638
The type of kind vector.
Definition: itype.h:399
static const Kind s_kind
The kind of this subclass.
Definition: itype.h:402
virtual const IType_atomic * get_element_type() const =0
Returns the type of the vector elements.
The interface to MDL types.
Definition: itype.h:151
Kind
The possible kinds of types.
Definition: itype.h:154
@ TK_TEXTURE
A texture type. See mi::neuraylib::IType_texture.
Definition: itype.h:180
@ TK_MATRIX
A matrix type. See mi::neuraylib::IType_matrix.
Definition: itype.h:172
@ TK_BOOL
The boolean type. See mi::neuraylib::IType_bool.
Definition: itype.h:158
@ TK_COLOR
The color type. See mi::neuraylib::IType_color.
Definition: itype.h:174
@ TK_HAIR_BSDF
The hair_bsdf type. See mi::neuraylib::IType_hair_bsdf.
Definition: itype.h:188
@ TK_ALIAS
An alias for another type, aka typedef. See mi::neuraylib::IType_alias.
Definition: itype.h:156
@ TK_VDF
The vdf type. See mi::neuraylib::IType_vdf.
Definition: itype.h:192
@ TK_VECTOR
A vector type. See mi::neuraylib::IType_vector.
Definition: itype.h:170
@ TK_BSDF_MEASUREMENT
The bsdf_measurement type. See mi::neuraylib::IType_bsdf_measurement.
Definition: itype.h:184
@ TK_ARRAY
An array type. See mi::neuraylib::IType_array.
Definition: itype.h:176
@ TK_STRING
The string type. See mi::neuraylib::IType_string.
Definition: itype.h:168
@ TK_STRUCT
A struct type. See mi::neuraylib::IType_struct.
Definition: itype.h:178
@ TK_INT
The integer type. See mi::neuraylib::IType_int.
Definition: itype.h:160
@ TK_LIGHT_PROFILE
The light_profile type. See mi::neuraylib::IType_light_profile.
Definition: itype.h:182
@ TK_BSDF
The bsdf type. See mi::neuraylib::IType_bsdf.
Definition: itype.h:186
@ TK_EDF
The edf type. See mi::neuraylib::IType_edf.
Definition: itype.h:190
@ TK_ENUM
An enum type. See mi::neuraylib::IType_enum.
Definition: itype.h:162
@ TK_DOUBLE
The double type. See mi::neuraylib::IType_double.
Definition: itype.h:166
@ TK_FLOAT
The float type. See mi::neuraylib::IType_float.
Definition: itype.h:164
virtual const IType * skip_all_type_aliases() const =0
Returns the base type.
virtual Uint32 get_all_type_modifiers() const =0
Returns all type modifiers of a type.
Modifier
The possible kinds of type modifiers.
Definition: itype.h:198
@ MK_UNIFORM
A uniform type.
Definition: itype.h:200
@ MK_NONE
No type modifier (mutable, auto-typed).
Definition: itype.h:199
@ MK_VARYING
A varying type.
Definition: itype.h:201
virtual bool is_declarative() const =0
Indicates whether this type is declarative or not.
virtual Kind get_kind() const =0
Returns the kind of type.
#define mi_static_assert(expr)
Compile time assertion that raises a compilation error if the constant expression expr evaluates to f...
Definition: assert.h:58
virtual const IInterface * get_interface(const Uuid &interface_id) const =0
Acquires a const interface from another.
virtual Uint32 release() const =0
Decrements the reference count.
unsigned int Uint32
32-bit unsigned integer.
Definition: types.h:49
Uint64 Size
Unsigned integral type that is large enough to hold the size of all types.
Definition: types.h:112
signed int Sint32
32-bit signed integer.
Definition: types.h:46
Mixin class template for deriving new interface declarations.
Common namespace for APIs of NVIDIA Advanced Rendering Center GmbH.
Definition: example_derivatives.dox:5