@tolokoban/tgd
Version:
ToloGameDev library for WebGL2
137 lines • 7.7 kB
JavaScript
// https://registry.khronos.org/glTF/specs/2.0/glTF-2.0.pdf
import { assertType } from "./guards.js";
export function isTgdFormatGltfCameraPerspective(data) {
return data.type === "perspective";
}
export function isTgdFormatGltfCameraOrthographic(data) {
return data.type === "orthographic";
}
export function assertTgdFormatGltf(data) {
const typeAttribute = [
"|",
"number",
{
value: "unknown",
size: "number",
count: "number",
byteOffset: "number",
type: "string",
componentType: "number",
min: ["?", ["array", "number"]],
max: ["?", ["array", "number"]],
},
];
assertType(data, [
"partial",
{
accessors: [
"array",
{
bufferView: ["?", "number"],
byteOffset: ["?", "number"],
componentType: "number",
normalized: ["?", "boolean"],
count: "number",
type: "string",
name: ["?", "string"],
},
],
meshes: [
"array",
{
name: ["?", "string"],
primitives: [
"array",
{
attributes: ["map", typeAttribute],
indices: ["?", typeAttribute],
mode: ["?", "number"],
material: ["?", "number"],
},
],
},
],
images: [
"array",
[
"partial",
{
bufferView: "number",
mimeType: "string",
name: "string",
uri: "string",
},
],
],
bufferViews: [
"array",
{
buffer: "number",
byteLength: "number",
byteOffset: ["?", "number"],
byteStride: ["?", "number"],
target: ["?", "number"],
},
],
materials: ["array", typeMaterial],
samplers: [
"array",
[
"partial",
{
minFilter: "number",
magFilter: "number",
wrapS: "number",
wrapT: "number",
name: "string",
},
],
],
textures: [
"array",
[
"partial",
{
sampler: "number",
source: "number",
name: "string",
},
],
],
},
]);
}
const typeTextureInfo = {
index: "number",
texCoord: ["?", "number"],
};
const typePbrMetallicRoughness = [
"partial",
{
baseColorFactor: ["array", "number", { min: 4, max: 4 }],
baseColorTexture: typeTextureInfo,
metallicFactor: "number",
roughnessFactor: "number",
metalicRoughnessTexture: typeTextureInfo,
},
];
const typeMaterial = [
"partial",
{
name: "string",
pbrMetallicRoughness: typePbrMetallicRoughness,
normalTexture: {
...typeTextureInfo,
scale: ["?", "number"],
},
occlusionTexture: {
...typeTextureInfo,
strength: ["?", "number"],
},
emissiveTexture: typeTextureInfo,
alphaMode: ["literal", "OPAQUE", "MASK", "BLEND"],
alphaCutoff: "number",
doubleSided: "boolean",
},
];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2x0Zi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy9nbHRmLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDJEQUEyRDtBQUUzRCxPQUFPLEVBQWdCLFVBQVUsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBdU41RCxNQUFNLFVBQVUsZ0NBQWdDLENBQUMsSUFBeUI7SUFDdEUsT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLGFBQWEsQ0FBQTtBQUN0QyxDQUFDO0FBY0QsTUFBTSxVQUFVLGlDQUFpQyxDQUFDLElBQXlCO0lBQ3ZFLE9BQU8sSUFBSSxDQUFDLElBQUksS0FBSyxjQUFjLENBQUE7QUFDdkMsQ0FBQztBQWlCRCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsSUFBYTtJQUM3QyxNQUFNLGFBQWEsR0FBWTtRQUMzQixHQUFHO1FBQ0gsUUFBUTtRQUNSO1lBQ0ksS0FBSyxFQUFFLFNBQVM7WUFDaEIsSUFBSSxFQUFFLFFBQVE7WUFDZCxLQUFLLEVBQUUsUUFBUTtZQUNmLFVBQVUsRUFBRSxRQUFRO1lBQ3BCLElBQUksRUFBRSxRQUFRO1lBQ2QsYUFBYSxFQUFFLFFBQVE7WUFDdkIsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQy9CLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztTQUNsQztLQUNKLENBQUE7SUFDRCxVQUFVLENBQUMsSUFBSSxFQUFFO1FBQ2IsU0FBUztRQUNUO1lBQ0ksU0FBUyxFQUFFO2dCQUNQLE9BQU87Z0JBQ1A7b0JBQ0ksVUFBVSxFQUFFLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQztvQkFDM0IsVUFBVSxFQUFFLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQztvQkFDM0IsYUFBYSxFQUFFLFFBQVE7b0JBQ3ZCLFVBQVUsRUFBRSxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUM7b0JBQzVCLEtBQUssRUFBRSxRQUFRO29CQUNmLElBQUksRUFBRSxRQUFRO29CQUNkLElBQUksRUFBRSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUM7aUJBQ3hCO2FBQ0o7WUFDRCxNQUFNLEVBQUU7Z0JBQ0osT0FBTztnQkFDUDtvQkFDSSxJQUFJLEVBQUUsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDO29CQUNyQixVQUFVLEVBQUU7d0JBQ1IsT0FBTzt3QkFDUDs0QkFDSSxVQUFVLEVBQUUsQ0FBQyxLQUFLLEVBQUUsYUFBYSxDQUFDOzRCQUNsQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLEVBQUUsYUFBYSxDQUFDOzRCQUM3QixJQUFJLEVBQUUsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDOzRCQUNyQixRQUFRLEVBQUUsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDO3lCQUM1QjtxQkFDSjtpQkFDSjthQUNKO1lBQ0QsTUFBTSxFQUFFO2dCQUNKLE9BQU87Z0JBQ1A7b0JBQ0ksU0FBUztvQkFDVDt3QkFDSSxVQUFVLEVBQUUsUUFBUTt3QkFDcEIsUUFBUSxFQUFFLFFBQVE7d0JBQ2xCLElBQUksRUFBRSxRQUFRO3dCQUNkLEdBQUcsRUFBRSxRQUFRO3FCQUNoQjtpQkFDSjthQUNKO1lBQ0QsV0FBVyxFQUFFO2dCQUNULE9BQU87Z0JBQ1A7b0JBQ0ksTUFBTSxFQUFFLFFBQVE7b0JBQ2hCLFVBQVUsRUFBRSxRQUFRO29CQUNwQixVQUFVLEVBQUUsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDO29CQUMzQixVQUFVLEVBQUUsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDO29CQUMzQixNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDO2lCQUMxQjthQUNKO1lBQ0QsU0FBUyxFQUFFLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQztZQUNsQyxRQUFRLEVBQUU7Z0JBQ04sT0FBTztnQkFDUDtvQkFDSSxTQUFTO29CQUNUO3dCQUNJLFNBQVMsRUFBRSxRQUFRO3dCQUNuQixTQUFTLEVBQUUsUUFBUTt3QkFDbkIsS0FBSyxFQUFFLFFBQVE7d0JBQ2YsS0FBSyxFQUFFLFFBQVE7d0JBQ2YsSUFBSSxFQUFFLFFBQVE7cUJBQ2pCO2lCQUNKO2FBQ0o7WUFDRCxRQUFRLEVBQUU7Z0JBQ04sT0FBTztnQkFDUDtvQkFDSSxTQUFTO29CQUNUO3dCQUNJLE9BQU8sRUFBRSxRQUFRO3dCQUNqQixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsSUFBSSxFQUFFLFFBQVE7cUJBQ2pCO2lCQUNKO2FBQ0o7U0FDSjtLQUNKLENBQUMsQ0FBQTtBQUNOLENBQUM7QUFFRCxNQUFNLGVBQWUsR0FBWTtJQUM3QixLQUFLLEVBQUUsUUFBUTtJQUNmLFFBQVEsRUFBRSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUM7Q0FDNUIsQ0FBQTtBQUVELE1BQU0sd0JBQXdCLEdBQVk7SUFDdEMsU0FBUztJQUNUO1FBQ0ksZUFBZSxFQUFFLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ3hELGdCQUFnQixFQUFFLGVBQWU7UUFDakMsY0FBYyxFQUFFLFFBQVE7UUFDeEIsZUFBZSxFQUFFLFFBQVE7UUFDekIsdUJBQXVCLEVBQUUsZUFBZTtLQUMzQztDQUNKLENBQUE7QUFFRCxNQUFNLFlBQVksR0FBWTtJQUMxQixTQUFTO0lBQ1Q7UUFDSSxJQUFJLEVBQUUsUUFBUTtRQUNkLG9CQUFvQixFQUFFLHdCQUF3QjtRQUM5QyxhQUFhLEVBQUU7WUFDWCxHQUFHLGVBQWU7WUFDbEIsS0FBSyxFQUFFLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQztTQUN6QjtRQUNELGdCQUFnQixFQUFFO1lBQ2QsR0FBRyxlQUFlO1lBQ2xCLFFBQVEsRUFBRSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUM7U0FDNUI7UUFDRCxlQUFlLEVBQUUsZUFBZTtRQUNoQyxTQUFTLEVBQUUsQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUM7UUFDakQsV0FBVyxFQUFFLFFBQVE7UUFDckIsV0FBVyxFQUFFLFNBQVM7S0FDekI7Q0FDSixDQUFBIn0=