NDEVR
API Documentation
Material.h
1/*--------------------------------------------------------------------------------------------
2Copyright (c) 2019, NDEVR LLC
3tyler.parke@ndevr.org
4 __ __ ____ _____ __ __ _______
5 | \ | | | __ \ | ___|\ \ / / | __ \
6 | \ | | | | \ \ | |___ \ \ / / | |__) |
7 | . \| | | |__/ / | |___ \ V / | _ /
8 | |\ |_|_____/__|_____|___\_/____| | \ \
9 |__| \__________________________________| \__\
10
11Subject to the terms of the Enterprise+ Agreement, NDEVR hereby grants
12Licensee a limited, non-exclusive, non-transferable, royalty-free license
13(without the right to sublicense) to use the API solely for the purpose of
14Licensee's internal development efforts to develop applications for which
15the API was provided.
16
17The above copyright notice and this permission notice shall be included in all
18copies or substantial portions of the Software.
19
20THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
21INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
22PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
23FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
24OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25DEALINGS IN THE SOFTWARE.
26
27Library: Design
28File: Material
29Included in API: True
30Author(s): Tyler Parke
31 *-----------------------------------------------------------------------------------------**/
32#pragma once
33
34#include <NDEVR/DesignObject.h>
35#include <NDEVR/Table.h>
36#include <NDEVR/Pointer.h>
37#include <NDEVR/BaseValues.h>
38#include <NDEVR/VectorFunctions.h>
39namespace NDEVR
40{
42 class Model;
43 class ImageFactory;
44
84 template<> struct PropertySpec<NDPM::two_sided> { using type = bool; };
85 template<> struct PropertySpec<NDPM::opacity> { using type = fltp04; };
86 template<> struct PropertySpec<NDPM::bump_scale> { using type = fltp04; };
87 template<> struct PropertySpec<NDPM::shininess> { using type = fltp04; };
88 template<> struct PropertySpec<NDPM::reflectivity> { using type = fltp04; };
89 template<> struct PropertySpec<NDPM::wireframe> { using type = bool; };
90 template<> struct PropertySpec<NDPM::smooth_normals> { using type = bool; };
91 template<> struct PropertySpec<NDPM::pixel_thickness> { using type = fltp04; };
92 template<> struct PropertySpec<NDPM::shading_model> { using type = uint04; };
93 template<> struct PropertySpec<NDPM::tile_texture_mode> { using type = Vector<3, uint01>; };
94 template<> struct PropertySpec<NDPM::gridline_spacing_mode> { using type = uint01; };
95 template<> struct PropertySpec<NDPM::color_value_palette> { using type = Buffer<RGBColor>; };
96 template<> struct PropertySpec<NDPM::grid_line_spacing> { using type = Vector<4, fltp08>; };
97 template<> struct PropertySpec<NDPM::draw_by_property_channel> { using type = StringView; };
98 template<> struct PropertySpec<NDPM::extra_property_value_min> { using type = fltp08; };
99 template<> struct PropertySpec<NDPM::extra_property_value_mid> { using type = fltp08; };
100 template<> struct PropertySpec<NDPM::extra_property_value_max> { using type = fltp08; };
101 template<> struct PropertySpec<NDPM::override_parent_material> { using type = bool; };
102 template<> struct PropertySpec<NDPM::override_camera_material> { using type = bool; };
103 template<> struct PropertySpec<NDPM::use_normal_for_tex_coord> { using type = bool; };
104 template<> struct PropertySpec<NDPM::model_space_material> { using type = bool; };
105 template<> struct PropertySpec<NDPM::texture_coord_mode> { using type = uint01; };
106 template<> struct PropertySpec<NDPM::ignore_depth> { using type = bool; };
107 template<> struct PropertySpec<NDPM::write_to_depth> { using type = bool; };
108 template<> struct PropertySpec<NDPM::depth_bias> { using type = fltp04; };
109 template<> struct PropertySpec<NDPM::fade_render_distance> { using type = fltp08; };
110 template<> struct PropertySpec<NDPM::max_render_distance> { using type = fltp08; };
111 template<> struct PropertySpec<NDPM::ignore_color_channel_lighting> { using type = bool; };
112
119 template<>
121 {
122 public:
129 static constexpr TableColumn* column(const DesignInfo* object, NDPM property)
130 {
131 return object->m_base->material_properties[eint01(property)];
132 }
133
138 static constexpr uint04 index(const DesignInfo* object, NDPM)
139 {
140 return object->m_design_index;
141 }
142 };
143
152 class NDEVR_DESIGN_API Material : public DesignObject
153 {
154 public:
180
198
209
221
234 public:
235 Material() = default;
236
243
248 Material(DesignObjectBase* property_table);
249
254 explicit Material(const DesignObject& obj);
255
260 bool hasActiveImage() const;
261
266 bool hasImageData() const;
267
273
279
284 bool hasOpacity() const;
285
290
297
303
309
315
321
326 bool validate() const;
327
332 void colorBy(const DesignParameterAccumulator& accumulator);
333
340
345 void copyFrom(const Material& mesh);
346
353 void combineFrom(const Material& mesh);
354
360
366
372 void setUVImage(UVType uv_index, const StringView& type)
373 {
374 m_base->uv_image_file[cast<uint01>(uv_index)]->set(m_design_index, type);
375 }
376
381 template<class t_type>
382 void setUVColor(const t_type& type)
383 {
384 for (uint01 i = 0; i < cast<uint01>(UVType::e_uv_size); i++)
386 }
387
393 template<class t_type>
394 void setUVColor(UVType uv_index, const t_type& type)
395 {
396 m_base->uv_color[cast<uint01>(uv_index)]->set(m_design_index, type);
397 }
398
406 template<class t_type>
407 void updateUVColor(const t_type& type, const void* lock_ptr = nullptr)
408 {
409 for (uint04 i = 0; i < cast<uint04>(UVType::e_uv_size); i++)
410 updateUVColor(cast<UVType>(i), type, lock_ptr);
411 }
412
421 template<class t_type>
422 void updateUVColor(UVType uv_index, const t_type& value, const void* lock_ptr = nullptr)
423 {
424 if (getUVColor(uv_index) != value)
425 {
426 WLock lock(lock_ptr);
427 m_base->uv_color[cast<uint01>(uv_index)]->set(m_design_index, value);
429 }
430 }
431
437 template<class t_type>
438 void setUVIntensity(UVType uv_index, const t_type& type)
439 {
440 m_base->uv_intensity[cast<uint01>(uv_index)]->set(m_design_index, type);
441 }
442
448 template<class t_type>
449 void setUVLayer(UVType uv_index, const t_type& type)
450 {
451 m_base->uv_layer[cast<uint01>(uv_index)]->set(m_design_index, type);
452 }
453
459 void setUVMode(UVType uv_index, const UVMode& type);
460
466 StringView getUVImage(UVType uv_index) const;
467
473 RGBColor getUVColor(UVType uv_index) const;
474
480 fltp04 getUVIntensity(UVType uv_index) const;
481
487 uint04 getUVLayer(UVType uv_index) const;
488
494 UVMode getUVMode(UVType uv_index) const;
495
502
509
514
521
528
535
542
548
556 [[nodiscard]] RGBColor constantColor(Model model, RGBColor background_color = RGBColor(255, 255, 255), UVType type = UVType::e_KD) const;
557
563
569
575 };
576
583 template<>
584 struct ObjectInfo<Material, false, false>
585 {
586 static const uint01 Dimensions = 0;
587 static const bool Vector = false;
588 static const bool Buffer = false;
589 static const bool Primitive = true;
590 static const bool Pointer = false;
591 static const bool Unsigned = false;
592 static const bool Float = false;
593 static const bool Integer = false;
594 static const bool Number = false;
595 static const bool Enum = false;
596 static const bool String = false;
597 static const bool Color = false;
598 static const bool Boolean = false;
599
605 };
606 template class NDEVR_DESIGN_API StringStream<Material::GridLineMode>;
607 template class NDEVR_DESIGN_API StringStream<Material::TextureCoordMode>;
608 template class NDEVR_DESIGN_API StringStream<Material::TileTextureMode>;
609 template class NDEVR_DESIGN_API StringStream<Material::UVMode>;
610 template class NDEVR_DESIGN_API StringStream<Material::ShadingModel>;
611 template class NDEVR_DESIGN_API StringStream<NDPM>;
612}
613
619namespace std//Define things to allow use within std libs
620{
621 template <>
622 struct hash<Material>
623 {
629 std::size_t operator()(const Material& d) const noexcept
630 {
631 UUID s = d.get<NDPO::guid>();
632 std::size_t value = 0;
633 for (uint01 i = 0; i < 8; i++)
634 value = value * 256 + (s[i + 0U] ^ s[i + 8U]);
635 return value;
636 }
637 };
638};
639
640
641
The equivelent of std::vector but with a bit more control.
Definition Buffer.hpp:58
Base information class for all design objects in the NDEVR property database.
uint04 m_design_index
Index of the parent design that owns this object.
DesignObjectBase * m_base
Pointer to the owning DesignObjectBase property database.
Provides the underlying data storage for the NDEVR Scene Model hierarchy.
DesignObject()=default
Creates an "invalid" design object.
uint04 index() const
Returns the primary row index of this object within the DesignObjectBase property table.
Searches a model hierarchy and pulls all parameter data based on the AccumationMode settings.
The core class for reading/writing and storing images in an optimized way.
Container responsible for storing and setting the appearance of a Model or Geometry within the NDEVR ...
Definition Material.h:153
void setUVLayer(UVType uv_index, const t_type &type)
Sets the layer index for the specified UV channel.
Definition Material.h:449
bool hasPerVertexColoring(UVType type=UVType::e_KD) const
Checks whether per-vertex coloring is active for the specified UV type.
void setTileTextureMode(const Vector< 3, TileTextureMode > &modes)
Sets the texture tiling mode for each of the three axes.
bool hasUVLayer(UVType index) const
Checks whether the specified UV channel has a layer index assigned.
void colorBy(const DesignParameterAccumulator &accumulator)
Applies color-by-property rendering using the given parameter accumulator.
bool hasModelDependentColor(UVType type) const
Checks whether the color for the specified UV type depends on the owning model.
RGBColor convertValueToColor(fltp08 value) const
Converts a scalar value to an RGBColor using this material's color palette and range.
uint04 getUVLayer(UVType uv_index) const
Retrieves the layer index for the specified UV channel.
TranslatedString displayName() const
Returns a user-facing display name for this material.
bool hasModelDependentColor() const
Checks whether any UV type has model-dependent coloring.
fltp04 getUVIntensity(UVType uv_index) const
Retrieves the intensity value for the specified UV channel.
void ensureImageDataLoaded(ImageFactory &factory)
Ensures that any referenced image data is loaded into memory using the provided factory.
PrimitiveProperty defaultRenderProperty() const
Returns the default primitive render property for this material.
Buffer< RGBColor > palette() const
Retrieves the color palette used for value-based coloring.
void setUVColor(const t_type &type)
Sets the color for all UV channels to the same value.
Definition Material.h:382
ShadingModel
Enumerates the available shading models for material rendering.
Definition Material.h:162
@ e_number_of_shading_models
Sentinel value indicating the total number of shading models.
Definition Material.h:178
@ e_cook_torrance
Cook-Torrance shading model. Special shader for metallic surfaces.
Definition Material.h:170
@ e_flat
Flat shading. Shading is done on per-face base, diffuse only. Also known as 'faceted shading'.
Definition Material.h:163
@ e_background_gradiant
Background gradient shading.
Definition Material.h:176
@ e_skybox
Skybox cubemap shading.
Definition Material.h:177
@ e_ibl
Image-based lighting model.
Definition Material.h:174
@ e_no_shading
No shading applied. Constant light influence of 1.0.
Definition Material.h:171
@ e_phong
Phong shading with per-pixel lighting.
Definition Material.h:165
@ e_fresnel
Fresnel-based shading model.
Definition Material.h:172
@ e_gouraud
Simple Gouraud shading with per-vertex color interpolation.
Definition Material.h:164
@ e_pbr
Physically-based rendering model.
Definition Material.h:173
@ e_minnaert
Minnaert shading per pixel. Extension to Lambertian shading accounting for material "darkness".
Definition Material.h:169
@ e_water
Specialized water surface shading.
Definition Material.h:175
@ e_oren_nayar
Oren-Nayar shading per pixel. Extension to Lambertian shading accounting for surface roughness.
Definition Material.h:168
@ e_phong_blinn
Phong-Blinn shading model.
Definition Material.h:166
@ e_toon
Toon shading per pixel. Also known as 'comic' shader.
Definition Material.h:167
RGBColor constantColor(Model model, RGBColor background_color=RGBColor(255, 255, 255), UVType type=UVType::e_KD) const
Computes a constant representative color for this material given a model and background.
bool hasUVColor(UVType index) const
Checks whether the specified UV channel has a color assigned.
StringView getUVImage(UVType uv_index) const
Retrieves the image file path or identifier for the specified UV channel.
TextureCoordMode getTextureCoordinateMode() const
Retrieves the current texture coordinate generation mode.
void cleanupMaterial()
Cleans up and resets material properties to a minimal valid state.
TranslatedString appearanceName() const
Returns the appearance-specific name for this material.
Vector< 3, TileTextureMode > getTileTextureMode() const
Retrieves the texture tiling mode for each of the three axes.
void updateModifiedTime(const Time &time=Time::SystemTime())
Updates the material's modification timestamp.
bool hasActiveImage() const
Checks whether this material has an active (non-empty, in-use) image texture.
bool validate() const
Validates that this material's properties are in a consistent and usable state.
void combineFrom(const Material &mesh)
Combines material properties from another Material into this one.
void copyFrom(const Material &mesh)
Copies all material properties from another Material, replacing current values.
UVMode getUVMode(UVType uv_index) const
Retrieves the UV mapping mode for the specified UV channel.
void setPalette(const Buffer< RGBColor > &palette)
Sets the color palette used for value-based coloring.
GridLineMode
Defines modes for gridline rendering on material surfaces.
Definition Material.h:203
@ e_global_linework
Gridlines rendered in global/world coordinate space.
Definition Material.h:205
@ e_invalid
Invalid/unset gridline mode.
Definition Material.h:207
@ e_modelspace_linework
Gridlines rendered in model-local coordinate space.
Definition Material.h:206
@ e_no_linework
No gridlines rendered.
Definition Material.h:204
void setupAsDefault()
Initializes this material with default property values.
void setUVImage(UVType uv_index, const StringView &type)
Sets the image file path or identifier for the specified UV channel.
Definition Material.h:372
bool hasOpacity() const
Checks whether this material has a non-default opacity value set.
UVMode
Defines UV mapping modes that control how texture colors are determined for surfaces.
Definition Material.h:185
@ e_scaled_channel
Color channel values are scaled by a property range.
Definition Material.h:189
@ e_color_channel
Color is taken from the per-vertex color channel.
Definition Material.h:188
@ e_none
No UV mapping applied.
Definition Material.h:186
@ e_background_contrast_plus_solid
Combines background contrast with a solid color.
Definition Material.h:193
@ e_solid_color
A single solid color is used.
Definition Material.h:187
@ e_background_contrast
Uses a color that contrasts with the background.
Definition Material.h:192
@ e_highlight
Uses the highlight/selection color.
Definition Material.h:196
@ e_color_by_layer
Color is determined by the layer assignment.
Definition Material.h:195
@ e_background
Uses the background color.
Definition Material.h:191
@ e_color_by_model
Color is determined by the owning model.
Definition Material.h:190
@ e_image
Color is sampled from a texture image.
Definition Material.h:194
void updateUVColor(const t_type &type, const void *lock_ptr=nullptr)
Updates the color for all UV channels, only writing if the value has changed.
Definition Material.h:407
bool hasImageData() const
Checks whether this material has any image data loaded or referenced.
TextureCoordMode
Defines how texture coordinates are generated or interpreted for a material.
Definition Material.h:226
@ e_project_box
Generate texture coordinates via box/cube projection.
Definition Material.h:231
@ e_project_sphere
Generate texture coordinates via spherical projection.
Definition Material.h:229
@ e_use_mat_coordinates
Use the material's own texture coordinate definitions.
Definition Material.h:228
@ e_project_plane
Generate texture coordinates via planar projection.
Definition Material.h:232
@ e_tex_coord_undefined
Texture coordinate mode is undefined/unset.
Definition Material.h:227
@ e_project_cylinder
Generate texture coordinates via cylindrical projection.
Definition Material.h:230
bool hasUVIntensity(UVType index) const
Checks whether the specified UV channel has a non-default intensity value.
void setUVMode(UVType uv_index, const UVMode &type)
Sets the UV mapping mode for the specified UV channel.
Material(DesignObjectBase *property_table)
Constructs a new Material and allocates a row in the given property table.
bool hasActiveUVImage(UVType index) const
Checks whether the specified UV channel has an active image texture assigned.
Material(uint04 index, DesignObjectBase *property_table)
Constructs a Material referencing a specific row in the given property table.
void updateUVColor(UVType uv_index, const t_type &value, const void *lock_ptr=nullptr)
Updates the color for a specific UV channel, only writing if the value has changed.
Definition Material.h:422
void setUVColor(UVType uv_index, const t_type &type)
Sets the color for a specific UV channel.
Definition Material.h:394
RGBColor getUVColor(UVType uv_index) const
Retrieves the color assigned to the specified UV channel.
void setUVIntensity(UVType uv_index, const t_type &type)
Sets the intensity value for the specified UV channel.
Definition Material.h:438
Material(const DesignObject &obj)
Constructs a Material from a generic DesignObject reference.
ShadingModel getShadingModel() const
Retrieves the current shading model for this material.
bool isSupportedByShadingModel(UVType type) const
Checks whether the given UV type is supported by the current shading model.
TileTextureMode
Defines how texture coordinates outside the [0,1] range are handled per axis.
Definition Material.h:214
@ e_tile_texture_wrap
Texture coordinate wraps: u|v is translated to u%1|v%1.
Definition Material.h:216
@ e_tile_tex_undefined
Tiling mode is undefined/unset.
Definition Material.h:215
@ e_tile_texture_mirror
Texture coordinate mirrors: u%1|v%1 if (u-(u%1))%2 is zero, otherwise 1-(u%1)|1-(v%1).
Definition Material.h:219
@ e_tile_texture_decal
Texture is not applied to pixels with coordinates outside [0,1].
Definition Material.h:218
@ e_tile_texture_clamp
Texture coordinates outside [0,1] are clamped to the nearest valid value.
Definition Material.h:217
A core class that represents a node on model hierarchy.
Definition Model.h:292
static constexpr TableColumn * column(const DesignInfo *object, NDPM property)
Retrieves the TableColumn pointer for the given material property.
Definition Material.h:129
static constexpr uint04 index(const DesignInfo *object, NDPM)
Retrieves the row index for a material property lookup.
Definition Material.h:138
Provides access to the TableColumn and row index for a given property enum value.
Represents a color in the RGB space with optional alpha transparency.
Definition RGBColor.h:57
The core String View class for the NDEVR API.
Definition StringView.h:58
A virtual storage type that is used with Table class to store data where the actual mechanism for sto...
Definition TableColumn.h:86
Represents a timestamp with utilities for manipulation and conversion.
Definition Time.h:62
static Time SystemTime()
Retrieves the current system time which is a combination of std::chrono::steady_clock to ensure smoot...
Any text displayed to the user should be defined as a TranslatedString which allows the program to lo...
A universally unique identifier (UUID) is a 128-bit number used to identify information in computer s...
Definition UUID.h:61
A fixed-size array with N dimensions used as the basis for geometric and mathematical types.
Definition Vector.hpp:62
Used to lock a particular variable for writing.
Definition RWLock.h:272
The primary namespace for the NDEVR SDK.
NDPM
NDPM - NDEVR Design Property Material: Values stored in the material database.
Definition Material.h:53
@ color_value_palette
Color palette used for value-based coloring.
Definition Material.h:66
@ smooth_normals
Whether vertex normals are smoothed across faces.
Definition Material.h:61
@ pixel_thickness
Thickness in pixels for line and point rendering.
Definition Material.h:62
@ extra_property_value_max
Maximum value for the extra property color mapping range.
Definition Material.h:70
@ wireframe
Whether the material is rendered in wireframe mode.
Definition Material.h:60
@ ignore_color_channel_lighting
Whether lighting is ignored for the color channel.
Definition Material.h:81
@ reflectivity
Reflectivity coefficient of the material surface.
Definition Material.h:59
@ override_camera_material
Whether this material overrides the camera's material settings.
Definition Material.h:72
@ shading_model
The shading model index used for rendering (see Material::ShadingModel).
Definition Material.h:55
@ write_to_depth
Whether rendering writes to the depth buffer.
Definition Material.h:77
@ override_parent_material
Whether this material overrides the parent model's material.
Definition Material.h:71
@ shininess
Specular shininess exponent for the material surface.
Definition Material.h:58
@ fade_render_distance
Distance at which the material begins to fade out.
Definition Material.h:79
@ gridline_spacing_mode
Mode controlling how gridline spacing is interpreted.
Definition Material.h:64
@ extra_property_value_mid
Midpoint value for the extra property color mapping range.
Definition Material.h:69
@ draw_by_property_channel
Name of the property channel used for color-by-property rendering.
Definition Material.h:67
@ max_render_distance
Maximum distance beyond which the material is not rendered.
Definition Material.h:80
@ bump_scale
Scale factor applied to bump/normal mapping.
Definition Material.h:57
@ grid_line_spacing
Spacing values for gridline rendering (4-component vector).
Definition Material.h:63
@ opacity
The overall opacity of the material (0.0 = fully transparent, 1.0 = fully opaque).
Definition Material.h:56
@ use_normal_for_tex_coord
Whether surface normals are used to generate texture coordinates.
Definition Material.h:75
@ material_property_size
Sentinel value representing the total number of material properties.
Definition Material.h:82
@ extra_property_value_min
Minimum value for the extra property color mapping range.
Definition Material.h:68
@ tile_texture_mode
Texture tiling mode per axis (wrap, clamp, decal, mirror).
Definition Material.h:73
@ model_space_material
Whether the material is defined in model space rather than screen space.
Definition Material.h:65
@ depth_bias
Bias applied to depth values to prevent z-fighting.
Definition Material.h:78
@ two_sided
Whether the material is rendered on both sides of a face.
Definition Material.h:54
@ ignore_depth
Whether to skip depth testing when rendering this material.
Definition Material.h:76
@ texture_coord_mode
Mode for generating or interpreting texture coordinates.
Definition Material.h:74
@ type
The type identifier string for this model node.
Definition Model.h:58
float fltp04
Defines an alias representing a 4 byte floating-point number Bit layout is as follows: -Sign: 1 bit a...
uint32_t uint04
-Defines an alias representing a 4 byte, unsigned integer -Can represent exact integer values 0 throu...
double fltp08
Defines an alias representing an 8 byte floating-point number.
uint8_t uint01
-Defines an alias representing a 1 byte, unsigned integer -Can represent exact integer values 0 throu...
@ guid
A 128-bit globally unique identifier for the object.
PrimitiveProperty
Describes which rendering property a primitive index buffer corresponds to.
UVType
Channels that describe how an object should interact with light.
@ e_KD
Diffuse texture/color channel.
@ e_uv_size
The number of UV types. Used for sizing arrays.
constexpr t_to cast(const Angle< t_from > &value)
Casts an Angle from one backing type to another.
Definition Angle.h:408
STL namespace.
static const bool Float
Whether this is a floating-point type.
Definition Material.h:592
static const bool Color
Whether this is a color type.
Definition Material.h:597
static const bool Number
Whether this is a numeric type.
Definition Material.h:594
static const bool Enum
Whether this is an enum type.
Definition Material.h:595
static constexpr ObjectInfo< Material, false, false > VectorSub()
Returns the ObjectInfo for the vector sub-element type (identity for scalar types).
Definition Material.h:604
static const uint01 Dimensions
Number of dimensions (0 for scalar types).
Definition Material.h:586
static const bool String
Whether this is a string type.
Definition Material.h:596
static const bool Boolean
Whether this is a boolean type.
Definition Material.h:598
static const bool Integer
Whether this is an integer type.
Definition Material.h:593
static const bool Primitive
Whether this is a primitive type.
Definition Material.h:589
static const bool Pointer
Whether this is a pointer type.
Definition Material.h:590
static const bool Vector
Whether this is a vector type.
Definition Material.h:587
static const bool Unsigned
Whether this is an unsigned numeric type.
Definition Material.h:591
static const bool Buffer
Whether this is a buffer type.
Definition Material.h:588
Information about the object.
Definition ObjectInfo.h:55
Maps a compile-time property enum value to its corresponding C++ storage type.