From 105218ee7f97eef133d7e063aaa21501fe52a289 Mon Sep 17 00:00:00 2001
From: Alexander Rose <alexander.rose@weirdbyte.de>
Date: Sat, 2 Jun 2018 17:11:47 -0400
Subject: [PATCH] better handle pixelRatio

---
 src/mol-gl/renderer.ts      | 7 +------
 src/mol-gl/webgl/context.ts | 6 ++++++
 src/mol-view/viewer.ts      | 4 +++-
 3 files changed, 10 insertions(+), 7 deletions(-)

diff --git a/src/mol-gl/renderer.ts b/src/mol-gl/renderer.ts
index 6b9d8e9a6..ec25ac328 100644
--- a/src/mol-gl/renderer.ts
+++ b/src/mol-gl/renderer.ts
@@ -39,10 +39,6 @@ interface Renderer {
     dispose: () => void
 }
 
-function getPixelRatio() {
-    return (typeof window !== 'undefined') ? window.devicePixelRatio : 1
-}
-
 export const DefaultRendererProps = {
     clearColor: 0x000000 as Color,
     viewport: Viewport.create(0, 0, 0, 0)
@@ -56,7 +52,6 @@ namespace Renderer {
 
         const model = Mat4.identity()
         const viewport = Viewport.clone(_viewport)
-        const pixelRatio = getPixelRatio()
 
         // const lightPosition = Vec3.create(0, 0, -100)
         const lightColor = Vec3.create(1.0, 1.0, 1.0)
@@ -73,7 +68,7 @@ namespace Renderer {
             uView: ValueCell.create(Mat4.clone(camera.view)),
             uProjection: ValueCell.create(Mat4.clone(camera.projection)),
 
-            uPixelRatio: ValueCell.create(pixelRatio),
+            uPixelRatio: ValueCell.create(ctx.pixelRatio),
             uViewportHeight: ValueCell.create(viewport.height),
 
             uLightColor: ValueCell.create(Vec3.clone(lightColor)),
diff --git a/src/mol-gl/webgl/context.ts b/src/mol-gl/webgl/context.ts
index 62d234c85..5c5e9635a 100644
--- a/src/mol-gl/webgl/context.ts
+++ b/src/mol-gl/webgl/context.ts
@@ -7,6 +7,10 @@
 import { createProgramCache, ProgramCache } from './program'
 import { createShaderCache, ShaderCache } from './shader'
 
+function getPixelRatio() {
+    return (typeof window !== 'undefined') ? window.devicePixelRatio : 1
+}
+
 function unbindResources (gl: WebGLRenderingContext) {
     // bind null to all texture units
     const maxTextureImageUnits = gl.getParameter(gl.MAX_TEXTURE_IMAGE_UNITS)
@@ -61,6 +65,7 @@ type Extensions = {
 export interface Context {
     gl: WebGLRenderingContext
     extensions: Extensions
+    pixelRatio: number
 
     shaderCache: ShaderCache
     programCache: ProgramCache
@@ -100,6 +105,7 @@ export function createContext(gl: WebGLRenderingContext): Context {
     return {
         gl,
         extensions: { angleInstancedArrays, standardDerivatives, oesElementIndexUint, oesVertexArrayObject },
+        pixelRatio: getPixelRatio(),
 
         shaderCache,
         programCache,
diff --git a/src/mol-view/viewer.ts b/src/mol-view/viewer.ts
index 8789dafe5..4dd8480a1 100644
--- a/src/mol-view/viewer.ts
+++ b/src/mol-view/viewer.ts
@@ -179,9 +179,11 @@ namespace Viewer {
         }
 
         function identify (x: number, y: number): PickingId {
-            const buffer = new Uint8Array(4)
+            x *= ctx.pixelRatio
+            y *= ctx.pixelRatio
             y = canvas.height - y // flip y
 
+            const buffer = new Uint8Array(4)
             const xp = Math.round(x * pickScale)
             const yp = Math.round(y * pickScale)
 
-- 
GitLab