cesium
Version:
CesiumJS is a JavaScript library for creating 3D globes and 2D maps in a web browser without a plugin.
92 lines (78 loc) • 3.23 kB
JavaScript
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 PixelDatatype from '../Renderer/PixelDatatype.js';
import RenderState from '../Renderer/RenderState.js';
import Sampler from '../Renderer/Sampler.js';
import Texture from '../Renderer/Texture.js';
import TextureMagnificationFilter from '../Renderer/TextureMagnificationFilter.js';
import TextureMinificationFilter from '../Renderer/TextureMinificationFilter.js';
import TextureWrap from '../Renderer/TextureWrap.js';
import BrdfLutGeneratorFS from '../Shaders/BrdfLutGeneratorFS.js';
/**
* @private
*/
function BrdfLutGenerator() {
this._framebuffer = undefined;
this._colorTexture = undefined;
this._drawCommand = undefined;
}
Object.defineProperties(BrdfLutGenerator.prototype, {
colorTexture : {
get : function() {
return this._colorTexture;
}
}
});
function createCommand(generator, context) {
var framebuffer = generator._framebuffer;
var drawCommand = context.createViewportQuadCommand(BrdfLutGeneratorFS, {
framebuffer : framebuffer,
renderState : RenderState.fromCache({
viewport : new BoundingRectangle(0.0, 0.0, 256.0, 256.0)
})
});
generator._drawCommand = drawCommand;
}
function createFramebuffer(generator, context) {
var colorTexture = new Texture({
context : context,
width : 256,
height: 256,
pixelFormat : PixelFormat.RGBA,
pixelDatatype : PixelDatatype.UNSIGNED_BYTE,
sampler : new Sampler({
wrapS : TextureWrap.CLAMP_TO_EDGE,
wrapT : TextureWrap.CLAMP_TO_EDGE,
minificationFilter : TextureMinificationFilter.NEAREST,
magnificationFilter : TextureMagnificationFilter.NEAREST
})
});
generator._colorTexture = colorTexture;
var framebuffer = new Framebuffer({
context : context,
colorTextures : [colorTexture],
destroyAttachments : false
});
generator._framebuffer = framebuffer;
}
BrdfLutGenerator.prototype.update = function(frameState) {
if (!defined(this._colorTexture)) {
var context = frameState.context;
createFramebuffer(this, context);
createCommand(this, context);
this._drawCommand.execute(context);
this._framebuffer = this._framebuffer && this._framebuffer.destroy();
this._drawCommand.shaderProgram = this._drawCommand.shaderProgram && this._drawCommand.shaderProgram.destroy();
}
};
BrdfLutGenerator.prototype.isDestroyed = function() {
return false;
};
BrdfLutGenerator.prototype.destroy = function() {
this._colorTexture = this._colorTexture && this._colorTexture.destroy();
return destroyObject(this);
};
export default BrdfLutGenerator;