Files
housesof/src/modules/globe/beam/Renderer.js
2021-10-02 20:33:41 +02:00

103 lines
2.4 KiB
JavaScript
Executable File

class Renderer {
constructor(options) {
this.canvas = (options && options.canvas) || document.createElement('canvas');
this.canvas.style.transformOrigin = '0 0';
this.contextAttributes = Object.assign({},{
alpha: false,
depth: true,
stencil: true,
antialias: false,
premultipliedAlpha: true,
preserveDrawingBuffer: false,
failIfMajorPerformanceCaveat: false,
}, (options || {}) );
this._pixelRatio = 1;
this.gl = this.canvas.getContext("experimental-webgl", this.contextAttributes);
this.handleContextLost = this.handleContextLost.bind(this);
this.handleContextRestored = this.handleContextRestored.bind(this);
this.canvas.addEventListener('webglcontextlost', this.handleContextLost, false);
this.canvas.addEventListener('webglcontextrestored', this.handleContextRestored, false);
}
handleContextLost(event){
event.preventDefault();
}
handleContextRestored(){
}
handleContextRestored() {
}
render(container, camera, frameBuffer, preventCameraUpdate) {
if (!this.gl) {
return;
}
if (!preventCameraUpdate) {
camera.update();
}
if (frameBuffer){
frameBuffer.bindFrame();
container.render( camera );
frameBuffer.unbind();
}
else{
this.gl.viewport(0, 0, this._width* this._pixelRatio , this._height* this._pixelRatio );
container.render( camera );
}
}
resize(width, height) {
if (!this.gl) {
return;
}
this._width = width;
this._height = height;
this.canvas.width = this._width * this._pixelRatio;
this.canvas.height = this._height * this._pixelRatio;
this.canvas.style.transform = 'scale('+(1/this._pixelRatio)+') translateZ(0)';
this.gl.viewport(0, 0, this._width* this._pixelRatio , this._height* this._pixelRatio );
}
clearColor(r, g, b, alpha) {
if (!this.gl) {
return;
}
this.gl.clearColor(r, g, b, alpha);
}
clear(color, depth, stencil) {
if (!this.gl) {
return;
}
var bits = 0;
if ( color === void 0 || color ) bits |= this.gl.COLOR_BUFFER_BIT;
if ( depth === void 0 || depth ) bits |= this.gl.DEPTH_BUFFER_BIT;
if ( stencil === void 0 || stencil ) bits |= this.gl.STENCIL_BUFFER_BIT;
this.gl.clear( bits );
}
setPixelRatio(ratio) {
this._pixelRatio = ratio;
this.resize(this._width, this._height);
}
}
export default Renderer;