@cesium/engine
Version:
CesiumJS is a JavaScript library for creating 3D globes and 2D maps in a web browser without a plugin.
107 lines (94 loc) • 2.7 kB
JavaScript
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;