glam
Version:
Experimental WebGL Engine
89 lines (64 loc) • 2.46 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = createForwardRenderer;
var _render = require('./render');
var _render2 = _interopRequireDefault(_render);
var _webglContext = require('webgl-context');
var _webglContext2 = _interopRequireDefault(_webglContext);
var _autoAddCanvas = require('./auto-add-canvas');
var _autoAddCanvas2 = _interopRequireDefault(_autoAddCanvas);
var _autoResizeCanvas = require('./auto-resize-canvas');
var _autoResizeCanvas2 = _interopRequireDefault(_autoResizeCanvas);
var _objectAssign = require('object-assign');
var _objectAssign2 = _interopRequireDefault(_objectAssign);
var _eventemitter = require('eventemitter3');
var _eventemitter2 = _interopRequireDefault(_eventemitter);
var _shaderCache = require('../shader-cache');
var _shaderCache2 = _interopRequireDefault(_shaderCache);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function ForwardRenderer(gl, config, clear) {
var removeCanvas = (0, _autoAddCanvas2.default)(gl.canvas, config.parentEl, config.autoAddCanvas);
var removeResize = (0, _autoResizeCanvas2.default)(gl.canvas, config.parentEl, config.autoResizeCanvas);
this.gl = gl;
this.canvas = gl.canvas;
this.render = _render2.default.bind(null, this, (0, _shaderCache2.default)());
this.clear = clear;
this.emitter = config.emitter;
this.on = config.emitter.on.bind(config.emitter);
this.off = config.emitter.off.bind(config.emitter);
this.emitter = config.emitter;
this.destroy = function destroy() {
removeCanvas();
removeResize();
};
}
function createForwardRenderer(properties) {
var config = (0, _objectAssign2.default)({
autoAddCanvas: true,
autoResizeCanvas: true,
canvas: null,
width: null,
height: null,
parentEl: document.body,
emitter: null
// Plus WebGLContextAttributes: https://www.khronos.org/registry/webgl/specs/1.0/#5.2
// alpha, depth, stencil, antialias, premultipliedAlpha, preserveDrawingBuffer,
// preferLowPowerToHighPerformance, failIfMajorPerformanceCaveat
}, properties);
if (!config.emitter) {
config.emitter = new _eventemitter2.default();
}
var clear = (0, _objectAssign2.default)({
color: [1, 1, 1, 1],
colorBuffer: true,
depthBuffer: true,
stencilBuffer: true
}, config.clear);
var gl = (0, _webglContext2.default)(config);
if (!gl) {
return null;
}
return new ForwardRenderer(gl, config, clear);
}