UNPKG

glam

Version:

Experimental WebGL Engine

61 lines (44 loc) 1.39 kB
'use strict'; 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(); } }