molstar
Version:
A comprehensive macromolecular library.
84 lines • 3.11 kB
JavaScript
/**
* 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