123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- 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;
|