Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
public static RegisterExtension(name: string, factory: (loader: GLTFLoader) => IGLTFLoaderExtension): void {
if (GLTFLoader.UnregisterExtension(name)) {
Tools.Warn(`Extension with the name '${name}' already exists`);
}
GLTFLoader._ExtensionFactories[name] = factory;
// Keep the order of registration so that extensions registered first are called first.
GLTFLoader._ExtensionNames.push(name);
}
const occlusionTexture: IMaterialOcclusionTextureInfo = {
index: glTFTexture.index
};
glTFMaterial.occlusionTexture = occlusionTexture;
occlusionTexture.strength = 1.0;
}
}));
}
}
if (babylonStandardMaterial.alpha < 1.0 || babylonStandardMaterial.opacityTexture) {
if (babylonStandardMaterial.alphaMode === Constants.ALPHA_COMBINE) {
glTFMaterial.alphaMode = MaterialAlphaMode.BLEND;
}
else {
Tools.Warn(babylonStandardMaterial.name + ": glTF 2.0 does not support alpha mode: " + babylonStandardMaterial.alphaMode.toString());
}
}
if (babylonStandardMaterial.emissiveColor && !_GLTFMaterialExporter.FuzzyEquals(babylonStandardMaterial.emissiveColor, Color3.Black(), _GLTFMaterialExporter._Epsilon)) {
glTFMaterial.emissiveFactor = babylonStandardMaterial.emissiveColor.asArray();
}
glTFMaterial.pbrMetallicRoughness = glTFPbrMetallicRoughness;
_GLTFMaterialExporter._SetAlphaMode(glTFMaterial, babylonStandardMaterial);
materials.push(glTFMaterial);
materialMap[babylonStandardMaterial.uniqueId] = materials.length - 1;
return Promise.all(promises).then(() => { /* do nothing */ });
}
private static _GetTextureWrapMode(context: string, mode: TextureWrapMode | undefined): number {
// Set defaults if undefined
mode = mode == undefined ? TextureWrapMode.REPEAT : mode;
switch (mode) {
case TextureWrapMode.CLAMP_TO_EDGE: return Texture.CLAMP_ADDRESSMODE;
case TextureWrapMode.MIRRORED_REPEAT: return Texture.MIRROR_ADDRESSMODE;
case TextureWrapMode.REPEAT: return Texture.WRAP_ADDRESSMODE;
default:
Tools.Warn(`${context}: Invalid value (${mode})`);
return Texture.WRAP_ADDRESSMODE;
}
}
var stackHeight = 0;
for (var child of this._children) {
if (!child.isVisible || child.notRenderable) {
continue;
}
if (this._isVertical) {
if (child.top !== stackHeight + "px") {
child.top = stackHeight + "px";
this._rebuildLayout = true;
child._top.ignoreAdaptiveScaling = true;
}
if (child._height.isPercentage && !child._automaticSize) {
if (!this.ignoreLayoutWarnings) {
Tools.Warn(`Control (Name:${child.name}, UniqueId:${child.uniqueId}) is using height in percentage mode inside a vertical StackPanel`);
}
} else {
stackHeight += child._currentMeasure.height + child.paddingTopInPixels + child.paddingBottomInPixels;
}
} else {
if (child.left !== stackWidth + "px") {
child.left = stackWidth + "px";
this._rebuildLayout = true;
child._left.ignoreAdaptiveScaling = true;
}
if (child._width.isPercentage && !child._automaticSize) {
if (!this.ignoreLayoutWarnings) {
Tools.Warn(`Control (Name:${child.name}, UniqueId:${child.uniqueId}) is using width in percentage mode inside a horizontal StackPanel`);
}
} else {
break;
}
case VertexBuffer.TangentKind: {
meshPrimitive.attributes.TANGENT = this._accessors.length - 1;
break;
}
case VertexBuffer.UVKind: {
meshPrimitive.attributes.TEXCOORD_0 = this._accessors.length - 1;
break;
}
case VertexBuffer.UV2Kind: {
meshPrimitive.attributes.TEXCOORD_1 = this._accessors.length - 1;
break;
}
default: {
Tools.Warn("Unsupported Vertex Buffer Type: " + attributeKind);
}
}
}
private setNodeTransformation(node: INode, babylonTransformNode: TransformNode): void {
if (!babylonTransformNode.getPivotPoint().equalsToFloats(0, 0, 0)) {
Tools.Warn("Pivot points are not supported in the glTF serializer");
}
if (!babylonTransformNode.position.equalsToFloats(0, 0, 0)) {
node.translation = this._convertToRightHandedSystem ? _GLTFUtilities._GetRightHandedPositionVector3(babylonTransformNode.position).asArray() : babylonTransformNode.position.asArray();
}
if (!babylonTransformNode.scaling.equalsToFloats(1, 1, 1)) {
node.scale = babylonTransformNode.scaling.asArray();
}
let rotationQuaternion = Quaternion.RotationYawPitchRoll(babylonTransformNode.rotation.y, babylonTransformNode.rotation.x, babylonTransformNode.rotation.z);
if (babylonTransformNode.rotationQuaternion) {
rotationQuaternion.multiplyInPlace(babylonTransformNode.rotationQuaternion);
}
if (!(rotationQuaternion.x === 0 && rotationQuaternion.y === 0 && rotationQuaternion.z === 0 && rotationQuaternion.w === 1)) {
if (this._convertToRightHandedSystem) {
_GLTFUtilities._GetRightHandedQuaternionFromRef(rotationQuaternion);
index = k * stride;
const vertexData = stride === 3 ? Vector3.FromArray(meshAttributeArray, index) : Vector4.FromArray(meshAttributeArray, index);
vertexAttributes.push(vertexData.asArray());
}
break;
}
case VertexBuffer.UVKind:
case VertexBuffer.UV2Kind: {
for (let k = 0, length = meshAttributeArray.length / stride; k < length; ++k) {
index = k * stride;
vertexAttributes.push(this._convertToRightHandedSystem ? [meshAttributeArray[index], meshAttributeArray[index + 1]] : [meshAttributeArray[index], meshAttributeArray[index + 1]]);
}
break;
}
default: {
Tools.Warn("Unsupported Vertex Buffer Type: " + vertexBufferKind);
vertexAttributes = [];
}
}
for (let vertexAttribute of vertexAttributes) {
for (let component of vertexAttribute) {
binaryWriter.setFloat32(component);
}
}
}
public static RegisterExtension(name: string, factory: (exporter: _Exporter) => IGLTFExporterExtensionV2): void {
if (_Exporter.UnregisterExtension(name)) {
Tools.Warn(`Extension with the name ${name} already exists`);
}
_Exporter._ExtensionFactories[name] = factory;
_Exporter._ExtensionNames.push(name);
}
index = x * stride;
(vertexData as Vector2[]).push(Vector2.FromArray(meshAttributeArray, index));
(vertexData as Vector2[]).push(Vector2.FromArray(meshAttributeArray, index + 2 * stride));
(vertexData as Vector2[]).push(Vector2.FromArray(meshAttributeArray, index + stride));
}
break;
}
default: {
Tools.Error(`Unsupported Vertex Buffer type: ${vertexBufferKind}`);
}
}
this.writeVertexAttributeData(vertexData, byteOffset, vertexBufferKind, meshAttributeArray, binaryWriter);
}
}
else {
Tools.Warn(`reorderTriangleFillMode: Vertex Buffer Kind ${vertexBufferKind} not present!`);
}
}