61 lines
2.0 KiB
JavaScript
61 lines
2.0 KiB
JavaScript
'use strict';
|
|
|
|
var Extensions = require('../../extensions/Extensions.js');
|
|
var getSupportedCompressedTextureFormats = require('../../rendering/renderers/shared/texture/utils/getSupportedCompressedTextureFormats.js');
|
|
var isWebGLSupported = require('../../utils/browser/isWebGLSupported.js');
|
|
var isWebGPUSupported = require('../../utils/browser/isWebGPUSupported.js');
|
|
var resolveCompressedTextureUrl = require('./resolveCompressedTextureUrl.js');
|
|
|
|
"use strict";
|
|
let compressedTextureExtensions;
|
|
const detectCompressed = {
|
|
extension: {
|
|
type: Extensions.ExtensionType.DetectionParser,
|
|
priority: 2
|
|
},
|
|
test: async () => {
|
|
if (await isWebGPUSupported.isWebGPUSupported())
|
|
return true;
|
|
if (isWebGLSupported.isWebGLSupported())
|
|
return true;
|
|
return false;
|
|
},
|
|
add: async (formats) => {
|
|
const supportedCompressedTextureFormats = await getSupportedCompressedTextureFormats.getSupportedCompressedTextureFormats();
|
|
compressedTextureExtensions = extractExtensionsForCompressedTextureFormats(supportedCompressedTextureFormats);
|
|
return [...compressedTextureExtensions, ...formats];
|
|
},
|
|
remove: async (formats) => {
|
|
if (compressedTextureExtensions) {
|
|
return formats.filter((f) => !(f in compressedTextureExtensions));
|
|
}
|
|
return formats;
|
|
}
|
|
};
|
|
function extractExtensionsForCompressedTextureFormats(formats) {
|
|
const extensions = ["basis"];
|
|
const dupeMap = {};
|
|
formats.forEach((format) => {
|
|
const extension = format.split("-")[0];
|
|
if (extension && !dupeMap[extension]) {
|
|
dupeMap[extension] = true;
|
|
extensions.push(extension);
|
|
}
|
|
});
|
|
extensions.sort((a, b) => {
|
|
const aIndex = resolveCompressedTextureUrl.validFormats.indexOf(a);
|
|
const bIndex = resolveCompressedTextureUrl.validFormats.indexOf(b);
|
|
if (aIndex === -1) {
|
|
return 1;
|
|
}
|
|
if (bIndex === -1) {
|
|
return -1;
|
|
}
|
|
return aIndex - bIndex;
|
|
});
|
|
return extensions;
|
|
}
|
|
|
|
exports.detectCompressed = detectCompressed;
|
|
//# sourceMappingURL=detectCompressed.js.map
|