Procházet zdrojové kódy

Clean up EventListener2 types

master
Palash Bansal před 1 rokem
rodič
revize
33ce01d838
Žádný účet není propojen s e-mailovou adresou tvůrce revize

+ 4
- 4
package-lock.json Zobrazit soubor

"version": "0.0.39", "version": "0.0.39",
"license": "Apache-2.0", "license": "Apache-2.0",
"dependencies": { "dependencies": {
"@types/three": "https://github.com/repalash/three-ts-types/releases/download/v0.157.1003/package.tgz",
"@types/three": "https://github.com/repalash/three-ts-types/releases/download/v0.157.1004/package.tgz",
"@types/webxr": "^0.5.1", "@types/webxr": "^0.5.1",
"@types/wicg-file-system-access": "^2020.9.5", "@types/wicg-file-system-access": "^2020.9.5",
"popmotion": "^11.0.5", "popmotion": "^11.0.5",
"license": "MIT" "license": "MIT"
}, },
"node_modules/@types/three": { "node_modules/@types/three": {
"version": "0.157.1003",
"resolved": "https://github.com/repalash/three-ts-types/releases/download/v0.157.1003/package.tgz",
"integrity": "sha512-zE6QGPd9EgQZ6n4toKKTbBHrNdwo+bDiWadKFBWAxu3pStzqKLSylDGe0RGuDwzjz5bUMVrKihZcsz69E0pWUg==",
"version": "0.157.1004",
"resolved": "https://github.com/repalash/three-ts-types/releases/download/v0.157.1004/package.tgz",
"integrity": "sha512-J5sdEce4YMYU7uYsL0b+St12VNpaQIDIrmzaiMGl/tunMtzCJBCpVFwBln7vewtCws6MopHGw2H0huAQIeEBxQ==",
"dependencies": { "dependencies": {
"fflate": "~0.6.10", "fflate": "~0.6.10",
"meshoptimizer": "~0.18.1" "meshoptimizer": "~0.18.1"

+ 4
- 4
package.json Zobrazit soubor

"vitepress-plugin-nprogress": "^0.0.4" "vitepress-plugin-nprogress": "^0.0.4"
}, },
"dependencies": { "dependencies": {
"@types/three": "https://github.com/repalash/three-ts-types/releases/download/v0.157.1003/package.tgz",
"@types/three": "https://github.com/repalash/three-ts-types/releases/download/v0.157.1004/package.tgz",
"@types/webxr": "^0.5.1", "@types/webxr": "^0.5.1",
"@types/wicg-file-system-access": "^2020.9.5", "@types/wicg-file-system-access": "^2020.9.5",
"stats.js": "^0.17.0", "stats.js": "^0.17.0",
"uiconfig.js": "^0.1.3", "uiconfig.js": "^0.1.3",
"ts-browser-helpers": "^0.16.2", "ts-browser-helpers": "^0.16.2",
"three": "https://github.com/repalash/three.js-modded/releases/download/v0.157.1004/package.tgz", "three": "https://github.com/repalash/three.js-modded/releases/download/v0.157.1004/package.tgz",
"three-f": "https://github.com/repalash/three.js-modded/archive/refs/tags/v0.157.1003.tar.gz",
"@types/three": "https://github.com/repalash/three-ts-types/releases/download/v0.157.1003/package.tgz",
"@types/three-f": "https://github.com/repalash/three-ts-types/archive/refs/tags/v0.157.1003.tar.gz",
"three-f": "https://github.com/repalash/three.js-modded/archive/refs/tags/v0.157.1004.tar.gz",
"@types/three": "https://github.com/repalash/three-ts-types/releases/download/v0.157.1004/package.tgz",
"@types/three-f": "https://github.com/repalash/three-ts-types/archive/refs/tags/v0.157.1004.tar.gz",
"@types/three-pkg": "https://gitpkg.now.sh/repalash/three-ts-types/types/three?modded_three" "@types/three-pkg": "https://gitpkg.now.sh/repalash/three-ts-types/types/three?modded_three"
}, },
"local_dependencies": { "local_dependencies": {

+ 3
- 3
plugins/gaussian-splatting/src/three-gaussian-splat/ThreeGaussianSplatPlugin.ts Zobrazit soubor

import { import {
AnyOptions,
AViewerPluginSync, AViewerPluginSync,
createStyles, createStyles,
EventListener,
EventListener2,
ILoader, ILoader,
Importer, Importer,
ISceneEventMap, ISceneEventMap,
} from 'threepipe' } from 'threepipe'
import styles from './ThreeGaussianSplatPlugin.css?inline' import styles from './ThreeGaussianSplatPlugin.css?inline'
import {GaussianSplatMesh} from './index' import {GaussianSplatMesh} from './index'
import {AnyOptions} from 'ts-browser-helpers'
import {SplatLoader} from './loaders/SplatLoader' import {SplatLoader} from './loaders/SplatLoader'
import {SortWorkerManager} from './cpp-sorter/SortWorkerManager' import {SortWorkerManager} from './cpp-sorter/SortWorkerManager'
import {GaussianSplatGeometry} from './geometry/GaussianSplatGeometry' import {GaussianSplatGeometry} from './geometry/GaussianSplatGeometry'
this.splats.forEach(async splat=>splat.update(this._viewer!.scene.mainCamera, this._viewer!.renderManager.webglRenderer)) this.splats.forEach(async splat=>splat.update(this._viewer!.scene.mainCamera, this._viewer!.renderManager.webglRenderer))
} }


private _geometryUpdate: EventListener<ISceneEventMap['geometryUpdate'], 'geometryUpdate', Scene> = (event) => {
private _geometryUpdate: EventListener2<'geometryUpdate', ISceneEventMap, Scene> = (event) => {
if (!this._ready || this.isDisabled() || !(event.geometry as GaussianSplatGeometry)?.isGaussianSplatGeometry) return if (!this._ready || this.isDisabled() || !(event.geometry as GaussianSplatGeometry)?.isGaussianSplatGeometry) return
event.geometry!.appliedMeshes.forEach(async(splat: GaussianSplatMesh)=>splat.update ? splat.update(this._viewer!.scene.mainCamera, this._viewer!.renderManager.webglRenderer) : undefined) event.geometry!.appliedMeshes.forEach(async(splat: GaussianSplatMesh)=>splat.update ? splat.update(this._viewer!.scene.mainCamera, this._viewer!.renderManager.webglRenderer) : undefined)
} }

+ 2
- 2
src/assetmanager/MaterialManager.ts Zobrazit soubor

import {ColorManagement, Event, EventDispatcher, EventListener, Material, Texture} from 'three'
import {ColorManagement, Event, EventDispatcher, EventListener2, Material, Texture} from 'three'
import { import {
IMaterial, IMaterial,
iMaterialCommons, iMaterialCommons,


private _materialMaps = new Map<string, Set<ITexture>>() private _materialMaps = new Map<string, Set<ITexture>>()


protected _materialUpdate: EventListener<IMaterialEventMap['materialUpdate'], 'materialUpdate', IMaterial> = (e)=>{
protected _materialUpdate: EventListener2<'materialUpdate', IMaterialEventMap, IMaterial> = (e)=>{
const mat = e.material || e.target const mat = e.material || e.target
if (!mat || mat.assetType !== 'material') return if (!mat || mat.assetType !== 'material') return
this._refreshTextureRefs(mat) this._refreshTextureRefs(mat)

+ 2
- 2
src/core/IObject.ts Zobrazit soubor

import {IMaterial, IMaterialEventMap} from './IMaterial' import {IMaterial, IMaterialEventMap} from './IMaterial'
import {EventListener, Object3D, Object3DEventMap, Vector3} from 'three'
import {EventListener2, Object3D, Object3DEventMap, Vector3} from 'three'
import {ChangeEvent, IUiConfigContainer, UiObjectConfig} from 'uiconfig.js' import {ChangeEvent, IUiConfigContainer, UiObjectConfig} from 'uiconfig.js'
import {IGeometry, IGeometryEventMap} from './IGeometry' import {IGeometry, IGeometryEventMap} from './IGeometry'
import {IImportResultUserData} from '../assetmanager' import {IImportResultUserData} from '../assetmanager'




// eslint-disable-next-line @typescript-eslint/naming-convention // eslint-disable-next-line @typescript-eslint/naming-convention
_onGeometryUpdate?: EventListener<IGeometryEventMap['geometryUpdate'], 'geometryUpdate', IGeometry>
_onGeometryUpdate?: EventListener2<'geometryUpdate', IGeometryEventMap, IGeometry>




objectProcessor?: IObjectProcessor objectProcessor?: IObjectProcessor

+ 2
- 2
src/core/object/RootScene.ts Zobrazit soubor

BufferGeometry, BufferGeometry,
Color, Color,
EquirectangularReflectionMapping, EquirectangularReflectionMapping,
EventListener,
EventListener, EventListener2,
IUniform, IUniform,
Object3D, Object3D,
Scene, Scene,
} }




private _mainCameraUpdate: EventListener<IObject3DEventMap['cameraUpdate'], 'cameraUpdate', ICamera> = (e) => {
private _mainCameraUpdate: EventListener2<'cameraUpdate', IObject3DEventMap, ICamera> = (e) => {
this.setDirty({refreshScene: false}) this.setDirty({refreshScene: false})
this.refreshActiveCameraNearFar() this.refreshActiveCameraNearFar()
if (e.key === 'fov') this.dollyActiveCameraFov() if (e.key === 'fov') this.dollyActiveCameraFov()

+ 4
- 4
src/plugins/interaction/PickingPlugin.ts Zobrazit soubor

import {EventListener, Object3D} from 'three'
import {EventListener2, Object3D} from 'three'
import {Class, onChange, serialize} from 'ts-browser-helpers' import {Class, onChange, serialize} from 'ts-browser-helpers'
import {AViewerPluginEventMap, AViewerPluginSync, ThreeViewer} from '../../viewer' import {AViewerPluginEventMap, AViewerPluginSync, ThreeViewer} from '../../viewer'
import {BoxSelectionWidget, ObjectPicker, SelectionWidget} from '../../three' import {BoxSelectionWidget, ObjectPicker, SelectionWidget} from '../../three'
if (!this._picker || !this._viewer) return if (!this._picker || !this._viewer) return
this._picker.camera = this._viewer.scene.mainCamera this._picker.camera = this._viewer.scene.mainCamera
} }
private _onSceneUpdate: EventListener<ISceneEventMap['sceneUpdate'], 'sceneUpdate', IScene> = (e)=>{
private _onSceneUpdate: EventListener2<'sceneUpdate', ISceneEventMap, IScene> = (e)=>{
if (!e.hierarchyChanged) return if (!e.hierarchyChanged) return
const s = this.getSelectedObject() const s = this.getSelectedObject()
let inScene = false let inScene = false
if (!inScene) this.setSelectedObject(undefined) if (!inScene) this.setSelectedObject(undefined)
} }


private _onObjectSelectEvent: EventListener<ISceneEventMap['select'], 'select', IScene> = (e)=>{
private _onObjectSelectEvent: EventListener2<'select', ISceneEventMap, IScene> = (e)=>{
if (e.source === PickingPlugin.PluginType) return if (e.source === PickingPlugin.PluginType) return
if (e.object === undefined && e.value === undefined) console.error('e.object or e.value must be set for picking, can be null to unselect') if (e.object === undefined && e.value === undefined) console.error('e.object or e.value must be set for picking, can be null to unselect')
else this.setSelectedObject(e.object || e.value, this.autoFocus || e.focusCamera) else this.setSelectedObject(e.object || e.value, this.autoFocus || e.focusCamera)
} }


private _selectedObjectChanged: EventListener<ObjectPickerEventMap['selectedObjectChanged'], 'selectedObjectChanged', ObjectPicker> = (e: any) => {
private _selectedObjectChanged: EventListener2<'selectedObjectChanged', ObjectPickerEventMap, ObjectPicker> = (e: any) => {
if (!this._viewer) return if (!this._viewer) return
this.dispatchEvent(e) this.dispatchEvent(e)



+ 3
- 5
src/postprocessing/ExtendedRenderPass.ts Zobrazit soubor

LinearFilter, LinearFilter,
Material, Material,
NoColorSpace, NoColorSpace,
RGBAFormat, Texture,
RGBAFormat,
Texture,
UnsignedByteType, UnsignedByteType,
WebGLMultipleRenderTargets,
WebGLRenderTarget, WebGLRenderTarget,
} from 'three' } from 'three'
import {generateUiConfig, UiObjectConfig, uiToggle} from 'uiconfig.js' import {generateUiConfig, UiObjectConfig, uiToggle} from 'uiconfig.js'
} }


// names are incorrect. We read from `writeBuffer` and write to `readBuffer`. same in super class // names are incorrect. We read from `writeBuffer` and write to `readBuffer`. same in super class
render(renderer: IWebGLRenderer, writeBuffer?: WebGLRenderTarget<Texture|Texture[]>|null, readBuffer?: WebGLMultipleRenderTargets|WebGLRenderTarget, deltaTime?: number, maskActive?: boolean) {
render(renderer: IWebGLRenderer, writeBuffer?: WebGLRenderTarget<Texture|Texture[]>|null, readBuffer?: WebGLRenderTarget<Texture|Texture[]>, deltaTime?: number, maskActive?: boolean) {
if (!this.enabled) return if (!this.enabled) return
let needsSwap = false let needsSwap = false


renderer.userData.mainRenderPass = true renderer.userData.mainRenderPass = true
if (!this._doTransmissionFix && !this.renderManager.rgbm) { if (!this._doTransmissionFix && !this.renderManager.rgbm) {
// @ts-expect-error todo fix render target ts?
super.render(renderer, writeBuffer || null, readBuffer, deltaTime, maskActive) super.render(renderer, writeBuffer || null, readBuffer, deltaTime, maskActive)
this.needsSwap = needsSwap this.needsSwap = needsSwap
renderer.userData.mainRenderPass = undefined renderer.userData.mainRenderPass = undefined
// console.error('ExtendedRenderPass - readBuffer and gbuffer samples are not same', readBuffer?.samples, gbuffer?.samples) // console.error('ExtendedRenderPass - readBuffer and gbuffer samples are not same', readBuffer?.samples, gbuffer?.samples)


let renderFn = ()=> { let renderFn = ()=> {
// @ts-expect-error todo fix render target ts?
super.render(renderer, null, readBuffer, deltaTime, maskActive, depthRenderBuffer) // read is write in super.render (RenderPass) super.render(renderer, null, readBuffer, deltaTime, maskActive, depthRenderBuffer) // read is write in super.render (RenderPass)
} }



+ 2
- 3
src/postprocessing/GBufferRenderPass.ts Zobrazit soubor

import {Color, Material, WebGLMultipleRenderTargets, WebGLRenderTarget} from 'three'
import {Color, Material, Texture, WebGLMultipleRenderTargets, WebGLRenderTarget} from 'three'
import {RenderPass} from 'three/examples/jsm/postprocessing/RenderPass.js' import {RenderPass} from 'three/examples/jsm/postprocessing/RenderPass.js'
import {IPassID, IPipelinePass} from './Pass' import {IPassID, IPipelinePass} from './Pass'
import {ICamera, IMaterial, IRenderManager, IScene, IWebGLRenderer, PhysicalMaterial} from '../core' import {ICamera, IMaterial, IRenderManager, IScene, IWebGLRenderer, PhysicalMaterial} from '../core'
* @param deltaTime * @param deltaTime
* @param maskActive * @param maskActive
*/ */
render(renderer: IWebGLRenderer, _?: WebGLRenderTarget|WebGLMultipleRenderTargets|null, _1?: WebGLRenderTarget|WebGLMultipleRenderTargets, deltaTime?: number, maskActive?: boolean) {
render(renderer: IWebGLRenderer, _?: WebGLRenderTarget<Texture|Texture[]>|null, _1?: WebGLRenderTarget<Texture|Texture[]>, deltaTime?: number, maskActive?: boolean) {
if (!this.scene || !this.camera) return if (!this.scene || !this.camera) return


const t = renderer.getRenderTarget() const t = renderer.getRenderTarget()
transparentRender: false, transparentRender: false,
transmissionRender: false, transmissionRender: false,
mainRenderPass: false, mainRenderPass: false,
// @ts-expect-error todo fix render target ts?
}, ()=> super.render(renderer, null, getOrCall(this.target), deltaTime as any, maskActive as any)) // here this.target is the write-buffer, variable writeBuffer is ignored }, ()=> super.render(renderer, null, getOrCall(this.target), deltaTime as any, maskActive as any)) // here this.target is the write-buffer, variable writeBuffer is ignored


this._transparentMats.forEach(m => m.transparent = !m.transparent) this._transparentMats.forEach(m => m.transparent = !m.transparent)

+ 1
- 7
src/three/Threejs.ts Zobrazit soubor



export {OrbitControls} from 'three/examples/jsm/controls/OrbitControls.js' export {OrbitControls} from 'three/examples/jsm/controls/OrbitControls.js'
export * from 'three/examples/jsm/utils/BufferGeometryUtils.js' export * from 'three/examples/jsm/utils/BufferGeometryUtils.js'
export type {Event, EventListener} from 'three'
import type {Event} from 'three'

// todo export from three
export type EventListener2<TEventType extends string, TEventMap extends Record<TEventType, any>, TTarget> = (
event: TEventMap[TEventType] & Event<TEventType, TTarget>,
) => void
export type {Event, EventListener, EventListener2} from 'three'

+ 1
- 1
src/viewer/ThreeViewer.ts Zobrazit soubor

Scene, Scene,
Vector2, Vector2,
Vector3, Vector3,
EventListener2,
} from 'three' } from 'three'
import {Class, createCanvasElement, downloadBlob, onChange, serialize, ValOrArr} from 'ts-browser-helpers' import {Class, createCanvasElement, downloadBlob, onChange, serialize, ValOrArr} from 'ts-browser-helpers'
import {TViewerScreenShader} from '../postprocessing' import {TViewerScreenShader} from '../postprocessing'
import {TonemapPlugin} from '../plugins/postprocessing/TonemapPlugin' import {TonemapPlugin} from '../plugins/postprocessing/TonemapPlugin'
import {VERSION} from './version' import {VERSION} from './version'
import {OrbitControls3} from '../three' import {OrbitControls3} from '../three'
import {EventListener2} from '../three/Threejs'


// todo make proper event map // todo make proper event map
export interface IViewerEvent extends BaseEvent, Partial<IAnimationLoopEvent> { export interface IViewerEvent extends BaseEvent, Partial<IAnimationLoopEvent> {

Načítá se…
Zrušit
Uložit