molstar
Version:
A comprehensive macromolecular library.
89 lines • 3.41 kB
JavaScript
/**
* 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.createNullRenderTarget = exports.createRenderTarget = void 0;
var id_factory_1 = require("../../mol-util/id-factory");
var texture_1 = require("./texture");
var framebuffer_1 = require("./framebuffer");
var compat_1 = require("./compat");
var getNextRenderTargetId = (0, id_factory_1.idFactory)();
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
: (0, compat_1.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;
}
};
}
exports.createRenderTarget = createRenderTarget;
//
function createNullRenderTarget(gl) {
return {
id: getNextRenderTargetId(),
texture: (0, texture_1.createNullTexture)(gl),
framebuffer: (0, framebuffer_1.createNullFramebuffer)(),
getWidth: function () { return 0; },
getHeight: function () { return 0; },
bind: function () {
gl.bindFramebuffer(gl.FRAMEBUFFER, null);
},
setSize: function () { },
reset: function () { },
destroy: function () { }
};
}
exports.createNullRenderTarget = createNullRenderTarget;
//# sourceMappingURL=render-target.js.map
;