UNPKG

15 kBSource Map (JSON)View Raw
1{"version":3,"file":"GLView.web.js","sourceRoot":"","sources":["../src/GLView.web.tsx"],"names":[],"mappings":"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","sourcesContent":["import invariant from 'invariant';\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport { StyleSheet } from 'react-native';\nimport { UnavailabilityError, CodedError } from '@unimodules/core';\nimport {\n BaseGLViewProps,\n GLSnapshot,\n ExpoWebGLRenderingContext,\n SnapshotOptions,\n} from './GLView.types';\nexport { BaseGLViewProps, ExpoWebGLRenderingContext, SnapshotOptions, GLViewProps };\n\ndeclare const window: Window;\n\nfunction getImageForAsset(asset: {\n downloadAsync: () => Promise<any>;\n uri?: string;\n localUri?: string;\n}): HTMLImageElement | any {\n if (asset != null && typeof asset === 'object' && asset !== null && asset.downloadAsync) {\n const dataURI = asset.localUri || asset.uri || '';\n const image = new Image();\n image.src = dataURI;\n return image;\n }\n return asset;\n}\n\nfunction asExpoContext(gl: ExpoWebGLRenderingContext): WebGLRenderingContext {\n gl.endFrameEXP = function glEndFrameEXP(): void {};\n\n if (!gl['_expo_texImage2D']) {\n gl['_expo_texImage2D'] = gl.texImage2D;\n gl.texImage2D = (...props: any[]): any => {\n let nextProps = [...props];\n nextProps.push(getImageForAsset(nextProps.pop()));\n return gl['_expo_texImage2D'](...nextProps);\n };\n }\n\n if (!gl['_expo_texSubImage2D']) {\n gl['_expo_texSubImage2D'] = gl.texSubImage2D;\n gl.texSubImage2D = (...props: any[]): any => {\n let nextProps = [...props];\n nextProps.push(getImageForAsset(nextProps.pop()));\n return gl['_expo_texSubImage2D'](...nextProps);\n };\n }\n\n return gl;\n}\n\nfunction ensureContext(\n canvas?: HTMLCanvasElement,\n contextAttributes?: WebGLContextAttributes\n): WebGLRenderingContext {\n if (!canvas) {\n throw new CodedError(\n 'ERR_GL_INVALID',\n 'Attempting to use the GL context before it has been created.'\n );\n }\n const context =\n canvas.getContext('webgl', contextAttributes) ||\n canvas.getContext('webgl-experimental', contextAttributes) ||\n canvas.getContext('experimental-webgl', contextAttributes);\n invariant(context, 'Browser does not support WebGL');\n return asExpoContext(context as ExpoWebGLRenderingContext);\n}\n\nfunction stripNonDOMProps(props: { [key: string]: any }): { [key: string]: any } {\n for (let k in propTypes) {\n if (k in props) {\n delete props[k];\n }\n }\n return props;\n}\n\nconst propTypes = {\n onContextCreate: PropTypes.func.isRequired,\n onContextRestored: PropTypes.func,\n onContextLost: PropTypes.func,\n webglContextAttributes: PropTypes.object,\n};\n\ninterface GLViewProps extends BaseGLViewProps {\n onContextCreate: (gl: WebGLRenderingContext) => void;\n onContextRestored?: (gl?: WebGLRenderingContext) => void;\n onContextLost?: () => void;\n webglContextAttributes?: WebGLContextAttributes;\n}\n\ntype State = {\n width: number;\n height: number;\n};\n\nexport class GLView extends React.Component<GLViewProps, State> {\n state = {\n width: 0,\n height: 0,\n };\n\n static propTypes = propTypes;\n\n _hasContextBeenCreated = false;\n\n _webglContextAttributes: WebGLContextAttributes | undefined;\n\n canvas: HTMLCanvasElement | undefined;\n\n container?: HTMLElement;\n\n gl?: WebGLRenderingContext;\n\n static async createContextAsync(): Promise<WebGLRenderingContext> {\n const canvas = document.createElement('canvas');\n canvas.width = window.innerWidth * window.devicePixelRatio;\n canvas.height = window.innerHeight * window.devicePixelRatio;\n return ensureContext(canvas);\n }\n\n static async destroyContextAsync(exgl?: WebGLRenderingContext | number): Promise<boolean> {\n // Do nothing\n return true;\n }\n\n static async takeSnapshotAsync(\n exgl: WebGLRenderingContext,\n options: SnapshotOptions = {}\n ): Promise<GLSnapshot> {\n invariant(exgl, 'GLView.takeSnapshotAsync(): canvas is not defined');\n const canvas: HTMLCanvasElement = exgl.canvas;\n return await new Promise(resolve => {\n canvas.toBlob(\n (blob: Blob | null) => {\n // TODO: Bacon: Should we add data URI?\n resolve({\n uri: blob,\n localUri: '',\n width: canvas.width,\n height: canvas.height,\n });\n },\n options.format,\n options.compress\n );\n });\n }\n\n componentDidMount() {\n if (window.addEventListener) {\n window.addEventListener('resize', this._updateLayout);\n }\n }\n\n _contextCreated = (): void => {\n this.gl = this._createContext();\n this.props.onContextCreate(this.gl);\n if (this.canvas) {\n this.canvas.addEventListener('webglcontextlost', this._contextLost);\n this.canvas.addEventListener('webglcontextrestored', this._contextRestored);\n }\n };\n\n componentWillUnmount() {\n if (this.gl) {\n const loseContextExt = this.gl.getExtension('WEBGL_lose_context');\n if (loseContextExt) {\n loseContextExt.loseContext();\n }\n this.gl = undefined;\n }\n if (this.canvas) {\n this.canvas.removeEventListener('webglcontextlost', this._contextLost);\n this.canvas.removeEventListener('webglcontextrestored', this._contextRestored);\n }\n window.removeEventListener('resize', this._updateLayout);\n }\n\n _updateLayout = (): void => {\n if (this.container) {\n const { clientWidth: width = 0, clientHeight: height = 0 } = this.container;\n this.setState({ width, height });\n }\n };\n\n render() {\n const { devicePixelRatio = 1 } = window;\n const { style, ...props } = this.props;\n const { width, height } = this.state;\n const domProps = stripNonDOMProps(props);\n\n const containerStyle: any = StyleSheet.flatten([{ flex: 1 }, style]);\n return (\n <div ref={this._assignContainerRef} style={containerStyle}>\n <canvas\n ref={this._assignCanvasRef}\n style={{ flex: 1, width, height }}\n width={width * devicePixelRatio}\n height={height * devicePixelRatio}\n {...domProps}\n />\n </div>\n );\n }\n\n componentDidUpdate() {\n if (this.canvas && !this._hasContextBeenCreated) {\n this._hasContextBeenCreated = true;\n this._contextCreated();\n }\n }\n\n _createContext(): WebGLRenderingContext {\n const { webglContextAttributes } = this.props;\n const gl = ensureContext(this.canvas, webglContextAttributes);\n this._webglContextAttributes = webglContextAttributes || {};\n return gl;\n }\n\n _getGlOrReject(): WebGLRenderingContext {\n if (!this.gl) {\n throw new CodedError(\n 'ERR_GL_INVALID',\n 'Attempting to use the GL context before it has been created.'\n );\n }\n return this.gl;\n }\n\n _contextLost = (event: Event): void => {\n event.preventDefault();\n this.gl = undefined;\n if (this.props.onContextLost) {\n this.props.onContextLost();\n }\n };\n\n _contextRestored = (): void => {\n if (this.props.onContextRestored) {\n this.gl = this._createContext();\n this.props.onContextRestored(this.gl);\n }\n };\n\n _assignCanvasRef = (canvas: HTMLCanvasElement): void => {\n this.canvas = canvas;\n };\n\n _assignContainerRef = (element: HTMLElement | null): void => {\n if (element) {\n this.container = element;\n } else {\n this.container = undefined;\n }\n this._updateLayout();\n };\n\n async takeSnapshotAsync(options: SnapshotOptions = {}): Promise<GLSnapshot> {\n if (!GLView.takeSnapshotAsync) {\n throw new UnavailabilityError('expo-gl', 'takeSnapshotAsync');\n }\n\n const gl = this._getGlOrReject();\n\n return await GLView.takeSnapshotAsync(gl, options);\n }\n\n async startARSessionAsync(): Promise<void> {\n throw new UnavailabilityError('GLView', 'startARSessionAsync');\n }\n\n async createCameraTextureAsync(): Promise<void> {\n throw new UnavailabilityError('GLView', 'createCameraTextureAsync');\n }\n\n async destroyObjectAsync(glObject: WebGLObject): Promise<void> {\n throw new UnavailabilityError('GLView', 'destroyObjectAsync');\n }\n}\n"]}
\No newline at end of file