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
@@ -12,7 +12,7 @@ var render_item_1 = require("../webgl/render-item");
12
12
  var schema_1 = require("./schema");
13
13
  var shader_code_1 = require("../shader-code");
14
14
  var mol_util_1 = require("../../mol-util");
15
- exports.CylindersSchema = tslib_1.__assign(tslib_1.__assign(tslib_1.__assign({}, schema_1.BaseSchema), schema_1.SizeSchema), { aGroup: (0, schema_1.AttributeSpec)('float32', 1, 0), aStart: (0, schema_1.AttributeSpec)('float32', 3, 0), aEnd: (0, schema_1.AttributeSpec)('float32', 3, 0), aMapping: (0, schema_1.AttributeSpec)('float32', 3, 0), aScale: (0, schema_1.AttributeSpec)('float32', 1, 0), aCap: (0, schema_1.AttributeSpec)('float32', 1, 0), elements: (0, schema_1.ElementsSpec)('uint32'), padding: (0, schema_1.ValueSpec)('number'), uDoubleSided: (0, schema_1.UniformSpec)('b'), dIgnoreLight: (0, schema_1.DefineSpec)('boolean'), dXrayShaded: (0, schema_1.DefineSpec)('boolean'), dOpaqueBackfaces: (0, schema_1.DefineSpec)('boolean'), uBumpFrequency: (0, schema_1.UniformSpec)('f'), uBumpAmplitude: (0, schema_1.UniformSpec)('f') });
15
+ exports.CylindersSchema = tslib_1.__assign(tslib_1.__assign(tslib_1.__assign({}, schema_1.BaseSchema), schema_1.SizeSchema), { aGroup: (0, schema_1.AttributeSpec)('float32', 1, 0), aStart: (0, schema_1.AttributeSpec)('float32', 3, 0), aEnd: (0, schema_1.AttributeSpec)('float32', 3, 0), aMapping: (0, schema_1.AttributeSpec)('float32', 3, 0), aScale: (0, schema_1.AttributeSpec)('float32', 1, 0), aCap: (0, schema_1.AttributeSpec)('float32', 1, 0), elements: (0, schema_1.ElementsSpec)('uint32'), padding: (0, schema_1.ValueSpec)('number'), uDoubleSided: (0, schema_1.UniformSpec)('b'), dIgnoreLight: (0, schema_1.DefineSpec)('boolean'), dXrayShaded: (0, schema_1.DefineSpec)('boolean'), dTransparentBackfaces: (0, schema_1.DefineSpec)('string', ['off', 'on', 'opaque']), uBumpFrequency: (0, schema_1.UniformSpec)('f'), uBumpAmplitude: (0, schema_1.UniformSpec)('f') });
16
16
  function CylindersRenderable(ctx, id, values, state, materialId, variants) {
17
17
  var schema = tslib_1.__assign(tslib_1.__assign(tslib_1.__assign(tslib_1.__assign({}, schema_1.GlobalUniformSchema), schema_1.GlobalTextureSchema), schema_1.InternalSchema), exports.CylindersSchema);
18
18
  var internalValues = {
@@ -17,7 +17,7 @@ export declare const MeshSchema: {
17
17
  readonly dFlipSided: DefineSpec<"boolean">;
18
18
  readonly dIgnoreLight: DefineSpec<"boolean">;
19
19
  readonly dXrayShaded: DefineSpec<"boolean">;
20
- readonly dOpaqueBackfaces: DefineSpec<"boolean">;
20
+ readonly dTransparentBackfaces: DefineSpec<"string">;
21
21
  readonly uBumpFrequency: UniformSpec<"f">;
22
22
  readonly uBumpAmplitude: UniformSpec<"f">;
23
23
  readonly meta: ValueSpec<"unknown">;
@@ -12,7 +12,7 @@ var render_item_1 = require("../webgl/render-item");
12
12
  var schema_1 = require("./schema");
13
13
  var shader_code_1 = require("../shader-code");
14
14
  var mol_util_1 = require("../../mol-util");
15
- exports.MeshSchema = tslib_1.__assign(tslib_1.__assign({}, schema_1.BaseSchema), { aGroup: (0, schema_1.AttributeSpec)('float32', 1, 0), aPosition: (0, schema_1.AttributeSpec)('float32', 3, 0), aNormal: (0, schema_1.AttributeSpec)('float32', 3, 0), elements: (0, schema_1.ElementsSpec)('uint32'), dFlatShaded: (0, schema_1.DefineSpec)('boolean'), uDoubleSided: (0, schema_1.UniformSpec)('b'), dFlipSided: (0, schema_1.DefineSpec)('boolean'), dIgnoreLight: (0, schema_1.DefineSpec)('boolean'), dXrayShaded: (0, schema_1.DefineSpec)('boolean'), dOpaqueBackfaces: (0, schema_1.DefineSpec)('boolean'), uBumpFrequency: (0, schema_1.UniformSpec)('f'), uBumpAmplitude: (0, schema_1.UniformSpec)('f'), meta: (0, schema_1.ValueSpec)('unknown') });
15
+ exports.MeshSchema = tslib_1.__assign(tslib_1.__assign({}, schema_1.BaseSchema), { aGroup: (0, schema_1.AttributeSpec)('float32', 1, 0), aPosition: (0, schema_1.AttributeSpec)('float32', 3, 0), aNormal: (0, schema_1.AttributeSpec)('float32', 3, 0), elements: (0, schema_1.ElementsSpec)('uint32'), dFlatShaded: (0, schema_1.DefineSpec)('boolean'), uDoubleSided: (0, schema_1.UniformSpec)('b'), dFlipSided: (0, schema_1.DefineSpec)('boolean'), dIgnoreLight: (0, schema_1.DefineSpec)('boolean'), dXrayShaded: (0, schema_1.DefineSpec)('boolean'), dTransparentBackfaces: (0, schema_1.DefineSpec)('string', ['off', 'on', 'opaque']), uBumpFrequency: (0, schema_1.UniformSpec)('f'), uBumpAmplitude: (0, schema_1.UniformSpec)('f'), meta: (0, schema_1.ValueSpec)('unknown') });
16
16
  function MeshRenderable(ctx, id, values, state, materialId, variants) {
17
17
  var schema = tslib_1.__assign(tslib_1.__assign(tslib_1.__assign(tslib_1.__assign({}, schema_1.GlobalUniformSchema), schema_1.GlobalTextureSchema), schema_1.InternalSchema), exports.MeshSchema);
18
18
  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,6 +1,6 @@
1
1
  "use strict";
2
2
  /**
3
- * Copyright (c) 2018-2021 mol* contributors, licensed under MIT, See LICENSE file for more info.
3
+ * Copyright (c) 2018-2022 mol* contributors, licensed under MIT, See LICENSE file for more info.
4
4
  *
5
5
  * @author Alexander Rose <alexander.rose@weirdbyte.de>
6
6
  */
@@ -105,7 +105,7 @@ exports.GlobalUniformSchema = {
105
105
  uSelectStrength: UniformSpec('f'),
106
106
  uMarkerPriority: UniformSpec('i'),
107
107
  uXrayEdgeFalloff: UniformSpec('f'),
108
- uRenderWboit: UniformSpec('b'),
108
+ uRenderMask: UniformSpec('i'),
109
109
  uMarkingDepthTest: UniformSpec('b'),
110
110
  uMarkingType: UniformSpec('i'),
111
111
  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">;
@@ -12,7 +12,7 @@ var render_item_1 = require("../webgl/render-item");
12
12
  var schema_1 = require("./schema");
13
13
  var shader_code_1 = require("../shader-code");
14
14
  var mol_util_1 = require("../../mol-util");
15
- exports.SpheresSchema = tslib_1.__assign(tslib_1.__assign(tslib_1.__assign({}, schema_1.BaseSchema), schema_1.SizeSchema), { aGroup: (0, schema_1.AttributeSpec)('float32', 1, 0), aPosition: (0, schema_1.AttributeSpec)('float32', 3, 0), aMapping: (0, schema_1.AttributeSpec)('float32', 2, 0), elements: (0, schema_1.ElementsSpec)('uint32'), padding: (0, schema_1.ValueSpec)('number'), uDoubleSided: (0, schema_1.UniformSpec)('b'), dIgnoreLight: (0, schema_1.DefineSpec)('boolean'), dXrayShaded: (0, schema_1.DefineSpec)('boolean'), dOpaqueBackfaces: (0, schema_1.DefineSpec)('boolean'), uBumpFrequency: (0, schema_1.UniformSpec)('f'), uBumpAmplitude: (0, schema_1.UniformSpec)('f') });
15
+ exports.SpheresSchema = tslib_1.__assign(tslib_1.__assign(tslib_1.__assign({}, schema_1.BaseSchema), schema_1.SizeSchema), { aGroup: (0, schema_1.AttributeSpec)('float32', 1, 0), aPosition: (0, schema_1.AttributeSpec)('float32', 3, 0), aMapping: (0, schema_1.AttributeSpec)('float32', 2, 0), elements: (0, schema_1.ElementsSpec)('uint32'), padding: (0, schema_1.ValueSpec)('number'), uDoubleSided: (0, schema_1.UniformSpec)('b'), dIgnoreLight: (0, schema_1.DefineSpec)('boolean'), dXrayShaded: (0, schema_1.DefineSpec)('boolean'), dTransparentBackfaces: (0, schema_1.DefineSpec)('string', ['off', 'on', 'opaque']), uBumpFrequency: (0, schema_1.UniformSpec)('f'), uBumpAmplitude: (0, schema_1.UniformSpec)('f') });
16
16
  function SpheresRenderable(ctx, id, values, state, materialId, variants) {
17
17
  var schema = tslib_1.__assign(tslib_1.__assign(tslib_1.__assign(tslib_1.__assign({}, schema_1.GlobalUniformSchema), schema_1.GlobalTextureSchema), schema_1.InternalSchema), exports.SpheresSchema);
18
18
  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">;
@@ -12,7 +12,7 @@ var render_item_1 = require("../webgl/render-item");
12
12
  var schema_1 = require("./schema");
13
13
  var shader_code_1 = require("../shader-code");
14
14
  var mol_util_1 = require("../../mol-util");
15
- exports.TextureMeshSchema = tslib_1.__assign(tslib_1.__assign({}, schema_1.BaseSchema), { uGeoTexDim: (0, schema_1.UniformSpec)('v2', 'buffered'), tPosition: (0, schema_1.TextureSpec)('texture', 'rgb', 'float', 'nearest'), tGroup: (0, schema_1.TextureSpec)('texture', 'alpha', 'float', 'nearest'), tNormal: (0, schema_1.TextureSpec)('texture', 'rgb', 'float', 'nearest'), dFlatShaded: (0, schema_1.DefineSpec)('boolean'), uDoubleSided: (0, schema_1.UniformSpec)('b'), dFlipSided: (0, schema_1.DefineSpec)('boolean'), dIgnoreLight: (0, schema_1.DefineSpec)('boolean'), dXrayShaded: (0, schema_1.DefineSpec)('boolean'), dOpaqueBackfaces: (0, schema_1.DefineSpec)('boolean'), uBumpFrequency: (0, schema_1.UniformSpec)('f'), uBumpAmplitude: (0, schema_1.UniformSpec)('f'), meta: (0, schema_1.ValueSpec)('unknown') });
15
+ exports.TextureMeshSchema = tslib_1.__assign(tslib_1.__assign({}, schema_1.BaseSchema), { uGeoTexDim: (0, schema_1.UniformSpec)('v2', 'buffered'), tPosition: (0, schema_1.TextureSpec)('texture', 'rgb', 'float', 'nearest'), tGroup: (0, schema_1.TextureSpec)('texture', 'alpha', 'float', 'nearest'), tNormal: (0, schema_1.TextureSpec)('texture', 'rgb', 'float', 'nearest'), dFlatShaded: (0, schema_1.DefineSpec)('boolean'), uDoubleSided: (0, schema_1.UniformSpec)('b'), dFlipSided: (0, schema_1.DefineSpec)('boolean'), dIgnoreLight: (0, schema_1.DefineSpec)('boolean'), dXrayShaded: (0, schema_1.DefineSpec)('boolean'), dTransparentBackfaces: (0, schema_1.DefineSpec)('string', ['off', 'on', 'opaque']), uBumpFrequency: (0, schema_1.UniformSpec)('f'), uBumpAmplitude: (0, schema_1.UniformSpec)('f'), meta: (0, schema_1.ValueSpec)('unknown') });
16
16
  function TextureMeshRenderable(ctx, id, values, state, materialId, variants) {
17
17
  var schema = tslib_1.__assign(tslib_1.__assign(tslib_1.__assign(tslib_1.__assign({}, schema_1.GlobalUniformSchema), schema_1.GlobalTextureSchema), schema_1.InternalSchema), exports.TextureMeshSchema);
18
18
  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;
@@ -67,7 +67,9 @@ var Renderer;
67
67
  var drawingBufferSize = linear_algebra_1.Vec2.create(gl.drawingBufferWidth, gl.drawingBufferHeight);
68
68
  var bgColor = color_1.Color.toVec3Normalized((0, linear_algebra_1.Vec3)(), p.backgroundColor);
69
69
  var transparentBackground = false;
70
- var emptyDepthTexture = ctx.resources.texture('image-depth', 'depth', 'ushort', 'nearest');
70
+ var emptyDepthTexture = ctx.resources.texture('image-uint8', 'rgba', 'ubyte', 'nearest');
71
+ emptyDepthTexture.define(1, 1);
72
+ emptyDepthTexture.load({ array: new Uint8Array([255, 255, 255, 255]), width: 1, height: 1 });
71
73
  var sharedTexturesList = [
72
74
  ['tDepth', emptyDepthTexture]
73
75
  ];
@@ -104,7 +106,7 @@ var Renderer;
104
106
  uFogNear: mol_util_1.ValueCell.create(1),
105
107
  uFogFar: mol_util_1.ValueCell.create(10000),
106
108
  uFogColor: mol_util_1.ValueCell.create(bgColor),
107
- uRenderWboit: mol_util_1.ValueCell.create(false),
109
+ uRenderMask: mol_util_1.ValueCell.create(0),
108
110
  uMarkingDepthTest: mol_util_1.ValueCell.create(false),
109
111
  uPickType: mol_util_1.ValueCell.create(0 /* None */),
110
112
  uMarkingType: mol_util_1.ValueCell.create(0 /* None */),
@@ -223,14 +225,14 @@ var Renderer;
223
225
  mol_util_1.ValueCell.updateIfChanged(globalUniforms.uFogNear, camera.fogNear);
224
226
  mol_util_1.ValueCell.updateIfChanged(globalUniforms.uTransparentBackground, transparentBackground);
225
227
  };
226
- var updateInternal = function (group, camera, depthTexture, renderWboit, markingDepthTest) {
228
+ var updateInternal = function (group, camera, depthTexture, renderMask, markingDepthTest) {
227
229
  (0, array_1.arrayMapUpsert)(sharedTexturesList, 'tDepth', depthTexture || emptyDepthTexture);
228
230
  mol_util_1.ValueCell.update(globalUniforms.uModel, group.view);
229
231
  mol_util_1.ValueCell.update(globalUniforms.uModelView, linear_algebra_1.Mat4.mul(modelView, group.view, camera.view));
230
232
  mol_util_1.ValueCell.update(globalUniforms.uInvModelView, linear_algebra_1.Mat4.invert(invModelView, modelView));
231
233
  mol_util_1.ValueCell.update(globalUniforms.uModelViewProjection, linear_algebra_1.Mat4.mul(modelViewProjection, modelView, camera.projection));
232
234
  mol_util_1.ValueCell.update(globalUniforms.uInvModelViewProjection, linear_algebra_1.Mat4.invert(invModelViewProjection, modelViewProjection));
233
- mol_util_1.ValueCell.updateIfChanged(globalUniforms.uRenderWboit, renderWboit);
235
+ mol_util_1.ValueCell.updateIfChanged(globalUniforms.uRenderMask, renderMask);
234
236
  mol_util_1.ValueCell.updateIfChanged(globalUniforms.uMarkingDepthTest, markingDepthTest);
235
237
  state.enable(gl.SCISSOR_TEST);
236
238
  state.colorMask(true, true, true, true);
@@ -244,7 +246,7 @@ var Renderer;
244
246
  state.disable(gl.BLEND);
245
247
  state.enable(gl.DEPTH_TEST);
246
248
  state.depthMask(true);
247
- updateInternal(group, camera, depthTexture, false, false);
249
+ updateInternal(group, camera, depthTexture, 0 /* All */, false);
248
250
  mol_util_1.ValueCell.updateIfChanged(globalUniforms.uPickType, pickType);
249
251
  var renderables = group.renderables;
250
252
  for (var i = 0, il = renderables.length; i < il; ++i) {
@@ -257,17 +259,45 @@ var Renderer;
257
259
  state.disable(gl.BLEND);
258
260
  state.enable(gl.DEPTH_TEST);
259
261
  state.depthMask(true);
260
- updateInternal(group, camera, depthTexture, false, false);
262
+ updateInternal(group, camera, depthTexture, 0 /* All */, false);
261
263
  var renderables = group.renderables;
262
264
  for (var i = 0, il = renderables.length; i < il; ++i) {
263
265
  renderObject(renderables[i], 'depth', 0 /* None */);
264
266
  }
265
267
  };
268
+ var renderDepthOpaque = function (group, camera, depthTexture) {
269
+ var _a;
270
+ state.disable(gl.BLEND);
271
+ state.enable(gl.DEPTH_TEST);
272
+ state.depthMask(true);
273
+ updateInternal(group, camera, depthTexture, 1 /* Opaque */, false);
274
+ var renderables = group.renderables;
275
+ for (var i = 0, il = renderables.length; i < il; ++i) {
276
+ var r = renderables[i];
277
+ if (r.state.opaque && r.values.transparencyAverage.ref.value !== 1 && !((_a = r.values.dXrayShaded) === null || _a === void 0 ? void 0 : _a.ref.value)) {
278
+ renderObject(r, 'depth', 0 /* None */);
279
+ }
280
+ }
281
+ };
282
+ var renderDepthTransparent = function (group, camera, depthTexture) {
283
+ var _a;
284
+ state.disable(gl.BLEND);
285
+ state.enable(gl.DEPTH_TEST);
286
+ state.depthMask(true);
287
+ updateInternal(group, camera, depthTexture, 2 /* Transparent */, false);
288
+ var renderables = group.renderables;
289
+ for (var i = 0, il = renderables.length; i < il; ++i) {
290
+ var r = renderables[i];
291
+ if (!r.state.opaque || r.values.transparencyAverage.ref.value > 0 || ((_a = r.values.dXrayShaded) === null || _a === void 0 ? void 0 : _a.ref.value)) {
292
+ renderObject(r, 'depth', 0 /* None */);
293
+ }
294
+ }
295
+ };
266
296
  var renderMarkingDepth = function (group, camera, depthTexture) {
267
297
  state.disable(gl.BLEND);
268
298
  state.enable(gl.DEPTH_TEST);
269
299
  state.depthMask(true);
270
- updateInternal(group, camera, depthTexture, false, false);
300
+ updateInternal(group, camera, depthTexture, 0 /* All */, false);
271
301
  mol_util_1.ValueCell.updateIfChanged(globalUniforms.uMarkingType, 1 /* Depth */);
272
302
  var renderables = group.renderables;
273
303
  for (var i = 0, il = renderables.length; i < il; ++i) {
@@ -281,7 +311,7 @@ var Renderer;
281
311
  state.disable(gl.BLEND);
282
312
  state.enable(gl.DEPTH_TEST);
283
313
  state.depthMask(true);
284
- updateInternal(group, camera, depthTexture, false, !!depthTexture);
314
+ updateInternal(group, camera, depthTexture, 0 /* All */, !!depthTexture);
285
315
  mol_util_1.ValueCell.updateIfChanged(globalUniforms.uMarkingType, 2 /* Mask */);
286
316
  var renderables = group.renderables;
287
317
  for (var i = 0, il = renderables.length; i < il; ++i) {
@@ -300,14 +330,14 @@ var Renderer;
300
330
  state.disable(gl.BLEND);
301
331
  state.enable(gl.DEPTH_TEST);
302
332
  state.depthMask(true);
303
- updateInternal(group, camera, depthTexture, false, false);
333
+ updateInternal(group, camera, depthTexture, 1 /* Opaque */, false);
304
334
  var renderables = group.renderables;
305
335
  for (var i = 0, il = renderables.length; i < il; ++i) {
306
336
  var r = renderables[i];
307
337
  if (r.state.opaque) {
308
338
  renderObject(r, 'colorBlended', 0 /* None */);
309
339
  }
310
- 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)) {
340
+ 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') {
311
341
  renderObject(r, 'colorBlended', 2 /* BlendedBack */);
312
342
  }
313
343
  }
@@ -315,7 +345,7 @@ var Renderer;
315
345
  var renderBlendedTransparent = function (group, camera, depthTexture) {
316
346
  var _a, _b;
317
347
  state.enable(gl.DEPTH_TEST);
318
- updateInternal(group, camera, depthTexture, false, false);
348
+ updateInternal(group, camera, depthTexture, 2 /* Transparent */, false);
319
349
  var renderables = group.renderables;
320
350
  if (transparentBackground) {
321
351
  state.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA);
@@ -334,10 +364,10 @@ var Renderer;
334
364
  state.depthMask(false);
335
365
  for (var i = 0, il = renderables.length; i < il; ++i) {
336
366
  var r = renderables[i];
337
- if (!r.state.opaque && !r.state.writeDepth) {
367
+ if ((!r.state.opaque && !r.state.writeDepth) || r.values.transparencyAverage.ref.value > 0) {
338
368
  if ((_a = r.values.uDoubleSided) === null || _a === void 0 ? void 0 : _a.ref.value) {
339
369
  // render frontfaces and backfaces separately to avoid artefacts
340
- if (!((_b = r.values.dOpaqueBackfaces) === null || _b === void 0 ? void 0 : _b.ref.value)) {
370
+ if (((_b = r.values.dTransparentBackfaces) === null || _b === void 0 ? void 0 : _b.ref.value) !== 'opaque') {
341
371
  renderObject(r, 'colorBlended', 2 /* BlendedBack */);
342
372
  }
343
373
  renderObject(r, 'colorBlended', 1 /* BlendedFront */);
@@ -348,34 +378,14 @@ var Renderer;
348
378
  }
349
379
  }
350
380
  };
351
- var renderBlendedVolumeOpaque = function (group, camera, depthTexture) {
352
- var _a;
381
+ var renderBlendedVolume = function (group, camera, depthTexture) {
353
382
  state.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA);
354
383
  state.enable(gl.BLEND);
355
- updateInternal(group, camera, depthTexture, false, false);
384
+ updateInternal(group, camera, depthTexture, 2 /* Transparent */, false);
356
385
  var renderables = group.renderables;
357
386
  for (var i = 0, il = renderables.length; i < il; ++i) {
358
387
  var r = renderables[i];
359
- // TODO: simplify, handle in renderable.state???
360
- // uAlpha is updated in "render" so we need to recompute it here
361
- var alpha = (0, interpolate_1.clamp)(r.values.alpha.ref.value * r.state.alphaFactor, 0, 1);
362
- if (alpha === 1 && r.values.transparencyAverage.ref.value !== 1 && !((_a = r.values.dXrayShaded) === null || _a === void 0 ? void 0 : _a.ref.value)) {
363
- renderObject(r, 'colorBlended', 0 /* None */);
364
- }
365
- }
366
- };
367
- var renderBlendedVolumeTransparent = function (group, camera, depthTexture) {
368
- var _a;
369
- state.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA);
370
- state.enable(gl.BLEND);
371
- updateInternal(group, camera, depthTexture, false, false);
372
- var renderables = group.renderables;
373
- for (var i = 0, il = renderables.length; i < il; ++i) {
374
- var r = renderables[i];
375
- // TODO: simplify, handle in renderable.state???
376
- // uAlpha is updated in "render" so we need to recompute it here
377
- var alpha = (0, interpolate_1.clamp)(r.values.alpha.ref.value * r.state.alphaFactor, 0, 1);
378
- if (alpha < 1 || r.values.transparencyAverage.ref.value > 0 || ((_a = r.values.dXrayShaded) === null || _a === void 0 ? void 0 : _a.ref.value)) {
388
+ if (r.values.dGeometryType.ref.value === 'directVolume') {
379
389
  renderObject(r, 'colorBlended', 0 /* None */);
380
390
  }
381
391
  }
@@ -385,21 +395,21 @@ var Renderer;
385
395
  state.disable(gl.BLEND);
386
396
  state.enable(gl.DEPTH_TEST);
387
397
  state.depthMask(true);
388
- updateInternal(group, camera, depthTexture, false, false);
398
+ updateInternal(group, camera, depthTexture, 1 /* Opaque */, false);
389
399
  var renderables = group.renderables;
390
400
  for (var i = 0, il = renderables.length; i < il; ++i) {
391
401
  var r = renderables[i];
392
402
  // TODO: simplify, handle in renderable.state???
393
403
  // uAlpha is updated in "render" so we need to recompute it here
394
404
  var alpha = (0, interpolate_1.clamp)(r.values.alpha.ref.value * r.state.alphaFactor, 0, 1);
395
- 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)) {
405
+ 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') {
396
406
  renderObject(r, 'colorWboit', 0 /* None */);
397
407
  }
398
408
  }
399
409
  };
400
410
  var renderWboitTransparent = function (group, camera, depthTexture) {
401
411
  var _a, _b;
402
- updateInternal(group, camera, depthTexture, true, false);
412
+ updateInternal(group, camera, depthTexture, 2 /* Transparent */, false);
403
413
  var renderables = group.renderables;
404
414
  for (var i = 0, il = renderables.length; i < il; ++i) {
405
415
  var r = renderables[i];
@@ -428,22 +438,31 @@ var Renderer;
428
438
  }
429
439
  gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
430
440
  },
431
- clearDepth: function () {
441
+ clearDepth: function (packed) {
442
+ if (packed === void 0) { packed = false; }
432
443
  state.enable(gl.SCISSOR_TEST);
433
- state.enable(gl.DEPTH_TEST);
434
- state.depthMask(true);
435
- gl.clear(gl.DEPTH_BUFFER_BIT);
444
+ if (packed) {
445
+ state.colorMask(true, true, true, true);
446
+ state.clearColor(1, 1, 1, 1);
447
+ gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
448
+ }
449
+ else {
450
+ state.enable(gl.DEPTH_TEST);
451
+ state.depthMask(true);
452
+ gl.clear(gl.DEPTH_BUFFER_BIT);
453
+ }
436
454
  },
437
455
  update: update,
438
456
  renderPick: renderPick,
439
457
  renderDepth: renderDepth,
458
+ renderDepthOpaque: renderDepthOpaque,
459
+ renderDepthTransparent: renderDepthTransparent,
440
460
  renderMarkingDepth: renderMarkingDepth,
441
461
  renderMarkingMask: renderMarkingMask,
442
462
  renderBlended: renderBlended,
443
463
  renderBlendedOpaque: renderBlendedOpaque,
444
464
  renderBlendedTransparent: renderBlendedTransparent,
445
- renderBlendedVolumeOpaque: renderBlendedVolumeOpaque,
446
- renderBlendedVolumeTransparent: renderBlendedVolumeTransparent,
465
+ renderBlendedVolume: renderBlendedVolume,
447
466
  renderWboitOpaque: renderWboitOpaque,
448
467
  renderWboitTransparent: renderWboitTransparent,
449
468
  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 {
@@ -16,6 +16,7 @@ var array_1 = require("../mol-util/array");
16
16
  var boundary_helper_1 = require("../mol-math/geometry/boundary-helper");
17
17
  var util_1 = require("../mol-data/util");
18
18
  var render_item_1 = require("./webgl/render-item");
19
+ var interpolate_1 = require("../mol-math/interpolate");
19
20
  var boundaryHelper = new boundary_helper_1.BoundaryHelper('98');
20
21
  function calculateBoundingSphere(renderables, boundingSphere, onlyVisible) {
21
22
  boundaryHelper.reset();
@@ -67,6 +68,8 @@ var Scene;
67
68
  var volumes = [];
68
69
  var boundingSphereDirty = true;
69
70
  var boundingSphereVisibleDirty = true;
71
+ var markerAverage = 0;
72
+ var opacityAverage = 0;
70
73
  var object3d = object3d_1.Object3D.create();
71
74
  var view = object3d.view, position = object3d.position, direction = object3d.direction, up = object3d.up;
72
75
  function add(o) {
@@ -122,6 +125,7 @@ var Scene;
122
125
  return false;
123
126
  }
124
127
  renderables.sort(renderableSort);
128
+ opacityAverage = calculateOpacityAverage();
125
129
  return true;
126
130
  }
127
131
  var commitQueue = new commit_queue_1.CommitQueue();
@@ -142,12 +146,45 @@ var Scene;
142
146
  var newVisibleHash = computeVisibleHash();
143
147
  if (newVisibleHash !== visibleHash) {
144
148
  boundingSphereVisibleDirty = true;
149
+ opacityAverage = calculateOpacityAverage();
145
150
  return true;
146
151
  }
147
152
  else {
148
153
  return false;
149
154
  }
150
155
  }
156
+ function calculateMarkerAverage() {
157
+ if (primitives.length === 0)
158
+ return 0;
159
+ var count = 0;
160
+ var markerAverage = 0;
161
+ for (var i = 0, il = primitives.length; i < il; ++i) {
162
+ if (!primitives[i].state.visible)
163
+ continue;
164
+ markerAverage += primitives[i].values.markerAverage.ref.value;
165
+ count += 1;
166
+ }
167
+ return count > 0 ? markerAverage / count : 0;
168
+ }
169
+ function calculateOpacityAverage() {
170
+ var _a;
171
+ if (primitives.length === 0)
172
+ return 0;
173
+ var count = 0;
174
+ var opacityAverage = 0;
175
+ for (var i = 0, il = primitives.length; i < il; ++i) {
176
+ var p = primitives[i];
177
+ if (!p.state.visible)
178
+ continue;
179
+ // TODO: simplify, handle in renderable.state???
180
+ // uAlpha is updated in "render" so we need to recompute it here
181
+ var alpha = (0, interpolate_1.clamp)(p.values.alpha.ref.value * p.state.alphaFactor, 0, 1);
182
+ var xray = ((_a = p.values.dXrayShaded) === null || _a === void 0 ? void 0 : _a.ref.value) ? 0.5 : 1;
183
+ opacityAverage += (1 - p.values.transparencyAverage.ref.value) * alpha * xray;
184
+ count += 1;
185
+ }
186
+ return count > 0 ? opacityAverage / count : 0;
187
+ }
151
188
  return {
152
189
  view: view,
153
190
  position: position,
@@ -177,6 +214,8 @@ var Scene;
177
214
  else {
178
215
  syncVisibility();
179
216
  }
217
+ markerAverage = calculateMarkerAverage();
218
+ opacityAverage = calculateOpacityAverage();
180
219
  },
181
220
  add: function (o) { return commitQueue.add(o); },
182
221
  remove: function (o) { return commitQueue.remove(o); },
@@ -218,17 +257,11 @@ var Scene;
218
257
  }
219
258
  return boundingSphereVisible;
220
259
  },
221
- getMarkerAverage: function () {
222
- if (primitives.length === 0 && volumes.length === 0)
223
- return 0;
224
- var markerAverage = 0;
225
- for (var i = 0, il = primitives.length; i < il; ++i) {
226
- markerAverage += primitives[i].values.markerAverage.ref.value;
227
- }
228
- for (var i = 0, il = volumes.length; i < il; ++i) {
229
- markerAverage += volumes[i].values.markerAverage.ref.value;
230
- }
231
- return markerAverage / (primitives.length + volumes.length);
260
+ get markerAverage() {
261
+ return markerAverage;
262
+ },
263
+ get opacityAverage() {
264
+ return opacityAverage;
232
265
  },
233
266
  };
234
267
  }
@@ -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,4 +1,4 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.apply_interior_color = void 0;
4
- exports.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";
4
+ exports.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,4 +1,4 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.assign_material_color = void 0;
4
- exports.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";
4
+ exports.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,4 +1,4 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.check_picking_alpha = void 0;
4
- exports.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";
4
+ exports.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";