1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
// Copyright 2017 The gltf Library Developers
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.
use {extensions, json};
use {DynamicImage, Gltf};
/// Image data used to create a texture.
pub struct Image<'a> {
/// The parent `Gltf` struct.
gltf: &'a Gltf,
/// The corresponding JSON index.
index: usize,
/// The corresponding JSON struct.
json: &'a json::image::Image,
/// The corresponding decoded image data.
data: &'a DynamicImage,
}
impl<'a> Image<'a> {
/// Constructs an `Image` from owned data.
pub fn new(
gltf: &'a Gltf,
index: usize,
json: &'a json::image::Image,
) -> Self {
let data = gltf.image_data(index);
Self {
gltf: gltf,
index: index,
json: json,
data: data,
}
}
/// Returns the internal JSON index.
pub fn index(&self) -> usize {
self.index
}
/// Returns the internal JSON item.
pub fn as_json(&self) -> &json::image::Image {
self.json
}
/// Optional user-defined name for this object.
#[cfg(feature = "names")]
pub fn name(&self) -> Option<&str> {
self.json.name.as_ref().map(String::as_str)
}
/// Returns the raw image data.
pub fn data(&self) -> &DynamicImage {
self.data
}
/// Extension specific data.
pub fn extensions(&self) -> extensions::image::Image<'a> {
extensions::image::Image::new(
self.gltf,
&self.json.extensions,
)
}
/// Optional application specific data.
pub fn extras(&self) -> &json::Extras {
&self.json.extras
}
}