UNPKG

molstar

Version:

A comprehensive macromolecular library.

79 lines 3.94 kB
"use strict"; /** * Copyright (c) 2019-2021 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author Alexander Rose <alexander.rose@weirdbyte.de> */ Object.defineProperty(exports, "__esModule", { value: true }); exports.getHistopyramidSum = void 0; var tslib_1 = require("tslib"); var renderable_1 = require("../../renderable"); var render_item_1 = require("../../webgl/render-item"); var schema_1 = require("../../renderable/schema"); var shader_code_1 = require("../../../mol-gl/shader-code"); var mol_util_1 = require("../../../mol-util"); var float_packing_1 = require("../../../mol-util/float-packing"); var util_1 = require("../util"); var quad_vert_1 = require("../../../mol-gl/shader/quad.vert"); var sum_frag_1 = require("../../../mol-gl/shader/histogram-pyramid/sum.frag"); var compat_1 = require("../../webgl/compat"); var HistopyramidSumSchema = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, util_1.QuadSchema), { tTexture: (0, schema_1.TextureSpec)('texture', 'rgba', 'float', 'nearest') }); var HistopyramidSumName = 'histopyramid-sum'; function getHistopyramidSumRenderable(ctx, texture) { if (ctx.namedComputeRenderables[HistopyramidSumName]) { var v = ctx.namedComputeRenderables[HistopyramidSumName].values; mol_util_1.ValueCell.update(v.tTexture, texture); ctx.namedComputeRenderables[HistopyramidSumName].update(); } else { ctx.namedComputeRenderables[HistopyramidSumName] = createHistopyramidSumRenderable(ctx, texture); } return ctx.namedComputeRenderables[HistopyramidSumName]; } function createHistopyramidSumRenderable(ctx, texture) { var values = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, util_1.QuadValues), { tTexture: mol_util_1.ValueCell.create(texture) }); var schema = (0, tslib_1.__assign)({}, HistopyramidSumSchema); var shaderCode = (0, shader_code_1.ShaderCode)('sum', quad_vert_1.quad_vert, sum_frag_1.sum_frag, {}, { 0: 'ivec4' }); var renderItem = (0, render_item_1.createComputeRenderItem)(ctx, 'triangles', shaderCode, schema, values); return (0, renderable_1.createComputeRenderable)(renderItem, values); } function setRenderingDefaults(ctx) { var gl = ctx.gl, state = ctx.state; state.disable(gl.CULL_FACE); state.disable(gl.BLEND); state.disable(gl.DEPTH_TEST); state.disable(gl.SCISSOR_TEST); state.depthMask(false); state.colorMask(true, true, true, true); state.clearColor(0, 0, 0, 0); } var sumBytes = new Uint8Array(4); var sumInts = new Int32Array(4); function getHistopyramidSum(ctx, pyramidTopTexture) { var gl = ctx.gl, resources = ctx.resources; var renderable = getHistopyramidSumRenderable(ctx, pyramidTopTexture); ctx.state.currentRenderItemId = -1; if (!ctx.namedFramebuffers[HistopyramidSumName]) { ctx.namedFramebuffers[HistopyramidSumName] = resources.framebuffer(); } var framebuffer = ctx.namedFramebuffers[HistopyramidSumName]; if (!ctx.namedTextures[HistopyramidSumName]) { ctx.namedTextures[HistopyramidSumName] = (0, compat_1.isWebGL2)(gl) ? resources.texture('image-int32', 'rgba', 'int', 'nearest') : resources.texture('image-uint8', 'rgba', 'ubyte', 'nearest'); ctx.namedTextures[HistopyramidSumName].define(1, 1); } var sumTexture = ctx.namedTextures[HistopyramidSumName]; sumTexture.attachFramebuffer(framebuffer, 0); setRenderingDefaults(ctx); gl.viewport(0, 0, 1, 1); renderable.render(); gl.finish(); ctx.readPixels(0, 0, 1, 1, (0, compat_1.isWebGL2)(gl) ? sumInts : sumBytes); ctx.unbindFramebuffer(); return (0, compat_1.isWebGL2)(gl) ? sumInts[0] : (0, float_packing_1.decodeFloatRGB)(sumBytes[0], sumBytes[1], sumBytes[2]); } exports.getHistopyramidSum = getHistopyramidSum; //# sourceMappingURL=sum.js.map