yzt
2023-05-05 4c558c77a6a9d23f057f094c4dc3e315eabef497
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
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;