UNPKG

molstar

Version:

A comprehensive macromolecular library.

132 lines (122 loc) 4.39 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.assign_material_color = void 0; exports.assign_material_color = ` #if defined(dNeedsMarker) float marker = uMarker; if (uMarker == -1.0) { marker = floor(vMarker * 255.0 + 0.5); // rounding required to work on some cards on win } #endif #if defined(dRenderVariant_color) || defined(dRenderVariant_tracing) #if defined(dUsePalette) vec4 material = vec4(texture2D(tPalette, vec2(vPaletteV, 0.5)).rgb, uAlpha); #elif defined(dColorType_uniform) vec4 material = vec4(uColor, uAlpha); #elif defined(dColorType_varying) vec4 material = vec4(vColor.rgb, uAlpha); #endif // mix material with overpaint #if defined(dOverpaint) material.rgb = mix(material.rgb, vOverpaint.rgb, vOverpaint.a); #endif float emissive = uEmissive; #ifdef dEmissive emissive += vEmissive; #endif float metalness = uMetalness; float roughness = uRoughness; float bumpiness = uBumpiness; #ifdef dSubstance float sf = clamp(vSubstance.a, 0.0, 0.99); // clamp to avoid artifacts metalness = mix(metalness, vSubstance.r, sf); roughness = mix(roughness, vSubstance.g, sf); bumpiness = mix(bumpiness, vSubstance.b, sf); #endif #if defined(dXrayShaded) material.a = calcXrayShadedAlpha(material.a, normal); #endif #elif defined(dRenderVariant_depth) if (fragmentDepth > getDepth(gl_FragCoord.xy / uDrawingBufferSize)) { discard; } vec4 material; if (uRenderMask == MaskOpaque) { #if defined(dXrayShaded) discard; #endif #if defined(dTransparency) float dta = 1.0 - vTransparency; #if __VERSION__ == 100 || defined(dVaryingGroup) if (vTransparency < 0.1) dta = 1.0; // hard cutoff to avoid artifacts #endif if (uAlpha * dta < 1.0) { discard; } #else if (uAlpha < 1.0) { discard; } #endif material = packDepthToRGBA(fragmentDepth); } else if (uRenderMask == MaskTransparent) { float alpha = uAlpha; #if defined(dTransparency) float dta = 1.0 - vTransparency; alpha *= dta; #endif #ifdef dXrayShaded alpha = calcXrayShadedAlpha(alpha, normal); #else if (alpha == 1.0) { discard; } #endif material = packDepthWithAlphaToRGBA(fragmentDepth, alpha); } #elif defined(dRenderVariant_marking) vec4 material; if(uMarkingType == 1) { if (marker > 0.0) discard; #ifdef enabledFragDepth material = packDepthToRGBA(gl_FragDepthEXT); #else material = packDepthToRGBA(gl_FragCoord.z); #endif } else { if (marker == 0.0) discard; float depthTest = 1.0; if (uMarkingDepthTest) { depthTest = (fragmentDepth >= getDepthPacked(gl_FragCoord.xy / uDrawingBufferSize)) ? 1.0 : 0.0; } bool isHighlight = intMod(marker, 2.0) > 0.1; float viewZ = depthToViewZ(uIsOrtho, fragmentDepth, uNear, uFar); float fogFactor = smoothstep(uFogNear, uFogFar, abs(viewZ)); if (fogFactor == 1.0) discard; material = vec4(0.0, depthTest, isHighlight ? 1.0 : 0.0, 1.0 - fogFactor); } #elif defined(dRenderVariant_emissive) float emissive = uEmissive; #ifdef dEmissive emissive += vEmissive; #endif vec4 material = vec4(emissive); #endif // apply per-group transparency #if defined(dTransparency) && (defined(dRenderVariant_pick) || defined(dRenderVariant_color) || defined(dRenderVariant_emissive) || defined(dRenderVariant_tracing)) float ta = 1.0 - vTransparency; if (vTransparency < 0.09) ta = 1.0; // hard cutoff looks better #if defined(dRenderVariant_pick) if (ta * uAlpha < uPickingAlphaThreshold) discard; // ignore so the element below can be picked #elif defined(dRenderVariant_emissive) if (ta < 1.0) discard; // emissive not supported with transparency #elif defined(dRenderVariant_color) || defined(dRenderVariant_tracing) material.a *= ta; #endif #endif `;