Files
filament/web/filament-js/test.ts
Powei Feng 96b8015fb4 web: rename WEBGL to WASM for cmake (#9941)
This is a more accurate name because it specifies the platform and
not the graphics API.
2026-04-29 22:21:25 +00:00

90 lines
3.2 KiB
TypeScript

/*
* Copyright (C) 2019 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/*
* This file exists only to test the buildability of our TypeScript annotations, To run the test,
* invoke Filament's easy build script with "./build.sh -up wasm release", or do:
*
* npx tsc --noEmit \
* ../../third_party/gl-matrix/gl-matrix.d.ts \
* ./filament.d.ts \
* test.ts
*
* Note that it suffices to simply build the test, it is not meant to be executed.
*/
import * as Filament from "./filament";
import * as glm from "gl-matrix";
const v2 = glm.vec2.create();
const v3 = glm.vec3.create();
const v4 = glm.vec4.create();
const m3 = glm.mat3.create();
const m4 = glm.mat4.create();
const qt = glm.quat.create();
const canvas = new HTMLCanvasElement();
const engine = Filament.Engine.create(canvas);
function smoke_camera_frustum() {
const camera: Filament.Camera = engine.createCamera();
camera.setProjection(Filament.Camera$Projection.ORTHO, 0, 1, 0, 1, 0, 1);
camera.setProjectionFov(45, 1.0, 0.0, 1.0, Filament.Camera$Fov.HORIZONTAL);
camera.setLensProjection(0, 0.33, 1, 2);
camera.setCustomProjection(m4, 0, 1);
const m5 = camera.getProjectionMatrix() as glm.mat4;
const m6 = camera.getCullingProjectionMatrix() as glm.mat4;
camera.lookAt([0, 0, 0], [0, 0, 0], [0, 0, 0]);
camera.lookAt(v3, v3, v3);
const frustum: Filament.Frustum = camera.getFrustum();
frustum.setProjection(m4);
const v5 = frustum.getNormalizedPlane(Filament.Frustum$Plane.BOTTOM) as glm.vec4;
const b: boolean = frustum.intersectsSphere([0, 1, 2, 3]);
const c: boolean = frustum.intersectsSphere(glm.vec4.fromValues(0, 1, 2, 3));
console.log(m5, m6, v5, b, c);
}
function smoke_transforms() {
const tcm = engine.getTransformManager();
const entity = Filament.EntityManager.get().create();
const inst: Filament.TransformManager$Instance = tcm.getInstance(entity);
tcm.setTransform(inst, m4);
const m5 = tcm.getTransform(inst) as glm.mat4;
const m6 = tcm.getWorldTransform(inst) as glm.mat4;
tcm.openLocalTransformTransaction();
tcm.commitLocalTransformTransaction();
console.log(m5, m6);
inst.delete();
}
function smoke_renderables() {
const rm = engine.getRenderableManager();
const entity = Filament.EntityManager.get().create();
const inst: Filament.RenderableManager$Instance = rm.getInstance(entity);
const bone: Filament.RenderableManager$Bone = {
unitQuaternion: qt,
translation: v3
};
rm.setCastShadows(inst, true);
rm.setBones(inst, [bone], 0);
Filament.RenderableManager.Builder(1).skinningBones([bone]).build(engine, entity);
inst.delete();
}
smoke_camera_frustum();
smoke_transforms();
smoke_renderables();