1 line
10 KiB
Plaintext
1 line
10 KiB
Plaintext
{"version":3,"file":"ViewSystem.mjs","sources":["../../../../../src/rendering/renderers/shared/view/ViewSystem.ts"],"sourcesContent":["import { DOMAdapter } from '../../../../environment/adapter';\nimport { ExtensionType } from '../../../../extensions/Extensions';\nimport { Rectangle } from '../../../../maths/shapes/Rectangle';\nimport { deprecation, v8_0_0 } from '../../../../utils/logging/deprecation';\nimport { RenderTarget } from '../renderTarget/RenderTarget';\nimport { getCanvasTexture } from '../texture/utils/getCanvasTexture';\n\nimport type { ICanvas } from '../../../../environment/canvas/ICanvas';\nimport type { TypeOrBool } from '../../../../scene/container/destroyTypes';\nimport type { System } from '../system/System';\nimport type { CanvasSource } from '../texture/sources/CanvasSource';\nimport type { Texture } from '../texture/Texture';\n\n/**\n * Options passed to the ViewSystem\n * @memberof rendering\n * @property {number} [width=800] - The width of the screen.\n * @property {number} [height=600] - The height of the screen.\n * @property {ICanvas} [canvas] - The canvas to use as a view, optional.\n * @property {boolean} [autoDensity=false] - Resizes renderer view in CSS pixels to allow for resolutions other than 1.\n * @property {number} [resolution] - The resolution / device pixel ratio of the renderer.\n * @property {boolean} [antialias=false] - Whether to enable anti-aliasing. This may affect performance.\n * @property {boolean} [depth] -\n * Whether to ensure the main view has can make use of the depth buffer. Always true for WebGL renderer.\n * @property {boolean} [multiView] - TODO: multiView\n * @property {number} [backgroundAlpha] - The alpha of the background.\n */\nexport interface ViewSystemOptions\n{\n /**\n * The width of the screen.\n * @default 800\n * @memberof rendering.SharedRendererOptions\n */\n width?: number;\n /**\n * The height of the screen.\n * @default 600\n * @memberof rendering.SharedRendererOptions\n */\n height?: number;\n /**\n * The canvas to use as a view, optional.\n * @memberof rendering.SharedRendererOptions\n */\n canvas?: ICanvas;\n /** @deprecated */\n view?: ICanvas;\n /**\n * Resizes renderer view in CSS pixels to allow for resolutions other than 1.\n * @memberof rendering.SharedRendererOptions\n */\n autoDensity?: boolean;\n /**\n * The resolution / device pixel ratio of the renderer.\n * @memberof rendering.SharedRendererOptions\n */\n resolution?: number;\n /**\n * Whether to enable anti-aliasing. This may affect performance.\n * @memberof rendering.SharedRendererOptions\n */\n antialias?: boolean;\n /**\n * Whether to ensure the main view has can make use of the depth buffer. Always true for WebGL renderer.\n * @memberof rendering.SharedRendererOptions\n */\n depth?: boolean;\n\n /**\n * Transparency of the background color, value from `0` (fully transparent) to `1` (fully opaque).\n * @default 1\n */\n backgroundAlpha?: number;\n}\n\nexport interface ViewSystemDestroyOptions\n{\n /** Whether to remove the view element from the DOM. Defaults to `false`. */\n removeView?: boolean;\n}\n\n/**\n * The view system manages the main canvas that is attached to the DOM.\n * This main role is to deal with how the holding the view reference and dealing with how it is resized.\n * @memberof rendering\n */\nexport class ViewSystem implements System<ViewSystemOptions, TypeOrBool<ViewSystemDestroyOptions>>\n{\n /** @ignore */\n public static extension = {\n type: [\n ExtensionType.WebGLSystem,\n ExtensionType.WebGPUSystem,\n ExtensionType.CanvasSystem,\n ],\n name: 'view',\n priority: 0,\n } as const;\n\n /** The default options for the view system. */\n public static defaultOptions: ViewSystemOptions = {\n /**\n * {@link WebGLOptions.width}\n * @default 800\n */\n width: 800,\n /**\n * {@link WebGLOptions.height}\n * @default 600\n */\n height: 600,\n /**\n * {@link WebGLOptions.autoDensity}\n * @default false\n */\n autoDensity: false,\n /**\n * {@link WebGLOptions.antialias}\n * @default false\n */\n antialias: false,\n };\n\n /** The canvas element that everything is drawn to. */\n public canvas!: ICanvas;\n\n /** The texture that is used to draw the canvas to the screen. */\n public texture: Texture<CanvasSource>;\n\n /**\n * Whether CSS dimensions of canvas view should be resized to screen dimensions automatically.\n * @member {boolean}\n */\n public get autoDensity(): boolean\n {\n return this.texture.source.autoDensity;\n }\n public set autoDensity(value: boolean)\n {\n this.texture.source.autoDensity = value;\n }\n\n /** Whether to enable anti-aliasing. This may affect performance. */\n public antialias: boolean;\n\n /**\n * Measurements of the screen. (0, 0, screenWidth, screenHeight).\n *\n * Its safe to use as filterArea or hitArea for the whole stage.\n */\n public screen: Rectangle;\n /** The render target that the view is drawn to. */\n public renderTarget: RenderTarget;\n\n /** The resolution / device pixel ratio of the renderer. */\n get resolution(): number\n {\n return this.texture.source._resolution;\n }\n\n set resolution(value: number)\n {\n this.texture.source.resize(\n this.texture.source.width,\n this.texture.source.height,\n value\n );\n }\n\n /**\n * initiates the view system\n * @param options - the options for the view\n */\n public init(options: ViewSystemOptions): void\n {\n options = {\n ...ViewSystem.defaultOptions,\n ...options,\n };\n\n if (options.view)\n {\n // #if _DEBUG\n deprecation(v8_0_0, 'ViewSystem.view has been renamed to ViewSystem.canvas');\n // #endif\n\n options.canvas = options.view;\n }\n\n this.screen = new Rectangle(0, 0, options.width, options.height);\n this.canvas = options.canvas || DOMAdapter.get().createCanvas();\n this.antialias = !!options.antialias;\n this.texture = getCanvasTexture(this.canvas, options);\n this.renderTarget = new RenderTarget({\n colorTextures: [this.texture],\n depth: !!options.depth,\n isRoot: true,\n });\n\n this.texture.source.transparent = options.backgroundAlpha < 1;\n this.resolution = options.resolution;\n }\n\n /**\n * Resizes the screen and canvas to the specified dimensions.\n * @param desiredScreenWidth - The new width of the screen.\n * @param desiredScreenHeight - The new height of the screen.\n * @param resolution\n */\n public resize(desiredScreenWidth: number, desiredScreenHeight: number, resolution: number): void\n {\n this.texture.source.resize(desiredScreenWidth, desiredScreenHeight, resolution);\n\n this.screen.width = this.texture.frame.width;\n this.screen.height = this.texture.frame.height;\n }\n\n /**\n * Destroys this System and optionally removes the canvas from the dom.\n * @param {options | false} options - The options for destroying the view, or \"false\".\n * @param options.removeView - Whether to remove the view element from the DOM. Defaults to `false`.\n */\n public destroy(options: TypeOrBool<ViewSystemDestroyOptions> = false): void\n {\n const removeView = typeof options === 'boolean' ? options : !!options?.removeView;\n\n if (removeView && this.canvas.parentNode)\n {\n this.canvas.parentNode.removeChild(this.canvas);\n }\n\n // note: don't nullify the element\n // other systems may need to unbind from it during the destroy iteration (eg. GLContextSystem)\n }\n}\n"],"names":[],"mappings":"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"} |