You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

93 lines
2.6 KiB
JavaScript

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;