Skip to content

Commit d6f4520

Browse files
committed
CSS3DRenderer: Cache styles. Fixes mrdoob#4941.
1 parent d3ff04d commit d6f4520

1 file changed

Lines changed: 36 additions & 12 deletions

File tree

examples/js/renderers/CSS3DRenderer.js

Lines changed: 36 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,11 @@ THREE.CSS3DRenderer = function () {
4242
var _widthHalf, _heightHalf;
4343

4444
var matrix = new THREE.Matrix4();
45+
46+
var cache = {
47+
camera: { fov: 0, style: '' },
48+
objects: {}
49+
};
4550

4651
var domElement = document.createElement( 'div' );
4752
domElement.style.overflow = 'hidden';
@@ -167,11 +172,18 @@ THREE.CSS3DRenderer = function () {
167172
}
168173

169174
var element = object.element;
175+
var cachedStyle = cache.objects[ object.id ];
176+
177+
if ( cachedStyle === undefined || cachedStyle !== style ) {
178+
179+
element.style.WebkitTransform = style;
180+
element.style.MozTransform = style;
181+
element.style.oTransform = style;
182+
element.style.transform = style;
170183

171-
element.style.WebkitTransform = style;
172-
element.style.MozTransform = style;
173-
element.style.oTransform = style;
174-
element.style.transform = style;
184+
cache.objects[ object.id ] = style;
185+
186+
}
175187

176188
if ( element.parentNode !== cameraElement ) {
177189

@@ -193,10 +205,16 @@ THREE.CSS3DRenderer = function () {
193205

194206
var fov = 0.5 / Math.tan( THREE.Math.degToRad( camera.fov * 0.5 ) ) * _height;
195207

196-
domElement.style.WebkitPerspective = fov + "px";
197-
domElement.style.MozPerspective = fov + "px";
198-
domElement.style.oPerspective = fov + "px";
199-
domElement.style.perspective = fov + "px";
208+
if ( cache.camera.fov !== fov ) {
209+
210+
domElement.style.WebkitPerspective = fov + "px";
211+
domElement.style.MozPerspective = fov + "px";
212+
domElement.style.oPerspective = fov + "px";
213+
domElement.style.perspective = fov + "px";
214+
215+
cache.camera.fov = fov;
216+
217+
}
200218

201219
scene.updateMatrixWorld();
202220

@@ -207,10 +225,16 @@ THREE.CSS3DRenderer = function () {
207225
var style = "translate3d(0,0," + fov + "px)" + getCameraCSSMatrix( camera.matrixWorldInverse ) +
208226
" translate3d(" + _widthHalf + "px," + _heightHalf + "px, 0)";
209227

210-
cameraElement.style.WebkitTransform = style;
211-
cameraElement.style.MozTransform = style;
212-
cameraElement.style.oTransform = style;
213-
cameraElement.style.transform = style;
228+
if ( cache.camera.style !== style ) {
229+
230+
cameraElement.style.WebkitTransform = style;
231+
cameraElement.style.MozTransform = style;
232+
cameraElement.style.oTransform = style;
233+
cameraElement.style.transform = style;
234+
235+
cache.camera.style = style;
236+
237+
}
214238

215239
renderObject( scene, camera );
216240

0 commit comments

Comments
 (0)