assimp_sys/
material.rs

1use std::os::raw::{c_char, c_float, c_int, c_uint};
2
3use types::*;
4
5pub static AI_DEFAULT_MATERIAL_NAME: &'static str = "DefaultMaterial";
6
7#[repr(C)]
8#[derive(Clone, Copy, Debug, Eq, PartialEq)]
9pub enum AiTextureOp {
10    Multiply = 0x0,
11    Add = 0x1,
12    Subtract = 0x2,
13    Divide = 0x3,
14    SmoothAdd = 0x4,
15    SignedAdd = 0x5,
16}
17
18#[repr(C)]
19#[derive(Clone, Copy, Debug, Eq, PartialEq)]
20pub enum AiTextureMapMode {
21    Wrap = 0x0,
22    Clamp = 0x1,
23    Mirror = 0x2,
24    Decal = 0x3,
25}
26
27#[repr(C)]
28#[derive(Clone, Copy, Debug, Eq, PartialEq)]
29pub enum AiTextureMapping {
30    UV = 0x0,
31    Sphere = 0x1,
32    Cylinder = 0x2,
33    Box = 0x3,
34    Plane = 0x4,
35    Other = 0x5,
36}
37
38#[repr(C)]
39#[derive(Clone, Copy, Debug, Eq, PartialEq)]
40pub enum AiTextureType {
41    None = 0x0,
42    Diffuse = 0x1,
43    Specular = 0x2,
44    Ambient = 0x3,
45    Emissive = 0x4,
46    Height = 0x5,
47    Normals = 0x6,
48    Shininess = 0x7,
49    Opacity = 0x8,
50    Displacement = 0x9,
51    Lightmap = 0xA,
52    Reflection = 0xB,
53    Unknown = 0xC,
54}
55
56#[repr(C)]
57#[derive(Clone, Copy, Debug, Eq, PartialEq)]
58pub enum AiShadingMode {
59    Flat = 0x1,
60    Gouraud = 0x2,
61    Phong = 0x3,
62    Blinn = 0x4,
63    Toon = 0x5,
64    OrenNayar = 0x6,
65    Minnaert = 0x7,
66    CookTorrance = 0x8,
67    NoShading = 0x9,
68    Fresnel = 0xA,
69}
70
71bitflags! {
72    #[repr(C)]
73    pub struct AiTextureFlags: c_uint {
74        const AITEXTUREFLAG_INVERT = 0x1;
75        const AITEXTUREFLAG_USE_ALPHA = 0x2;
76        const AITEXTUREFLAG_IGNORE_ALPHA = 0x4;
77    }
78}
79
80#[repr(C)]
81#[derive(Clone, Copy, Debug, Eq, PartialEq)]
82pub enum AiBlendMode {
83    Default = 0x0,
84    Additive = 0x1,
85}
86
87#[repr(C, packed)]
88#[derive(Clone, Copy, Debug)]
89pub struct AiUVTransform {
90    pub translation: AiVector2D,
91    pub scaling: AiVector2D,
92    pub rotation: c_float,
93}
94
95#[repr(C)]
96#[derive(Clone, Copy, Debug, Eq, PartialEq)]
97pub enum AiPropertyTypeInfo {
98    Float = 0x1,
99    Double = 0x2,
100    String = 0x3,
101    Integer = 0x4,
102    Buffer = 0x5,
103}
104
105#[repr(C)]
106pub struct AiMaterialProperty {
107    pub key: AiString,
108    pub semantic: c_uint,
109    pub index: c_uint,
110    pub data_length: c_uint,
111    pub property_type: AiPropertyTypeInfo,
112    pub data: *mut c_char,
113}
114
115#[repr(C)]
116pub struct AiMaterial {
117    pub properties: *mut *mut AiMaterialProperty,
118    pub num_properties: c_uint,
119    pub num_allocated: c_uint,
120}
121
122extern {
123    pub fn aiGetMaterialProperty(
124        mat: *const AiMaterial,
125        key: *const c_char,
126        property_type: c_uint,
127        index: c_uint,
128        output: *const *const AiMaterialProperty) -> AiReturn;
129
130    pub fn aiGetMaterialFloatArray(
131        mat: *const AiMaterial,
132        key: *const c_char,
133        property_type: c_uint,
134        index: c_uint,
135        output: *mut c_float,
136        max: *mut c_uint) -> AiReturn;
137
138    pub fn aiGetMaterialIntegerArray(
139        mat: *const AiMaterial,
140        key: *const c_char,
141        property_type: c_uint,
142        index: c_uint,
143        output: *mut c_int,
144        max: *mut c_uint) -> AiReturn;
145
146    pub fn aiGetMaterialColor(
147        mat: *const AiMaterial,
148        key: *const c_char,
149        property_type: c_uint,
150        index: c_uint,
151        output: *mut AiColor4D) -> AiReturn;
152
153    pub fn aiGetMaterialUVTransform(
154        mat: *const AiMaterial,
155        key: *const c_char,
156        property_type: c_uint,
157        index: c_uint,
158        output: *mut AiUVTransform) -> AiReturn;
159
160    pub fn aiGetMaterialString(
161        mat: *const AiMaterial,
162        key: *const c_char,
163        property_type: c_uint,
164        index: c_uint,
165        output: *mut AiString) -> AiReturn;
166
167    pub fn aiGetMaterialTextureCount(
168        mat: *const AiMaterial,
169        texture_type: AiTextureType) -> c_uint;
170
171    pub fn aiGetMaterialTexture(
172        mat: *const AiMaterial,
173        texture_type: AiTextureType,
174        index: c_uint,
175        path: *mut AiString,
176        mapping: *const AiTextureMapping,
177        uv_index: *mut c_uint,
178        blend: *mut c_float,
179        op: *mut AiTextureOp,
180        map_mode: *mut AiTextureMapMode,
181        flags: *mut c_uint) -> AiReturn;
182}