pixi.js
Version:
<p align="center"> <a href="https://pixijs.com" target="_blank" rel="noopener noreferrer"> <img height="150" src="https://files.pixijs.download/branding/pixijs-logo-transparent-dark.svg?v=1" alt="PixiJS logo"> </a> </p> <br/> <p align="center">
1 lines • 36.5 kB
Source Map (JSON)
{"version":3,"file":"GlRenderTargetAdaptor.mjs","sources":["../../../../../src/rendering/renderers/gl/renderTarget/GlRenderTargetAdaptor.ts"],"sourcesContent":["import { Rectangle } from '../../../../maths/shapes/Rectangle';\nimport { warn } from '../../../../utils/logging/warn';\nimport { CanvasSource } from '../../shared/texture/sources/CanvasSource';\nimport { CLEAR } from '../const';\nimport { GlRenderTarget } from '../GlRenderTarget';\n\nimport type { RgbaArray } from '../../../../color/Color';\nimport type { RenderTarget } from '../../shared/renderTarget/RenderTarget';\nimport type { RenderTargetAdaptor, RenderTargetSystem } from '../../shared/renderTarget/RenderTargetSystem';\nimport type { Texture } from '../../shared/texture/Texture';\nimport type { CLEAR_OR_BOOL } from '../const';\nimport type { GlRenderingContext } from '../context/GlRenderingContext';\nimport type { WebGLRenderer } from '../WebGLRenderer';\n\n/**\n * The WebGL adaptor for the render target system. Allows the Render Target System to be used with the WebGL renderer\n * @category rendering\n * @ignore\n */\nexport class GlRenderTargetAdaptor implements RenderTargetAdaptor<GlRenderTarget>\n{\n private _renderTargetSystem: RenderTargetSystem<GlRenderTarget>;\n private _renderer: WebGLRenderer<HTMLCanvasElement>;\n private _clearColorCache: RgbaArray = [0, 0, 0, 0];\n private _viewPortCache: Rectangle = new Rectangle();\n /** Pre-computed draw buffers arrays for MRT, indexed by color attachment count */\n private _drawBuffersCache: number[][];\n\n public init(renderer: WebGLRenderer, renderTargetSystem: RenderTargetSystem<GlRenderTarget>): void\n {\n this._renderer = renderer;\n this._renderTargetSystem = renderTargetSystem;\n\n renderer.runners.contextChange.add(this);\n }\n\n public contextChange(): void\n {\n this._clearColorCache = [0, 0, 0, 0];\n this._viewPortCache = new Rectangle();\n\n // Pre-compute draw buffers arrays for all possible MRT configurations\n const gl = this._renderer.gl;\n\n this._drawBuffersCache = [];\n\n for (let i = 1; i <= 16; i++)\n {\n this._drawBuffersCache[i] = Array.from({ length: i }, (_, j) => gl.COLOR_ATTACHMENT0 + j);\n }\n }\n\n public copyToTexture(\n sourceRenderSurfaceTexture: RenderTarget,\n destinationTexture: Texture,\n originSrc: { x: number; y: number; },\n size: { width: number; height: number; },\n originDest: { x: number; y: number; },\n )\n {\n const renderTargetSystem = this._renderTargetSystem;\n\n const renderer = this._renderer;\n const glRenderTarget = renderTargetSystem.getGpuRenderTarget(sourceRenderSurfaceTexture);\n const gl = renderer.gl;\n\n this.finishRenderPass(sourceRenderSurfaceTexture);\n\n gl.bindFramebuffer(gl.FRAMEBUFFER, glRenderTarget.resolveTargetFramebuffer);\n\n renderer.texture.bind(destinationTexture, 0);\n\n gl.copyTexSubImage2D(gl.TEXTURE_2D, 0,\n originDest.x, originDest.y,\n originSrc.x,\n originSrc.y,\n size.width,\n size.height\n );\n\n return destinationTexture;\n }\n\n public startRenderPass(\n renderTarget: RenderTarget,\n clear: CLEAR_OR_BOOL = true,\n clearColor?: RgbaArray,\n viewport?: Rectangle,\n mipLevel = 0,\n layer = 0\n )\n {\n const renderTargetSystem = this._renderTargetSystem;\n\n const source = renderTarget.colorTexture;\n const gpuRenderTarget = renderTargetSystem.getGpuRenderTarget(renderTarget);\n\n // validation..\n if (layer !== 0 && this._renderer.context.webGLVersion < 2)\n {\n throw new Error('[RenderTargetSystem] Rendering to array layers requires WebGL2.');\n }\n\n if (mipLevel > 0)\n {\n if (gpuRenderTarget.msaa)\n {\n throw new Error('[RenderTargetSystem] Rendering to mip levels is not supported with MSAA render targets.');\n }\n\n if (this._renderer.context.webGLVersion < 2)\n {\n throw new Error('[RenderTargetSystem] Rendering to mip levels requires WebGL2.');\n }\n }\n\n // do the work..\n\n let viewPortY = viewport.y;\n\n if (renderTarget.isRoot)\n {\n // /TODO this is the same logic?\n viewPortY = source.pixelHeight - viewport.height - viewport.y;\n }\n\n // unbind the current render texture..\n renderTarget.colorTextures.forEach((texture) =>\n {\n this._renderer.texture.unbind(texture);\n });\n\n const gl = this._renderer.gl;\n\n gl.bindFramebuffer(gl.FRAMEBUFFER, gpuRenderTarget.framebuffer);\n\n // Re-attach color textures at the requested mip level.\n // (Framebuffer attachments are per-FBO, so we must re-attach when mipLevel changes.)\n // IMPORTANT: This must also run when returning from mip>0 back to mip=0, because attachments are stateful.\n if (\n !renderTarget.isRoot\n && (gpuRenderTarget._attachedMipLevel !== mipLevel\n || gpuRenderTarget._attachedLayer !== layer)\n )\n {\n renderTarget.colorTextures.forEach((colorTexture, i) =>\n {\n const glSource = this._renderer.texture.getGlSource(colorTexture);\n\n if (glSource.target === gl.TEXTURE_2D)\n {\n if (layer !== 0)\n {\n throw new Error('[RenderTargetSystem] layer must be 0 when rendering to 2D textures in WebGL.');\n }\n\n gl.framebufferTexture2D(\n gl.FRAMEBUFFER,\n gl.COLOR_ATTACHMENT0 + i,\n gl.TEXTURE_2D,\n glSource.texture,\n mipLevel\n );\n }\n else if (glSource.target === (gl as any).TEXTURE_2D_ARRAY)\n {\n if (this._renderer.context.webGLVersion < 2)\n {\n throw new Error('[RenderTargetSystem] Rendering to 2D array textures requires WebGL2.');\n }\n\n (gl as any as WebGL2RenderingContext).framebufferTextureLayer(\n gl.FRAMEBUFFER,\n gl.COLOR_ATTACHMENT0 + i,\n glSource.texture,\n mipLevel,\n layer\n );\n }\n else if (glSource.target === gl.TEXTURE_CUBE_MAP)\n {\n if (layer < 0 || layer > 5)\n {\n throw new Error('[RenderTargetSystem] Cube map layer must be between 0 and 5.');\n }\n\n gl.framebufferTexture2D(\n gl.FRAMEBUFFER,\n gl.COLOR_ATTACHMENT0 + i,\n gl.TEXTURE_CUBE_MAP_POSITIVE_X + layer,\n glSource.texture,\n mipLevel\n );\n }\n else\n {\n throw new Error('[RenderTargetSystem] Unsupported texture target for render-to-layer in WebGL.');\n }\n });\n\n gpuRenderTarget._attachedMipLevel = mipLevel;\n gpuRenderTarget._attachedLayer = layer;\n }\n\n // Set draw buffers for multiple render targets (MRT)\n if (renderTarget.colorTextures.length > 1)\n {\n this._setDrawBuffers(renderTarget, gl);\n }\n\n const viewPortCache = this._viewPortCache;\n\n if (viewPortCache.x !== viewport.x\n || viewPortCache.y !== viewPortY\n || viewPortCache.width !== viewport.width\n || viewPortCache.height !== viewport.height)\n {\n viewPortCache.x = viewport.x;\n viewPortCache.y = viewPortY;\n viewPortCache.width = viewport.width;\n viewPortCache.height = viewport.height;\n\n gl.viewport(\n viewport.x,\n viewPortY,\n viewport.width,\n viewport.height,\n );\n }\n\n // if the stencil buffer has been requested, we need to create a stencil buffer\n if (!gpuRenderTarget.depthStencilRenderBuffer && (renderTarget.stencil || renderTarget.depth))\n {\n this._initStencil(gpuRenderTarget);\n }\n\n this.clear(renderTarget, clear, clearColor);\n }\n\n public finishRenderPass(renderTarget?: RenderTarget)\n {\n const renderTargetSystem = this._renderTargetSystem;\n\n const glRenderTarget = renderTargetSystem.getGpuRenderTarget(renderTarget);\n\n if (!glRenderTarget.msaa) return;\n\n const gl = this._renderer.gl;\n\n gl.bindFramebuffer(gl.FRAMEBUFFER, glRenderTarget.resolveTargetFramebuffer);\n gl.bindFramebuffer(gl.READ_FRAMEBUFFER, glRenderTarget.framebuffer);\n\n gl.blitFramebuffer(\n 0, 0, glRenderTarget.width, glRenderTarget.height,\n 0, 0, glRenderTarget.width, glRenderTarget.height,\n gl.COLOR_BUFFER_BIT, gl.NEAREST,\n );\n\n gl.bindFramebuffer(gl.FRAMEBUFFER, glRenderTarget.framebuffer);\n\n // dont think we need this anymore? keeping around just in case the wheels fall off\n // gl.bindFramebuffer(gl.READ_FRAMEBUFFER, null);\n }\n\n public initGpuRenderTarget(renderTarget: RenderTarget): GlRenderTarget\n {\n const renderer = this._renderer;\n\n const gl = renderer.gl;\n\n // do single...\n\n const glRenderTarget = new GlRenderTarget();\n\n glRenderTarget._attachedMipLevel = 0;\n glRenderTarget._attachedLayer = 0;\n\n // we are rendering to the main canvas..\n const colorTexture = renderTarget.colorTexture;\n\n if (colorTexture instanceof CanvasSource)\n {\n this._renderer.context.ensureCanvasSize(renderTarget.colorTexture.resource);\n\n glRenderTarget.framebuffer = null;\n\n return glRenderTarget;\n }\n\n this._initColor(renderTarget, glRenderTarget);\n\n // set up a depth texture..\n\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n\n return glRenderTarget;\n }\n\n public destroyGpuRenderTarget(gpuRenderTarget: GlRenderTarget)\n {\n const gl = this._renderer.gl;\n\n if (gpuRenderTarget.framebuffer)\n {\n gl.deleteFramebuffer(gpuRenderTarget.framebuffer);\n gpuRenderTarget.framebuffer = null;\n }\n\n if (gpuRenderTarget.resolveTargetFramebuffer)\n {\n gl.deleteFramebuffer(gpuRenderTarget.resolveTargetFramebuffer);\n gpuRenderTarget.resolveTargetFramebuffer = null;\n }\n\n if (gpuRenderTarget.depthStencilRenderBuffer)\n {\n gl.deleteRenderbuffer(gpuRenderTarget.depthStencilRenderBuffer);\n gpuRenderTarget.depthStencilRenderBuffer = null;\n }\n\n gpuRenderTarget.msaaRenderBuffer.forEach((renderBuffer) =>\n {\n gl.deleteRenderbuffer(renderBuffer);\n });\n\n gpuRenderTarget.msaaRenderBuffer = null;\n }\n\n public clear(\n _renderTarget: RenderTarget,\n clear: CLEAR_OR_BOOL,\n clearColor?: RgbaArray,\n _viewport?: Rectangle,\n _mipLevel = 0,\n layer = 0\n )\n {\n if (!clear) return;\n\n if (layer !== 0)\n {\n throw new Error('[RenderTargetSystem] Clearing array layers is not supported in WebGL renderer.');\n }\n\n const renderTargetSystem = this._renderTargetSystem;\n\n // if clear is boolean..\n if (typeof clear === 'boolean')\n {\n clear = clear ? CLEAR.ALL : CLEAR.NONE;\n }\n\n const gl = this._renderer.gl;\n\n if (clear & CLEAR.COLOR)\n {\n clearColor ??= renderTargetSystem.defaultClearColor;\n\n const clearColorCache = this._clearColorCache;\n const clearColorArray = clearColor as number[];\n\n if (clearColorCache[0] !== clearColorArray[0]\n || clearColorCache[1] !== clearColorArray[1]\n || clearColorCache[2] !== clearColorArray[2]\n || clearColorCache[3] !== clearColorArray[3])\n {\n clearColorCache[0] = clearColorArray[0];\n clearColorCache[1] = clearColorArray[1];\n clearColorCache[2] = clearColorArray[2];\n clearColorCache[3] = clearColorArray[3];\n\n gl.clearColor(clearColorArray[0], clearColorArray[1], clearColorArray[2], clearColorArray[3]);\n }\n }\n\n gl.clear(clear);\n }\n\n public resizeGpuRenderTarget(renderTarget: RenderTarget)\n {\n if (renderTarget.isRoot) return;\n\n const renderTargetSystem = this._renderTargetSystem;\n\n const glRenderTarget = renderTargetSystem.getGpuRenderTarget(renderTarget);\n\n this._resizeColor(renderTarget, glRenderTarget);\n\n if (renderTarget.stencil || renderTarget.depth)\n {\n this._resizeStencil(glRenderTarget);\n }\n }\n\n private _initColor(renderTarget: RenderTarget, glRenderTarget: GlRenderTarget)\n {\n const renderer = this._renderer;\n\n const gl = renderer.gl;\n // deal with our outputs..\n const resolveTargetFramebuffer = gl.createFramebuffer();\n\n glRenderTarget.resolveTargetFramebuffer = resolveTargetFramebuffer;\n\n // set up the texture..\n gl.bindFramebuffer(gl.FRAMEBUFFER, resolveTargetFramebuffer);\n\n glRenderTarget.width = renderTarget.colorTexture.source.pixelWidth;\n glRenderTarget.height = renderTarget.colorTexture.source.pixelHeight;\n\n const colorTextures = renderTarget.colorTextures;\n\n colorTextures.forEach((colorTexture, i) =>\n {\n const source = colorTexture.source;\n\n if (source.antialias)\n {\n if (renderer.context.supports.msaa)\n {\n glRenderTarget.msaa = true;\n }\n else\n {\n warn('[RenderTexture] Antialiasing on textures is not supported in WebGL1');\n }\n }\n\n // TODO bindSource could return the glTexture\n renderer.texture.bindSource(source, 0);\n const glSource = renderer.texture.getGlSource(source);\n\n const glTexture = glSource.texture;\n\n // Initial attachment is mip 0, layer 0.\n if (glSource.target === gl.TEXTURE_2D)\n {\n gl.framebufferTexture2D(\n gl.FRAMEBUFFER,\n gl.COLOR_ATTACHMENT0 + i,\n gl.TEXTURE_2D,\n glTexture,\n 0\n );\n }\n else if (glSource.target === (gl as any).TEXTURE_2D_ARRAY)\n {\n if (renderer.context.webGLVersion < 2)\n {\n throw new Error('[RenderTargetSystem] TEXTURE_2D_ARRAY requires WebGL2.');\n }\n\n (gl as any as WebGL2RenderingContext).framebufferTextureLayer(\n gl.FRAMEBUFFER,\n gl.COLOR_ATTACHMENT0 + i,\n glTexture,\n 0,\n 0\n );\n }\n else if (glSource.target === gl.TEXTURE_CUBE_MAP)\n {\n gl.framebufferTexture2D(\n gl.FRAMEBUFFER,\n gl.COLOR_ATTACHMENT0 + i,\n gl.TEXTURE_CUBE_MAP_POSITIVE_X,\n glTexture,\n 0\n );\n }\n else\n {\n throw new Error('[RenderTargetSystem] Unsupported texture target for framebuffer attachment.');\n }\n });\n\n if (glRenderTarget.msaa)\n {\n const viewFramebuffer = gl.createFramebuffer();\n\n glRenderTarget.framebuffer = viewFramebuffer;\n\n gl.bindFramebuffer(gl.FRAMEBUFFER, viewFramebuffer);\n\n renderTarget.colorTextures.forEach((_, i) =>\n {\n const msaaRenderBuffer = gl.createRenderbuffer();\n\n glRenderTarget.msaaRenderBuffer[i] = msaaRenderBuffer;\n });\n }\n else\n {\n glRenderTarget.framebuffer = resolveTargetFramebuffer;\n }\n\n this._resizeColor(renderTarget, glRenderTarget);\n }\n\n private _resizeColor(renderTarget: RenderTarget, glRenderTarget: GlRenderTarget)\n {\n const source = renderTarget.colorTexture.source;\n\n glRenderTarget.width = source.pixelWidth;\n glRenderTarget.height = source.pixelHeight;\n // After a resize, attachments are implicitly at mip 0 again (and non-zero mip allocations may have changed).\n // Force a re-attach on next mip render.\n glRenderTarget._attachedMipLevel = 0;\n glRenderTarget._attachedLayer = 0;\n\n renderTarget.colorTextures.forEach((colorTexture, i) =>\n {\n // nno need to resize the first texture..\n if (i === 0) return;\n\n colorTexture.source.resize(source.width, source.height, source._resolution);\n });\n\n if (glRenderTarget.msaa)\n {\n const renderer = this._renderer;\n const gl = renderer.gl;\n\n const viewFramebuffer = glRenderTarget.framebuffer;\n\n gl.bindFramebuffer(gl.FRAMEBUFFER, viewFramebuffer);\n\n renderTarget.colorTextures.forEach((colorTexture, i) =>\n {\n const source = colorTexture.source;\n\n renderer.texture.bindSource(source, 0);\n const glSource = renderer.texture.getGlSource(source);\n\n const glInternalFormat = glSource.internalFormat;\n\n const msaaRenderBuffer = glRenderTarget.msaaRenderBuffer[i];\n\n gl.bindRenderbuffer(\n gl.RENDERBUFFER,\n msaaRenderBuffer\n );\n\n gl.renderbufferStorageMultisample(\n gl.RENDERBUFFER,\n 4,\n glInternalFormat,\n source.pixelWidth,\n source.pixelHeight\n );\n\n gl.framebufferRenderbuffer(\n gl.FRAMEBUFFER,\n gl.COLOR_ATTACHMENT0 + i,\n gl.RENDERBUFFER,\n msaaRenderBuffer\n );\n });\n }\n }\n\n private _initStencil(glRenderTarget: GlRenderTarget)\n {\n // this already exists on the default screen\n if (glRenderTarget.framebuffer === null) return;\n\n const gl = this._renderer.gl;\n\n const depthStencilRenderBuffer = gl.createRenderbuffer();\n\n glRenderTarget.depthStencilRenderBuffer = depthStencilRenderBuffer;\n\n gl.bindRenderbuffer(\n gl.RENDERBUFFER,\n depthStencilRenderBuffer\n );\n\n gl.framebufferRenderbuffer(\n gl.FRAMEBUFFER,\n gl.DEPTH_STENCIL_ATTACHMENT,\n gl.RENDERBUFFER,\n depthStencilRenderBuffer\n );\n\n // TDO DO>>\n this._resizeStencil(glRenderTarget);\n }\n\n private _resizeStencil(glRenderTarget: GlRenderTarget)\n {\n const gl = this._renderer.gl;\n\n gl.bindRenderbuffer(\n gl.RENDERBUFFER,\n glRenderTarget.depthStencilRenderBuffer\n );\n\n if (glRenderTarget.msaa)\n {\n gl.renderbufferStorageMultisample(\n gl.RENDERBUFFER,\n 4,\n gl.DEPTH24_STENCIL8,\n glRenderTarget.width,\n glRenderTarget.height\n );\n }\n else\n {\n gl.renderbufferStorage(\n gl.RENDERBUFFER,\n this._renderer.context.webGLVersion === 2\n ? gl.DEPTH24_STENCIL8\n : gl.DEPTH_STENCIL,\n glRenderTarget.width,\n glRenderTarget.height\n );\n }\n }\n\n public prerender(renderTarget: RenderTarget)\n {\n const resource = renderTarget.colorTexture.resource;\n\n // if the render target is a canvas, ensure its size matches the source\n if (this._renderer.context.multiView && CanvasSource.test(resource))\n {\n this._renderer.context.ensureCanvasSize(resource);\n }\n }\n\n public postrender(renderTarget: RenderTarget)\n {\n // if multiView is not enabled, we don't need to do anything\n if (!this._renderer.context.multiView) return;\n\n // if the render target is a canvas, we need to copy the pixels from the gl canvas\n // to the canvas target\n if (CanvasSource.test(renderTarget.colorTexture.resource))\n {\n const contextCanvas = this._renderer.context.canvas;\n const canvasSource = renderTarget.colorTexture as unknown as CanvasSource;\n\n canvasSource.context2D.drawImage(\n contextCanvas as CanvasImageSource,\n 0, canvasSource.pixelHeight - contextCanvas.height\n );\n }\n }\n\n private _setDrawBuffers(renderTarget: RenderTarget, gl: GlRenderingContext): void\n {\n const count = renderTarget.colorTextures.length;\n const bufferArray = this._drawBuffersCache[count];\n\n if (this._renderer.context.webGLVersion === 1)\n {\n const ext = this._renderer.context.extensions.drawBuffers;\n\n if (!ext)\n {\n warn('[RenderTexture] This WebGL1 context does not support rendering to multiple targets');\n }\n else\n {\n ext.drawBuffersWEBGL(bufferArray);\n }\n }\n else\n {\n // WebGL2 has built in support\n gl.drawBuffers(bufferArray);\n }\n }\n}\n"],"names":["source"],"mappings":"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"}