|
@@ -147,6 +147,12 @@ THREE.GLTFLoader = ( function () {
|
|
|
|
|
|
}
|
|
|
|
|
|
+ if ( json.extensionsUsed.indexOf( EXTENSIONS.MSFT_TEXTURE_DDS ) >= 0 ) {
|
|
|
+
|
|
|
+ extensions[ EXTENSIONS.MSFT_TEXTURE_DDS ] = new GLTFTextureDDSExtension();
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
|
|
|
console.time( 'GLTFLoader' );
|
|
@@ -224,9 +230,30 @@ THREE.GLTFLoader = ( function () {
|
|
|
KHR_DRACO_MESH_COMPRESSION: 'KHR_draco_mesh_compression',
|
|
|
KHR_LIGHTS: 'KHR_lights',
|
|
|
KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS: 'KHR_materials_pbrSpecularGlossiness',
|
|
|
- KHR_MATERIALS_UNLIT: 'KHR_materials_unlit'
|
|
|
+ KHR_MATERIALS_UNLIT: 'KHR_materials_unlit',
|
|
|
+ MSFT_TEXTURE_DDS: 'MSFT_texture_dds'
|
|
|
};
|
|
|
|
|
|
+ /**
|
|
|
+ * DDS Texture Extension
|
|
|
+ *
|
|
|
+ * Specification:
|
|
|
+ * https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/MSFT_texture_dds
|
|
|
+ *
|
|
|
+ */
|
|
|
+ function GLTFTextureDDSExtension() {
|
|
|
+
|
|
|
+ if (!THREE.DDSLoader) {
|
|
|
+
|
|
|
+ throw new Error( 'THREE.GLTFLoader: Attempting to load .dds texture without importing THREE.DDSLoader' );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ this.name = EXTENSIONS.MSFT_TEXTURE_DDS;
|
|
|
+ this.ddsLoader = new THREE.DDSLoader();
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* Lights Extension
|
|
|
*
|
|
@@ -1800,7 +1827,21 @@ THREE.GLTFLoader = ( function () {
|
|
|
var URL = window.URL || window.webkitURL;
|
|
|
|
|
|
var textureDef = json.textures[ textureIndex ];
|
|
|
- var source = json.images[ textureDef.source ];
|
|
|
+
|
|
|
+ var textureExtensions = textureDef.extensions || {};
|
|
|
+
|
|
|
+ var source;
|
|
|
+
|
|
|
+ if ( textureExtensions[ EXTENSIONS.MSFT_TEXTURE_DDS ] ) {
|
|
|
+
|
|
|
+ source = json.images[ textureExtensions[ EXTENSIONS.MSFT_TEXTURE_DDS ].source ];
|
|
|
+
|
|
|
+ } else {
|
|
|
+
|
|
|
+ source = json.images[ textureDef.source ];
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
var sourceURI = source.uri;
|
|
|
var isObjectURL = false;
|
|
|
|
|
@@ -1823,7 +1864,15 @@ THREE.GLTFLoader = ( function () {
|
|
|
|
|
|
// Load Texture resource.
|
|
|
|
|
|
- var loader = THREE.Loader.Handlers.get( sourceURI ) || textureLoader;
|
|
|
+ var loader = THREE.Loader.Handlers.get( sourceURI );
|
|
|
+
|
|
|
+ if ( ! loader ) {
|
|
|
+
|
|
|
+ loader = textureExtensions[ EXTENSIONS.MSFT_TEXTURE_DDS ]
|
|
|
+ ? parser.extensions[ EXTENSIONS.MSFT_TEXTURE_DDS ].ddsLoader
|
|
|
+ : textureLoader;
|
|
|
+
|
|
|
+ }
|
|
|
|
|
|
return new Promise( function ( resolve, reject ) {
|
|
|
|
|
@@ -1845,7 +1894,11 @@ THREE.GLTFLoader = ( function () {
|
|
|
|
|
|
if ( textureDef.name !== undefined ) texture.name = textureDef.name;
|
|
|
|
|
|
- texture.format = textureDef.format !== undefined ? WEBGL_TEXTURE_FORMATS[ textureDef.format ] : THREE.RGBAFormat;
|
|
|
+ if ( ! textureExtensions[ EXTENSIONS.MSFT_TEXTURE_DDS ] ) {
|
|
|
+
|
|
|
+ texture.format = textureDef.format !== undefined ? WEBGL_TEXTURE_FORMATS[ textureDef.format ] : THREE.RGBAFormat;
|
|
|
+
|
|
|
+ }
|
|
|
|
|
|
if ( textureDef.internalFormat !== undefined && texture.format !== WEBGL_TEXTURE_FORMATS[ textureDef.internalFormat ] ) {
|
|
|
|