glam
Version:
Experimental WebGL Engine
51 lines (33 loc) • 1.64 kB
JavaScript
;
var _tape = require('tape');
var _tape2 = _interopRequireDefault(_tape);
var _lib = require('../../lib');
var _shaderCache = require('../../lib/renderer/shader-cache');
var _shaderCache2 = _interopRequireDefault(_shaderCache);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
(0, _tape2.default)("Shader Cache", function (t) {
t.plan(7);
var renderer = (0, _lib.ForwardRenderer)({
autoAddCanvas: false
});
var cache = (0, _shaderCache2.default)();
var meshA = (0, _lib.Mesh)((0, _lib.Geometry)(), (0, _lib.FlatMaterial)());
var meshB = (0, _lib.Mesh)((0, _lib.Geometry)(), (0, _lib.FlatMaterial)());
var shaderA = cache.getOrCreate(renderer.gl, meshA, "");
var shaderB = cache.getOrCreate(renderer.gl, meshB, "");
var shaderA2 = cache.getOrCreate(renderer.gl, meshA, "");
var shaderB2 = cache.getOrCreate(renderer.gl, meshB, "");
t.equal(shaderA, shaderB, "Caches the shader across meshes");
t.equal(shaderA, shaderA2, "Caches the shader across time");
t.equal(shaderB, shaderB2, "Caches the shader across time");
cache.clearMeshes();
var shaderA3 = cache.getOrCreate(renderer.gl, meshA, "");
t.equal(shaderA, shaderA3, "Cache retains the copy after clearMeshes");
t.equal(shaderB, shaderA3, "Cache retains the copy after clearMeshes");
cache.clearMeshes();
cache.clearUnused();
var shaderA4 = cache.getOrCreate(renderer.gl, meshA, "");
t.notEqual(shaderA, shaderA4, "Does not retain cache if no meshes used it previously");
t.notEqual(shaderB, shaderA4, "Does not retain cache if no meshes used it previously");
renderer.destroy();
});