molstar 3.7.0 → 3.8.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (253) hide show
  1. package/LICENSE +20 -20
  2. package/README.md +202 -202
  3. package/build/viewer/embedded.html +43 -43
  4. package/build/viewer/index.html +106 -106
  5. package/build/viewer/molstar.js +1 -1
  6. package/build/viewer/molstar.js.LICENSE.txt +0 -15
  7. package/lib/apps/docking-viewer/index.html +36 -36
  8. package/lib/apps/viewer/embedded.html +43 -43
  9. package/lib/apps/viewer/index.html +106 -106
  10. package/lib/cli/chem-comp-dict/create-ions.d.ts +2 -1
  11. package/lib/cli/chem-comp-dict/create-ions.js +3 -2
  12. package/lib/cli/cifschema/index.js +1 -1
  13. package/lib/cli/cifschema/util/cif-dic.js +1 -0
  14. package/lib/commonjs/cli/chem-comp-dict/create-ions.d.ts +2 -1
  15. package/lib/commonjs/cli/chem-comp-dict/create-ions.js +3 -2
  16. package/lib/commonjs/cli/cifschema/index.js +1 -1
  17. package/lib/commonjs/cli/cifschema/util/cif-dic.js +1 -0
  18. package/lib/commonjs/examples/proteopedia-wrapper/coloring.d.ts +20 -5
  19. package/lib/commonjs/extensions/rcsb/graphql/types.d.ts +284 -0
  20. package/lib/commonjs/mol-canvas3d/canvas3d.d.ts +1 -1
  21. package/lib/commonjs/mol-canvas3d/canvas3d.js +4 -4
  22. package/lib/commonjs/mol-canvas3d/helper/camera-helper.d.ts +1 -1
  23. package/lib/commonjs/mol-canvas3d/helper/camera-helper.js +7 -5
  24. package/lib/commonjs/mol-canvas3d/helper/handle-helper.d.ts +1 -1
  25. package/lib/commonjs/mol-canvas3d/helper/handle-helper.js +7 -5
  26. package/lib/commonjs/mol-canvas3d/passes/draw.d.ts +4 -8
  27. package/lib/commonjs/mol-canvas3d/passes/draw.js +60 -103
  28. package/lib/commonjs/mol-canvas3d/passes/pick.d.ts +1 -1
  29. package/lib/commonjs/mol-canvas3d/passes/pick.js +1 -3
  30. package/lib/commonjs/mol-canvas3d/passes/postprocessing.d.ts +1 -0
  31. package/lib/commonjs/mol-canvas3d/passes/postprocessing.js +17 -12
  32. package/lib/commonjs/mol-geo/geometry/color-data.d.ts +5 -2
  33. package/lib/commonjs/mol-geo/geometry/color-data.js +7 -17
  34. package/lib/commonjs/mol-geo/geometry/cylinders/cylinders.d.ts +1 -1
  35. package/lib/commonjs/mol-geo/geometry/cylinders/cylinders.js +2 -2
  36. package/lib/commonjs/mol-geo/geometry/lines/lines.d.ts +1 -0
  37. package/lib/commonjs/mol-geo/geometry/mesh/mesh.js +2 -2
  38. package/lib/commonjs/mol-geo/geometry/points/points.d.ts +1 -1
  39. package/lib/commonjs/mol-geo/geometry/spheres/spheres.js +2 -2
  40. package/lib/commonjs/mol-geo/geometry/texture-mesh/texture-mesh.js +2 -2
  41. package/lib/commonjs/mol-geo/geometry/transparency-data.d.ts +1 -1
  42. package/lib/commonjs/mol-geo/geometry/transparency-data.js +3 -1
  43. package/lib/commonjs/mol-gl/renderable/cylinders.d.ts +1 -1
  44. package/lib/commonjs/mol-gl/renderable/cylinders.js +1 -1
  45. package/lib/commonjs/mol-gl/renderable/mesh.d.ts +1 -1
  46. package/lib/commonjs/mol-gl/renderable/mesh.js +1 -1
  47. package/lib/commonjs/mol-gl/renderable/schema.d.ts +2 -2
  48. package/lib/commonjs/mol-gl/renderable/schema.js +2 -2
  49. package/lib/commonjs/mol-gl/renderable/spheres.d.ts +1 -1
  50. package/lib/commonjs/mol-gl/renderable/spheres.js +1 -1
  51. package/lib/commonjs/mol-gl/renderable/texture-mesh.d.ts +1 -1
  52. package/lib/commonjs/mol-gl/renderable/texture-mesh.js +1 -1
  53. package/lib/commonjs/mol-gl/renderer.d.ts +5 -5
  54. package/lib/commonjs/mol-gl/renderer.js +64 -45
  55. package/lib/commonjs/mol-gl/scene.d.ts +2 -1
  56. package/lib/commonjs/mol-gl/scene.js +44 -11
  57. package/lib/commonjs/mol-gl/shader/chunks/apply-interior-color.glsl.d.ts +1 -1
  58. package/lib/commonjs/mol-gl/shader/chunks/apply-interior-color.glsl.js +1 -1
  59. package/lib/commonjs/mol-gl/shader/chunks/assign-material-color.glsl.d.ts +1 -1
  60. package/lib/commonjs/mol-gl/shader/chunks/assign-material-color.glsl.js +1 -1
  61. package/lib/commonjs/mol-gl/shader/chunks/check-picking-alpha.glsl.d.ts +1 -1
  62. package/lib/commonjs/mol-gl/shader/chunks/check-picking-alpha.glsl.js +1 -1
  63. package/lib/commonjs/mol-gl/shader/chunks/common-frag-params.glsl.d.ts +1 -1
  64. package/lib/commonjs/mol-gl/shader/chunks/common-frag-params.glsl.js +1 -1
  65. package/lib/commonjs/mol-gl/shader/chunks/common.glsl.d.ts +1 -1
  66. package/lib/commonjs/mol-gl/shader/chunks/common.glsl.js +1 -1
  67. package/lib/commonjs/mol-gl/shader/chunks/wboit-write.glsl.d.ts +1 -1
  68. package/lib/commonjs/mol-gl/shader/chunks/wboit-write.glsl.js +1 -1
  69. package/lib/commonjs/mol-gl/shader/direct-volume.frag.d.ts +1 -1
  70. package/lib/commonjs/mol-gl/shader/direct-volume.frag.js +1 -1
  71. package/lib/commonjs/mol-gl/shader/image.frag.d.ts +1 -1
  72. package/lib/commonjs/mol-gl/shader/image.frag.js +1 -1
  73. package/lib/commonjs/mol-gl/shader/outlines.frag.d.ts +3 -2
  74. package/lib/commonjs/mol-gl/shader/outlines.frag.js +3 -2
  75. package/lib/commonjs/mol-gl/shader/postprocessing.frag.d.ts +1 -1
  76. package/lib/commonjs/mol-gl/shader/postprocessing.frag.js +1 -1
  77. package/lib/commonjs/mol-gl/shader/ssao.frag.d.ts +2 -2
  78. package/lib/commonjs/mol-gl/shader/ssao.frag.js +2 -2
  79. package/lib/commonjs/mol-gl/webgl/program.js +10 -1
  80. package/lib/commonjs/mol-gl/webgl/render-target.d.ts +3 -1
  81. package/lib/commonjs/mol-gl/webgl/render-target.js +3 -1
  82. package/lib/commonjs/mol-gl/webgl/renderbuffer.d.ts +2 -1
  83. package/lib/commonjs/mol-gl/webgl/renderbuffer.js +8 -1
  84. package/lib/commonjs/mol-gl/webgl/state.d.ts +7 -1
  85. package/lib/commonjs/mol-gl/webgl/state.js +28 -1
  86. package/lib/commonjs/mol-gl/webgl/texture.js +3 -0
  87. package/lib/commonjs/mol-gl/webgl/uniform.d.ts +1 -0
  88. package/lib/commonjs/mol-gl/webgl/uniform.js +5 -1
  89. package/lib/commonjs/mol-io/reader/cif/schema/bird.d.ts +1 -1
  90. package/lib/commonjs/mol-io/reader/cif/schema/bird.js +1 -1
  91. package/lib/commonjs/mol-io/reader/cif/schema/ccd.d.ts +1 -1
  92. package/lib/commonjs/mol-io/reader/cif/schema/ccd.js +1 -1
  93. package/lib/commonjs/mol-io/reader/cif/schema/cif-core.d.ts +1 -1
  94. package/lib/commonjs/mol-io/reader/cif/schema/cif-core.js +1 -1
  95. package/lib/commonjs/mol-io/reader/cif/schema/mmcif.d.ts +3 -4
  96. package/lib/commonjs/mol-io/reader/cif/schema/mmcif.js +2 -3
  97. package/lib/commonjs/mol-io/reader/dx/parser.js +1 -1
  98. package/lib/commonjs/mol-math/geometry/lookup3d/grid.d.ts +1 -1
  99. package/lib/commonjs/mol-math/geometry/lookup3d/grid.js +3 -3
  100. package/lib/commonjs/mol-model/structure/model/properties/seconday-structure.d.ts +4 -2
  101. package/lib/commonjs/mol-model/structure/model/properties/seconday-structure.js +2 -1
  102. package/lib/commonjs/mol-model/structure/model/types/ions.d.ts +2 -2
  103. package/lib/commonjs/mol-model/structure/model/types/ions.js +2 -2
  104. package/lib/commonjs/mol-model/structure/model/types/saccharides.js +1 -1
  105. package/lib/commonjs/mol-model/structure/model/types.d.ts +1 -1
  106. package/lib/commonjs/mol-model/structure/model/types.js +43 -41
  107. package/lib/commonjs/mol-model-formats/structure/common/property.js +2 -0
  108. package/lib/commonjs/mol-model-formats/structure/property/secondary-structure.d.ts +1 -1
  109. package/lib/commonjs/mol-model-formats/structure/property/secondary-structure.js +2 -2
  110. package/lib/commonjs/mol-plugin/behavior/dynamic/volume-streaming/model.d.ts +3 -2
  111. package/lib/commonjs/mol-plugin-state/helpers/root-structure.js +3 -1
  112. package/lib/commonjs/mol-repr/volume/slice.js +1 -1
  113. package/lib/commonjs/mol-script/language/builder.d.ts +0 -1
  114. package/lib/commonjs/mol-theme/color/volume-value.d.ts +3 -2
  115. package/lib/commonjs/mol-theme/color/volume-value.js +1 -3
  116. package/lib/commonjs/mol-theme/color.d.ts +47 -38
  117. package/lib/commonjs/mol-theme/theme.d.ts +8 -7
  118. package/lib/commonjs/mol-theme/theme.js +1 -1
  119. package/lib/examples/alpha-orbitals/index.html +61 -61
  120. package/lib/examples/basic-wrapper/index.html +137 -137
  121. package/lib/examples/lighting/index.html +88 -88
  122. package/lib/examples/proteopedia-wrapper/coloring.d.ts +20 -5
  123. package/lib/examples/proteopedia-wrapper/index.html +236 -236
  124. package/lib/extensions/rcsb/graphql/types.d.ts +284 -0
  125. package/lib/mol-canvas3d/canvas3d.d.ts +1 -1
  126. package/lib/mol-canvas3d/canvas3d.js +4 -4
  127. package/lib/mol-canvas3d/helper/camera-helper.d.ts +1 -1
  128. package/lib/mol-canvas3d/helper/camera-helper.js +8 -6
  129. package/lib/mol-canvas3d/helper/handle-helper.d.ts +1 -1
  130. package/lib/mol-canvas3d/helper/handle-helper.js +8 -6
  131. package/lib/mol-canvas3d/passes/draw.d.ts +4 -8
  132. package/lib/mol-canvas3d/passes/draw.js +57 -100
  133. package/lib/mol-canvas3d/passes/pick.d.ts +1 -1
  134. package/lib/mol-canvas3d/passes/pick.js +1 -3
  135. package/lib/mol-canvas3d/passes/postprocessing.d.ts +1 -0
  136. package/lib/mol-canvas3d/passes/postprocessing.js +17 -12
  137. package/lib/mol-geo/geometry/color-data.d.ts +5 -2
  138. package/lib/mol-geo/geometry/color-data.js +7 -17
  139. package/lib/mol-geo/geometry/cylinders/cylinders.d.ts +1 -1
  140. package/lib/mol-geo/geometry/cylinders/cylinders.js +2 -2
  141. package/lib/mol-geo/geometry/lines/lines.d.ts +1 -0
  142. package/lib/mol-geo/geometry/mesh/mesh.js +2 -2
  143. package/lib/mol-geo/geometry/points/points.d.ts +1 -1
  144. package/lib/mol-geo/geometry/spheres/spheres.js +2 -2
  145. package/lib/mol-geo/geometry/texture-mesh/texture-mesh.js +2 -2
  146. package/lib/mol-geo/geometry/transparency-data.d.ts +1 -1
  147. package/lib/mol-geo/geometry/transparency-data.js +3 -1
  148. package/lib/mol-gl/renderable/cylinders.d.ts +1 -1
  149. package/lib/mol-gl/renderable/cylinders.js +1 -1
  150. package/lib/mol-gl/renderable/mesh.d.ts +1 -1
  151. package/lib/mol-gl/renderable/mesh.js +1 -1
  152. package/lib/mol-gl/renderable/schema.d.ts +2 -2
  153. package/lib/mol-gl/renderable/schema.js +2 -2
  154. package/lib/mol-gl/renderable/spheres.d.ts +1 -1
  155. package/lib/mol-gl/renderable/spheres.js +1 -1
  156. package/lib/mol-gl/renderable/texture-mesh.d.ts +1 -1
  157. package/lib/mol-gl/renderable/texture-mesh.js +1 -1
  158. package/lib/mol-gl/renderer.d.ts +5 -5
  159. package/lib/mol-gl/renderer.js +64 -45
  160. package/lib/mol-gl/scene.d.ts +2 -1
  161. package/lib/mol-gl/scene.js +44 -11
  162. package/lib/mol-gl/shader/chunks/apply-interior-color.glsl.d.ts +1 -1
  163. package/lib/mol-gl/shader/chunks/apply-interior-color.glsl.js +1 -1
  164. package/lib/mol-gl/shader/chunks/assign-material-color.glsl.d.ts +1 -1
  165. package/lib/mol-gl/shader/chunks/assign-material-color.glsl.js +1 -1
  166. package/lib/mol-gl/shader/chunks/check-picking-alpha.glsl.d.ts +1 -1
  167. package/lib/mol-gl/shader/chunks/check-picking-alpha.glsl.js +1 -1
  168. package/lib/mol-gl/shader/chunks/common-frag-params.glsl.d.ts +1 -1
  169. package/lib/mol-gl/shader/chunks/common-frag-params.glsl.js +1 -1
  170. package/lib/mol-gl/shader/chunks/common.glsl.d.ts +1 -1
  171. package/lib/mol-gl/shader/chunks/common.glsl.js +1 -1
  172. package/lib/mol-gl/shader/chunks/wboit-write.glsl.d.ts +1 -1
  173. package/lib/mol-gl/shader/chunks/wboit-write.glsl.js +1 -1
  174. package/lib/mol-gl/shader/direct-volume.frag.d.ts +1 -1
  175. package/lib/mol-gl/shader/direct-volume.frag.js +1 -1
  176. package/lib/mol-gl/shader/image.frag.d.ts +1 -1
  177. package/lib/mol-gl/shader/image.frag.js +1 -1
  178. package/lib/mol-gl/shader/outlines.frag.d.ts +3 -2
  179. package/lib/mol-gl/shader/outlines.frag.js +3 -2
  180. package/lib/mol-gl/shader/postprocessing.frag.d.ts +1 -1
  181. package/lib/mol-gl/shader/postprocessing.frag.js +1 -1
  182. package/lib/mol-gl/shader/ssao.frag.d.ts +2 -2
  183. package/lib/mol-gl/shader/ssao.frag.js +2 -2
  184. package/lib/mol-gl/webgl/program.js +11 -2
  185. package/lib/mol-gl/webgl/render-target.d.ts +3 -1
  186. package/lib/mol-gl/webgl/render-target.js +3 -1
  187. package/lib/mol-gl/webgl/renderbuffer.d.ts +2 -1
  188. package/lib/mol-gl/webgl/renderbuffer.js +8 -1
  189. package/lib/mol-gl/webgl/state.d.ts +7 -1
  190. package/lib/mol-gl/webgl/state.js +28 -1
  191. package/lib/mol-gl/webgl/texture.js +3 -0
  192. package/lib/mol-gl/webgl/uniform.d.ts +1 -0
  193. package/lib/mol-gl/webgl/uniform.js +3 -0
  194. package/lib/mol-io/reader/cif/schema/bird.d.ts +1 -1
  195. package/lib/mol-io/reader/cif/schema/bird.js +1 -1
  196. package/lib/mol-io/reader/cif/schema/ccd.d.ts +1 -1
  197. package/lib/mol-io/reader/cif/schema/ccd.js +1 -1
  198. package/lib/mol-io/reader/cif/schema/cif-core.d.ts +1 -1
  199. package/lib/mol-io/reader/cif/schema/cif-core.js +1 -1
  200. package/lib/mol-io/reader/cif/schema/mmcif.d.ts +3 -4
  201. package/lib/mol-io/reader/cif/schema/mmcif.js +2 -3
  202. package/lib/mol-io/reader/dx/parser.js +1 -1
  203. package/lib/mol-math/geometry/lookup3d/grid.d.ts +1 -1
  204. package/lib/mol-math/geometry/lookup3d/grid.js +3 -3
  205. package/lib/mol-model/structure/model/properties/seconday-structure.d.ts +4 -2
  206. package/lib/mol-model/structure/model/properties/seconday-structure.js +2 -1
  207. package/lib/mol-model/structure/model/types/ions.d.ts +2 -2
  208. package/lib/mol-model/structure/model/types/ions.js +2 -2
  209. package/lib/mol-model/structure/model/types/saccharides.js +1 -1
  210. package/lib/mol-model/structure/model/types.d.ts +1 -1
  211. package/lib/mol-model/structure/model/types.js +43 -41
  212. package/lib/mol-model-formats/structure/common/property.js +2 -0
  213. package/lib/mol-model-formats/structure/property/secondary-structure.d.ts +1 -1
  214. package/lib/mol-model-formats/structure/property/secondary-structure.js +2 -2
  215. package/lib/mol-plugin/behavior/dynamic/volume-streaming/model.d.ts +3 -2
  216. package/lib/mol-plugin/version.js +2 -2
  217. package/lib/mol-plugin-state/helpers/root-structure.js +3 -1
  218. package/lib/mol-plugin-ui/skin/base/base.scss +32 -32
  219. package/lib/mol-plugin-ui/skin/base/components/controls-base.scss +333 -333
  220. package/lib/mol-plugin-ui/skin/base/components/controls.scss +418 -418
  221. package/lib/mol-plugin-ui/skin/base/components/help.scss +27 -27
  222. package/lib/mol-plugin-ui/skin/base/components/line-graph.scss +67 -67
  223. package/lib/mol-plugin-ui/skin/base/components/log.scss +100 -100
  224. package/lib/mol-plugin-ui/skin/base/components/misc.scss +643 -643
  225. package/lib/mol-plugin-ui/skin/base/components/sequence.scss +125 -125
  226. package/lib/mol-plugin-ui/skin/base/components/slider.scss +165 -165
  227. package/lib/mol-plugin-ui/skin/base/components/tasks.scss +99 -99
  228. package/lib/mol-plugin-ui/skin/base/components/toast.scss +83 -83
  229. package/lib/mol-plugin-ui/skin/base/components/transformer.scss +163 -163
  230. package/lib/mol-plugin-ui/skin/base/components/viewport.scss +128 -128
  231. package/lib/mol-plugin-ui/skin/base/layout/common.scss +71 -71
  232. package/lib/mol-plugin-ui/skin/base/layout/controls-landscape.scss +89 -89
  233. package/lib/mol-plugin-ui/skin/base/layout/controls-outside.scss +98 -98
  234. package/lib/mol-plugin-ui/skin/base/layout/controls-portrait.scss +108 -108
  235. package/lib/mol-plugin-ui/skin/base/layout.scss +40 -40
  236. package/lib/mol-plugin-ui/skin/base/logo.scss +12 -12
  237. package/lib/mol-plugin-ui/skin/base/normalize.scss +209 -209
  238. package/lib/mol-plugin-ui/skin/base/ui.scss +40 -40
  239. package/lib/mol-plugin-ui/skin/base/variables.scss +85 -85
  240. package/lib/mol-plugin-ui/skin/blue.scss +1 -1
  241. package/lib/mol-plugin-ui/skin/colors/blue.scss +23 -23
  242. package/lib/mol-plugin-ui/skin/colors/dark.scss +23 -23
  243. package/lib/mol-plugin-ui/skin/colors/light.scss +29 -29
  244. package/lib/mol-plugin-ui/skin/dark.scss +1 -1
  245. package/lib/mol-plugin-ui/skin/light.scss +1 -1
  246. package/lib/mol-repr/volume/slice.js +1 -1
  247. package/lib/mol-script/language/builder.d.ts +0 -1
  248. package/lib/mol-theme/color/volume-value.d.ts +3 -2
  249. package/lib/mol-theme/color/volume-value.js +2 -4
  250. package/lib/mol-theme/color.d.ts +47 -38
  251. package/lib/mol-theme/theme.d.ts +8 -7
  252. package/lib/mol-theme/theme.js +1 -1
  253. package/package.json +162 -162
@@ -9,7 +9,7 @@ import { createGraphicsRenderItem } from '../webgl/render-item';
9
9
  import { GlobalUniformSchema, BaseSchema, AttributeSpec, ElementsSpec, DefineSpec, InternalSchema, GlobalTextureSchema, ValueSpec, UniformSpec } from './schema';
10
10
  import { MeshShaderCode } from '../shader-code';
11
11
  import { ValueCell } from '../../mol-util';
12
- export var MeshSchema = __assign(__assign({}, BaseSchema), { aGroup: AttributeSpec('float32', 1, 0), aPosition: AttributeSpec('float32', 3, 0), aNormal: AttributeSpec('float32', 3, 0), elements: ElementsSpec('uint32'), dFlatShaded: DefineSpec('boolean'), uDoubleSided: UniformSpec('b'), dFlipSided: DefineSpec('boolean'), dIgnoreLight: DefineSpec('boolean'), dXrayShaded: DefineSpec('boolean'), dOpaqueBackfaces: DefineSpec('boolean'), uBumpFrequency: UniformSpec('f'), uBumpAmplitude: UniformSpec('f'), meta: ValueSpec('unknown') });
12
+ export var MeshSchema = __assign(__assign({}, BaseSchema), { aGroup: AttributeSpec('float32', 1, 0), aPosition: AttributeSpec('float32', 3, 0), aNormal: AttributeSpec('float32', 3, 0), elements: ElementsSpec('uint32'), dFlatShaded: DefineSpec('boolean'), uDoubleSided: UniformSpec('b'), dFlipSided: DefineSpec('boolean'), dIgnoreLight: DefineSpec('boolean'), dXrayShaded: DefineSpec('boolean'), dTransparentBackfaces: DefineSpec('string', ['off', 'on', 'opaque']), uBumpFrequency: UniformSpec('f'), uBumpAmplitude: UniformSpec('f'), meta: ValueSpec('unknown') });
13
13
  export function MeshRenderable(ctx, id, values, state, materialId, variants) {
14
14
  var schema = __assign(__assign(__assign(__assign({}, GlobalUniformSchema), GlobalTextureSchema), InternalSchema), MeshSchema);
15
15
  var internalValues = {
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) 2018-2021 mol* contributors, licensed under MIT, See LICENSE file for more info.
2
+ * Copyright (c) 2018-2022 mol* contributors, licensed under MIT, See LICENSE file for more info.
3
3
  *
4
4
  * @author Alexander Rose <alexander.rose@weirdbyte.de>
5
5
  */
@@ -119,7 +119,7 @@ export declare const GlobalUniformSchema: {
119
119
  readonly uSelectStrength: UniformSpec<"f">;
120
120
  readonly uMarkerPriority: UniformSpec<"i">;
121
121
  readonly uXrayEdgeFalloff: UniformSpec<"f">;
122
- readonly uRenderWboit: UniformSpec<"b">;
122
+ readonly uRenderMask: UniformSpec<"i">;
123
123
  readonly uMarkingDepthTest: UniformSpec<"b">;
124
124
  readonly uMarkingType: UniformSpec<"i">;
125
125
  readonly uPickType: UniformSpec<"i">;
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) 2018-2021 mol* contributors, licensed under MIT, See LICENSE file for more info.
2
+ * Copyright (c) 2018-2022 mol* contributors, licensed under MIT, See LICENSE file for more info.
3
3
  *
4
4
  * @author Alexander Rose <alexander.rose@weirdbyte.de>
5
5
  */
@@ -94,7 +94,7 @@ export var GlobalUniformSchema = {
94
94
  uSelectStrength: UniformSpec('f'),
95
95
  uMarkerPriority: UniformSpec('i'),
96
96
  uXrayEdgeFalloff: UniformSpec('f'),
97
- uRenderWboit: UniformSpec('b'),
97
+ uRenderMask: UniformSpec('i'),
98
98
  uMarkingDepthTest: UniformSpec('b'),
99
99
  uMarkingType: UniformSpec('i'),
100
100
  uPickType: UniformSpec('i'),
@@ -16,7 +16,7 @@ export declare const SpheresSchema: {
16
16
  uDoubleSided: UniformSpec<"b">;
17
17
  dIgnoreLight: DefineSpec<"boolean">;
18
18
  dXrayShaded: DefineSpec<"boolean">;
19
- dOpaqueBackfaces: DefineSpec<"boolean">;
19
+ dTransparentBackfaces: DefineSpec<"string">;
20
20
  uBumpFrequency: UniformSpec<"f">;
21
21
  uBumpAmplitude: UniformSpec<"f">;
22
22
  uSize: UniformSpec<"f">;
@@ -9,7 +9,7 @@ import { createGraphicsRenderItem } from '../webgl/render-item';
9
9
  import { GlobalUniformSchema, BaseSchema, AttributeSpec, InternalSchema, SizeSchema, ElementsSpec, ValueSpec, DefineSpec, GlobalTextureSchema, UniformSpec } from './schema';
10
10
  import { SpheresShaderCode } from '../shader-code';
11
11
  import { ValueCell } from '../../mol-util';
12
- export var SpheresSchema = __assign(__assign(__assign({}, BaseSchema), SizeSchema), { aGroup: AttributeSpec('float32', 1, 0), aPosition: AttributeSpec('float32', 3, 0), aMapping: AttributeSpec('float32', 2, 0), elements: ElementsSpec('uint32'), padding: ValueSpec('number'), uDoubleSided: UniformSpec('b'), dIgnoreLight: DefineSpec('boolean'), dXrayShaded: DefineSpec('boolean'), dOpaqueBackfaces: DefineSpec('boolean'), uBumpFrequency: UniformSpec('f'), uBumpAmplitude: UniformSpec('f') });
12
+ export var SpheresSchema = __assign(__assign(__assign({}, BaseSchema), SizeSchema), { aGroup: AttributeSpec('float32', 1, 0), aPosition: AttributeSpec('float32', 3, 0), aMapping: AttributeSpec('float32', 2, 0), elements: ElementsSpec('uint32'), padding: ValueSpec('number'), uDoubleSided: UniformSpec('b'), dIgnoreLight: DefineSpec('boolean'), dXrayShaded: DefineSpec('boolean'), dTransparentBackfaces: DefineSpec('string', ['off', 'on', 'opaque']), uBumpFrequency: UniformSpec('f'), uBumpAmplitude: UniformSpec('f') });
13
13
  export function SpheresRenderable(ctx, id, values, state, materialId, variants) {
14
14
  var schema = __assign(__assign(__assign(__assign({}, GlobalUniformSchema), GlobalTextureSchema), InternalSchema), SpheresSchema);
15
15
  var internalValues = {
@@ -17,7 +17,7 @@ export declare const TextureMeshSchema: {
17
17
  dFlipSided: DefineSpec<"boolean">;
18
18
  dIgnoreLight: DefineSpec<"boolean">;
19
19
  dXrayShaded: DefineSpec<"boolean">;
20
- dOpaqueBackfaces: DefineSpec<"boolean">;
20
+ dTransparentBackfaces: DefineSpec<"string">;
21
21
  uBumpFrequency: UniformSpec<"f">;
22
22
  uBumpAmplitude: UniformSpec<"f">;
23
23
  meta: ValueSpec<"unknown">;
@@ -9,7 +9,7 @@ import { createGraphicsRenderItem } from '../webgl/render-item';
9
9
  import { GlobalUniformSchema, BaseSchema, DefineSpec, InternalSchema, UniformSpec, TextureSpec, GlobalTextureSchema, ValueSpec } from './schema';
10
10
  import { MeshShaderCode } from '../shader-code';
11
11
  import { ValueCell } from '../../mol-util';
12
- export var TextureMeshSchema = __assign(__assign({}, BaseSchema), { uGeoTexDim: UniformSpec('v2', 'buffered'), tPosition: TextureSpec('texture', 'rgb', 'float', 'nearest'), tGroup: TextureSpec('texture', 'alpha', 'float', 'nearest'), tNormal: TextureSpec('texture', 'rgb', 'float', 'nearest'), dFlatShaded: DefineSpec('boolean'), uDoubleSided: UniformSpec('b'), dFlipSided: DefineSpec('boolean'), dIgnoreLight: DefineSpec('boolean'), dXrayShaded: DefineSpec('boolean'), dOpaqueBackfaces: DefineSpec('boolean'), uBumpFrequency: UniformSpec('f'), uBumpAmplitude: UniformSpec('f'), meta: ValueSpec('unknown') });
12
+ export var TextureMeshSchema = __assign(__assign({}, BaseSchema), { uGeoTexDim: UniformSpec('v2', 'buffered'), tPosition: TextureSpec('texture', 'rgb', 'float', 'nearest'), tGroup: TextureSpec('texture', 'alpha', 'float', 'nearest'), tNormal: TextureSpec('texture', 'rgb', 'float', 'nearest'), dFlatShaded: DefineSpec('boolean'), uDoubleSided: UniformSpec('b'), dFlipSided: DefineSpec('boolean'), dIgnoreLight: DefineSpec('boolean'), dXrayShaded: DefineSpec('boolean'), dTransparentBackfaces: DefineSpec('string', ['off', 'on', 'opaque']), uBumpFrequency: UniformSpec('f'), uBumpAmplitude: UniformSpec('f'), meta: ValueSpec('unknown') });
13
13
  export function TextureMeshRenderable(ctx, id, values, state, materialId, variants) {
14
14
  var schema = __assign(__assign(__assign(__assign({}, GlobalUniformSchema), GlobalTextureSchema), InternalSchema), TextureMeshSchema);
15
15
  var internalValues = {
@@ -7,7 +7,6 @@ import { ICamera } from '../mol-canvas3d/camera';
7
7
  import { Scene } from './scene';
8
8
  import { WebGLContext } from './webgl/context';
9
9
  import { Color } from '../mol-util/color';
10
- import { GraphicsRenderVariant } from './webgl/render-item';
11
10
  import { ParamDefinition as PD } from '../mol-util/param-definition';
12
11
  import { Texture } from './webgl/texture';
13
12
  export interface RendererStats {
@@ -38,17 +37,18 @@ interface Renderer {
38
37
  readonly stats: RendererStats;
39
38
  readonly props: Readonly<RendererProps>;
40
39
  clear: (toBackgroundColor: boolean, ignoreTransparentBackground?: boolean) => void;
41
- clearDepth: () => void;
40
+ clearDepth: (packed?: boolean) => void;
42
41
  update: (camera: ICamera) => void;
43
- renderPick: (group: Scene.Group, camera: ICamera, variant: GraphicsRenderVariant, depthTexture: Texture | null, pickType: PickType) => void;
42
+ renderPick: (group: Scene.Group, camera: ICamera, variant: 'pick' | 'depth', depthTexture: Texture | null, pickType: PickType) => void;
44
43
  renderDepth: (group: Scene.Group, camera: ICamera, depthTexture: Texture | null) => void;
44
+ renderDepthOpaque: (group: Scene.Group, camera: ICamera, depthTexture: Texture | null) => void;
45
+ renderDepthTransparent: (group: Scene.Group, camera: ICamera, depthTexture: Texture | null) => void;
45
46
  renderMarkingDepth: (group: Scene.Group, camera: ICamera, depthTexture: Texture | null) => void;
46
47
  renderMarkingMask: (group: Scene.Group, camera: ICamera, depthTexture: Texture | null) => void;
47
48
  renderBlended: (group: Scene.Group, camera: ICamera, depthTexture: Texture | null) => void;
48
49
  renderBlendedOpaque: (group: Scene.Group, camera: ICamera, depthTexture: Texture | null) => void;
49
50
  renderBlendedTransparent: (group: Scene.Group, camera: ICamera, depthTexture: Texture | null) => void;
50
- renderBlendedVolumeOpaque: (group: Scene.Group, camera: ICamera, depthTexture: Texture | null) => void;
51
- renderBlendedVolumeTransparent: (group: Scene.Group, camera: ICamera, depthTexture: Texture | null) => void;
51
+ renderBlendedVolume: (group: Scene.Group, camera: ICamera, depthTexture: Texture | null) => void;
52
52
  renderWboitOpaque: (group: Scene.Group, camera: ICamera, depthTexture: Texture | null) => void;
53
53
  renderWboitTransparent: (group: Scene.Group, camera: ICamera, depthTexture: Texture | null) => void;
54
54
  setProps: (props: Partial<RendererProps>) => void;
@@ -64,7 +64,9 @@ var Renderer;
64
64
  var drawingBufferSize = Vec2.create(gl.drawingBufferWidth, gl.drawingBufferHeight);
65
65
  var bgColor = Color.toVec3Normalized(Vec3(), p.backgroundColor);
66
66
  var transparentBackground = false;
67
- var emptyDepthTexture = ctx.resources.texture('image-depth', 'depth', 'ushort', 'nearest');
67
+ var emptyDepthTexture = ctx.resources.texture('image-uint8', 'rgba', 'ubyte', 'nearest');
68
+ emptyDepthTexture.define(1, 1);
69
+ emptyDepthTexture.load({ array: new Uint8Array([255, 255, 255, 255]), width: 1, height: 1 });
68
70
  var sharedTexturesList = [
69
71
  ['tDepth', emptyDepthTexture]
70
72
  ];
@@ -101,7 +103,7 @@ var Renderer;
101
103
  uFogNear: ValueCell.create(1),
102
104
  uFogFar: ValueCell.create(10000),
103
105
  uFogColor: ValueCell.create(bgColor),
104
- uRenderWboit: ValueCell.create(false),
106
+ uRenderMask: ValueCell.create(0),
105
107
  uMarkingDepthTest: ValueCell.create(false),
106
108
  uPickType: ValueCell.create(0 /* None */),
107
109
  uMarkingType: ValueCell.create(0 /* None */),
@@ -220,14 +222,14 @@ var Renderer;
220
222
  ValueCell.updateIfChanged(globalUniforms.uFogNear, camera.fogNear);
221
223
  ValueCell.updateIfChanged(globalUniforms.uTransparentBackground, transparentBackground);
222
224
  };
223
- var updateInternal = function (group, camera, depthTexture, renderWboit, markingDepthTest) {
225
+ var updateInternal = function (group, camera, depthTexture, renderMask, markingDepthTest) {
224
226
  arrayMapUpsert(sharedTexturesList, 'tDepth', depthTexture || emptyDepthTexture);
225
227
  ValueCell.update(globalUniforms.uModel, group.view);
226
228
  ValueCell.update(globalUniforms.uModelView, Mat4.mul(modelView, group.view, camera.view));
227
229
  ValueCell.update(globalUniforms.uInvModelView, Mat4.invert(invModelView, modelView));
228
230
  ValueCell.update(globalUniforms.uModelViewProjection, Mat4.mul(modelViewProjection, modelView, camera.projection));
229
231
  ValueCell.update(globalUniforms.uInvModelViewProjection, Mat4.invert(invModelViewProjection, modelViewProjection));
230
- ValueCell.updateIfChanged(globalUniforms.uRenderWboit, renderWboit);
232
+ ValueCell.updateIfChanged(globalUniforms.uRenderMask, renderMask);
231
233
  ValueCell.updateIfChanged(globalUniforms.uMarkingDepthTest, markingDepthTest);
232
234
  state.enable(gl.SCISSOR_TEST);
233
235
  state.colorMask(true, true, true, true);
@@ -241,7 +243,7 @@ var Renderer;
241
243
  state.disable(gl.BLEND);
242
244
  state.enable(gl.DEPTH_TEST);
243
245
  state.depthMask(true);
244
- updateInternal(group, camera, depthTexture, false, false);
246
+ updateInternal(group, camera, depthTexture, 0 /* All */, false);
245
247
  ValueCell.updateIfChanged(globalUniforms.uPickType, pickType);
246
248
  var renderables = group.renderables;
247
249
  for (var i = 0, il = renderables.length; i < il; ++i) {
@@ -254,17 +256,45 @@ var Renderer;
254
256
  state.disable(gl.BLEND);
255
257
  state.enable(gl.DEPTH_TEST);
256
258
  state.depthMask(true);
257
- updateInternal(group, camera, depthTexture, false, false);
259
+ updateInternal(group, camera, depthTexture, 0 /* All */, false);
258
260
  var renderables = group.renderables;
259
261
  for (var i = 0, il = renderables.length; i < il; ++i) {
260
262
  renderObject(renderables[i], 'depth', 0 /* None */);
261
263
  }
262
264
  };
265
+ var renderDepthOpaque = function (group, camera, depthTexture) {
266
+ var _a;
267
+ state.disable(gl.BLEND);
268
+ state.enable(gl.DEPTH_TEST);
269
+ state.depthMask(true);
270
+ updateInternal(group, camera, depthTexture, 1 /* Opaque */, false);
271
+ var renderables = group.renderables;
272
+ for (var i = 0, il = renderables.length; i < il; ++i) {
273
+ var r = renderables[i];
274
+ if (r.state.opaque && r.values.transparencyAverage.ref.value !== 1 && !((_a = r.values.dXrayShaded) === null || _a === void 0 ? void 0 : _a.ref.value)) {
275
+ renderObject(r, 'depth', 0 /* None */);
276
+ }
277
+ }
278
+ };
279
+ var renderDepthTransparent = function (group, camera, depthTexture) {
280
+ var _a;
281
+ state.disable(gl.BLEND);
282
+ state.enable(gl.DEPTH_TEST);
283
+ state.depthMask(true);
284
+ updateInternal(group, camera, depthTexture, 2 /* Transparent */, false);
285
+ var renderables = group.renderables;
286
+ for (var i = 0, il = renderables.length; i < il; ++i) {
287
+ var r = renderables[i];
288
+ if (!r.state.opaque || r.values.transparencyAverage.ref.value > 0 || ((_a = r.values.dXrayShaded) === null || _a === void 0 ? void 0 : _a.ref.value)) {
289
+ renderObject(r, 'depth', 0 /* None */);
290
+ }
291
+ }
292
+ };
263
293
  var renderMarkingDepth = function (group, camera, depthTexture) {
264
294
  state.disable(gl.BLEND);
265
295
  state.enable(gl.DEPTH_TEST);
266
296
  state.depthMask(true);
267
- updateInternal(group, camera, depthTexture, false, false);
297
+ updateInternal(group, camera, depthTexture, 0 /* All */, false);
268
298
  ValueCell.updateIfChanged(globalUniforms.uMarkingType, 1 /* Depth */);
269
299
  var renderables = group.renderables;
270
300
  for (var i = 0, il = renderables.length; i < il; ++i) {
@@ -278,7 +308,7 @@ var Renderer;
278
308
  state.disable(gl.BLEND);
279
309
  state.enable(gl.DEPTH_TEST);
280
310
  state.depthMask(true);
281
- updateInternal(group, camera, depthTexture, false, !!depthTexture);
311
+ updateInternal(group, camera, depthTexture, 0 /* All */, !!depthTexture);
282
312
  ValueCell.updateIfChanged(globalUniforms.uMarkingType, 2 /* Mask */);
283
313
  var renderables = group.renderables;
284
314
  for (var i = 0, il = renderables.length; i < il; ++i) {
@@ -297,14 +327,14 @@ var Renderer;
297
327
  state.disable(gl.BLEND);
298
328
  state.enable(gl.DEPTH_TEST);
299
329
  state.depthMask(true);
300
- updateInternal(group, camera, depthTexture, false, false);
330
+ updateInternal(group, camera, depthTexture, 1 /* Opaque */, false);
301
331
  var renderables = group.renderables;
302
332
  for (var i = 0, il = renderables.length; i < il; ++i) {
303
333
  var r = renderables[i];
304
334
  if (r.state.opaque) {
305
335
  renderObject(r, 'colorBlended', 0 /* None */);
306
336
  }
307
- else if (((_a = r.values.uDoubleSided) === null || _a === void 0 ? void 0 : _a.ref.value) && ((_b = r.values.dOpaqueBackfaces) === null || _b === void 0 ? void 0 : _b.ref.value)) {
337
+ else if (((_a = r.values.uDoubleSided) === null || _a === void 0 ? void 0 : _a.ref.value) && ((_b = r.values.dTransparentBackfaces) === null || _b === void 0 ? void 0 : _b.ref.value) === 'opaque') {
308
338
  renderObject(r, 'colorBlended', 2 /* BlendedBack */);
309
339
  }
310
340
  }
@@ -312,7 +342,7 @@ var Renderer;
312
342
  var renderBlendedTransparent = function (group, camera, depthTexture) {
313
343
  var _a, _b;
314
344
  state.enable(gl.DEPTH_TEST);
315
- updateInternal(group, camera, depthTexture, false, false);
345
+ updateInternal(group, camera, depthTexture, 2 /* Transparent */, false);
316
346
  var renderables = group.renderables;
317
347
  if (transparentBackground) {
318
348
  state.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA);
@@ -331,10 +361,10 @@ var Renderer;
331
361
  state.depthMask(false);
332
362
  for (var i = 0, il = renderables.length; i < il; ++i) {
333
363
  var r = renderables[i];
334
- if (!r.state.opaque && !r.state.writeDepth) {
364
+ if ((!r.state.opaque && !r.state.writeDepth) || r.values.transparencyAverage.ref.value > 0) {
335
365
  if ((_a = r.values.uDoubleSided) === null || _a === void 0 ? void 0 : _a.ref.value) {
336
366
  // render frontfaces and backfaces separately to avoid artefacts
337
- if (!((_b = r.values.dOpaqueBackfaces) === null || _b === void 0 ? void 0 : _b.ref.value)) {
367
+ if (((_b = r.values.dTransparentBackfaces) === null || _b === void 0 ? void 0 : _b.ref.value) !== 'opaque') {
338
368
  renderObject(r, 'colorBlended', 2 /* BlendedBack */);
339
369
  }
340
370
  renderObject(r, 'colorBlended', 1 /* BlendedFront */);
@@ -345,34 +375,14 @@ var Renderer;
345
375
  }
346
376
  }
347
377
  };
348
- var renderBlendedVolumeOpaque = function (group, camera, depthTexture) {
349
- var _a;
378
+ var renderBlendedVolume = function (group, camera, depthTexture) {
350
379
  state.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA);
351
380
  state.enable(gl.BLEND);
352
- updateInternal(group, camera, depthTexture, false, false);
381
+ updateInternal(group, camera, depthTexture, 2 /* Transparent */, false);
353
382
  var renderables = group.renderables;
354
383
  for (var i = 0, il = renderables.length; i < il; ++i) {
355
384
  var r = renderables[i];
356
- // TODO: simplify, handle in renderable.state???
357
- // uAlpha is updated in "render" so we need to recompute it here
358
- var alpha = clamp(r.values.alpha.ref.value * r.state.alphaFactor, 0, 1);
359
- if (alpha === 1 && r.values.transparencyAverage.ref.value !== 1 && !((_a = r.values.dXrayShaded) === null || _a === void 0 ? void 0 : _a.ref.value)) {
360
- renderObject(r, 'colorBlended', 0 /* None */);
361
- }
362
- }
363
- };
364
- var renderBlendedVolumeTransparent = function (group, camera, depthTexture) {
365
- var _a;
366
- state.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA);
367
- state.enable(gl.BLEND);
368
- updateInternal(group, camera, depthTexture, false, false);
369
- var renderables = group.renderables;
370
- for (var i = 0, il = renderables.length; i < il; ++i) {
371
- var r = renderables[i];
372
- // TODO: simplify, handle in renderable.state???
373
- // uAlpha is updated in "render" so we need to recompute it here
374
- var alpha = clamp(r.values.alpha.ref.value * r.state.alphaFactor, 0, 1);
375
- if (alpha < 1 || r.values.transparencyAverage.ref.value > 0 || ((_a = r.values.dXrayShaded) === null || _a === void 0 ? void 0 : _a.ref.value)) {
385
+ if (r.values.dGeometryType.ref.value === 'directVolume') {
376
386
  renderObject(r, 'colorBlended', 0 /* None */);
377
387
  }
378
388
  }
@@ -382,21 +392,21 @@ var Renderer;
382
392
  state.disable(gl.BLEND);
383
393
  state.enable(gl.DEPTH_TEST);
384
394
  state.depthMask(true);
385
- updateInternal(group, camera, depthTexture, false, false);
395
+ updateInternal(group, camera, depthTexture, 1 /* Opaque */, false);
386
396
  var renderables = group.renderables;
387
397
  for (var i = 0, il = renderables.length; i < il; ++i) {
388
398
  var r = renderables[i];
389
399
  // TODO: simplify, handle in renderable.state???
390
400
  // uAlpha is updated in "render" so we need to recompute it here
391
401
  var alpha = clamp(r.values.alpha.ref.value * r.state.alphaFactor, 0, 1);
392
- if ((alpha === 1 && r.values.transparencyAverage.ref.value !== 1 && r.values.dGeometryType.ref.value !== 'directVolume' && ((_a = r.values.dPointStyle) === null || _a === void 0 ? void 0 : _a.ref.value) !== 'fuzzy' && !((_b = r.values.dXrayShaded) === null || _b === void 0 ? void 0 : _b.ref.value)) || ((_c = r.values.dOpaqueBackfaces) === null || _c === void 0 ? void 0 : _c.ref.value)) {
402
+ if ((alpha === 1 && r.values.transparencyAverage.ref.value !== 1 && r.values.dGeometryType.ref.value !== 'directVolume' && ((_a = r.values.dPointStyle) === null || _a === void 0 ? void 0 : _a.ref.value) !== 'fuzzy' && !((_b = r.values.dXrayShaded) === null || _b === void 0 ? void 0 : _b.ref.value)) || ((_c = r.values.dTransparentBackfaces) === null || _c === void 0 ? void 0 : _c.ref.value) === 'opaque') {
393
403
  renderObject(r, 'colorWboit', 0 /* None */);
394
404
  }
395
405
  }
396
406
  };
397
407
  var renderWboitTransparent = function (group, camera, depthTexture) {
398
408
  var _a, _b;
399
- updateInternal(group, camera, depthTexture, true, false);
409
+ updateInternal(group, camera, depthTexture, 2 /* Transparent */, false);
400
410
  var renderables = group.renderables;
401
411
  for (var i = 0, il = renderables.length; i < il; ++i) {
402
412
  var r = renderables[i];
@@ -425,22 +435,31 @@ var Renderer;
425
435
  }
426
436
  gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
427
437
  },
428
- clearDepth: function () {
438
+ clearDepth: function (packed) {
439
+ if (packed === void 0) { packed = false; }
429
440
  state.enable(gl.SCISSOR_TEST);
430
- state.enable(gl.DEPTH_TEST);
431
- state.depthMask(true);
432
- gl.clear(gl.DEPTH_BUFFER_BIT);
441
+ if (packed) {
442
+ state.colorMask(true, true, true, true);
443
+ state.clearColor(1, 1, 1, 1);
444
+ gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
445
+ }
446
+ else {
447
+ state.enable(gl.DEPTH_TEST);
448
+ state.depthMask(true);
449
+ gl.clear(gl.DEPTH_BUFFER_BIT);
450
+ }
433
451
  },
434
452
  update: update,
435
453
  renderPick: renderPick,
436
454
  renderDepth: renderDepth,
455
+ renderDepthOpaque: renderDepthOpaque,
456
+ renderDepthTransparent: renderDepthTransparent,
437
457
  renderMarkingDepth: renderMarkingDepth,
438
458
  renderMarkingMask: renderMarkingMask,
439
459
  renderBlended: renderBlended,
440
460
  renderBlendedOpaque: renderBlendedOpaque,
441
461
  renderBlendedTransparent: renderBlendedTransparent,
442
- renderBlendedVolumeOpaque: renderBlendedVolumeOpaque,
443
- renderBlendedVolumeTransparent: renderBlendedVolumeTransparent,
462
+ renderBlendedVolume: renderBlendedVolume,
444
463
  renderWboitOpaque: renderWboitOpaque,
445
464
  renderWboitTransparent: renderWboitTransparent,
446
465
  setProps: function (props) {
@@ -26,7 +26,8 @@ interface Scene extends Object3D {
26
26
  has: (o: GraphicsRenderObject) => boolean;
27
27
  clear: () => void;
28
28
  forEach: (callbackFn: (value: GraphicsRenderable, key: GraphicsRenderObject) => void) => void;
29
- getMarkerAverage: () => number;
29
+ readonly markerAverage: number;
30
+ readonly opacityAverage: number;
30
31
  }
31
32
  declare namespace Scene {
32
33
  interface Group extends Object3D {
@@ -13,6 +13,7 @@ import { arraySetRemove } from '../mol-util/array';
13
13
  import { BoundaryHelper } from '../mol-math/geometry/boundary-helper';
14
14
  import { hash1 } from '../mol-data/util';
15
15
  import { GraphicsRenderVariants } from './webgl/render-item';
16
+ import { clamp } from '../mol-math/interpolate';
16
17
  var boundaryHelper = new BoundaryHelper('98');
17
18
  function calculateBoundingSphere(renderables, boundingSphere, onlyVisible) {
18
19
  boundaryHelper.reset();
@@ -64,6 +65,8 @@ var Scene;
64
65
  var volumes = [];
65
66
  var boundingSphereDirty = true;
66
67
  var boundingSphereVisibleDirty = true;
68
+ var markerAverage = 0;
69
+ var opacityAverage = 0;
67
70
  var object3d = Object3D.create();
68
71
  var view = object3d.view, position = object3d.position, direction = object3d.direction, up = object3d.up;
69
72
  function add(o) {
@@ -119,6 +122,7 @@ var Scene;
119
122
  return false;
120
123
  }
121
124
  renderables.sort(renderableSort);
125
+ opacityAverage = calculateOpacityAverage();
122
126
  return true;
123
127
  }
124
128
  var commitQueue = new CommitQueue();
@@ -139,12 +143,45 @@ var Scene;
139
143
  var newVisibleHash = computeVisibleHash();
140
144
  if (newVisibleHash !== visibleHash) {
141
145
  boundingSphereVisibleDirty = true;
146
+ opacityAverage = calculateOpacityAverage();
142
147
  return true;
143
148
  }
144
149
  else {
145
150
  return false;
146
151
  }
147
152
  }
153
+ function calculateMarkerAverage() {
154
+ if (primitives.length === 0)
155
+ return 0;
156
+ var count = 0;
157
+ var markerAverage = 0;
158
+ for (var i = 0, il = primitives.length; i < il; ++i) {
159
+ if (!primitives[i].state.visible)
160
+ continue;
161
+ markerAverage += primitives[i].values.markerAverage.ref.value;
162
+ count += 1;
163
+ }
164
+ return count > 0 ? markerAverage / count : 0;
165
+ }
166
+ function calculateOpacityAverage() {
167
+ var _a;
168
+ if (primitives.length === 0)
169
+ return 0;
170
+ var count = 0;
171
+ var opacityAverage = 0;
172
+ for (var i = 0, il = primitives.length; i < il; ++i) {
173
+ var p = primitives[i];
174
+ if (!p.state.visible)
175
+ continue;
176
+ // TODO: simplify, handle in renderable.state???
177
+ // uAlpha is updated in "render" so we need to recompute it here
178
+ var alpha = clamp(p.values.alpha.ref.value * p.state.alphaFactor, 0, 1);
179
+ var xray = ((_a = p.values.dXrayShaded) === null || _a === void 0 ? void 0 : _a.ref.value) ? 0.5 : 1;
180
+ opacityAverage += (1 - p.values.transparencyAverage.ref.value) * alpha * xray;
181
+ count += 1;
182
+ }
183
+ return count > 0 ? opacityAverage / count : 0;
184
+ }
148
185
  return {
149
186
  view: view,
150
187
  position: position,
@@ -174,6 +211,8 @@ var Scene;
174
211
  else {
175
212
  syncVisibility();
176
213
  }
214
+ markerAverage = calculateMarkerAverage();
215
+ opacityAverage = calculateOpacityAverage();
177
216
  },
178
217
  add: function (o) { return commitQueue.add(o); },
179
218
  remove: function (o) { return commitQueue.remove(o); },
@@ -215,17 +254,11 @@ var Scene;
215
254
  }
216
255
  return boundingSphereVisible;
217
256
  },
218
- getMarkerAverage: function () {
219
- if (primitives.length === 0 && volumes.length === 0)
220
- return 0;
221
- var markerAverage = 0;
222
- for (var i = 0, il = primitives.length; i < il; ++i) {
223
- markerAverage += primitives[i].values.markerAverage.ref.value;
224
- }
225
- for (var i = 0, il = volumes.length; i < il; ++i) {
226
- markerAverage += volumes[i].values.markerAverage.ref.value;
227
- }
228
- return markerAverage / (primitives.length + volumes.length);
257
+ get markerAverage() {
258
+ return markerAverage;
259
+ },
260
+ get opacityAverage() {
261
+ return opacityAverage;
229
262
  },
230
263
  };
231
264
  }
@@ -1 +1 @@
1
- export declare const apply_interior_color = "\nif (interior) {\n if (uInteriorColorFlag) {\n gl_FragColor.rgb = uInteriorColor;\n } else {\n gl_FragColor.rgb *= 1.0 - uInteriorDarkening;\n }\n\n #ifdef dOpaqueBackfaces\n gl_FragColor.a = 1.0;\n #endif\n}\n";
1
+ export declare const apply_interior_color = "\nif (interior) {\n if (uInteriorColorFlag) {\n gl_FragColor.rgb = uInteriorColor;\n } else {\n gl_FragColor.rgb *= 1.0 - uInteriorDarkening;\n }\n\n #ifdef dTransparentBackfaces_opaque\n gl_FragColor.a = 1.0;\n #endif\n}\n";
@@ -1 +1 @@
1
- export var apply_interior_color = "\nif (interior) {\n if (uInteriorColorFlag) {\n gl_FragColor.rgb = uInteriorColor;\n } else {\n gl_FragColor.rgb *= 1.0 - uInteriorDarkening;\n }\n\n #ifdef dOpaqueBackfaces\n gl_FragColor.a = 1.0;\n #endif\n}\n";
1
+ export var apply_interior_color = "\nif (interior) {\n if (uInteriorColorFlag) {\n gl_FragColor.rgb = uInteriorColor;\n } else {\n gl_FragColor.rgb *= 1.0 - uInteriorDarkening;\n }\n\n #ifdef dTransparentBackfaces_opaque\n gl_FragColor.a = 1.0;\n #endif\n}\n";
@@ -1 +1 @@
1
- export declare const assign_material_color = "\n#if defined(dRenderVariant_color) || defined(dRenderVariant_marking)\n float marker = uMarker;\n if (uMarker == -1.0) {\n marker = floor(vMarker * 255.0 + 0.5); // rounding required to work on some cards on win\n }\n#endif\n\n#if defined(dRenderVariant_color)\n #if defined(dUsePalette)\n vec4 material = vec4(texture2D(tPalette, vec2(vPaletteV, 0.5)).rgb, uAlpha);\n #elif defined(dColorType_uniform)\n vec4 material = vec4(uColor, uAlpha);\n #elif defined(dColorType_varying)\n vec4 material = vec4(vColor.rgb, uAlpha);\n #endif\n\n // mix material with overpaint\n #if defined(dOverpaint)\n material.rgb = mix(material.rgb, vOverpaint.rgb, vOverpaint.a);\n #endif\n\n float metalness = uMetalness;\n float roughness = uRoughness;\n float bumpiness = uBumpiness;\n #ifdef dSubstance\n metalness = mix(metalness, vSubstance.r, vSubstance.a);\n roughness = mix(roughness, vSubstance.g, vSubstance.a);\n bumpiness = mix(bumpiness, vSubstance.b, vSubstance.a);\n #endif\n#elif defined(dRenderVariant_pick)\n vec4 material = vColor;\n#elif defined(dRenderVariant_depth)\n #ifdef enabledFragDepth\n vec4 material = packDepthToRGBA(gl_FragDepthEXT);\n #else\n vec4 material = packDepthToRGBA(gl_FragCoord.z);\n #endif\n#elif defined(dRenderVariant_marking)\n vec4 material;\n if(uMarkingType == 1) {\n if (marker > 0.0)\n discard;\n #ifdef enabledFragDepth\n material = packDepthToRGBA(gl_FragDepthEXT);\n #else\n material = packDepthToRGBA(gl_FragCoord.z);\n #endif\n } else {\n if (marker == 0.0)\n discard;\n float depthTest = 1.0;\n if (uMarkingDepthTest) {\n depthTest = (fragmentDepth >= getDepth(gl_FragCoord.xy / uDrawingBufferSize)) ? 1.0 : 0.0;\n }\n bool isHighlight = intMod(marker, 2.0) > 0.1;\n float viewZ = depthToViewZ(uIsOrtho, fragmentDepth, uNear, uFar);\n float fogFactor = smoothstep(uFogNear, uFogFar, abs(viewZ));\n if (fogFactor == 1.0)\n discard;\n material = vec4(0.0, depthTest, isHighlight ? 1.0 : 0.0, 1.0 - fogFactor);\n }\n#endif\n\n// apply screendoor transparency\n#if defined(dTransparency)\n float ta = 1.0 - vTransparency;\n #if defined(dRenderVariant_colorWboit)\n if (vTransparency < 0.2) ta = 1.0; // hard cutoff looks better with wboit\n #endif\n\n #if defined(dRenderVariant_pick)\n if (ta < uPickingAlphaThreshold)\n discard; // ignore so the element below can be picked\n #else\n #if defined(dRenderVariant_colorBlended)\n float at = 0.0;\n\n // shift by view-offset during multi-sample rendering to allow for blending\n vec2 coord = gl_FragCoord.xy + uViewOffset * 0.25;\n\n const mat4 thresholdMatrix = mat4(\n 1.0 / 17.0, 9.0 / 17.0, 3.0 / 17.0, 11.0 / 17.0,\n 13.0 / 17.0, 5.0 / 17.0, 15.0 / 17.0, 7.0 / 17.0,\n 4.0 / 17.0, 12.0 / 17.0, 2.0 / 17.0, 10.0 / 17.0,\n 16.0 / 17.0, 8.0 / 17.0, 14.0 / 17.0, 6.0 / 17.0\n );\n int ci = int(intMod(coord.x, 4.0));\n int ri = int(intMod(coord.y, 4.0));\n #if __VERSION__ == 100\n vec4 i = vec4(float(ci * 4 + ri));\n vec4 v = thresholdMatrix[0] * vec4(equal(i, vec4(0.0, 1.0, 2.0, 3.0))) +\n thresholdMatrix[1] * vec4(equal(i, vec4(4.0, 5.0, 6.0, 7.0))) +\n thresholdMatrix[2] * vec4(equal(i, vec4(8.0, 9.0, 10.0, 11.0))) +\n thresholdMatrix[3] * vec4(equal(i, vec4(12.0, 13.0, 14.0, 15.0)));\n at = v.x + v.y + v.z + v.w;\n #else\n at = thresholdMatrix[ci][ri];\n #endif\n\n if (ta < 0.99 && (ta < 0.01 || ta < at)) {\n discard;\n }\n #elif defined(dRenderVariant_colorWboit)\n material.a *= ta;\n #endif\n #endif\n#endif\n";
1
+ export declare const assign_material_color = "\n#if defined(dRenderVariant_color) || defined(dRenderVariant_marking)\n float marker = uMarker;\n if (uMarker == -1.0) {\n marker = floor(vMarker * 255.0 + 0.5); // rounding required to work on some cards on win\n }\n#endif\n\n#if defined(dRenderVariant_color)\n #if defined(dUsePalette)\n vec4 material = vec4(texture2D(tPalette, vec2(vPaletteV, 0.5)).rgb, uAlpha);\n #elif defined(dColorType_uniform)\n vec4 material = vec4(uColor, uAlpha);\n #elif defined(dColorType_varying)\n vec4 material = vec4(vColor.rgb, uAlpha);\n #endif\n\n // mix material with overpaint\n #if defined(dOverpaint)\n material.rgb = mix(material.rgb, vOverpaint.rgb, vOverpaint.a);\n #endif\n\n float metalness = uMetalness;\n float roughness = uRoughness;\n float bumpiness = uBumpiness;\n #ifdef dSubstance\n metalness = mix(metalness, vSubstance.r, vSubstance.a);\n roughness = mix(roughness, vSubstance.g, vSubstance.a);\n bumpiness = mix(bumpiness, vSubstance.b, vSubstance.a);\n #endif\n#elif defined(dRenderVariant_pick)\n vec4 material = vColor;\n#elif defined(dRenderVariant_depth)\n if (fragmentDepth > getDepth(gl_FragCoord.xy / uDrawingBufferSize)) {\n discard;\n }\n\n #ifndef dXrayShaded\n #if defined(dTransparency)\n float dta = 1.0 - vTransparency;\n if (vTransparency < 0.2) dta = 1.0; // hard cutoff looks better\n\n if (uRenderMask == MaskTransparent && uAlpha * dta == 1.0) {\n discard;\n } else if (uRenderMask == MaskOpaque && uAlpha * dta < 1.0) {\n discard;\n }\n #else\n if (uRenderMask == MaskTransparent && uAlpha == 1.0) {\n discard;\n } else if (uRenderMask == MaskOpaque && uAlpha < 1.0) {\n discard;\n }\n #endif\n #else\n if (uRenderMask == MaskOpaque) {\n discard;\n }\n #endif\n\n vec4 material = packDepthToRGBA(fragmentDepth);\n#elif defined(dRenderVariant_marking)\n vec4 material;\n if(uMarkingType == 1) {\n if (marker > 0.0)\n discard;\n #ifdef enabledFragDepth\n material = packDepthToRGBA(gl_FragDepthEXT);\n #else\n material = packDepthToRGBA(gl_FragCoord.z);\n #endif\n } else {\n if (marker == 0.0)\n discard;\n float depthTest = 1.0;\n if (uMarkingDepthTest) {\n depthTest = (fragmentDepth >= getDepthPacked(gl_FragCoord.xy / uDrawingBufferSize)) ? 1.0 : 0.0;\n }\n bool isHighlight = intMod(marker, 2.0) > 0.1;\n float viewZ = depthToViewZ(uIsOrtho, fragmentDepth, uNear, uFar);\n float fogFactor = smoothstep(uFogNear, uFogFar, abs(viewZ));\n if (fogFactor == 1.0)\n discard;\n material = vec4(0.0, depthTest, isHighlight ? 1.0 : 0.0, 1.0 - fogFactor);\n }\n#endif\n\n// apply per-group transparency\n#if defined(dTransparency) && (defined(dRenderVariant_pick) || defined(dRenderVariant_color))\n float ta = 1.0 - vTransparency;\n if (vTransparency < 0.2) ta = 1.0; // hard cutoff looks better\n\n #if defined(dRenderVariant_pick)\n if (ta < uPickingAlphaThreshold)\n discard; // ignore so the element below can be picked\n #elif defined(dRenderVariant_color)\n material.a *= ta;\n\n #if defined(dRenderVariant_colorBlended)\n #if defined(dTransparentBackfaces_off)\n if ((uRenderMask == MaskOpaque && material.a < 1.0) ||\n (uRenderMask == MaskTransparent && material.a == 1.0) ||\n (interior && material.a < 1.0)\n ) {\n discard;\n }\n #elif defined(dTransparentBackfaces_on)\n if ((uRenderMask == MaskOpaque && material.a < 1.0) ||\n (uRenderMask == MaskTransparent && material.a == 1.0)\n ) {\n discard;\n }\n #elif defined(dTransparentBackfaces_opaque)\n if (interior) {\n material.a = 1.0;\n } else if (\n (uRenderMask == MaskOpaque && material.a < 1.0) ||\n (uRenderMask == MaskTransparent && material.a == 1.0)\n ) {\n discard;\n }\n #endif\n #endif\n #endif\n#endif\n";
@@ -1 +1 @@
1
- export var assign_material_color = "\n#if defined(dRenderVariant_color) || defined(dRenderVariant_marking)\n float marker = uMarker;\n if (uMarker == -1.0) {\n marker = floor(vMarker * 255.0 + 0.5); // rounding required to work on some cards on win\n }\n#endif\n\n#if defined(dRenderVariant_color)\n #if defined(dUsePalette)\n vec4 material = vec4(texture2D(tPalette, vec2(vPaletteV, 0.5)).rgb, uAlpha);\n #elif defined(dColorType_uniform)\n vec4 material = vec4(uColor, uAlpha);\n #elif defined(dColorType_varying)\n vec4 material = vec4(vColor.rgb, uAlpha);\n #endif\n\n // mix material with overpaint\n #if defined(dOverpaint)\n material.rgb = mix(material.rgb, vOverpaint.rgb, vOverpaint.a);\n #endif\n\n float metalness = uMetalness;\n float roughness = uRoughness;\n float bumpiness = uBumpiness;\n #ifdef dSubstance\n metalness = mix(metalness, vSubstance.r, vSubstance.a);\n roughness = mix(roughness, vSubstance.g, vSubstance.a);\n bumpiness = mix(bumpiness, vSubstance.b, vSubstance.a);\n #endif\n#elif defined(dRenderVariant_pick)\n vec4 material = vColor;\n#elif defined(dRenderVariant_depth)\n #ifdef enabledFragDepth\n vec4 material = packDepthToRGBA(gl_FragDepthEXT);\n #else\n vec4 material = packDepthToRGBA(gl_FragCoord.z);\n #endif\n#elif defined(dRenderVariant_marking)\n vec4 material;\n if(uMarkingType == 1) {\n if (marker > 0.0)\n discard;\n #ifdef enabledFragDepth\n material = packDepthToRGBA(gl_FragDepthEXT);\n #else\n material = packDepthToRGBA(gl_FragCoord.z);\n #endif\n } else {\n if (marker == 0.0)\n discard;\n float depthTest = 1.0;\n if (uMarkingDepthTest) {\n depthTest = (fragmentDepth >= getDepth(gl_FragCoord.xy / uDrawingBufferSize)) ? 1.0 : 0.0;\n }\n bool isHighlight = intMod(marker, 2.0) > 0.1;\n float viewZ = depthToViewZ(uIsOrtho, fragmentDepth, uNear, uFar);\n float fogFactor = smoothstep(uFogNear, uFogFar, abs(viewZ));\n if (fogFactor == 1.0)\n discard;\n material = vec4(0.0, depthTest, isHighlight ? 1.0 : 0.0, 1.0 - fogFactor);\n }\n#endif\n\n// apply screendoor transparency\n#if defined(dTransparency)\n float ta = 1.0 - vTransparency;\n #if defined(dRenderVariant_colorWboit)\n if (vTransparency < 0.2) ta = 1.0; // hard cutoff looks better with wboit\n #endif\n\n #if defined(dRenderVariant_pick)\n if (ta < uPickingAlphaThreshold)\n discard; // ignore so the element below can be picked\n #else\n #if defined(dRenderVariant_colorBlended)\n float at = 0.0;\n\n // shift by view-offset during multi-sample rendering to allow for blending\n vec2 coord = gl_FragCoord.xy + uViewOffset * 0.25;\n\n const mat4 thresholdMatrix = mat4(\n 1.0 / 17.0, 9.0 / 17.0, 3.0 / 17.0, 11.0 / 17.0,\n 13.0 / 17.0, 5.0 / 17.0, 15.0 / 17.0, 7.0 / 17.0,\n 4.0 / 17.0, 12.0 / 17.0, 2.0 / 17.0, 10.0 / 17.0,\n 16.0 / 17.0, 8.0 / 17.0, 14.0 / 17.0, 6.0 / 17.0\n );\n int ci = int(intMod(coord.x, 4.0));\n int ri = int(intMod(coord.y, 4.0));\n #if __VERSION__ == 100\n vec4 i = vec4(float(ci * 4 + ri));\n vec4 v = thresholdMatrix[0] * vec4(equal(i, vec4(0.0, 1.0, 2.0, 3.0))) +\n thresholdMatrix[1] * vec4(equal(i, vec4(4.0, 5.0, 6.0, 7.0))) +\n thresholdMatrix[2] * vec4(equal(i, vec4(8.0, 9.0, 10.0, 11.0))) +\n thresholdMatrix[3] * vec4(equal(i, vec4(12.0, 13.0, 14.0, 15.0)));\n at = v.x + v.y + v.z + v.w;\n #else\n at = thresholdMatrix[ci][ri];\n #endif\n\n if (ta < 0.99 && (ta < 0.01 || ta < at)) {\n discard;\n }\n #elif defined(dRenderVariant_colorWboit)\n material.a *= ta;\n #endif\n #endif\n#endif\n";
1
+ export var assign_material_color = "\n#if defined(dRenderVariant_color) || defined(dRenderVariant_marking)\n float marker = uMarker;\n if (uMarker == -1.0) {\n marker = floor(vMarker * 255.0 + 0.5); // rounding required to work on some cards on win\n }\n#endif\n\n#if defined(dRenderVariant_color)\n #if defined(dUsePalette)\n vec4 material = vec4(texture2D(tPalette, vec2(vPaletteV, 0.5)).rgb, uAlpha);\n #elif defined(dColorType_uniform)\n vec4 material = vec4(uColor, uAlpha);\n #elif defined(dColorType_varying)\n vec4 material = vec4(vColor.rgb, uAlpha);\n #endif\n\n // mix material with overpaint\n #if defined(dOverpaint)\n material.rgb = mix(material.rgb, vOverpaint.rgb, vOverpaint.a);\n #endif\n\n float metalness = uMetalness;\n float roughness = uRoughness;\n float bumpiness = uBumpiness;\n #ifdef dSubstance\n metalness = mix(metalness, vSubstance.r, vSubstance.a);\n roughness = mix(roughness, vSubstance.g, vSubstance.a);\n bumpiness = mix(bumpiness, vSubstance.b, vSubstance.a);\n #endif\n#elif defined(dRenderVariant_pick)\n vec4 material = vColor;\n#elif defined(dRenderVariant_depth)\n if (fragmentDepth > getDepth(gl_FragCoord.xy / uDrawingBufferSize)) {\n discard;\n }\n\n #ifndef dXrayShaded\n #if defined(dTransparency)\n float dta = 1.0 - vTransparency;\n if (vTransparency < 0.2) dta = 1.0; // hard cutoff looks better\n\n if (uRenderMask == MaskTransparent && uAlpha * dta == 1.0) {\n discard;\n } else if (uRenderMask == MaskOpaque && uAlpha * dta < 1.0) {\n discard;\n }\n #else\n if (uRenderMask == MaskTransparent && uAlpha == 1.0) {\n discard;\n } else if (uRenderMask == MaskOpaque && uAlpha < 1.0) {\n discard;\n }\n #endif\n #else\n if (uRenderMask == MaskOpaque) {\n discard;\n }\n #endif\n\n vec4 material = packDepthToRGBA(fragmentDepth);\n#elif defined(dRenderVariant_marking)\n vec4 material;\n if(uMarkingType == 1) {\n if (marker > 0.0)\n discard;\n #ifdef enabledFragDepth\n material = packDepthToRGBA(gl_FragDepthEXT);\n #else\n material = packDepthToRGBA(gl_FragCoord.z);\n #endif\n } else {\n if (marker == 0.0)\n discard;\n float depthTest = 1.0;\n if (uMarkingDepthTest) {\n depthTest = (fragmentDepth >= getDepthPacked(gl_FragCoord.xy / uDrawingBufferSize)) ? 1.0 : 0.0;\n }\n bool isHighlight = intMod(marker, 2.0) > 0.1;\n float viewZ = depthToViewZ(uIsOrtho, fragmentDepth, uNear, uFar);\n float fogFactor = smoothstep(uFogNear, uFogFar, abs(viewZ));\n if (fogFactor == 1.0)\n discard;\n material = vec4(0.0, depthTest, isHighlight ? 1.0 : 0.0, 1.0 - fogFactor);\n }\n#endif\n\n// apply per-group transparency\n#if defined(dTransparency) && (defined(dRenderVariant_pick) || defined(dRenderVariant_color))\n float ta = 1.0 - vTransparency;\n if (vTransparency < 0.2) ta = 1.0; // hard cutoff looks better\n\n #if defined(dRenderVariant_pick)\n if (ta < uPickingAlphaThreshold)\n discard; // ignore so the element below can be picked\n #elif defined(dRenderVariant_color)\n material.a *= ta;\n\n #if defined(dRenderVariant_colorBlended)\n #if defined(dTransparentBackfaces_off)\n if ((uRenderMask == MaskOpaque && material.a < 1.0) ||\n (uRenderMask == MaskTransparent && material.a == 1.0) ||\n (interior && material.a < 1.0)\n ) {\n discard;\n }\n #elif defined(dTransparentBackfaces_on)\n if ((uRenderMask == MaskOpaque && material.a < 1.0) ||\n (uRenderMask == MaskTransparent && material.a == 1.0)\n ) {\n discard;\n }\n #elif defined(dTransparentBackfaces_opaque)\n if (interior) {\n material.a = 1.0;\n } else if (\n (uRenderMask == MaskOpaque && material.a < 1.0) ||\n (uRenderMask == MaskTransparent && material.a == 1.0)\n ) {\n discard;\n }\n #endif\n #endif\n #endif\n#endif\n";
@@ -1 +1 @@
1
- export declare const check_picking_alpha = "\nfloat viewZ = depthToViewZ(uIsOrtho, fragmentDepth, uNear, uFar);\nfloat fogFactor = smoothstep(uFogNear, uFogFar, abs(viewZ));\nfloat alpha = (1.0 - fogFactor) * uAlpha;\n// if not opaque enough ignore so the element below can be picked\nif (uAlpha < uPickingAlphaThreshold || alpha < 0.1) {\n #ifdef dOpaqueBackfaces\n if (!interior) discard;\n #else\n discard;\n #endif\n}\n";
1
+ export declare const check_picking_alpha = "\nfloat viewZ = depthToViewZ(uIsOrtho, fragmentDepth, uNear, uFar);\nfloat fogFactor = smoothstep(uFogNear, uFogFar, abs(viewZ));\nfloat alpha = (1.0 - fogFactor) * uAlpha;\n// if not opaque enough ignore so the element below can be picked\nif (uAlpha < uPickingAlphaThreshold || alpha < 0.1) {\n #ifdef dTransparentBackfaces_opaque\n if (!interior) discard;\n #else\n discard;\n #endif\n}\n";
@@ -1 +1 @@
1
- export var check_picking_alpha = "\nfloat viewZ = depthToViewZ(uIsOrtho, fragmentDepth, uNear, uFar);\nfloat fogFactor = smoothstep(uFogNear, uFogFar, abs(viewZ));\nfloat alpha = (1.0 - fogFactor) * uAlpha;\n// if not opaque enough ignore so the element below can be picked\nif (uAlpha < uPickingAlphaThreshold || alpha < 0.1) {\n #ifdef dOpaqueBackfaces\n if (!interior) discard;\n #else\n discard;\n #endif\n}\n";
1
+ export var check_picking_alpha = "\nfloat viewZ = depthToViewZ(uIsOrtho, fragmentDepth, uNear, uFar);\nfloat fogFactor = smoothstep(uFogNear, uFogFar, abs(viewZ));\nfloat alpha = (1.0 - fogFactor) * uAlpha;\n// if not opaque enough ignore so the element below can be picked\nif (uAlpha < uPickingAlphaThreshold || alpha < 0.1) {\n #ifdef dTransparentBackfaces_opaque\n if (!interior) discard;\n #else\n discard;\n #endif\n}\n";
@@ -1 +1 @@
1
- export declare const common_frag_params = "\nuniform int uObjectId;\nuniform int uInstanceCount;\nuniform int uGroupCount;\n\nuniform int uPickType;\nuniform int uMarkingType;\n\n#if dClipObjectCount != 0\n uniform int uClipObjectType[dClipObjectCount];\n uniform bool uClipObjectInvert[dClipObjectCount];\n uniform vec3 uClipObjectPosition[dClipObjectCount];\n uniform vec4 uClipObjectRotation[dClipObjectCount];\n uniform vec3 uClipObjectScale[dClipObjectCount];\n\n #if defined(dClipping)\n #if __VERSION__ == 100\n varying float vClipping;\n #else\n flat in float vClipping;\n #endif\n #endif\n#endif\n\nuniform vec3 uHighlightColor;\nuniform vec3 uSelectColor;\nuniform float uHighlightStrength;\nuniform float uSelectStrength;\nuniform int uMarkerPriority;\n\n#if defined(dRenderVariant_color) || defined(dRenderVariant_marking)\n uniform float uMarker;\n #if __VERSION__ == 100\n varying float vMarker;\n #else\n flat in float vMarker;\n #endif\n#endif\n\nvarying vec3 vModelPosition;\nvarying vec3 vViewPosition;\n\nuniform vec2 uViewOffset;\n\nuniform float uNear;\nuniform float uFar;\nuniform float uIsOrtho;\n\nuniform float uFogNear;\nuniform float uFogFar;\nuniform vec3 uFogColor;\n\nuniform float uAlpha;\nuniform float uPickingAlphaThreshold;\nuniform bool uTransparentBackground;\n\nuniform bool uDoubleSided;\nuniform float uInteriorDarkening;\nuniform bool uInteriorColorFlag;\nuniform vec3 uInteriorColor;\nbool interior;\n\nuniform float uXrayEdgeFalloff;\n\nuniform mat4 uProjection;\n\nuniform bool uRenderWboit;\nuniform bool uMarkingDepthTest;\n\nuniform sampler2D tDepth;\nuniform vec2 uDrawingBufferSize;\n\nfloat getDepth(const in vec2 coords) {\n // always packed due to merged depth from primitives and volumes\n return unpackRGBAToDepth(texture2D(tDepth, coords));\n}\n\nfloat calcDepth(const in vec3 pos) {\n vec2 clipZW = pos.z * uProjection[2].zw + uProjection[3].zw;\n return 0.5 + 0.5 * clipZW.x / clipZW.y;\n}\n\n// \"Bump Mapping Unparametrized Surfaces on the GPU\" Morten S. Mikkelsen\n// https://mmikk.github.io/papers3d/mm_sfgrad_bump.pdf\nvec3 perturbNormal(in vec3 position, in vec3 normal, in float height, in float scale) {\n vec3 sigmaS = dFdx(position);\n vec3 sigmaT = dFdy(position);\n\n vec3 r1 = cross(sigmaT, normal);\n vec3 r2 = cross(normal, sigmaS);\n float det = dot(sigmaS, r1);\n\n float bs = dFdx(height);\n float bt = dFdy(height);\n\n vec3 surfGrad = sign(det) * (bs * r1 + bt * r2);\n return normalize(abs(det) * normal - scale * surfGrad);\n}\n\nfloat hash(in float h) {\n return fract(sin(h) * 43758.5453123);\n}\n\nfloat noise(in vec3 x) {\n vec3 p = floor(x);\n vec3 f = fract(x);\n f = f * f * (3.0 - 2.0 * f);\n\n float n = p.x + p.y * 157.0 + 113.0 * p.z;\n return mix(\n mix(mix(hash(n + 0.0), hash(n + 1.0), f.x),\n mix(hash(n + 157.0), hash(n + 158.0), f.x), f.y),\n mix(mix(hash(n + 113.0), hash(n + 114.0), f.x),\n mix(hash(n + 270.0), hash(n + 271.0), f.x), f.y), f.z);\n}\n\nfloat fbm(in vec3 p) {\n float f = 0.0;\n f += 0.5 * noise(p);\n p *= 2.01;\n f += 0.25 * noise(p);\n p *= 2.02;\n f += 0.125 * noise(p);\n\n return f;\n}\n";
1
+ export declare const common_frag_params = "\nuniform int uObjectId;\nuniform int uInstanceCount;\nuniform int uGroupCount;\n\nuniform int uPickType;\nuniform int uMarkingType;\n\n#if dClipObjectCount != 0\n uniform int uClipObjectType[dClipObjectCount];\n uniform bool uClipObjectInvert[dClipObjectCount];\n uniform vec3 uClipObjectPosition[dClipObjectCount];\n uniform vec4 uClipObjectRotation[dClipObjectCount];\n uniform vec3 uClipObjectScale[dClipObjectCount];\n\n #if defined(dClipping)\n #if __VERSION__ == 100\n varying float vClipping;\n #else\n flat in float vClipping;\n #endif\n #endif\n#endif\n\nuniform vec3 uHighlightColor;\nuniform vec3 uSelectColor;\nuniform float uHighlightStrength;\nuniform float uSelectStrength;\nuniform int uMarkerPriority;\n\n#if defined(dRenderVariant_color) || defined(dRenderVariant_marking)\n uniform float uMarker;\n #if __VERSION__ == 100\n varying float vMarker;\n #else\n flat in float vMarker;\n #endif\n#endif\n\nvarying vec3 vModelPosition;\nvarying vec3 vViewPosition;\n\nuniform vec2 uViewOffset;\n\nuniform float uNear;\nuniform float uFar;\nuniform float uIsOrtho;\n\nuniform float uFogNear;\nuniform float uFogFar;\nuniform vec3 uFogColor;\n\nuniform float uAlpha;\nuniform float uPickingAlphaThreshold;\nuniform bool uTransparentBackground;\n\nuniform bool uDoubleSided;\nuniform float uInteriorDarkening;\nuniform bool uInteriorColorFlag;\nuniform vec3 uInteriorColor;\nbool interior;\n\nuniform float uXrayEdgeFalloff;\n\nuniform mat4 uProjection;\n\nuniform int uRenderMask;\nuniform bool uMarkingDepthTest;\n\nuniform sampler2D tDepth;\nuniform vec2 uDrawingBufferSize;\n\nfloat getDepthPacked(const in vec2 coords) {\n return unpackRGBAToDepth(texture2D(tDepth, coords));\n}\n\nfloat getDepth(const in vec2 coords) {\n #ifdef depthTextureSupport\n return texture2D(tDepth, coords).r;\n #else\n return unpackRGBAToDepth(texture2D(tDepth, coords));\n #endif\n}\n\nfloat calcDepth(const in vec3 pos) {\n vec2 clipZW = pos.z * uProjection[2].zw + uProjection[3].zw;\n return 0.5 + 0.5 * clipZW.x / clipZW.y;\n}\n\n// \"Bump Mapping Unparametrized Surfaces on the GPU\" Morten S. Mikkelsen\n// https://mmikk.github.io/papers3d/mm_sfgrad_bump.pdf\nvec3 perturbNormal(in vec3 position, in vec3 normal, in float height, in float scale) {\n vec3 sigmaS = dFdx(position);\n vec3 sigmaT = dFdy(position);\n\n vec3 r1 = cross(sigmaT, normal);\n vec3 r2 = cross(normal, sigmaS);\n float det = dot(sigmaS, r1);\n\n float bs = dFdx(height);\n float bt = dFdy(height);\n\n vec3 surfGrad = sign(det) * (bs * r1 + bt * r2);\n return normalize(abs(det) * normal - scale * surfGrad);\n}\n\nfloat hash(in float h) {\n return fract(sin(h) * 43758.5453123);\n}\n\nfloat noise(in vec3 x) {\n vec3 p = floor(x);\n vec3 f = fract(x);\n f = f * f * (3.0 - 2.0 * f);\n\n float n = p.x + p.y * 157.0 + 113.0 * p.z;\n return mix(\n mix(mix(hash(n + 0.0), hash(n + 1.0), f.x),\n mix(hash(n + 157.0), hash(n + 158.0), f.x), f.y),\n mix(mix(hash(n + 113.0), hash(n + 114.0), f.x),\n mix(hash(n + 270.0), hash(n + 271.0), f.x), f.y), f.z);\n}\n\nfloat fbm(in vec3 p) {\n float f = 0.0;\n f += 0.5 * noise(p);\n p *= 2.01;\n f += 0.25 * noise(p);\n p *= 2.02;\n f += 0.125 * noise(p);\n\n return f;\n}\n";
@@ -1 +1 @@
1
- export var common_frag_params = "\nuniform int uObjectId;\nuniform int uInstanceCount;\nuniform int uGroupCount;\n\nuniform int uPickType;\nuniform int uMarkingType;\n\n#if dClipObjectCount != 0\n uniform int uClipObjectType[dClipObjectCount];\n uniform bool uClipObjectInvert[dClipObjectCount];\n uniform vec3 uClipObjectPosition[dClipObjectCount];\n uniform vec4 uClipObjectRotation[dClipObjectCount];\n uniform vec3 uClipObjectScale[dClipObjectCount];\n\n #if defined(dClipping)\n #if __VERSION__ == 100\n varying float vClipping;\n #else\n flat in float vClipping;\n #endif\n #endif\n#endif\n\nuniform vec3 uHighlightColor;\nuniform vec3 uSelectColor;\nuniform float uHighlightStrength;\nuniform float uSelectStrength;\nuniform int uMarkerPriority;\n\n#if defined(dRenderVariant_color) || defined(dRenderVariant_marking)\n uniform float uMarker;\n #if __VERSION__ == 100\n varying float vMarker;\n #else\n flat in float vMarker;\n #endif\n#endif\n\nvarying vec3 vModelPosition;\nvarying vec3 vViewPosition;\n\nuniform vec2 uViewOffset;\n\nuniform float uNear;\nuniform float uFar;\nuniform float uIsOrtho;\n\nuniform float uFogNear;\nuniform float uFogFar;\nuniform vec3 uFogColor;\n\nuniform float uAlpha;\nuniform float uPickingAlphaThreshold;\nuniform bool uTransparentBackground;\n\nuniform bool uDoubleSided;\nuniform float uInteriorDarkening;\nuniform bool uInteriorColorFlag;\nuniform vec3 uInteriorColor;\nbool interior;\n\nuniform float uXrayEdgeFalloff;\n\nuniform mat4 uProjection;\n\nuniform bool uRenderWboit;\nuniform bool uMarkingDepthTest;\n\nuniform sampler2D tDepth;\nuniform vec2 uDrawingBufferSize;\n\nfloat getDepth(const in vec2 coords) {\n // always packed due to merged depth from primitives and volumes\n return unpackRGBAToDepth(texture2D(tDepth, coords));\n}\n\nfloat calcDepth(const in vec3 pos) {\n vec2 clipZW = pos.z * uProjection[2].zw + uProjection[3].zw;\n return 0.5 + 0.5 * clipZW.x / clipZW.y;\n}\n\n// \"Bump Mapping Unparametrized Surfaces on the GPU\" Morten S. Mikkelsen\n// https://mmikk.github.io/papers3d/mm_sfgrad_bump.pdf\nvec3 perturbNormal(in vec3 position, in vec3 normal, in float height, in float scale) {\n vec3 sigmaS = dFdx(position);\n vec3 sigmaT = dFdy(position);\n\n vec3 r1 = cross(sigmaT, normal);\n vec3 r2 = cross(normal, sigmaS);\n float det = dot(sigmaS, r1);\n\n float bs = dFdx(height);\n float bt = dFdy(height);\n\n vec3 surfGrad = sign(det) * (bs * r1 + bt * r2);\n return normalize(abs(det) * normal - scale * surfGrad);\n}\n\nfloat hash(in float h) {\n return fract(sin(h) * 43758.5453123);\n}\n\nfloat noise(in vec3 x) {\n vec3 p = floor(x);\n vec3 f = fract(x);\n f = f * f * (3.0 - 2.0 * f);\n\n float n = p.x + p.y * 157.0 + 113.0 * p.z;\n return mix(\n mix(mix(hash(n + 0.0), hash(n + 1.0), f.x),\n mix(hash(n + 157.0), hash(n + 158.0), f.x), f.y),\n mix(mix(hash(n + 113.0), hash(n + 114.0), f.x),\n mix(hash(n + 270.0), hash(n + 271.0), f.x), f.y), f.z);\n}\n\nfloat fbm(in vec3 p) {\n float f = 0.0;\n f += 0.5 * noise(p);\n p *= 2.01;\n f += 0.25 * noise(p);\n p *= 2.02;\n f += 0.125 * noise(p);\n\n return f;\n}\n";
1
+ export var common_frag_params = "\nuniform int uObjectId;\nuniform int uInstanceCount;\nuniform int uGroupCount;\n\nuniform int uPickType;\nuniform int uMarkingType;\n\n#if dClipObjectCount != 0\n uniform int uClipObjectType[dClipObjectCount];\n uniform bool uClipObjectInvert[dClipObjectCount];\n uniform vec3 uClipObjectPosition[dClipObjectCount];\n uniform vec4 uClipObjectRotation[dClipObjectCount];\n uniform vec3 uClipObjectScale[dClipObjectCount];\n\n #if defined(dClipping)\n #if __VERSION__ == 100\n varying float vClipping;\n #else\n flat in float vClipping;\n #endif\n #endif\n#endif\n\nuniform vec3 uHighlightColor;\nuniform vec3 uSelectColor;\nuniform float uHighlightStrength;\nuniform float uSelectStrength;\nuniform int uMarkerPriority;\n\n#if defined(dRenderVariant_color) || defined(dRenderVariant_marking)\n uniform float uMarker;\n #if __VERSION__ == 100\n varying float vMarker;\n #else\n flat in float vMarker;\n #endif\n#endif\n\nvarying vec3 vModelPosition;\nvarying vec3 vViewPosition;\n\nuniform vec2 uViewOffset;\n\nuniform float uNear;\nuniform float uFar;\nuniform float uIsOrtho;\n\nuniform float uFogNear;\nuniform float uFogFar;\nuniform vec3 uFogColor;\n\nuniform float uAlpha;\nuniform float uPickingAlphaThreshold;\nuniform bool uTransparentBackground;\n\nuniform bool uDoubleSided;\nuniform float uInteriorDarkening;\nuniform bool uInteriorColorFlag;\nuniform vec3 uInteriorColor;\nbool interior;\n\nuniform float uXrayEdgeFalloff;\n\nuniform mat4 uProjection;\n\nuniform int uRenderMask;\nuniform bool uMarkingDepthTest;\n\nuniform sampler2D tDepth;\nuniform vec2 uDrawingBufferSize;\n\nfloat getDepthPacked(const in vec2 coords) {\n return unpackRGBAToDepth(texture2D(tDepth, coords));\n}\n\nfloat getDepth(const in vec2 coords) {\n #ifdef depthTextureSupport\n return texture2D(tDepth, coords).r;\n #else\n return unpackRGBAToDepth(texture2D(tDepth, coords));\n #endif\n}\n\nfloat calcDepth(const in vec3 pos) {\n vec2 clipZW = pos.z * uProjection[2].zw + uProjection[3].zw;\n return 0.5 + 0.5 * clipZW.x / clipZW.y;\n}\n\n// \"Bump Mapping Unparametrized Surfaces on the GPU\" Morten S. Mikkelsen\n// https://mmikk.github.io/papers3d/mm_sfgrad_bump.pdf\nvec3 perturbNormal(in vec3 position, in vec3 normal, in float height, in float scale) {\n vec3 sigmaS = dFdx(position);\n vec3 sigmaT = dFdy(position);\n\n vec3 r1 = cross(sigmaT, normal);\n vec3 r2 = cross(normal, sigmaS);\n float det = dot(sigmaS, r1);\n\n float bs = dFdx(height);\n float bt = dFdy(height);\n\n vec3 surfGrad = sign(det) * (bs * r1 + bt * r2);\n return normalize(abs(det) * normal - scale * surfGrad);\n}\n\nfloat hash(in float h) {\n return fract(sin(h) * 43758.5453123);\n}\n\nfloat noise(in vec3 x) {\n vec3 p = floor(x);\n vec3 f = fract(x);\n f = f * f * (3.0 - 2.0 * f);\n\n float n = p.x + p.y * 157.0 + 113.0 * p.z;\n return mix(\n mix(mix(hash(n + 0.0), hash(n + 1.0), f.x),\n mix(hash(n + 157.0), hash(n + 158.0), f.x), f.y),\n mix(mix(hash(n + 113.0), hash(n + 114.0), f.x),\n mix(hash(n + 270.0), hash(n + 271.0), f.x), f.y), f.z);\n}\n\nfloat fbm(in vec3 p) {\n float f = 0.0;\n f += 0.5 * noise(p);\n p *= 2.01;\n f += 0.25 * noise(p);\n p *= 2.02;\n f += 0.125 * noise(p);\n\n return f;\n}\n";