Repository

js/Mobilizing/renderer/3D/three/texture/RenderTexture.js

import * as THREE from 'three';

export default class RenderTexture {
    /**
    * RenderTexture are 3D camera rendered bitmap pictures loaded in the graphic card memory so they can be mapped on a geometry surface. Usually, texture are mapped through a Material. Keep in mind that WebGL, as an implementation of OpenGL, shares the same kind of limitations : textures sources should be power of 2 (even if here, Three.js is doing the job of resizing for you if they're not).
    *
    * @param {Object} params Parameters object, given by the constructor.
    * @param {Number} params.width the width of this texture
    * @param {Number} params.height the height of this texture
    * @param {String} params.format the texture format to use (see https://threejs.org/docs/#api/constants/Textures > Formats)
    */
    constructor({
        format = "RGBFormat",
        width = 512,
        height = 512,
    } = {}) {
        this.format = format;
        this.width = width;
        this.height = height;

        this.renderTarget = new THREE.WebGLRenderTarget(this.width, this.height, {
            "minFilter": THREE.LinearFilter,
            "magFilter": THREE.NearestFilter,
            "format": THREE[this.format]
        });

        this.texture = this.renderTarget.texture;
    }

    /**
    * @returns the Three.js native object used in this class
    */
    getNativeObject() {
        return this.texture;
    }

    getWidth() {
        return this.width;
    }

    getHeight() {
        return this.height;
    }

}