Reference Source

src/XKTModel/XKTTexture.js

/**
 * A texture shared by {@link XKTTextureSet}s.
 *
 * * Created by {@link XKTModel#createTexture}
 * * Stored in {@link XKTTextureSet#textures}, {@link XKTModel#textures} and {@link XKTModel#texturesList}
 *
 * @class XKTTexture
 */
import {RepeatWrapping, LinearMipMapNearestFilter} from "../constants";

class XKTTexture {

    /**
     * @private
     */
    constructor(cfg) {

        /**
         * Unique ID of this XKTTexture in {@link XKTModel#textures}.
         *
         * @type {Number}
         */
        this.textureId = cfg.textureId;

        /**
         * Index of this XKTTexture in {@link XKTModel#texturesList};
         *
         * @type {Number}
         */
        this.textureIndex = cfg.textureIndex;

        /**
         * Texture image data.
         *
         * @type {Buffer}
         */
        this.imageData = cfg.imageData;

        /**
         * Which material channel this texture is applied to, as determined by its {@link XKTTextureSet}s.
         *
         * @type {Number}
         */
        this.channel = null;

        /**
         * Width of this XKTTexture.
         *
         * @type {Number}
         */
        this.width = cfg.width;

        /**
         * Height of this XKTTexture.
         *
         * @type {Number}
         */
        this.height = cfg.height;

        /**
         * Texture file source.
         *
         * @type {String}
         */
        this.src = cfg.src;

        /**
         * Whether this XKTTexture is to be compressed.
         *
         * @type {Boolean}
         */
        this.compressed = (!!cfg.compressed);

        /**
         * Media type of this XKTTexture.
         *
         * Supported values are {@link GIFMediaType}, {@link PNGMediaType} and {@link JPEGMediaType}.
         *
         * Ignored for compressed textures.
         *
         * @type {Number}
         */
        this.mediaType = cfg.mediaType;

        /**
         * How the texture is sampled when a texel covers less than one pixel. Supported values
         * are {@link LinearMipmapLinearFilter}, {@link LinearMipMapNearestFilter},
         * {@link NearestMipMapNearestFilter}, {@link NearestMipMapLinearFilter}
         * and {@link LinearMipMapLinearFilter}.
         *
         * Ignored for compressed textures.
         *
         * @type {Number}
         */
        this.minFilter = cfg.minFilter || LinearMipMapNearestFilter;

        /**
         * How the texture is sampled when a texel covers more than one pixel. Supported values
         * are {@link LinearFilter} and {@link NearestFilter}.
         *
         * Ignored for compressed textures.
         *
         * @type {Number}
         */
        this.magFilter = cfg.magFilter || LinearMipMapNearestFilter;

        /**
         * S wrapping mode.
         *
         * Supported values are {@link ClampToEdgeWrapping},
         * {@link MirroredRepeatWrapping} and {@link RepeatWrapping}.
         *
         * Ignored for compressed textures.
         *
         * @type {Number}
         */
        this.wrapS = cfg.wrapS || RepeatWrapping;

        /**
         * T wrapping mode.
         *
         * Supported values are {@link ClampToEdgeWrapping},
         * {@link MirroredRepeatWrapping} and {@link RepeatWrapping}.
         *
         * Ignored for compressed textures.
         *
         * @type {Number}
         */
        this.wrapT = cfg.wrapT || RepeatWrapping;

        /**
         * R wrapping mode.
         *
         * Ignored for compressed textures.
         *
         * Supported values are {@link ClampToEdgeWrapping},
         * {@link MirroredRepeatWrapping} and {@link RepeatWrapping}.
         *
         * @type {*|number}
         */
        this.wrapR = cfg.wrapR || RepeatWrapping
    }
}

export {XKTTexture};