Skip to content

Commit d40326f

Browse files
authored
Merge pull request #450 from OmarShehata/webp-support
Add support for EXT_texture_webp
2 parents ea24363 + a42aede commit d40326f

10 files changed

+703
-3
lines changed

CHANGES.md

+1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ Change Log
44
### 2.0.2 - ????-??-??
55

66
* Fixed a bug where nodes containing extensions or extras where being removed in the glTF 1.0 to 2.0 upgrade stage. [#431](https://github.com/AnalyticalGraphicsInc/gltf-pipeline/pull/431)
7+
* Added support for the `EXT_texture_webp` extension. [#450](https://github.com/AnalyticalGraphicsInc/gltf-pipeline/pull/450)
78

89
### 2.0.1 - 2018-09-19
910

lib/getImageExtension.js

+6
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@ module.exports = getImageExtension;
1515
*/
1616
function getImageExtension(data) {
1717
const header = data.slice(0, 2);
18+
const webpHeaderRIFFChars = data.slice(0, 4);
19+
const webpHeaderWEBPChars = data.slice(8, 12);
20+
1821
if (header.equals(Buffer.from([0x42, 0x4D]))) {
1922
return '.bmp';
2023
} else if (header.equals(Buffer.from([0x47, 0x49]))) {
@@ -27,6 +30,9 @@ function getImageExtension(data) {
2730
return '.ktx';
2831
} else if (header.equals(Buffer.from([0x48, 0x78]))) {
2932
return '.crn';
33+
} else if (webpHeaderRIFFChars.equals(Buffer.from([0x52, 0x49, 0x46, 0x46])) && webpHeaderWEBPChars.equals(Buffer.from([0x57, 0x45, 0x42, 0x50]))) {
34+
// See https://developers.google.com/speed/webp/docs/riff_container#webp_file_header
35+
return '.webp';
3036
}
3137

3238
throw new RuntimeError('Image data does not have valid header');
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,222 @@
1+
{
2+
"asset": {
3+
"generator": "COLLADA2GLTF",
4+
"version": "2.0"
5+
},
6+
"extensionsUsed": [
7+
"EXT_texture_webp"
8+
],
9+
"scene": 0,
10+
"scenes": [
11+
{
12+
"nodes": [
13+
0
14+
]
15+
}
16+
],
17+
"nodes": [
18+
{
19+
"children": [
20+
1
21+
],
22+
"matrix": [
23+
1,
24+
0,
25+
0,
26+
0,
27+
0,
28+
0,
29+
-1,
30+
0,
31+
0,
32+
1,
33+
0,
34+
0,
35+
0,
36+
0,
37+
0,
38+
1
39+
]
40+
},
41+
{
42+
"mesh": 0
43+
}
44+
],
45+
"meshes": [
46+
{
47+
"primitives": [
48+
{
49+
"attributes": {
50+
"NORMAL": 1,
51+
"POSITION": 2,
52+
"TEXCOORD_0": 3
53+
},
54+
"indices": 0,
55+
"mode": 4,
56+
"material": 0
57+
}
58+
],
59+
"name": "Mesh"
60+
}
61+
],
62+
"accessors": [
63+
{
64+
"bufferView": 0,
65+
"byteOffset": 0,
66+
"componentType": 5123,
67+
"count": 36,
68+
"max": [
69+
23
70+
],
71+
"min": [
72+
0
73+
],
74+
"type": "SCALAR"
75+
},
76+
{
77+
"bufferView": 1,
78+
"byteOffset": 0,
79+
"componentType": 5126,
80+
"count": 24,
81+
"max": [
82+
1,
83+
1,
84+
1
85+
],
86+
"min": [
87+
-1,
88+
-1,
89+
-1
90+
],
91+
"type": "VEC3"
92+
},
93+
{
94+
"bufferView": 1,
95+
"byteOffset": 288,
96+
"componentType": 5126,
97+
"count": 24,
98+
"max": [
99+
0.5,
100+
0.5,
101+
0.5
102+
],
103+
"min": [
104+
-0.5,
105+
-0.5,
106+
-0.5
107+
],
108+
"type": "VEC3"
109+
},
110+
{
111+
"bufferView": 2,
112+
"byteOffset": 0,
113+
"componentType": 5126,
114+
"count": 24,
115+
"max": [
116+
6,
117+
1
118+
],
119+
"min": [
120+
0,
121+
0
122+
],
123+
"type": "VEC2"
124+
}
125+
],
126+
"materials": [
127+
{
128+
"pbrMetallicRoughness": {
129+
"baseColorTexture": {
130+
"index": 0,
131+
"texCoord": 0
132+
},
133+
"metallicFactor": 0,
134+
"baseColorFactor": [
135+
1,
136+
1,
137+
1,
138+
1
139+
],
140+
"roughnessFactor": 1
141+
},
142+
"name": "Texture",
143+
"emissiveFactor": [
144+
0,
145+
0,
146+
0
147+
],
148+
"alphaMode": "OPAQUE",
149+
"doubleSided": false
150+
}
151+
],
152+
"textures": [
153+
{
154+
"sampler": 0,
155+
"source": 0,
156+
"extensions": {
157+
"EXT_texture_webp": {
158+
"source": 1
159+
}
160+
}
161+
}
162+
],
163+
"images": [
164+
{
165+
"name": "cesium logo",
166+
"bufferView": 4,
167+
"mimeType": "image/png"
168+
},
169+
{
170+
"name": "cesium logo",
171+
"bufferView": 3,
172+
"mimeType": "image/webp"
173+
}
174+
],
175+
"samplers": [
176+
{
177+
"magFilter": 9729,
178+
"minFilter": 9986,
179+
"wrapS": 10497,
180+
"wrapT": 10497
181+
}
182+
],
183+
"bufferViews": [
184+
{
185+
"buffer": 0,
186+
"byteOffset": 0,
187+
"byteLength": 72,
188+
"target": 34963
189+
},
190+
{
191+
"buffer": 0,
192+
"byteOffset": 72,
193+
"byteLength": 576,
194+
"byteStride": 12,
195+
"target": 34962
196+
},
197+
{
198+
"buffer": 0,
199+
"byteOffset": 648,
200+
"byteLength": 192,
201+
"byteStride": 8,
202+
"target": 34962
203+
},
204+
{
205+
"buffer": 0,
206+
"byteOffset": 840,
207+
"byteLength": 2466
208+
},
209+
{
210+
"buffer": 0,
211+
"byteOffset": 3308,
212+
"byteLength": 5383
213+
}
214+
],
215+
"buffers": [
216+
{
217+
"name": "box-textured-separate",
218+
"byteLength": 8692,
219+
"uri": "data:application/octet-stream;base64,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"
220+
}
221+
]
222+
}

0 commit comments

Comments
 (0)