@quake2ts/engine 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/index.global.js +617 -0
- package/dist/browser/index.global.js.map +1 -0
- package/dist/cjs/index.cjs +17604 -0
- package/dist/cjs/index.cjs.map +1 -0
- package/dist/esm/index.js +17373 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/dist/types/assets/animation.d.ts +33 -0
- package/dist/types/assets/animation.d.ts.map +1 -0
- package/dist/types/assets/audio.d.ts +27 -0
- package/dist/types/assets/audio.d.ts.map +1 -0
- package/dist/types/assets/audio.worker.d.ts +2 -0
- package/dist/types/assets/audio.worker.d.ts.map +1 -0
- package/dist/types/assets/browserIngestion.d.ts +7 -0
- package/dist/types/assets/browserIngestion.d.ts.map +1 -0
- package/dist/types/assets/bsp.d.ts +197 -0
- package/dist/types/assets/bsp.d.ts.map +1 -0
- package/dist/types/assets/bsp.worker.d.ts +2 -0
- package/dist/types/assets/bsp.worker.d.ts.map +1 -0
- package/dist/types/assets/cache.d.ts +26 -0
- package/dist/types/assets/cache.d.ts.map +1 -0
- package/dist/types/assets/crossReference.d.ts +35 -0
- package/dist/types/assets/crossReference.d.ts.map +1 -0
- package/dist/types/assets/ent.d.ts +31 -0
- package/dist/types/assets/ent.d.ts.map +1 -0
- package/dist/types/assets/fileType.d.ts +18 -0
- package/dist/types/assets/fileType.d.ts.map +1 -0
- package/dist/types/assets/headlessLoader.d.ts +11 -0
- package/dist/types/assets/headlessLoader.d.ts.map +1 -0
- package/dist/types/assets/index.d.ts +30 -0
- package/dist/types/assets/index.d.ts.map +1 -0
- package/dist/types/assets/ingestion.d.ts +62 -0
- package/dist/types/assets/ingestion.d.ts.map +1 -0
- package/dist/types/assets/interactionGraph.d.ts +21 -0
- package/dist/types/assets/interactionGraph.d.ts.map +1 -0
- package/dist/types/assets/manager.d.ts +97 -0
- package/dist/types/assets/manager.d.ts.map +1 -0
- package/dist/types/assets/mapStatistics.d.ts +20 -0
- package/dist/types/assets/mapStatistics.d.ts.map +1 -0
- package/dist/types/assets/md2.d.ts +82 -0
- package/dist/types/assets/md2.d.ts.map +1 -0
- package/dist/types/assets/md3.d.ts +72 -0
- package/dist/types/assets/md3.d.ts.map +1 -0
- package/dist/types/assets/ogg.d.ts +12 -0
- package/dist/types/assets/ogg.d.ts.map +1 -0
- package/dist/types/assets/pak.d.ts +32 -0
- package/dist/types/assets/pak.d.ts.map +1 -0
- package/dist/types/assets/pakIndexStore.d.ts +19 -0
- package/dist/types/assets/pakIndexStore.d.ts.map +1 -0
- package/dist/types/assets/pakValidation.d.ts +28 -0
- package/dist/types/assets/pakValidation.d.ts.map +1 -0
- package/dist/types/assets/pakWriter.d.ts +27 -0
- package/dist/types/assets/pakWriter.d.ts.map +1 -0
- package/dist/types/assets/pcx.d.ts +13 -0
- package/dist/types/assets/pcx.d.ts.map +1 -0
- package/dist/types/assets/preview.d.ts +15 -0
- package/dist/types/assets/preview.d.ts.map +1 -0
- package/dist/types/assets/resourceTracker.d.ts +33 -0
- package/dist/types/assets/resourceTracker.d.ts.map +1 -0
- package/dist/types/assets/sprite.d.ts +23 -0
- package/dist/types/assets/sprite.d.ts.map +1 -0
- package/dist/types/assets/streamer.d.ts +17 -0
- package/dist/types/assets/streamer.d.ts.map +1 -0
- package/dist/types/assets/streamingPak.d.ts +28 -0
- package/dist/types/assets/streamingPak.d.ts.map +1 -0
- package/dist/types/assets/texture.d.ts +37 -0
- package/dist/types/assets/texture.d.ts.map +1 -0
- package/dist/types/assets/tga.d.ts +15 -0
- package/dist/types/assets/tga.d.ts.map +1 -0
- package/dist/types/assets/vfs.d.ts +57 -0
- package/dist/types/assets/vfs.d.ts.map +1 -0
- package/dist/types/assets/visibilityAnalyzer.d.ts +28 -0
- package/dist/types/assets/visibilityAnalyzer.d.ts.map +1 -0
- package/dist/types/assets/wal.d.ts +21 -0
- package/dist/types/assets/wal.d.ts.map +1 -0
- package/dist/types/assets/wav.d.ts +11 -0
- package/dist/types/assets/wav.d.ts.map +1 -0
- package/dist/types/audio/ambient.d.ts +22 -0
- package/dist/types/audio/ambient.d.ts.map +1 -0
- package/dist/types/audio/api.d.ts +37 -0
- package/dist/types/audio/api.d.ts.map +1 -0
- package/dist/types/audio/channels.d.ts +15 -0
- package/dist/types/audio/channels.d.ts.map +1 -0
- package/dist/types/audio/constants.d.ts +2 -0
- package/dist/types/audio/constants.d.ts.map +1 -0
- package/dist/types/audio/context.d.ts +79 -0
- package/dist/types/audio/context.d.ts.map +1 -0
- package/dist/types/audio/music.d.ts +49 -0
- package/dist/types/audio/music.d.ts.map +1 -0
- package/dist/types/audio/occlusion.d.ts +15 -0
- package/dist/types/audio/occlusion.d.ts.map +1 -0
- package/dist/types/audio/precache.d.ts +28 -0
- package/dist/types/audio/precache.d.ts.map +1 -0
- package/dist/types/audio/registry.d.ts +14 -0
- package/dist/types/audio/registry.d.ts.map +1 -0
- package/dist/types/audio/reverb.d.ts +17 -0
- package/dist/types/audio/reverb.d.ts.map +1 -0
- package/dist/types/audio/room.d.ts +5 -0
- package/dist/types/audio/room.d.ts.map +1 -0
- package/dist/types/audio/system.d.ts +112 -0
- package/dist/types/audio/system.d.ts.map +1 -0
- package/dist/types/cli/demoOptimizer.d.ts +10 -0
- package/dist/types/cli/demoOptimizer.d.ts.map +1 -0
- package/dist/types/commands.d.ts +27 -0
- package/dist/types/commands.d.ts.map +1 -0
- package/dist/types/configstrings.d.ts +36 -0
- package/dist/types/configstrings.d.ts.map +1 -0
- package/dist/types/cvars.d.ts +58 -0
- package/dist/types/cvars.d.ts.map +1 -0
- package/dist/types/demo/analysis.d.ts +83 -0
- package/dist/types/demo/analysis.d.ts.map +1 -0
- package/dist/types/demo/analyzer.d.ts +33 -0
- package/dist/types/demo/analyzer.d.ts.map +1 -0
- package/dist/types/demo/api.d.ts +40 -0
- package/dist/types/demo/api.d.ts.map +1 -0
- package/dist/types/demo/asyncParser.d.ts +15 -0
- package/dist/types/demo/asyncParser.d.ts.map +1 -0
- package/dist/types/demo/camera.d.ts +17 -0
- package/dist/types/demo/camera.d.ts.map +1 -0
- package/dist/types/demo/clipper.d.ts +34 -0
- package/dist/types/demo/clipper.d.ts.map +1 -0
- package/dist/types/demo/delta.d.ts +3 -0
- package/dist/types/demo/delta.d.ts.map +1 -0
- package/dist/types/demo/demo.worker.d.ts +126 -0
- package/dist/types/demo/demo.worker.d.ts.map +1 -0
- package/dist/types/demo/demoReader.d.ts +62 -0
- package/dist/types/demo/demoReader.d.ts.map +1 -0
- package/dist/types/demo/demoRecorder.d.ts +15 -0
- package/dist/types/demo/demoRecorder.d.ts.map +1 -0
- package/dist/types/demo/demoStream.d.ts +39 -0
- package/dist/types/demo/demoStream.d.ts.map +1 -0
- package/dist/types/demo/demoWriter.d.ts +8 -0
- package/dist/types/demo/demoWriter.d.ts.map +1 -0
- package/dist/types/demo/index.d.ts +6 -0
- package/dist/types/demo/index.d.ts.map +1 -0
- package/dist/types/demo/message.d.ts +178 -0
- package/dist/types/demo/message.d.ts.map +1 -0
- package/dist/types/demo/optimalClipFinder.d.ts +35 -0
- package/dist/types/demo/optimalClipFinder.d.ts.map +1 -0
- package/dist/types/demo/packager.d.ts +46 -0
- package/dist/types/demo/packager.d.ts.map +1 -0
- package/dist/types/demo/parser.d.ts +222 -0
- package/dist/types/demo/parser.d.ts.map +1 -0
- package/dist/types/demo/playback.d.ts +135 -0
- package/dist/types/demo/playback.d.ts.map +1 -0
- package/dist/types/demo/reader.d.ts +15 -0
- package/dist/types/demo/reader.d.ts.map +1 -0
- package/dist/types/demo/recorder.d.ts +14 -0
- package/dist/types/demo/recorder.d.ts.map +1 -0
- package/dist/types/demo/types.d.ts +37 -0
- package/dist/types/demo/types.d.ts.map +1 -0
- package/dist/types/demo/validator.d.ts +13 -0
- package/dist/types/demo/validator.d.ts.map +1 -0
- package/dist/types/demo/worldStateOptimizer.d.ts +13 -0
- package/dist/types/demo/worldStateOptimizer.d.ts.map +1 -0
- package/dist/types/demo/writer.d.ts +28 -0
- package/dist/types/demo/writer.d.ts.map +1 -0
- package/dist/types/editor/bsp-inspector.d.ts +39 -0
- package/dist/types/editor/bsp-inspector.d.ts.map +1 -0
- package/dist/types/editor/ent.d.ts +21 -0
- package/dist/types/editor/ent.d.ts.map +1 -0
- package/dist/types/host.d.ts +52 -0
- package/dist/types/host.d.ts.map +1 -0
- package/dist/types/index.d.ts +104 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/loop.d.ts +40 -0
- package/dist/types/loop.d.ts.map +1 -0
- package/dist/types/network/clientConnection.d.ts +139 -0
- package/dist/types/network/clientConnection.d.ts.map +1 -0
- package/dist/types/render/__mocks__/frame.d.ts +31 -0
- package/dist/types/render/__mocks__/frame.d.ts.map +1 -0
- package/dist/types/render/bloom.d.ts +19 -0
- package/dist/types/render/bloom.d.ts.map +1 -0
- package/dist/types/render/bsp/generator.d.ts +25 -0
- package/dist/types/render/bsp/generator.d.ts.map +1 -0
- package/dist/types/render/bsp/geometry.d.ts +37 -0
- package/dist/types/render/bsp/geometry.d.ts.map +1 -0
- package/dist/types/render/bsp/renderer.d.ts +12 -0
- package/dist/types/render/bsp/renderer.d.ts.map +1 -0
- package/dist/types/render/bsp/surface.d.ts +4 -0
- package/dist/types/render/bsp/surface.d.ts.map +1 -0
- package/dist/types/render/bsp.d.ts +66 -0
- package/dist/types/render/bsp.d.ts.map +1 -0
- package/dist/types/render/bspPipeline.d.ts +78 -0
- package/dist/types/render/bspPipeline.d.ts.map +1 -0
- package/dist/types/render/bspTraversal.d.ts +13 -0
- package/dist/types/render/bspTraversal.d.ts.map +1 -0
- package/dist/types/render/camera.d.ts +54 -0
- package/dist/types/render/camera.d.ts.map +1 -0
- package/dist/types/render/cameraController.d.ts +28 -0
- package/dist/types/render/cameraController.d.ts.map +1 -0
- package/dist/types/render/collisionVis.d.ts +54 -0
- package/dist/types/render/collisionVis.d.ts.map +1 -0
- package/dist/types/render/colors.d.ts +6 -0
- package/dist/types/render/colors.d.ts.map +1 -0
- package/dist/types/render/context.d.ts +36 -0
- package/dist/types/render/context.d.ts.map +1 -0
- package/dist/types/render/culling.d.ts +12 -0
- package/dist/types/render/culling.d.ts.map +1 -0
- package/dist/types/render/debug.d.ts +36 -0
- package/dist/types/render/debug.d.ts.map +1 -0
- package/dist/types/render/debugMode.d.ts +10 -0
- package/dist/types/render/debugMode.d.ts.map +1 -0
- package/dist/types/render/dlight.d.ts +43 -0
- package/dist/types/render/dlight.d.ts.map +1 -0
- package/dist/types/render/frame.d.ts +78 -0
- package/dist/types/render/frame.d.ts.map +1 -0
- package/dist/types/render/geometry.d.ts +2 -0
- package/dist/types/render/geometry.d.ts.map +1 -0
- package/dist/types/render/gizmo.d.ts +32 -0
- package/dist/types/render/gizmo.d.ts.map +1 -0
- package/dist/types/render/gpuProfiler.d.ts +59 -0
- package/dist/types/render/gpuProfiler.d.ts.map +1 -0
- package/dist/types/render/instancing.d.ts +12 -0
- package/dist/types/render/instancing.d.ts.map +1 -0
- package/dist/types/render/interface.d.ts +50 -0
- package/dist/types/render/interface.d.ts.map +1 -0
- package/dist/types/render/light.d.ts +10 -0
- package/dist/types/render/light.d.ts.map +1 -0
- package/dist/types/render/lightCulling.d.ts +17 -0
- package/dist/types/render/lightCulling.d.ts.map +1 -0
- package/dist/types/render/lightStyles.d.ts +10 -0
- package/dist/types/render/lightStyles.d.ts.map +1 -0
- package/dist/types/render/materialLoader.d.ts +5 -0
- package/dist/types/render/materialLoader.d.ts.map +1 -0
- package/dist/types/render/materials.d.ts +39 -0
- package/dist/types/render/materials.d.ts.map +1 -0
- package/dist/types/render/md2Pipeline.d.ts +74 -0
- package/dist/types/render/md2Pipeline.d.ts.map +1 -0
- package/dist/types/render/md3Pipeline.d.ts +94 -0
- package/dist/types/render/md3Pipeline.d.ts.map +1 -0
- package/dist/types/render/options.d.ts +9 -0
- package/dist/types/render/options.d.ts.map +1 -0
- package/dist/types/render/particleSystem.d.ts +125 -0
- package/dist/types/render/particleSystem.d.ts.map +1 -0
- package/dist/types/render/postprocessing/pipeline.d.ts +13 -0
- package/dist/types/render/postprocessing/pipeline.d.ts.map +1 -0
- package/dist/types/render/renderer.d.ts +8 -0
- package/dist/types/render/renderer.d.ts.map +1 -0
- package/dist/types/render/resources.d.ts +69 -0
- package/dist/types/render/resources.d.ts.map +1 -0
- package/dist/types/render/scene.d.ts +31 -0
- package/dist/types/render/scene.d.ts.map +1 -0
- package/dist/types/render/shaderProgram.d.ts +19 -0
- package/dist/types/render/shaderProgram.d.ts.map +1 -0
- package/dist/types/render/skybox.d.ts +28 -0
- package/dist/types/render/skybox.d.ts.map +1 -0
- package/dist/types/render/sprite.d.ts +21 -0
- package/dist/types/render/sprite.d.ts.map +1 -0
- package/dist/types/render/types.d.ts +29 -0
- package/dist/types/render/types.d.ts.map +1 -0
- package/dist/types/render/webgpu/constants.d.ts +29 -0
- package/dist/types/render/webgpu/constants.d.ts.map +1 -0
- package/dist/types/render/webgpu/context.d.ts +41 -0
- package/dist/types/render/webgpu/context.d.ts.map +1 -0
- package/dist/types/render/webgpu/frame.d.ts +58 -0
- package/dist/types/render/webgpu/frame.d.ts.map +1 -0
- package/dist/types/render/webgpu/headless.d.ts +9 -0
- package/dist/types/render/webgpu/headless.d.ts.map +1 -0
- package/dist/types/render/webgpu/pipelines/sprite.d.ts +31 -0
- package/dist/types/render/webgpu/pipelines/sprite.d.ts.map +1 -0
- package/dist/types/render/webgpu/renderer.d.ts +30 -0
- package/dist/types/render/webgpu/renderer.d.ts.map +1 -0
- package/dist/types/render/webgpu/resources.d.ts +240 -0
- package/dist/types/render/webgpu/resources.d.ts.map +1 -0
- package/dist/types/render/webgpu/shaders/mipmapShader.d.ts +2 -0
- package/dist/types/render/webgpu/shaders/mipmapShader.d.ts.map +1 -0
- package/dist/types/render/webgpu/shaders/spriteShader.d.ts +2 -0
- package/dist/types/render/webgpu/shaders/spriteShader.d.ts.map +1 -0
- package/dist/types/runtime.d.ts +19 -0
- package/dist/types/runtime.d.ts.map +1 -0
- package/dist/types/stream/streamingBuffer.d.ts +102 -0
- package/dist/types/stream/streamingBuffer.d.ts.map +1 -0
- package/dist/types/tools/lightmapExport.d.ts +17 -0
- package/dist/types/tools/lightmapExport.d.ts.map +1 -0
- package/package.json +56 -0
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export declare const renderFrame: import("vitest").Mock<any[], {
|
|
2
|
+
drawCalls: number;
|
|
3
|
+
vertexCount: number;
|
|
4
|
+
batches: number;
|
|
5
|
+
facesDrawn: number;
|
|
6
|
+
skyDrawn: boolean;
|
|
7
|
+
viewModelDrawn: boolean;
|
|
8
|
+
fps: number;
|
|
9
|
+
shaderSwitches: number;
|
|
10
|
+
visibleSurfaces: number;
|
|
11
|
+
culledSurfaces: number;
|
|
12
|
+
visibleEntities: number;
|
|
13
|
+
culledEntities: number;
|
|
14
|
+
}>;
|
|
15
|
+
export declare const createFrameRenderer: import("vitest").Mock<[], {
|
|
16
|
+
renderFrame: import("vitest").Mock<any[], {
|
|
17
|
+
drawCalls: number;
|
|
18
|
+
vertexCount: number;
|
|
19
|
+
batches: number;
|
|
20
|
+
facesDrawn: number;
|
|
21
|
+
skyDrawn: boolean;
|
|
22
|
+
viewModelDrawn: boolean;
|
|
23
|
+
fps: number;
|
|
24
|
+
shaderSwitches: number;
|
|
25
|
+
visibleSurfaces: number;
|
|
26
|
+
culledSurfaces: number;
|
|
27
|
+
visibleEntities: number;
|
|
28
|
+
culledEntities: number;
|
|
29
|
+
}>;
|
|
30
|
+
}>;
|
|
31
|
+
//# sourceMappingURL=frame.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frame.d.ts","sourceRoot":"","sources":["../../../../src/render/__mocks__/frame.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,WAAW;;;;;;;;;;;;;EAgBtB,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;EAE7B,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Texture2D } from './resources.js';
|
|
2
|
+
export declare class BloomPipeline {
|
|
3
|
+
readonly gl: WebGL2RenderingContext;
|
|
4
|
+
private extractProgram;
|
|
5
|
+
private blurProgram;
|
|
6
|
+
private compositeProgram;
|
|
7
|
+
private vao;
|
|
8
|
+
private framebuffer1;
|
|
9
|
+
private framebuffer2;
|
|
10
|
+
private texture1;
|
|
11
|
+
private texture2;
|
|
12
|
+
private width;
|
|
13
|
+
private height;
|
|
14
|
+
constructor(gl: WebGL2RenderingContext);
|
|
15
|
+
resize(width: number, height: number): void;
|
|
16
|
+
render(sceneTexture: Texture2D, intensity?: number): void;
|
|
17
|
+
dispose(): void;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=bloom.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bloom.d.ts","sourceRoot":"","sources":["../../../src/render/bloom.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,SAAS,EAAE,MAAM,gBAAgB,CAAC;AA+ExD,qBAAa,aAAa;IACtB,QAAQ,CAAC,EAAE,EAAE,sBAAsB,CAAC;IACpC,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,WAAW,CAAgB;IACnC,OAAO,CAAC,gBAAgB,CAAgB;IACxC,OAAO,CAAC,GAAG,CAAgC;IAE3C,OAAO,CAAC,YAAY,CAAc;IAClC,OAAO,CAAC,YAAY,CAAc;IAClC,OAAO,CAAC,QAAQ,CAAY;IAC5B,OAAO,CAAC,QAAQ,CAAY;IAE5B,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,MAAM,CAAK;gBAEP,EAAE,EAAE,sBAAsB;IAyBtC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAgBpC,MAAM,CAAC,YAAY,EAAE,SAAS,EAAE,SAAS,GAAE,MAAY;IA2EvD,OAAO;CAUV"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { BspSurfaceInput, BspBatch } from '../bsp/geometry.js';
|
|
2
|
+
export declare class LightmapPacker {
|
|
3
|
+
width: number;
|
|
4
|
+
height: number;
|
|
5
|
+
private x;
|
|
6
|
+
private y;
|
|
7
|
+
private rowHeight;
|
|
8
|
+
placements: Map<number, {
|
|
9
|
+
x: number;
|
|
10
|
+
y: number;
|
|
11
|
+
w: number;
|
|
12
|
+
h: number;
|
|
13
|
+
}>;
|
|
14
|
+
constructor(width: number, height: number);
|
|
15
|
+
pack(id: number, w: number, h: number): boolean;
|
|
16
|
+
}
|
|
17
|
+
export interface BspGeometryData {
|
|
18
|
+
vertices: Float32Array;
|
|
19
|
+
indices: Uint32Array;
|
|
20
|
+
batches: BspBatch[];
|
|
21
|
+
lightmapAtlas: Uint8Array | null;
|
|
22
|
+
atlasSize: number;
|
|
23
|
+
}
|
|
24
|
+
export declare function generateBspGeometryData(surfaces: BspSurfaceInput[], hiddenClassnames?: Set<string>, mapModels?: any[]): BspGeometryData;
|
|
25
|
+
//# sourceMappingURL=generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../../../src/render/bsp/generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAG/D,qBAAa,cAAc;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,CAAC,CAAK;IACd,OAAO,CAAC,CAAC,CAAK;IACd,OAAO,CAAC,SAAS,CAAK;IAGtB,UAAU;WAAuB,MAAM;WAAK,MAAM;WAAK,MAAM;WAAK,MAAM;OAAK;gBAEjE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAKzC,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO;CAmBhD;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,YAAY,CAAC;IACvB,OAAO,EAAE,WAAW,CAAC;IACrB,OAAO,EAAE,QAAQ,EAAE,CAAC;IACpB,aAAa,EAAE,UAAU,GAAG,IAAI,CAAC;IACjC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,eAAe,EAAE,EAC3B,gBAAgB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,EAC9B,SAAS,CAAC,EAAE,GAAG,EAAE,GAChB,eAAe,CAyLjB"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { BspMap } from '../../assets/bsp.js';
|
|
2
|
+
import { VertexArray, VertexBuffer, IndexBuffer, Texture2D } from '../resources.js';
|
|
3
|
+
export interface BspSurfaceLightmap {
|
|
4
|
+
width: number;
|
|
5
|
+
height: number;
|
|
6
|
+
data: Uint8Array;
|
|
7
|
+
}
|
|
8
|
+
export interface BspSurfaceInput {
|
|
9
|
+
faceIndex: number;
|
|
10
|
+
textureName: string;
|
|
11
|
+
flags: number;
|
|
12
|
+
vertices: Float32Array;
|
|
13
|
+
vertexCount: number;
|
|
14
|
+
styles: [number, number, number, number];
|
|
15
|
+
lightmap?: BspSurfaceLightmap;
|
|
16
|
+
}
|
|
17
|
+
export interface BspBatch {
|
|
18
|
+
textureName: string;
|
|
19
|
+
offset: number;
|
|
20
|
+
count: number;
|
|
21
|
+
flags: number;
|
|
22
|
+
styleIndices: readonly number[];
|
|
23
|
+
styleLayers: readonly number[];
|
|
24
|
+
lightmapOffset?: number;
|
|
25
|
+
}
|
|
26
|
+
export interface BspGeometry {
|
|
27
|
+
vao: VertexArray;
|
|
28
|
+
vbo: VertexBuffer;
|
|
29
|
+
ibo: IndexBuffer;
|
|
30
|
+
indexCount: number;
|
|
31
|
+
batches: BspBatch[];
|
|
32
|
+
lightmapAtlas: Texture2D | null;
|
|
33
|
+
}
|
|
34
|
+
export declare function buildBspGeometry(gl: WebGL2RenderingContext, surfaces: BspSurfaceInput[], map?: BspMap, options?: {
|
|
35
|
+
hiddenClassnames?: Set<string>;
|
|
36
|
+
}): BspGeometry;
|
|
37
|
+
//# sourceMappingURL=geometry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"geometry.d.ts","sourceRoot":"","sources":["../../../../src/render/bsp/geometry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAGpF,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,UAAU,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,YAAY,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,QAAQ,CAAC,EAAE,kBAAkB,CAAC;CAC/B;AAED,MAAM,WAAW,QAAQ;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,WAAW,CAAC;IACjB,GAAG,EAAE,YAAY,CAAC;IAClB,GAAG,EAAE,WAAW,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,QAAQ,EAAE,CAAC;IACpB,aAAa,EAAE,SAAS,GAAG,IAAI,CAAC;CACjC;AAED,wBAAgB,gBAAgB,CAC9B,EAAE,EAAE,sBAAsB,EAC1B,QAAQ,EAAE,eAAe,EAAE,EAC3B,GAAG,CAAC,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;IACR,gBAAgB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAChC,GACA,WAAW,CA6Eb"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { BspGeometry } from './geometry.js';
|
|
2
|
+
import { BspSurfacePipeline } from '../bspPipeline.js';
|
|
3
|
+
import { LightStyleManager } from '../lightStyles.js';
|
|
4
|
+
export declare class BspRenderer {
|
|
5
|
+
readonly gl: WebGL2RenderingContext;
|
|
6
|
+
readonly pipeline: BspSurfacePipeline;
|
|
7
|
+
readonly lightStyles: LightStyleManager;
|
|
8
|
+
constructor(gl: WebGL2RenderingContext);
|
|
9
|
+
render(geometry: BspGeometry, modelViewProjection: Float32List, timeSeconds: number, diffuseTextureUnit?: number): void;
|
|
10
|
+
dispose(): void;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=renderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../../../src/render/bsp/renderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,qBAAa,WAAW;IACtB,QAAQ,CAAC,EAAE,EAAE,sBAAsB,CAAC;IACpC,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAC;IACtC,QAAQ,CAAC,WAAW,EAAE,iBAAiB,CAAC;gBAE5B,EAAE,EAAE,sBAAsB;IAMtC,MAAM,CAAC,QAAQ,EAAE,WAAW,EAAE,mBAAmB,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,kBAAkB,SAAI,GAAG,IAAI;IAwClH,OAAO,IAAI,IAAI;CAGhB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"surface.d.ts","sourceRoot":"","sources":["../../../../src/render/bsp/surface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAA6B,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAE,eAAe,EAAsB,MAAM,eAAe,CAAC;AAmGpE,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,EAAE,CA6HhE"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { type SurfaceFlag } from '@quake2ts/shared';
|
|
2
|
+
import { IndexBuffer, Texture2D, VertexArray, VertexBuffer, type VertexAttributeLayout } from './resources.js';
|
|
3
|
+
import { BspMap } from '../assets/bsp.js';
|
|
4
|
+
export interface BspLightmapData {
|
|
5
|
+
readonly width: number;
|
|
6
|
+
readonly height: number;
|
|
7
|
+
readonly samples: Uint8Array;
|
|
8
|
+
}
|
|
9
|
+
export interface BspSurfaceInput {
|
|
10
|
+
readonly vertices: ReadonlyArray<number> | Float32Array;
|
|
11
|
+
readonly textureCoords: ReadonlyArray<number> | Float32Array;
|
|
12
|
+
readonly lightmapCoords?: ReadonlyArray<number> | Float32Array;
|
|
13
|
+
readonly indices?: ReadonlyArray<number> | Uint16Array | Uint32Array;
|
|
14
|
+
readonly texture: string;
|
|
15
|
+
readonly surfaceFlags?: SurfaceFlag;
|
|
16
|
+
readonly lightmap?: BspLightmapData;
|
|
17
|
+
readonly faceIndex: number;
|
|
18
|
+
}
|
|
19
|
+
export interface LightmapPlacement {
|
|
20
|
+
readonly atlasIndex: number;
|
|
21
|
+
readonly offset: [number, number];
|
|
22
|
+
readonly scale: [number, number];
|
|
23
|
+
}
|
|
24
|
+
export interface BspSurfaceGeometry {
|
|
25
|
+
readonly vao: VertexArray;
|
|
26
|
+
readonly vertexBuffer: VertexBuffer;
|
|
27
|
+
readonly indexBuffer: IndexBuffer;
|
|
28
|
+
readonly indexCount: number;
|
|
29
|
+
readonly vertexCount: number;
|
|
30
|
+
readonly texture: string;
|
|
31
|
+
readonly surfaceFlags: SurfaceFlag;
|
|
32
|
+
readonly lightmap?: LightmapPlacement;
|
|
33
|
+
readonly vertexData: Float32Array;
|
|
34
|
+
readonly indexData: Uint16Array;
|
|
35
|
+
}
|
|
36
|
+
export interface LightmapAtlas {
|
|
37
|
+
readonly texture: Texture2D;
|
|
38
|
+
readonly width: number;
|
|
39
|
+
readonly height: number;
|
|
40
|
+
readonly pixels: Uint8Array;
|
|
41
|
+
}
|
|
42
|
+
export interface BspBuildOptions {
|
|
43
|
+
readonly atlasSize?: number;
|
|
44
|
+
readonly lightmapPadding?: number;
|
|
45
|
+
readonly hiddenClassnames?: Set<string>;
|
|
46
|
+
}
|
|
47
|
+
export interface BspGeometryBuildResult {
|
|
48
|
+
readonly surfaces: readonly BspSurfaceGeometry[];
|
|
49
|
+
readonly lightmaps: readonly LightmapAtlas[];
|
|
50
|
+
}
|
|
51
|
+
export declare const BSP_VERTEX_LAYOUT: readonly VertexAttributeLayout[];
|
|
52
|
+
/**
|
|
53
|
+
* Converts a parsed BSP map into a set of flat surface inputs ready for rendering.
|
|
54
|
+
*
|
|
55
|
+
* This function handles:
|
|
56
|
+
* 1. Traversing faces and their edges to build vertex lists.
|
|
57
|
+
* 2. Calculating texture coordinates (UVs) from surface normals and texture info.
|
|
58
|
+
* 3. Generating triangle indices (fan triangulation) for convex polygon faces.
|
|
59
|
+
* 4. Extracting and calculating lightmap data and coordinates.
|
|
60
|
+
*
|
|
61
|
+
* @param map The parsed BSP map structure.
|
|
62
|
+
* @returns An array of surface inputs suitable for consumption by `buildBspGeometry`.
|
|
63
|
+
*/
|
|
64
|
+
export declare function createBspSurfaces(map: BspMap): BspSurfaceInput[];
|
|
65
|
+
export declare function buildBspGeometry(gl: WebGL2RenderingContext, surfaces: readonly BspSurfaceInput[], map?: BspMap, options?: BspBuildOptions): BspGeometryBuildResult;
|
|
66
|
+
//# sourceMappingURL=bsp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bsp.d.ts","sourceRoot":"","sources":["../../../src/render/bsp.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { type SurfaceFlag } from '@quake2ts/shared';
|
|
2
|
+
import { ShaderProgram } from './shaderProgram.js';
|
|
3
|
+
import { DLight } from './dlight.js';
|
|
4
|
+
import { RenderModeConfig } from './frame.js';
|
|
5
|
+
import { BspSurfaceGeometry } from './bsp.js';
|
|
6
|
+
import { IndexBuffer } from './resources.js';
|
|
7
|
+
export interface SurfaceRenderState {
|
|
8
|
+
readonly alpha: number;
|
|
9
|
+
readonly blend: boolean;
|
|
10
|
+
readonly depthWrite: boolean;
|
|
11
|
+
readonly warp: boolean;
|
|
12
|
+
readonly flowOffset: readonly [number, number];
|
|
13
|
+
readonly sky: boolean;
|
|
14
|
+
}
|
|
15
|
+
export interface BspSurfaceBindOptions {
|
|
16
|
+
readonly modelViewProjection: Float32List;
|
|
17
|
+
readonly styleIndices?: readonly number[];
|
|
18
|
+
readonly styleValues?: ReadonlyArray<number>;
|
|
19
|
+
readonly styleLayers?: readonly number[];
|
|
20
|
+
readonly diffuseSampler?: number;
|
|
21
|
+
readonly lightmapSampler?: number;
|
|
22
|
+
readonly refractionSampler?: number;
|
|
23
|
+
readonly surfaceFlags?: SurfaceFlag;
|
|
24
|
+
readonly timeSeconds?: number;
|
|
25
|
+
readonly texScroll?: readonly [number, number];
|
|
26
|
+
readonly alpha?: number;
|
|
27
|
+
readonly warp?: boolean;
|
|
28
|
+
readonly dlights?: readonly DLight[];
|
|
29
|
+
readonly renderMode?: RenderModeConfig;
|
|
30
|
+
readonly lightmapOnly?: boolean;
|
|
31
|
+
readonly brightness?: number;
|
|
32
|
+
readonly gamma?: number;
|
|
33
|
+
readonly fullbright?: boolean;
|
|
34
|
+
readonly ambient?: number;
|
|
35
|
+
}
|
|
36
|
+
export declare const BSP_SURFACE_VERTEX_SOURCE = "#version 300 es\nprecision highp float;\n\nlayout(location = 0) in vec3 a_position;\nlayout(location = 1) in vec2 a_texCoord;\nlayout(location = 2) in vec2 a_lightmapCoord;\nlayout(location = 3) in float a_lightmapStep;\n\nuniform mat4 u_modelViewProjection;\nuniform vec2 u_texScroll;\nuniform vec2 u_lightmapScroll;\nuniform float u_time;\nuniform bool u_warp;\n\nout vec2 v_texCoord;\nout vec2 v_lightmapCoord;\nout float v_lightmapStep;\nout vec3 v_position;\nout vec4 v_screenPos; // For refraction\n\n// Match gl_warp.c TURBSCALE\nconst float TURBSCALE = (256.0 / (2.0 * 3.14159));\n\nvec2 applyScroll(vec2 uv, vec2 scroll) {\n return uv + scroll;\n}\n\nvoid main() {\n vec3 pos = a_position;\n vec2 tex = a_texCoord;\n vec2 lm = a_lightmapCoord;\n\n // Vertex Warping (match gl_warp.c)\n\n if (u_warp) {\n // Simple sine wave distortion\n float amp = 0.125;\n\n // Let's just use sin directly.\n float s = tex.x + sin((tex.y * 0.125 + u_time) * 1.0) * amp;\n float t = tex.y + sin((tex.x * 0.125 + u_time) * 1.0) * amp;\n\n tex = vec2(s, t);\n }\n\n v_texCoord = applyScroll(tex, u_texScroll);\n v_lightmapCoord = applyScroll(lm, u_lightmapScroll);\n v_lightmapStep = a_lightmapStep;\n v_position = pos;\n gl_Position = u_modelViewProjection * vec4(pos, 1.0);\n v_screenPos = gl_Position;\n}";
|
|
37
|
+
export declare const BSP_SURFACE_FRAGMENT_SOURCE = "#version 300 es\nprecision highp float;\n\nstruct DLight {\n vec3 position;\n vec3 color;\n float intensity;\n};\n\nconst int MAX_DLIGHTS = 32;\n\nin vec2 v_texCoord;\nin vec2 v_lightmapCoord;\nin float v_lightmapStep;\nin vec3 v_position;\nin vec4 v_screenPos;\n\nuniform sampler2D u_diffuseMap;\nuniform sampler2D u_lightmapAtlas;\nuniform sampler2D u_refractionMap; // New: Refraction map\nuniform vec4 u_lightStyleFactors;\nuniform vec4 u_styleLayerMapping; // 0, 1, 2... or -1 if invalid\nuniform float u_alpha;\nuniform bool u_applyLightmap;\nuniform bool u_warp;\nuniform bool u_lightmapOnly;\nuniform bool u_hasRefraction; // New: Flag to enable refraction\nuniform float u_time;\n\nuniform int u_renderMode; // 0: Textured, 1: Solid, 2: Solid Faceted\nuniform vec4 u_solidColor;\n\nuniform int u_numDlights;\nuniform DLight u_dlights[MAX_DLIGHTS];\n\n// Lighting controls\nuniform float u_brightness;\nuniform float u_gamma;\nuniform bool u_fullbright;\nuniform float u_ambient;\n\nout vec4 o_color;\n\nvoid main() {\n vec4 finalColor;\n\n if (u_renderMode == 0) {\n // TEXTURED MODE\n vec4 base = vec4(1.0);\n if (!u_lightmapOnly) {\n base = texture(u_diffuseMap, v_texCoord);\n }\n\n // Refraction Logic\n if (u_warp && u_hasRefraction) {\n vec2 ndc = (v_screenPos.xy / v_screenPos.w) * 0.5 + 0.5;\n\n // Calculate distortion based on texture coordinates time\n // Simple turbulent distortion\n float distortionStrength = 0.05;\n vec2 distortion = vec2(\n sin(v_texCoord.y * 10.0 + u_time * 2.0),\n cos(v_texCoord.x * 10.0 + u_time * 2.0)\n ) * distortionStrength;\n\n vec3 refractColor = texture(u_refractionMap, ndc + distortion).rgb;\n\n // Blend base texture with refraction\n // Quake 2 water usually is quite opaque but let's try a blend\n // Or just tint the refraction\n\n // If it's water (warp), we usually want some transparency + refraction\n // Let's mix refraction into the base color\n base.rgb = mix(base.rgb, refractColor, 0.4);\n base.a = 0.7; // Ensure some alpha for water\n }\n\n vec3 totalLight = vec3(1.0);\n\n if (u_applyLightmap && !u_fullbright) {\n // Multi-style lightmap accumulation\n vec3 light = vec3(0.0);\n bool hasLight = false;\n\n // Loop unrolled-ish\n for (int i = 0; i < 4; i++) {\n float layer = u_styleLayerMapping[i];\n float factor = u_lightStyleFactors[i];\n\n if (layer >= -0.5) { // Valid layer (check >= 0 approx)\n // Offset V by layer * step\n // Since we packed vertically\n vec2 offset = vec2(0.0, layer * v_lightmapStep);\n light += texture(u_lightmapAtlas, v_lightmapCoord + offset).rgb * factor;\n hasLight = true;\n }\n }\n\n if (!hasLight) light = vec3(1.0);\n\n totalLight = light;\n\n // Add dynamic lights\n for (int i = 0; i < MAX_DLIGHTS; i++) {\n if (i >= u_numDlights) break;\n DLight dlight = u_dlights[i];\n\n float dist = distance(v_position, dlight.position);\n // Quake 2 dlight formula\n if (dist < dlight.intensity) {\n float contribution = (dlight.intensity - dist) * (1.0 / 255.0);\n totalLight += dlight.color * contribution;\n }\n }\n } else if (u_fullbright) {\n totalLight = vec3(1.0);\n }\n\n // Apply ambient minimum\n totalLight = max(totalLight, vec3(u_ambient));\n\n // Apply brightness\n totalLight *= u_brightness;\n\n base.rgb *= totalLight;\n\n // Gamma correction\n if (u_gamma != 1.0) {\n base.rgb = pow(base.rgb, vec3(1.0 / u_gamma));\n }\n\n finalColor = vec4(base.rgb, base.a * u_alpha);\n } else {\n // SOLID / WIREFRAME / FACETED\n vec3 color = u_solidColor.rgb;\n if (u_renderMode == 2) {\n // FACETED: simple lighting based on face normal\n vec3 fdx = dFdx(v_position);\n vec3 fdy = dFdy(v_position);\n vec3 faceNormal = normalize(cross(fdx, fdy));\n\n // Simple directional light from \"camera\" or fixed\n vec3 lightDir = normalize(vec3(0.5, 0.5, 1.0));\n float diff = max(dot(faceNormal, lightDir), 0.2); // Ambient 0.2\n color *= diff;\n }\n finalColor = vec4(color, u_solidColor.a * u_alpha);\n }\n\n o_color = finalColor;\n}";
|
|
38
|
+
export declare function resolveLightStyles(styleIndices?: readonly number[], styleValues?: ReadonlyArray<number>): Float32Array;
|
|
39
|
+
export declare function deriveSurfaceRenderState(surfaceFlags?: SurfaceFlag, timeSeconds?: number): SurfaceRenderState;
|
|
40
|
+
declare module './bsp.js' {
|
|
41
|
+
interface BspSurfaceGeometry {
|
|
42
|
+
wireframeIndexBuffer?: IndexBuffer;
|
|
43
|
+
wireframeIndexCount?: number;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
export declare class BspSurfacePipeline {
|
|
47
|
+
readonly gl: WebGL2RenderingContext;
|
|
48
|
+
readonly program: ShaderProgram;
|
|
49
|
+
private readonly uniformMvp;
|
|
50
|
+
private readonly uniformTexScroll;
|
|
51
|
+
private readonly uniformLmScroll;
|
|
52
|
+
private readonly uniformLightStyles;
|
|
53
|
+
private readonly uniformStyleLayerMapping;
|
|
54
|
+
private readonly uniformAlpha;
|
|
55
|
+
private readonly uniformApplyLightmap;
|
|
56
|
+
private readonly uniformWarp;
|
|
57
|
+
private readonly uniformLightmapOnly;
|
|
58
|
+
private readonly uniformDiffuse;
|
|
59
|
+
private readonly uniformLightmap;
|
|
60
|
+
private readonly uniformRefraction;
|
|
61
|
+
private readonly uniformHasRefraction;
|
|
62
|
+
private readonly uniformTime;
|
|
63
|
+
private readonly uniformRenderMode;
|
|
64
|
+
private readonly uniformSolidColor;
|
|
65
|
+
private readonly uniformNumDlights;
|
|
66
|
+
private readonly uniformDlights;
|
|
67
|
+
private readonly uniformBrightness;
|
|
68
|
+
private readonly uniformGamma;
|
|
69
|
+
private readonly uniformFullbright;
|
|
70
|
+
private readonly uniformAmbient;
|
|
71
|
+
constructor(gl: WebGL2RenderingContext);
|
|
72
|
+
get shaderSize(): number;
|
|
73
|
+
bind(options: BspSurfaceBindOptions): SurfaceRenderState;
|
|
74
|
+
draw(geometry: BspSurfaceGeometry, renderMode?: RenderModeConfig): void;
|
|
75
|
+
dispose(): void;
|
|
76
|
+
}
|
|
77
|
+
export declare function applySurfaceState(gl: WebGL2RenderingContext, state: SurfaceRenderState): void;
|
|
78
|
+
//# sourceMappingURL=bspPipeline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bspPipeline.d.ts","sourceRoot":"","sources":["../../../src/render/bspPipeline.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type Vec3 } from '@quake2ts/shared';
|
|
2
|
+
import type { BspMap, BspVisibility } from '../assets/bsp.js';
|
|
3
|
+
import { type FrustumPlane } from './culling.js';
|
|
4
|
+
export interface VisibleFace {
|
|
5
|
+
readonly faceIndex: number;
|
|
6
|
+
readonly leafIndex: number;
|
|
7
|
+
readonly sortKey: number;
|
|
8
|
+
}
|
|
9
|
+
export declare function isClusterVisible(visibility: BspVisibility | undefined, fromCluster: number, testCluster: number): boolean;
|
|
10
|
+
export declare function findLeafForPoint(map: BspMap, point: Vec3): number;
|
|
11
|
+
export declare function calculateReachableAreas(map: BspMap, startArea: number, portalState: ReadonlyArray<boolean>): Set<number>;
|
|
12
|
+
export declare function gatherVisibleFaces(map: BspMap, cameraPosition: Vec3, frustum: readonly FrustumPlane[], portalState?: ReadonlyArray<boolean>): VisibleFace[];
|
|
13
|
+
//# sourceMappingURL=bspTraversal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bspTraversal.d.ts","sourceRoot":"","sources":["../../../src/render/bspTraversal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,KAAK,EAEV,MAAM,EAGN,aAAa,EACd,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAwB,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AAEvE,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAcD,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,aAAa,GAAG,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAezH;AAQD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,GAAG,MAAM,CAcjE;AAuED,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,aAAa,CAAC,OAAO,CAAC,GAClC,GAAG,CAAC,MAAM,CAAC,CA2Cb;AAED,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,MAAM,EACX,cAAc,EAAE,IAAI,EACpB,OAAO,EAAE,SAAS,YAAY,EAAE,EAChC,WAAW,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,GACnC,WAAW,EAAE,CAef"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { mat4, vec3 } from 'gl-matrix';
|
|
2
|
+
export interface CameraState {
|
|
3
|
+
position: vec3;
|
|
4
|
+
angles: vec3;
|
|
5
|
+
}
|
|
6
|
+
export declare class Camera {
|
|
7
|
+
private _position;
|
|
8
|
+
private _angles;
|
|
9
|
+
private _bobAngles;
|
|
10
|
+
private _bobOffset;
|
|
11
|
+
private _kickAngles;
|
|
12
|
+
private _rollAngle;
|
|
13
|
+
private _fov;
|
|
14
|
+
private _aspect;
|
|
15
|
+
private _near;
|
|
16
|
+
private _far;
|
|
17
|
+
private _viewMatrix;
|
|
18
|
+
private _projectionMatrix;
|
|
19
|
+
private _viewProjectionMatrix;
|
|
20
|
+
private _dirty;
|
|
21
|
+
onCameraMove?: (camera: CameraState) => void;
|
|
22
|
+
get position(): vec3;
|
|
23
|
+
set position(value: vec3);
|
|
24
|
+
get angles(): vec3;
|
|
25
|
+
set angles(value: vec3);
|
|
26
|
+
get bobAngles(): vec3;
|
|
27
|
+
set bobAngles(value: vec3);
|
|
28
|
+
get kickAngles(): vec3;
|
|
29
|
+
set kickAngles(value: vec3);
|
|
30
|
+
get bobOffset(): vec3;
|
|
31
|
+
set bobOffset(value: vec3);
|
|
32
|
+
get rollAngle(): number;
|
|
33
|
+
set rollAngle(value: number);
|
|
34
|
+
get fov(): number;
|
|
35
|
+
set fov(value: number);
|
|
36
|
+
get aspect(): number;
|
|
37
|
+
set aspect(value: number);
|
|
38
|
+
setPosition(x: number, y: number, z: number): void;
|
|
39
|
+
setRotation(pitch: number, yaw: number, roll: number): void;
|
|
40
|
+
setFov(fov: number): void;
|
|
41
|
+
setAspectRatio(aspect: number): void;
|
|
42
|
+
lookAt(target: vec3): void;
|
|
43
|
+
private triggerMoveEvent;
|
|
44
|
+
get viewMatrix(): mat4;
|
|
45
|
+
get projectionMatrix(): mat4;
|
|
46
|
+
get viewProjectionMatrix(): mat4;
|
|
47
|
+
getViewmodelProjectionMatrix(fov: number): mat4;
|
|
48
|
+
screenToWorldRay(screenX: number, screenY: number): {
|
|
49
|
+
origin: vec3;
|
|
50
|
+
direction: vec3;
|
|
51
|
+
};
|
|
52
|
+
private updateMatrices;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=camera.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"camera.d.ts","sourceRoot":"","sources":["../../../src/render/camera.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGvC,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,IAAI,CAAC;IACf,MAAM,EAAE,IAAI,CAAC;CACd;AAED,qBAAa,MAAM;IACjB,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,IAAI,CAAM;IAClB,OAAO,CAAC,OAAO,CAAO;IACtB,OAAO,CAAC,KAAK,CAAO;IACpB,OAAO,CAAC,IAAI,CAAQ;IAEpB,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,iBAAiB,CAAuB;IAChD,OAAO,CAAC,qBAAqB,CAAuB;IACpD,OAAO,CAAC,MAAM,CAAQ;IAGf,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC;IAEpD,IAAI,QAAQ,IAAI,IAAI,CAEnB;IAED,IAAI,QAAQ,CAAC,KAAK,EAAE,IAAI,EAMvB;IAED,IAAI,MAAM,IAAI,IAAI,CAEjB;IAED,IAAI,MAAM,CAAC,KAAK,EAAE,IAAI,EAMrB;IAED,IAAI,SAAS,IAAI,IAAI,CAEpB;IAED,IAAI,SAAS,CAAC,KAAK,EAAE,IAAI,EAGxB;IAED,IAAI,UAAU,IAAI,IAAI,CAErB;IAED,IAAI,UAAU,CAAC,KAAK,EAAE,IAAI,EAGzB;IAED,IAAI,SAAS,IAAI,IAAI,CAEpB;IAED,IAAI,SAAS,CAAC,KAAK,EAAE,IAAI,EAGxB;IAED,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,IAAI,SAAS,CAAC,KAAK,EAAE,MAAM,EAG1B;IAED,IAAI,GAAG,IAAI,MAAM,CAEhB;IAED,IAAI,GAAG,CAAC,KAAK,EAAE,MAAM,EAGpB;IAED,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,IAAI,MAAM,CAAC,KAAK,EAAE,MAAM,EAGvB;IAGD,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IASlD,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAS3D,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAIzB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAIpC,MAAM,CAAC,MAAM,EAAE,IAAI,GAAG,IAAI;IA+B1B,OAAO,CAAC,gBAAgB;IASxB,IAAI,UAAU,IAAI,IAAI,CAGrB;IAED,IAAI,gBAAgB,IAAI,IAAI,CAG3B;IAED,IAAI,oBAAoB,IAAI,IAAI,CAG/B;IAED,4BAA4B,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAY/C,gBAAgB,CACd,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GACd;QAAE,MAAM,EAAE,IAAI,CAAC;QAAC,SAAS,EAAE,IAAI,CAAA;KAAE;IAsDpC,OAAO,CAAC,cAAc;CAyFvB"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { vec3 } from 'gl-matrix';
|
|
2
|
+
import { Camera } from './camera.js';
|
|
3
|
+
export interface CameraInput {
|
|
4
|
+
moveForward: boolean;
|
|
5
|
+
moveBackward: boolean;
|
|
6
|
+
moveLeft: boolean;
|
|
7
|
+
moveRight: boolean;
|
|
8
|
+
moveUp: boolean;
|
|
9
|
+
moveDown: boolean;
|
|
10
|
+
pitch: number;
|
|
11
|
+
yaw: number;
|
|
12
|
+
}
|
|
13
|
+
export interface CameraControllerOptions {
|
|
14
|
+
speed: number;
|
|
15
|
+
sensitivity: number;
|
|
16
|
+
collisionEnabled: boolean;
|
|
17
|
+
checkPosition?: (pos: vec3) => vec3;
|
|
18
|
+
}
|
|
19
|
+
export declare class FreeCameraController {
|
|
20
|
+
private camera;
|
|
21
|
+
private options;
|
|
22
|
+
constructor(camera: Camera, options?: Partial<CameraControllerOptions>);
|
|
23
|
+
update(deltaTime: number, input: CameraInput): void;
|
|
24
|
+
setSpeed(speed: number): void;
|
|
25
|
+
setCollision(enabled: boolean): void;
|
|
26
|
+
getCollision(): boolean;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=cameraController.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cameraController.d.ts","sourceRoot":"","sources":["../../../src/render/cameraController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAiCrC,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,OAAO,CAAC;IACrB,YAAY,EAAE,OAAO,CAAC;IACtB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,KAAK,IAAI,CAAC;CACrC;AAED,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAA0B;gBAE7B,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,OAAO,CAAC,uBAAuB,CAAM;IAU1E,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI;IAqDnD,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI7B,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAIpC,YAAY,IAAI,OAAO;CAGxB"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { ShaderProgram } from './shaderProgram.js';
|
|
2
|
+
import { VertexArray, VertexBuffer } from './resources.js';
|
|
3
|
+
export declare const LINE_VERTEX_SHADER = "#version 300 es\nprecision highp float;\n\nlayout(location = 0) in vec3 a_position;\nlayout(location = 1) in vec4 a_color;\n\nuniform mat4 u_viewProjection;\n\nout vec4 v_color;\n\nvoid main() {\n v_color = a_color;\n gl_Position = u_viewProjection * vec4(a_position, 1.0);\n}";
|
|
4
|
+
export declare const LINE_FRAGMENT_SHADER = "#version 300 es\nprecision highp float;\n\nin vec4 v_color;\nout vec4 o_color;\n\nvoid main() {\n o_color = v_color;\n}";
|
|
5
|
+
export interface LineVertex {
|
|
6
|
+
x: number;
|
|
7
|
+
y: number;
|
|
8
|
+
z: number;
|
|
9
|
+
r: number;
|
|
10
|
+
g: number;
|
|
11
|
+
b: number;
|
|
12
|
+
a: number;
|
|
13
|
+
}
|
|
14
|
+
export declare class CollisionVisRenderer {
|
|
15
|
+
readonly gl: WebGL2RenderingContext;
|
|
16
|
+
readonly program: ShaderProgram;
|
|
17
|
+
readonly vao: VertexArray;
|
|
18
|
+
readonly vbo: VertexBuffer;
|
|
19
|
+
private vertices;
|
|
20
|
+
private readonly uniformViewProjection;
|
|
21
|
+
constructor(gl: WebGL2RenderingContext);
|
|
22
|
+
get shaderSize(): number;
|
|
23
|
+
addLine(start: {
|
|
24
|
+
x: number;
|
|
25
|
+
y: number;
|
|
26
|
+
z: number;
|
|
27
|
+
}, end: {
|
|
28
|
+
x: number;
|
|
29
|
+
y: number;
|
|
30
|
+
z: number;
|
|
31
|
+
}, color?: {
|
|
32
|
+
r: number;
|
|
33
|
+
g: number;
|
|
34
|
+
b: number;
|
|
35
|
+
a: number;
|
|
36
|
+
}): void;
|
|
37
|
+
addBBox(mins: {
|
|
38
|
+
x: number;
|
|
39
|
+
y: number;
|
|
40
|
+
z: number;
|
|
41
|
+
}, maxs: {
|
|
42
|
+
x: number;
|
|
43
|
+
y: number;
|
|
44
|
+
z: number;
|
|
45
|
+
}, color?: {
|
|
46
|
+
r: number;
|
|
47
|
+
g: number;
|
|
48
|
+
b: number;
|
|
49
|
+
a: number;
|
|
50
|
+
}): void;
|
|
51
|
+
clear(): void;
|
|
52
|
+
render(viewProjection: Float32List): void;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=collisionVis.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collisionVis.d.ts","sourceRoot":"","sources":["../../../src/render/collisionVis.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE3D,eAAO,MAAM,kBAAkB,2RAa7B,CAAC;AAEH,eAAO,MAAM,oBAAoB,6HAQ/B,CAAC;AAEH,MAAM,WAAW,UAAU;IACvB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACb;AAED,qBAAa,oBAAoB;IAC7B,QAAQ,CAAC,EAAE,EAAE,sBAAsB,CAAC;IACpC,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;IAChC,QAAQ,CAAC,GAAG,EAAE,WAAW,CAAC;IAC1B,QAAQ,CAAC,GAAG,EAAE,YAAY,CAAC;IAE3B,OAAO,CAAC,QAAQ,CAAgB;IAChC,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAA8B;gBAExD,EAAE,EAAE,sBAAsB;IAuBtC,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,OAAO,CAAC,KAAK,EAAE;QAAC,CAAC,EAAC,MAAM,CAAC;QAAC,CAAC,EAAC,MAAM,CAAC;QAAC,CAAC,EAAC,MAAM,CAAA;KAAC,EAAE,GAAG,EAAE;QAAC,CAAC,EAAC,MAAM,CAAC;QAAC,CAAC,EAAC,MAAM,CAAC;QAAC,CAAC,EAAC,MAAM,CAAA;KAAC,EAAE,KAAK,GAAE;QAAC,CAAC,EAAC,MAAM,CAAC;QAAC,CAAC,EAAC,MAAM,CAAC;QAAC,CAAC,EAAC,MAAM,CAAC;QAAC,CAAC,EAAC,MAAM,CAAA;KAAwB;IAO1J,OAAO,CAAC,IAAI,EAAE;QAAC,CAAC,EAAC,MAAM,CAAC;QAAC,CAAC,EAAC,MAAM,CAAC;QAAC,CAAC,EAAC,MAAM,CAAA;KAAC,EAAE,IAAI,EAAE;QAAC,CAAC,EAAC,MAAM,CAAC;QAAC,CAAC,EAAC,MAAM,CAAC;QAAC,CAAC,EAAC,MAAM,CAAA;KAAC,EAAE,KAAK,GAAE;QAAC,CAAC,EAAC,MAAM,CAAC;QAAC,CAAC,EAAC,MAAM,CAAC;QAAC,CAAC,EAAC,MAAM,CAAC;QAAC,CAAC,EAAC,MAAM,CAAA;KAAwB;IA6B1J,KAAK;IAIL,MAAM,CAAC,cAAc,EAAE,WAAW;CAWrC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"colors.d.ts","sourceRoot":"","sources":["../../../src/render/colors.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAS1E,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,EAAE,CA8B3G"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export interface WebGLContextInitOptions {
|
|
2
|
+
/**
|
|
3
|
+
* Options passed to `canvas.getContext`. Defaults to antialias enabled to match the rerelease renderer's smoothing.
|
|
4
|
+
*/
|
|
5
|
+
readonly contextAttributes?: WebGLContextAttributes;
|
|
6
|
+
/**
|
|
7
|
+
* Extensions that must be present. Missing entries throw during construction so callers can fall back early.
|
|
8
|
+
*/
|
|
9
|
+
readonly requiredExtensions?: readonly string[];
|
|
10
|
+
/**
|
|
11
|
+
* Extensions that will be queried if available. Missing optional extensions are ignored.
|
|
12
|
+
*/
|
|
13
|
+
readonly optionalExtensions?: readonly string[];
|
|
14
|
+
}
|
|
15
|
+
export interface WebGLContextState {
|
|
16
|
+
readonly gl: WebGL2RenderingContext;
|
|
17
|
+
readonly extensions: Map<string, unknown>;
|
|
18
|
+
/**
|
|
19
|
+
* Returns true once a `webglcontextlost` event has been observed.
|
|
20
|
+
*/
|
|
21
|
+
isLost(): boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Registers a callback that fires on context loss. Returns an unsubscribe function.
|
|
24
|
+
*/
|
|
25
|
+
onLost(callback: () => void): () => void;
|
|
26
|
+
/**
|
|
27
|
+
* Registers a callback that fires on context restoration. Returns an unsubscribe function.
|
|
28
|
+
*/
|
|
29
|
+
onRestored(callback: () => void): () => void;
|
|
30
|
+
/**
|
|
31
|
+
* Remove event listeners and release references.
|
|
32
|
+
*/
|
|
33
|
+
dispose(): void;
|
|
34
|
+
}
|
|
35
|
+
export declare function createWebGLContext(canvas: HTMLCanvasElement, options?: WebGLContextInitOptions): WebGLContextState;
|
|
36
|
+
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/render/context.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,uBAAuB;IACtC;;OAEG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,sBAAsB,CAAC;IACpD;;OAEG;IACH,QAAQ,CAAC,kBAAkB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAChD;;OAEG;IACH,QAAQ,CAAC,kBAAkB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACjD;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,EAAE,sBAAsB,CAAC;IACpC,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C;;OAEG;IACH,MAAM,IAAI,OAAO,CAAC;IAClB;;OAEG;IACH,MAAM,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC;IACzC;;OAEG;IACH,UAAU,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC;IAC7C;;OAEG;IACH,OAAO,IAAI,IAAI,CAAC;CACjB;AAiCD,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,iBAAiB,EACzB,OAAO,GAAE,uBAA4B,GACpC,iBAAiB,CAqDnB"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type Vec3, type Mat4 } from '@quake2ts/shared';
|
|
2
|
+
export interface FrustumPlane {
|
|
3
|
+
readonly normal: Vec3;
|
|
4
|
+
readonly distance: number;
|
|
5
|
+
}
|
|
6
|
+
export declare function extractFrustumPlanes(matrix: ArrayLike<number>): readonly FrustumPlane[];
|
|
7
|
+
export declare function boxIntersectsFrustum(mins: Vec3, maxs: Vec3, planes: readonly FrustumPlane[]): boolean;
|
|
8
|
+
export declare function transformAabb(mins: Vec3, maxs: Vec3, transform: Mat4): {
|
|
9
|
+
mins: Vec3;
|
|
10
|
+
maxs: Vec3;
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=culling.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"culling.d.ts","sourceRoot":"","sources":["../../../src/render/culling.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,EAAE,KAAK,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAExD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAeD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,GAAG,SAAS,YAAY,EAAE,CAsCvF;AAMD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,YAAY,EAAE,GAAG,OAAO,CAWrG;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,GAAG;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,IAAI,CAAA;CAAE,CA2BjG"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { Vec3 } from '@quake2ts/shared';
|
|
2
|
+
export interface Color {
|
|
3
|
+
r: number;
|
|
4
|
+
g: number;
|
|
5
|
+
b: number;
|
|
6
|
+
}
|
|
7
|
+
export declare class DebugRenderer {
|
|
8
|
+
private gl;
|
|
9
|
+
private shader;
|
|
10
|
+
private vao;
|
|
11
|
+
private vbo;
|
|
12
|
+
private shaderSolid;
|
|
13
|
+
private vaoSolid;
|
|
14
|
+
private vboSolid;
|
|
15
|
+
private vertices;
|
|
16
|
+
private solidVertices;
|
|
17
|
+
private labels;
|
|
18
|
+
constructor(gl: WebGL2RenderingContext);
|
|
19
|
+
get shaderSize(): number;
|
|
20
|
+
drawLine(start: Vec3, end: Vec3, color: Color): void;
|
|
21
|
+
drawBoundingBox(mins: Vec3, maxs: Vec3, color: Color): void;
|
|
22
|
+
drawPoint(position: Vec3, size: number, color: Color): void;
|
|
23
|
+
drawAxes(position: Vec3, size: number): void;
|
|
24
|
+
drawText3D(text: string, position: Vec3): void;
|
|
25
|
+
private addTriangle;
|
|
26
|
+
addCone(apex: Vec3, baseCenter: Vec3, baseRadius: number, color: Color): void;
|
|
27
|
+
addTorus(center: Vec3, radius: number, tubeRadius: number, color: Color, axis?: Vec3): void;
|
|
28
|
+
render(viewProjection: Float32Array, alwaysOnTop?: boolean): void;
|
|
29
|
+
getLabels(viewProjection: Float32Array, width: number, height: number): {
|
|
30
|
+
text: string;
|
|
31
|
+
x: number;
|
|
32
|
+
y: number;
|
|
33
|
+
}[];
|
|
34
|
+
clear(): void;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=debug.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../../../src/render/debug.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAmE9C,MAAM,WAAW,KAAK;IAClB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACb;AAeD,qBAAa,aAAa;IACtB,OAAO,CAAC,EAAE,CAAyB;IACnC,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,GAAG,CAAc;IACzB,OAAO,CAAC,GAAG,CAAe;IAE1B,OAAO,CAAC,WAAW,CAAgB;IACnC,OAAO,CAAC,QAAQ,CAAc;IAC9B,OAAO,CAAC,QAAQ,CAAe;IAE/B,OAAO,CAAC,QAAQ,CAAgB;IAChC,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,MAAM,CAAmB;gBAErB,EAAE,EAAE,sBAAsB;IA0BtC,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK;IAO7C,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK;IAuBpD,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK;IASpD,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM;IAMrC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI;IAIvC,OAAO,CAAC,WAAW;IAenB,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK;IA8EtE,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,GAAE,IAAyB;IAyGxG,MAAM,CAAC,cAAc,EAAE,YAAY,EAAE,WAAW,GAAE,OAAe;IA6CjE,SAAS,CAAC,cAAc,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE;IAyChH,KAAK;CAKR"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare enum DebugMode {
|
|
2
|
+
None = 0,
|
|
3
|
+
BoundingBoxes = 1,// Show entity AABBs
|
|
4
|
+
Normals = 2,// Visualize surface normals
|
|
5
|
+
PVSClusters = 3,// Color by PVS cluster
|
|
6
|
+
CollisionHulls = 4,// Show collision geometry
|
|
7
|
+
Lightmaps = 5,// Lightmap-only rendering
|
|
8
|
+
Wireframe = 6
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=debugMode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"debugMode.d.ts","sourceRoot":"","sources":["../../../src/render/debugMode.ts"],"names":[],"mappings":"AAAA,oBAAY,SAAS;IACnB,IAAI,IAAA;IACJ,aAAa,IAAA,CAAM,oBAAoB;IACvC,OAAO,IAAA,CAAY,4BAA4B;IAC/C,WAAW,IAAA,CAAQ,uBAAuB;IAC1C,cAAc,IAAA,CAAK,0BAA0B;IAC7C,SAAS,IAAA,CAAU,0BAA0B;IAC7C,SAAS,IAAA;CACV"}
|