cione-comp-lib
Version:
`$ yarn add cione-comp-lib` 或者 `$ npm i cione-comp-lib -S`
44 lines (43 loc) • 1.63 kB
JavaScript
import Texture2D from "../../../claygl/src/Texture2D.mjs";
import Texture from "../../../claygl/src/Texture.mjs";
import Pass from "../../../claygl/src/compositor/Pass.mjs";
import Shader from "../../../claygl/src/Shader.mjs";
import FrameBuffer from "../../../claygl/src/FrameBuffer.mjs";
function EdgePass(opt) {
opt = opt || {};
this._edgePass = new Pass({
fragment: Shader.source("ecgl.edge")
});
this._edgePass.setUniform("normalTexture", opt.normalTexture);
this._edgePass.setUniform("depthTexture", opt.depthTexture);
this._targetTexture = new Texture2D({
type: Texture.HALF_FLOAT
});
this._frameBuffer = new FrameBuffer();
this._frameBuffer.attach(this._targetTexture);
}
EdgePass.prototype.update = function(renderer, camera, sourceTexture, frame) {
var width = renderer.getWidth();
var height = renderer.getHeight();
var texture = this._targetTexture;
texture.width = width;
texture.height = height;
var frameBuffer = this._frameBuffer;
frameBuffer.bind(renderer);
this._edgePass.setUniform("projectionInv", camera.invProjectionMatrix.array);
this._edgePass.setUniform("textureSize", [width, height]);
this._edgePass.setUniform("texture", sourceTexture);
this._edgePass.render(renderer);
frameBuffer.unbind(renderer);
};
EdgePass.prototype.getTargetTexture = function() {
return this._targetTexture;
};
EdgePass.prototype.setParameter = function(name, val) {
this._edgePass.setUniform(name, val);
};
EdgePass.prototype.dispose = function(renderer) {
this._targetTexture.dispose(renderer);
this._frameBuffer.dispose(renderer);
};
export { EdgePass as default };