diff --git a/src/mol-canvas3d/canvas3d.ts b/src/mol-canvas3d/canvas3d.ts
index 0f11398973e50847495c123383c40f05f7b590e2..b9bbb639ef126489123bab6d076ea25823188055 100644
--- a/src/mol-canvas3d/canvas3d.ts
+++ b/src/mol-canvas3d/canvas3d.ts
@@ -110,9 +110,9 @@ namespace Canvas3D {
         const controls = TrackballControls.create(input, camera, {})
         const renderer = Renderer.create(webgl, camera, { clearColor: p.backgroundColor })
 
-        const pickScale = 1
-        const pickWidth = Math.round(canvas.width * pickScale)
-        const pickHeight = Math.round(canvas.height * pickScale)
+        let pickScale = 0.25 / webgl.pixelRatio
+        let pickWidth = Math.round(canvas.width * pickScale)
+        let pickHeight = Math.round(canvas.height * pickScale)
         const objectPickTarget = createRenderTarget(webgl, pickWidth, pickHeight)
         const instancePickTarget = createRenderTarget(webgl, pickWidth, pickHeight)
         const groupPickTarget = createRenderTarget(webgl, pickWidth, pickHeight)
@@ -414,11 +414,14 @@ namespace Canvas3D {
             Viewport.set(camera.viewport, 0, 0, canvas.width, canvas.height)
             Viewport.set(controls.viewport, 0, 0, canvas.width, canvas.height)
 
-            const pickWidth = Math.round(canvas.width * pickScale)
-            const pickHeight = Math.round(canvas.height * pickScale)
+            pickScale = 0.25 / webgl.pixelRatio
+            pickWidth = Math.round(canvas.width * pickScale)
+            pickHeight = Math.round(canvas.height * pickScale)
             objectPickTarget.setSize(pickWidth, pickHeight)
             instancePickTarget.setSize(pickWidth, pickHeight)
             groupPickTarget.setSize(pickWidth, pickHeight)
+
+            requestDraw(true)
         }
     }
 }
\ No newline at end of file
diff --git a/src/mol-gl/webgl/context.ts b/src/mol-gl/webgl/context.ts
index c8577f30cb0c1831130c92614c9c35ecf56389e9..9b231fdfb20ffafb28829c4bfcd83b75af089a03 100644
--- a/src/mol-gl/webgl/context.ts
+++ b/src/mol-gl/webgl/context.ts
@@ -256,7 +256,7 @@ export function createContext(gl: GLRenderingContext): WebGLContext {
             vertexArrayObject,
             fragDepth
         },
-        pixelRatio: getPixelRatio(),
+        get pixelRatio () { return getPixelRatio() },
 
         shaderCache,
         programCache,
diff --git a/src/mol-gl/webgl/render-target.ts b/src/mol-gl/webgl/render-target.ts
index 12bbe860e640be606c95173bafdd5fe5de491f79..52203d0134b92584511a7fd6ab7df5d92b77a7da 100644
--- a/src/mol-gl/webgl/render-target.ts
+++ b/src/mol-gl/webgl/render-target.ts
@@ -20,6 +20,7 @@ export interface RenderTarget {
     readonly image: TextureImage<any>
     readonly texture: Texture
 
+    /** binds framebuffer and sets viewport to rendertarget's width and height */
     bind: () => void
     setSize: (width: number, height: number) => void
     readBuffer: (x: number, y: number, width: number, height: number, dst: Uint8Array) => void