UNPKG

molstar

Version:

A comprehensive macromolecular library.

83 lines 3.06 kB
"use strict"; /** * Copyright (c) 2018-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.createRenderbuffer = exports.getAttachment = exports.getFormat = void 0; var id_factory_1 = require("../../mol-util/id-factory"); var compat_1 = require("./compat"); var framebuffer_1 = require("./framebuffer"); var debug_1 = require("../../mol-util/debug"); var getNextRenderbufferId = (0, id_factory_1.idFactory)(); function getFormat(gl, format) { switch (format) { case 'depth16': return gl.DEPTH_COMPONENT16; case 'stencil8': return gl.STENCIL_INDEX8; case 'rgba4': return gl.RGBA4; case 'depth-stencil': return gl.DEPTH_STENCIL; case 'depth32f': if ((0, compat_1.isWebGL2)(gl)) return gl.DEPTH_COMPONENT32F; else throw new Error('WebGL2 needed for `depth32f` renderbuffer format'); } } exports.getFormat = getFormat; function getAttachment(gl, attachment) { switch (attachment) { case 'depth': return gl.DEPTH_ATTACHMENT; case 'stencil': return gl.STENCIL_ATTACHMENT; case 'depth-stencil': return gl.DEPTH_STENCIL_ATTACHMENT; case 'color0': return gl.COLOR_ATTACHMENT0; } } exports.getAttachment = getAttachment; function getRenderbuffer(gl) { var renderbuffer = gl.createRenderbuffer(); if (renderbuffer === null) { throw new Error('Could not create WebGL renderbuffer'); } return renderbuffer; } function createRenderbuffer(gl, format, attachment, _width, _height) { var _renderbuffer = getRenderbuffer(gl); var bind = function () { return gl.bindRenderbuffer(gl.RENDERBUFFER, _renderbuffer); }; var _format = getFormat(gl, format); var _attachment = getAttachment(gl, attachment); function init() { bind(); gl.renderbufferStorage(gl.RENDERBUFFER, _format, _width, _height); } init(); var destroyed = false; return { id: getNextRenderbufferId(), bind: bind, attachFramebuffer: function (framebuffer) { framebuffer.bind(); bind(); gl.framebufferRenderbuffer(gl.FRAMEBUFFER, _attachment, gl.RENDERBUFFER, _renderbuffer); if (debug_1.isDebugMode) (0, framebuffer_1.checkFramebufferStatus)(gl); }, setSize: function (width, height) { _width = width; _height = height; init(); }, reset: function () { _renderbuffer = getRenderbuffer(gl); init(); }, destroy: function () { if (destroyed) return; gl.deleteRenderbuffer(_renderbuffer); destroyed = true; } }; } exports.createRenderbuffer = createRenderbuffer; //# sourceMappingURL=renderbuffer.js.map