glam
Version:
Experimental WebGL Engine
76 lines (50 loc) • 1.89 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = renderForwardScene;
var _update = require('../../transform/update');
var _update2 = _interopRequireDefault(_update);
var _updateShaders = require('./update-shaders');
var _updateShaders2 = _interopRequireDefault(_updateShaders);
var _renderDone = require('../../scene/render-done');
var _renderDone2 = _interopRequireDefault(_renderDone);
var _clear = require('./clear');
var _clear2 = _interopRequireDefault(_clear);
var _updateLights = require('./update-lights');
var _updateLights2 = _interopRequireDefault(_updateLights);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function renderForwardScene(renderer, shaderCache, scene, camera) {
var gl = renderer.gl;
var meshes = scene.getByType('mesh');
var lights = scene.getByType('light');
gl.enable(gl.DEPTH_TEST);
gl.viewport(0, 0, gl.canvas.width, gl.canvas.height);
(0, _clear2.default)(gl, renderer.clear);
if (scene.flags.changed) {
(0, _updateShaders2.default)(renderer.gl, shaderCache, meshes, lights, scene);
}
scene.updateTransforms();
camera.update(renderer.canvas);
(0, _updateLights2.default)(lights);
renderer.emitter.emit('beforerender');
for (var i = 0; i < meshes.length; i++) {
var mesh = meshes[i];
var material = mesh.material;
var geometry = mesh.geometry;
if (material && geometry) {
if (material.shader.attributes.aNormal) {
camera.updateModelView(mesh.transform.global);
camera.updateNormal();
}
geometry.buffers.bind(material.shader);
material.setUniforms.forEach(function (fn) {
return fn(material.shader, camera, mesh, lights);
});
geometry.buffers.draw(gl[material.mode]);
geometry.buffers.unbind();
}
}
renderer.emitter.emit('afterrender');
(0, _renderDone2.default)(scene);
}