import BoundingRectangle from '../Core/BoundingRectangle.js'; import defined from '../Core/defined.js'; import destroyObject from '../Core/destroyObject.js'; import PixelFormat from '../Core/PixelFormat.js'; import Framebuffer from '../Renderer/Framebuffer.js'; import PassState from '../Renderer/PassState.js'; import PixelDatatype from '../Renderer/PixelDatatype.js'; import Texture from '../Renderer/Texture.js'; /** * @private */ function PickDepthFramebuffer() { this._depthStencilTexture = undefined; this._framebuffer = undefined; this._passState = undefined; } function destroyResources(pickDepth) { pickDepth._framebuffer = pickDepth._framebuffer && pickDepth._framebuffer.destroy(); pickDepth._depthStencilTexture = pickDepth._depthStencilTexture && pickDepth._depthStencilTexture.destroy(); } function createResources(pickDepth, context) { var width = context.drawingBufferWidth; var height = context.drawingBufferHeight; pickDepth._depthStencilTexture = new Texture({ context : context, width : width, height : height, pixelFormat : PixelFormat.DEPTH_STENCIL, pixelDatatype : PixelDatatype.UNSIGNED_INT_24_8 }); pickDepth._framebuffer = new Framebuffer({ context : context, depthStencilTexture : pickDepth._depthStencilTexture, destroyAttachments : false }); var passState = new PassState(context); passState.blendingEnabled = false; passState.scissorTest = { enabled : true, rectangle : new BoundingRectangle() }; passState.viewport = new BoundingRectangle(); pickDepth._passState = passState; } PickDepthFramebuffer.prototype.update = function(context, drawingBufferPosition, viewport) { var width = viewport.width; var height = viewport.height; if (!defined(this._framebuffer) || width !== this._depthStencilTexture.width || height !== this._depthStencilTexture.height) { destroyResources(this); createResources(this, context); } var framebuffer = this._framebuffer; var passState = this._passState; passState.framebuffer = framebuffer; passState.viewport.width = width; passState.viewport.height = height; passState.scissorTest.rectangle.x = drawingBufferPosition.x; passState.scissorTest.rectangle.y = height - drawingBufferPosition.y; passState.scissorTest.rectangle.width = 1; passState.scissorTest.rectangle.height = 1; return passState; }; PickDepthFramebuffer.prototype.isDestroyed = function() { return false; }; PickDepthFramebuffer.prototype.destroy = function() { destroyResources(this); return destroyObject(this); }; export default PickDepthFramebuffer;