{"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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"}