glam
Version:
Experimental WebGL Engine
61 lines (44 loc) • 1.39 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = updateShaders;
var _glGeometry = require('gl-geometry');
var _glGeometry2 = _interopRequireDefault(_glGeometry);
var _buildDefines = require('./build-defines');
var _buildDefines2 = _interopRequireDefault(_buildDefines);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function updateShaders(gl, shaderCache, meshes, lights, scene) {
if (scene.flags.changed) {
shaderCache.clearMeshes();
}
var _loop = function _loop(i) {
var mesh = meshes[i];
var material = mesh.material;
var geometry = mesh.geometry;
// Recompile flag
if (material && (material.flags.recompile || scene.flags.lightsChanged)) {
var defines = (0, _buildDefines2.default)(material, scene);
material.shader = shaderCache.getOrCreate(gl, mesh, defines);
material.flags.recompile = false;
}
// Update buffers
if (geometry && geometry.flags.updateBuffers) {
if (geometry.buffers) {
// TODO
// geometry.buffers.update()
} else {
geometry.buffers = (0, _glGeometry2.default)(gl);
material.setAttributes.forEach(function (fn) {
return fn(geometry, material.shader);
});
}
}
};
for (var i = 0; i < meshes.length; i++) {
_loop(i);
}
if (scene.flags.changed) {
shaderCache.clearUnused();
}
}