From cf2a492602aa9adff6e91de4137b1e361e31f1dc Mon Sep 17 00:00:00 2001 From: Alexander Rose <alexander.rose@weirdbyte.de> Date: Sat, 17 Nov 2018 13:41:46 -0800 Subject: [PATCH] fixes, tweaks --- src/mol-canvas3d/canvas3d.ts | 10 +++++++--- src/mol-gl/renderable/direct-volume.ts | 2 ++ src/mol-gl/shader/direct-volume.frag | 9 +++++++-- src/mol-gl/webgl/program.ts | 3 +++ 4 files changed, 19 insertions(+), 5 deletions(-) diff --git a/src/mol-canvas3d/canvas3d.ts b/src/mol-canvas3d/canvas3d.ts index faa487b80..2a9f5896f 100644 --- a/src/mol-canvas3d/canvas3d.ts +++ b/src/mol-canvas3d/canvas3d.ts @@ -257,17 +257,21 @@ namespace Canvas3D { const yp = Math.round(y * pickScale) objectPickTarget.bind() - await webgl.readPixelsAsync(xp, yp, 1, 1, buffer) + // TODO slow in Chrome, ok in FF; doesn't play well with gpu surface calc + // await webgl.readPixelsAsync(xp, yp, 1, 1, buffer) + webgl.readPixels(xp, yp, 1, 1, buffer) const objectId = decodeIdRGB(buffer[0], buffer[1], buffer[2]) if (objectId === -1) return instancePickTarget.bind() - await webgl.readPixelsAsync(xp, yp, 1, 1, buffer) + // await webgl.readPixelsAsync(xp, yp, 1, 1, buffer) + webgl.readPixels(xp, yp, 1, 1, buffer) const instanceId = decodeIdRGB(buffer[0], buffer[1], buffer[2]) if (instanceId === -1) return groupPickTarget.bind() - await webgl.readPixelsAsync(xp, yp, 1, 1, buffer) + // await webgl.readPixelsAsync(xp, yp, 1, 1, buffer) + webgl.readPixels(xp, yp, 1, 1, buffer) const groupId = decodeIdRGB(buffer[0], buffer[1], buffer[2]) if (groupId === -1) return diff --git a/src/mol-gl/renderable/direct-volume.ts b/src/mol-gl/renderable/direct-volume.ts index 27ce4e406..46837f43c 100644 --- a/src/mol-gl/renderable/direct-volume.ts +++ b/src/mol-gl/renderable/direct-volume.ts @@ -35,6 +35,8 @@ export const DirectVolumeSchema = { elements: ElementsSpec('uint32'), uAlpha: UniformSpec('f'), + uHighlightColor: UniformSpec('v3'), + uSelectColor: UniformSpec('v3'), dUseFog: DefineSpec('boolean'), uIsoValue: UniformSpec('f'), diff --git a/src/mol-gl/shader/direct-volume.frag b/src/mol-gl/shader/direct-volume.frag index 7baa242c0..d94f58028 100644 --- a/src/mol-gl/shader/direct-volume.frag +++ b/src/mol-gl/shader/direct-volume.frag @@ -11,7 +11,6 @@ varying vec3 unitCoord; varying vec3 origPos; varying float instance; -uniform float uAlpha; uniform mat4 uInvView; uniform float uIsoValue; uniform vec3 uGridDim; @@ -26,6 +25,10 @@ uniform vec3 uSelectColor; uniform vec2 uMarkerTexDim; uniform sampler2D tMarker; +uniform float uAlpha; +uniform float uPickingAlphaThreshold; +uniform int uPickable; + #if defined(dGridTexType_2d) precision mediump sampler2D; uniform sampler2D tGridTex; @@ -126,7 +129,9 @@ vec4 raymarch(vec3 startLoc, vec3 step, vec3 viewDir) { #if defined(dColorType_objectPicking) || defined(dColorType_instancePicking) || defined(dColorType_groupPicking) if (uAlpha < uPickingAlphaThreshold) discard; // ignore so the element below can be picked - #else + if (uPickable == 0) + return vec4(0.0, 0.0, 0.0, 1.0); // set to empty picking id + #endif #if defined(dColorType_objectPicking) return vec4(encodeIdRGB(float(uObjectId)), 1.0); diff --git a/src/mol-gl/webgl/program.ts b/src/mol-gl/webgl/program.ts index b7eb34b26..6825b47bb 100644 --- a/src/mol-gl/webgl/program.ts +++ b/src/mol-gl/webgl/program.ts @@ -68,6 +68,9 @@ export function createProgram(ctx: WebGLContext, props: ProgramProps): Program { vertShaderRef.value.attach(program) fragShaderRef.value.attach(program) gl.linkProgram(program) + if (!gl.getProgramParameter(program, gl.LINK_STATUS)){ + throw new Error(`Could not compile WebGL program. \n\n${gl.getProgramInfoLog(program)}`); + } const uniformUpdaters = getUniformUpdaters(ctx, program, schema) const attributeLocations = getAttributeLocations(ctx, program, schema) -- GitLab