All files / engine/Source/Scene SceneFramebuffer.js

91.42% Statements 32/35
50% Branches 3/6
75% Functions 9/12
91.42% Lines 32/35

Press n or j to go to the next uncovered block, b, p or k for the previous block.

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 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107                    1419x 1419x       1419x         1419x   1419x               1342x 1342x     1x     75x         12296x                   1x           71x 71x 71x         71x 71x             71x     1x 71x 71x 71x 71x     1x       1x 6x     1x 57x 13x       1x       1x 1342x 1342x      
import Color from "../Core/Color.js";
import destroyObject from "../Core/destroyObject.js";
import ClearCommand from "../Renderer/ClearCommand.js";
import FramebufferManager from "../Renderer/FramebufferManager.js";
import PixelDatatype from "../Renderer/PixelDatatype.js";
 
/**
 * @private
 */
function SceneFramebuffer() {
  this._numSamples = 1;
  this._colorFramebuffer = new FramebufferManager({
    depthStencil: true,
    supportsDepthTexture: true,
  });
  this._idFramebuffer = new FramebufferManager({
    depthStencil: true,
    supportsDepthTexture: true,
  });
 
  this._idClearColor = new Color(0.0, 0.0, 0.0, 0.0);
 
  this._clearCommand = new ClearCommand({
    color: new Color(0.0, 0.0, 0.0, 0.0),
    depth: 1.0,
    owner: this,
  });
}
 
function destroyResources(post) {
  post._colorFramebuffer.destroy();
  post._idFramebuffer.destroy();
}
 
Object.defineProperties(SceneFramebuffer.prototype, {
  framebuffer: {
    get: function () {
      return this._colorFramebuffer.framebuffer;
    },
  },
  idFramebuffer: {
    get: function () {
      return this._idFramebuffer.framebuffer;
    },
  },
  depthStencilTexture: {
    get: function () {
      return this._colorFramebuffer.getDepthStencilTexture();
    },
  },
});
 
SceneFramebuffer.prototype.update = function (
  context,
  viewport,
  hdr,
  numSamples,
) {
  const width = viewport.width;
  const height = viewport.height;
  const pixelDatatype = hdr
    ? context.halfFloatingPointTexture
      ? PixelDatatype.HALF_FLOAT
      : PixelDatatype.FLOAT
    : PixelDatatype.UNSIGNED_BYTE;
  this._numSamples = numSamples;
  this._colorFramebuffer.update(
    context,
    width,
    height,
    numSamples,
    pixelDatatype,
  );
  this._idFramebuffer.update(context, width, height);
};
 
SceneFramebuffer.prototype.clear = function (context, passState, clearColor) {
  Color.clone(clearColor, this._clearCommand.color);
  Color.clone(this._idClearColor, this._clearCommand.color);
  this._colorFramebuffer.clear(context, this._clearCommand, passState);
  this._idFramebuffer.clear(context, this._clearCommand, passState);
};
 
SceneFramebuffer.prototype.getFramebuffer = function () {
  return this._colorFramebuffer.framebuffer;
};
 
SceneFramebuffer.prototype.getIdFramebuffer = function () {
  return this._idFramebuffer.framebuffer;
};
 
SceneFramebuffer.prototype.prepareColorTextures = function (context) {
  if (this._numSamples > 1) {
    this._colorFramebuffer.prepareTextures(context);
  }
};
 
SceneFramebuffer.prototype.isDestroyed = function () {
  return false;
};
 
SceneFramebuffer.prototype.destroy = function () {
  destroyResources(this);
  return destroyObject(this);
};
export default SceneFramebuffer;