From 6d7d95e93c5081ab1030d265c5bc8944af5680bc Mon Sep 17 00:00:00 2001 From: "J. Tanner Netterville" Date: Fri, 7 Mar 2014 12:23:46 -0600 Subject: [PATCH] Retina display pixel ratio viewport fix --- public/javascript/viewer.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/public/javascript/viewer.js b/public/javascript/viewer.js index c8dd07f..2db341a 100644 --- a/public/javascript/viewer.js +++ b/public/javascript/viewer.js @@ -16,7 +16,8 @@ define(["THREE", "compass", "viewer_controls"], function(THREE, Compass, ViewerC controls, compass, render, animate, add3DObject, invalidate, zoomToFit, renderTargetParametersRGBA, depthTarget, depthPassPlugin, - composer, renderPassSSAO, renderPassFXAA; + composer, renderPassSSAO, renderPassFXAA, + devicePixelRatio = typeof(window.devicePixelRatio) !== 'undefined' ? window.devicePixelRatio : 1; renderTargetParametersRGBA = { minFilter: THREE.LinearFilter, @@ -31,9 +32,10 @@ define(["THREE", "compass", "viewer_controls"], function(THREE, Compass, ViewerC alpha: true }); this.renderer = renderer; - + renderer.setClearColor(CADjs.getThemeValue('canvasClearColor')); renderer.setSize(canvasParent.offsetWidth, canvasParent.offsetHeight); + renderer.setViewport(0, 0, canvasParent.offsetWidth * devicePixelRatio, canvasParent.offsetHeight * devicePixelRatio); renderer.sortObjects = true; renderer.autoClear = false; // DEPTH PASS @@ -163,12 +165,14 @@ define(["THREE", "compass", "viewer_controls"], function(THREE, Compass, ViewerC // SCREEN RESIZE window.addEventListener("resize", function() { + devicePixelRatio = typeof(window.devicePixelRatio) !== 'undefined' ? window.devicePixelRatio : 1; depthTarget = new THREE.WebGLRenderTarget(canvasParent.offsetWidth, canvasParent.offsetHeight, renderTargetParametersRGBA); depthPassPlugin.renderTarget = depthTarget; renderPassSSAO.uniforms['tDepth'].value = depthTarget; renderPassSSAO.uniforms['size'].value.set(canvasParent.offsetWidth, canvasParent.offsetHeight); renderPassFXAA.uniforms['resolution'].value.set(1/canvasParent.offsetWidth, 1/canvasParent.offsetHeight); renderer.setSize(canvasParent.offsetWidth, canvasParent.offsetHeight); + renderer.setViewport(0, 0, canvasParent.offsetWidth * devicePixelRatio, canvasParent.offsetHeight * devicePixelRatio); camera.aspect = canvasParent.offsetWidth / canvasParent.offsetHeight; camera.updateProjectionMatrix(); camera.lookAt(geometryScene.position);