Skip to content

Commit 5cc5dcd

Browse files
committed
Further cleanup RenderPool
Ensure key is used correctly for `KeyedCollection`. Avoid changing types of variables to ensure readable code. Add some comments. Clean up renderer_limit example.
1 parent 956debc commit 5cc5dcd

File tree

2 files changed

+30
-27
lines changed

2 files changed

+30
-27
lines changed

examples/renderer_limit.ipynb

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,12 @@
2525
"mat5 = MeshStandardMaterial(color='#ff00ff')\n",
2626
"mat6 = MeshStandardMaterial(color='#00ffff')\n",
2727
"torus = TorusGeometry(radius=12, tube=3, radialSegments=16, tubularSegments=100)\n",
28-
"mesh1 = Mesh(geometry=torus, material=mat1, _width=75, _height=75)\n",
29-
"mesh2 = Mesh(geometry=torus, material=mat2, _width=75, _height=75)\n",
30-
"mesh3 = Mesh(geometry=torus, material=mat3, _width=75, _height=75)\n",
31-
"mesh4 = Mesh(geometry=torus, material=mat4, _width=75, _height=75)\n",
32-
"mesh5 = Mesh(geometry=torus, material=mat5, _width=75, _height=75)\n",
33-
"mesh6 = Mesh(geometry=torus, material=mat6, _width=75, _height=75)"
28+
"mesh1 = Mesh(geometry=torus, material=mat1)\n",
29+
"mesh2 = Mesh(geometry=torus, material=mat2)\n",
30+
"mesh3 = Mesh(geometry=torus, material=mat3)\n",
31+
"mesh4 = Mesh(geometry=torus, material=mat4)\n",
32+
"mesh5 = Mesh(geometry=torus, material=mat5)\n",
33+
"mesh6 = Mesh(geometry=torus, material=mat6)"
3434
]
3535
},
3636
{

js/src/_base/RendererPool.js

Lines changed: 24 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -84,11 +84,11 @@ _.extend(RendererPool.prototype, {
8484
return renderer;
8585
},
8686

87-
_replaceRenderer: function(renderer, config) {
88-
var id = renderer.poolId;
89-
renderer.dispose();
87+
_replaceRenderer: function(oldToken, config) {
88+
var id = oldToken.poolId;
89+
oldToken.dispose();
9090
this.numCreated--;
91-
renderer = this._createRenderer(config);
91+
var renderer = this._createRenderer(config);
9292
renderer.poolId = id;
9393
return renderer;
9494
},
@@ -99,45 +99,48 @@ _.extend(RendererPool.prototype, {
9999
console.debug('RendererPool.acquiring...');
100100

101101
if (this.freePool.length() > 0) {
102-
103-
renderer = this.freePool.pop(config);
104-
if (renderer) {
105-
renderer = renderer.renderer;
106-
}
107-
if (!renderer) {
108-
var oldRenderer = this.freePool.shift();
109-
renderer = this._replaceRenderer(oldRenderer, config);
102+
// We have one or more free renderers
103+
// (previously used renderers that have been released)
104+
105+
var freeToken = this.freePool.pop(config);
106+
if (freeToken) {
107+
// We have a free renderer with the correct config
108+
renderer = freeToken.renderer;
109+
} else {
110+
// We need to replace one of the free renderers to get
111+
// the right config:
112+
freeToken = this.freePool.shift();
113+
renderer = this._replaceRenderer(freeToken, config);
110114
}
111115

112116
} else if (this.numCreated < MAX_RENDERERS) {
113117

118+
// We have not yet reached max capacity, create a new renderer:
114119
renderer = this._createRenderer(config);
115120

116121
} else {
117122

118123
// reclaim token
119-
var claimedRenderer = this.claimedPool.pop(config);
120-
var recreate = claimedRenderer === null;
124+
var claimedToken = this.claimedPool.pop(config);
125+
var recreate = claimedToken === null;
121126
if (recreate) {
122-
claimedRenderer = this.claimedPool.shift();
127+
claimedToken = this.claimedPool.shift();
123128
}
124-
renderer = claimedRenderer.renderer;
129+
renderer = claimedToken.renderer;
125130
try {
126-
claimedRenderer.onReclaim();
131+
claimedToken.onReclaim();
127132
} catch (e) {
128133
// Ensure we do not lose the renderer:
129-
this.freePool.push(renderer);
134+
this.freePool.push(null, renderer);
130135
throw e;
131136
}
132137
// Recreate renderer if no appropriate config:
133138
if (recreate) {
134-
renderer = this._replaceRenderer(renderer, config);
139+
renderer = this._replaceRenderer(claimedToken, config);
135140
}
136141

137142
}
138143

139-
// Ensure aliasing state matches, or remake
140-
141144
console.debug('RendererPool.acquire(id=' + renderer.poolId + ')');
142145
this.claimedPool.push(config, makeRendererClaimToken(renderer, onReclaim));
143146
renderer.clear();

0 commit comments

Comments
 (0)