diff --git a/src/mol-canvas3d/canvas3d.ts b/src/mol-canvas3d/canvas3d.ts index faa487b8063cc6f0cec9875d9b2f540846d05786..2a9f5896f12bf3d25aa77133e24288af3718eeb0 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 27ce4e40668fb0b78c587187fbb6564d0fb006f3..46837f43c40bd91cc4a91c54bdae8918815011cd 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 7baa242c02aae1f90c6b47ebf9678152ff1f3cef..d94f580286440e3c29ef0aaf57e391d8a289b5a7 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 b7eb34b2664aa1c3a795e2517badffcc959ddbca..6825b47bba9b1c4dafd4e8d5aa5da7585cbeec24 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)