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}