Add existing to tracked
This commit is contained in:
+106
@@ -0,0 +1,106 @@
|
||||
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;
|
||||
Reference in New Issue
Block a user