UNPKG

molstar

Version:

A comprehensive macromolecular library.

84 lines 3.11 kB
/** * Copyright (c) 2018-2021 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author Alexander Rose <alexander.rose@weirdbyte.de> */ import { idFactory } from '../../mol-util/id-factory'; import { createNullTexture } from './texture'; import { createNullFramebuffer } from './framebuffer'; import { isWebGL2 } from './compat'; var getNextRenderTargetId = idFactory(); export function createRenderTarget(gl, resources, _width, _height, depth, type, filter) { if (depth === void 0) { depth = true; } if (type === void 0) { type = 'uint8'; } if (filter === void 0) { filter = 'nearest'; } var framebuffer = resources.framebuffer(); var targetTexture = type === 'fp16' ? resources.texture('image-float16', 'rgba', 'fp16', filter) : type === 'float32' ? resources.texture('image-float32', 'rgba', 'float', filter) : resources.texture('image-uint8', 'rgba', 'ubyte', filter); // make a depth renderbuffer of the same size as the targetTexture var depthRenderbuffer = !depth ? null : isWebGL2(gl) ? resources.renderbuffer('depth32f', 'depth', _width, _height) : resources.renderbuffer('depth16', 'depth', _width, _height); function init() { targetTexture.define(_width, _height); targetTexture.attachFramebuffer(framebuffer, 'color0'); if (depthRenderbuffer) depthRenderbuffer.attachFramebuffer(framebuffer); } init(); var destroyed = false; return { id: getNextRenderTargetId(), texture: targetTexture, framebuffer: framebuffer, getWidth: function () { return _width; }, getHeight: function () { return _height; }, bind: function () { framebuffer.bind(); }, setSize: function (width, height) { if (_width === width && _height === height) { return; } _width = width; _height = height; targetTexture.define(_width, _height); if (depthRenderbuffer) depthRenderbuffer.setSize(_width, _height); }, reset: function () { init(); }, destroy: function () { if (destroyed) return; targetTexture.destroy(); framebuffer.destroy(); if (depthRenderbuffer) depthRenderbuffer.destroy(); destroyed = true; } }; } // export function createNullRenderTarget(gl) { return { id: getNextRenderTargetId(), texture: createNullTexture(gl), framebuffer: createNullFramebuffer(), getWidth: function () { return 0; }, getHeight: function () { return 0; }, bind: function () { gl.bindFramebuffer(gl.FRAMEBUFFER, null); }, setSize: function () { }, reset: function () { }, destroy: function () { } }; } //# sourceMappingURL=render-target.js.map