r3-legacy/src/game-lib-d3-api-texture.js

315 lines
8.7 KiB
JavaScript

/**
* Raw Texture API object - should always correspond with the Texture Schema
* @param id
* @param textureType
* @param name
* @param image
* @param images
* @param wrapS
* @param wrapT
* @param repeat
* @param data
* @param format
* @param mapping
* @param magFilter
* @param minFilter
* @param storageType
* @param textureType
* @param anisotropy
* @param offset
* @param generateMipmaps
* @param flipY
* @param mipmaps
* @param unpackAlignment
* @param premultiplyAlpha
* @param encoding
* @param canvas
* @param animated
* @param reverseAnimation
* @param forward
* @param parentEntity
* @constructor
*/
GameLib.D3.API.Texture = function(
id,
textureType,
name,
image,
images,
wrapS,
wrapT,
repeat,
data,
format,
mapping,
magFilter,
minFilter,
storageType,
anisotropy,
offset,
generateMipmaps,
flipY,
mipmaps,
unpackAlignment,
premultiplyAlpha,
encoding,
canvas,
animated,
reverseAnimation,
forward,
parentEntity
) {
if (GameLib.Utils.UndefinedOrNull(id)) {
id = GameLib.Utils.RandomId();
}
this.id = id;
if (GameLib.Utils.UndefinedOrNull(textureType)) {
textureType = GameLib.D3.API.Texture.TEXTURE_TYPE_NORMAL;
}
this.textureType = textureType;
if (GameLib.Utils.UndefinedOrNull(name)) {
name = 'Texture (' + id + ')';
}
this.name = name;
if (GameLib.Utils.UndefinedOrNull(image)) {
image = null;
}
this.image = image;
if (GameLib.Utils.UndefinedOrNull(images)) {
images = [];
}
this.images = images;
if (GameLib.Utils.UndefinedOrNull(wrapS)) {
wrapS = GameLib.D3.API.Texture.TYPE_REPEAT_WRAPPING;
}
this.wrapS = wrapS;
if (GameLib.Utils.UndefinedOrNull(wrapT)) {
wrapT = GameLib.D3.API.Texture.TYPE_REPEAT_WRAPPING;
}
this.wrapT = wrapT;
if (GameLib.Utils.UndefinedOrNull(repeat)) {
repeat = new GameLib.API.Vector2(1, 1);
}
this.repeat = repeat;
if (GameLib.Utils.UndefinedOrNull(data)) {
data = null;
}
this.data = data;
if (GameLib.Utils.UndefinedOrNull(format)) {
format = GameLib.D3.API.Texture.TYPE_RGBA_FORMAT;
}
this.format = format;
if (GameLib.Utils.UndefinedOrNull(mapping)) {
mapping = GameLib.D3.API.Texture.TYPE_UV_MAPPING;
}
this.mapping = mapping;
if (GameLib.Utils.UndefinedOrNull(magFilter)) {
magFilter = GameLib.D3.API.Texture.TYPE_LINEAR_FILTER;
}
this.magFilter = magFilter;
if (GameLib.Utils.UndefinedOrNull(minFilter)) {
minFilter = GameLib.D3.API.Texture.TYPE_LINEAR_MIPMAP_LINEAR_FILTER;
}
this.minFilter = minFilter;
if (GameLib.Utils.UndefinedOrNull(storageType)) {
storageType = GameLib.D3.API.Texture.TYPE_UNSIGNED_BYTE;
}
this.storageType = storageType;
if (GameLib.Utils.UndefinedOrNull(anisotropy)) {
anisotropy = 1;
}
this.anisotropy = anisotropy;
if (GameLib.Utils.UndefinedOrNull(offset)) {
offset = new GameLib.API.Vector2(0, 0);
}
this.offset = offset;
if (GameLib.Utils.UndefinedOrNull(generateMipmaps)) {
generateMipmaps = true;
}
this.generateMipmaps = generateMipmaps;
if (GameLib.Utils.UndefinedOrNull(flipY)) {
flipY = true;
}
this.flipY = flipY;
if (GameLib.Utils.UndefinedOrNull(mipmaps)) {
mipmaps = [];
}
this.mipmaps = mipmaps;
if (GameLib.Utils.UndefinedOrNull(unpackAlignment)) {
unpackAlignment = 4;
}
this.unpackAlignment = unpackAlignment;
if (GameLib.Utils.UndefinedOrNull(premultiplyAlpha)) {
premultiplyAlpha = false;
}
this.premultiplyAlpha = premultiplyAlpha;
if (GameLib.Utils.UndefinedOrNull(encoding)) {
encoding = GameLib.D3.API.Texture.TYPE_LINEAR_ENCODING;
}
this.encoding = encoding;
if (GameLib.Utils.UndefinedOrNull(canvas)) {
canvas = null;
}
this.canvas = canvas;
if (GameLib.Utils.UndefinedOrNull(animated)) {
animated = false;
}
this.animated = animated;
if (GameLib.Utils.UndefinedOrNull(reverseAnimation)) {
reverseAnimation = false;
}
this.reverseAnimation = reverseAnimation;
if (GameLib.Utils.UndefinedOrNull(forward)) {
forward = true;
}
this.forward = forward;
this.needsUpdate = false;
GameLib.API.Component.call(
this,
GameLib.Component.TEXTURE,
parentEntity
);
};
GameLib.D3.API.Texture.prototype = Object.create(GameLib.API.Component.prototype);
GameLib.D3.API.Texture.prototype.constructor = GameLib.D3.API.Texture;
/**
* Texture Formats
* @type {number}
*/
GameLib.D3.API.Texture.TYPE_ALPHA_FORMAT = 1019;
GameLib.D3.API.Texture.TYPE_RGB_FORMAT = 1020;
GameLib.D3.API.Texture.TYPE_RGBA_FORMAT = 1021;
GameLib.D3.API.Texture.TYPE_LUMINANCE_FORMAT = 1022;
GameLib.D3.API.Texture.TYPE_LUMINANCE_ALPHA_FORMAT = 1023;
GameLib.D3.API.Texture.TYPE_DEPTH_FORMAT = 1026;
/**
* Mapping modes
* @type {number}
*/
GameLib.D3.API.Texture.TYPE_UV_MAPPING = 300;
GameLib.D3.API.Texture.TYPE_CUBE_REFLECTION_MAPPING = 301;
GameLib.D3.API.Texture.TYPE_CUBE_REFRACTION_MAPPING = 302;
GameLib.D3.API.Texture.TYPE_EQUI_RECTANGULAR_REFLECTION_MAPPING = 303;
GameLib.D3.API.Texture.TYPE_EQUI_RECTANGULAR_REFRACTION_MAPPING = 304;
GameLib.D3.API.Texture.TYPE_SPHERICAL_REFLECTION_MAPPING = 305;
GameLib.D3.API.Texture.TYPE_CUBE_UV_REFLECTION_MAPPING = 306;
GameLib.D3.API.Texture.TYPE_CUBE_UV_REFRACTION_MAPPING = 307;
/**
* Wrapping Modes
* @type {number}
*/
GameLib.D3.API.Texture.TYPE_REPEAT_WRAPPING = 1000;
GameLib.D3.API.Texture.TYPE_CLAMP_TO_EDGE_WRAPPING = 1001;
GameLib.D3.API.Texture.TYPE_MIRRORED_REPEAT_WRAPPING = 1002;
/**
* Mipmap Filters
* @type {number}
*/
GameLib.D3.API.Texture.TYPE_NEAREST_FILTER = 1003;
GameLib.D3.API.Texture.TYPE_NEAREST_MIPMAP_NEAREST_FILTER = 1004;
GameLib.D3.API.Texture.TYPE_NEAREST_MIPMAP_LINEAR_FILTER = 1005;
GameLib.D3.API.Texture.TYPE_LINEAR_FILTER = 1006;
GameLib.D3.API.Texture.TYPE_LINEAR_MIPMAP_NEAREST_FILTER = 1007;
GameLib.D3.API.Texture.TYPE_LINEAR_MIPMAP_LINEAR_FILTER = 1008;
/**
* Texture Data Types
* @type {number}
*/
GameLib.D3.API.Texture.TYPE_UNSIGNED_BYTE = 1009;
GameLib.D3.API.Texture.TYPE_BYTE = 1010;
GameLib.D3.API.Texture.TYPE_SHORT = 1011;
GameLib.D3.API.Texture.TYPE_UNSIGNED_SHORT = 1012;
GameLib.D3.API.Texture.TYPE_INT = 1013;
GameLib.D3.API.Texture.TYPE_UNSIGNED_INT = 1014;
GameLib.D3.API.Texture.TYPE_FLOAT = 1015;
GameLib.D3.API.Texture.TYPE_HALF_FLOAT = 1025;
/**
* Encoding Modes
* @type {number}
*/
GameLib.D3.API.Texture.TYPE_LINEAR_ENCODING = 3000; // NO ENCODING AT ALL.
GameLib.D3.API.Texture.TYPE_SRGB_ENCODING = 3001;
GameLib.D3.API.Texture.TYPE_GAMMA_ENCODING = 3007; // USES GAMMA_FACTOR, FOR BACKWARDS COMPATIBILITY WITH WEBGLRENDERER.GAMMAINPUT/GAMMAOUTPUT
GameLib.D3.API.Texture.TYPE_RGBE_ENCODING = 3002; // AKA RADIANCE.
GameLib.D3.API.Texture.TYPE_LOG_LUV_ENCODING = 3003;
GameLib.D3.API.Texture.TYPE_RGBM7_ENCODING = 3004;
GameLib.D3.API.Texture.TYPE_RGBM16_ENCODING = 3005;
GameLib.D3.API.Texture.TYPE_RGBD_ENCODING = 3006; // MAXRANGE IS 256.
GameLib.D3.API.Texture.TEXTURE_TYPE_NORMAL = 0x1;
GameLib.D3.API.Texture.TEXTURE_TYPE_CUBE = 0x2;
GameLib.D3.API.Texture.TEXTURE_TYPE_CANVAS = 0x3;
/**
* Creates an API texture from Object data
* @param objectTexture
* @constructor
*/
GameLib.D3.API.Texture.FromObject = function(objectTexture) {
return new GameLib.D3.API.Texture(
objectTexture.id,
objectTexture.typeId || objectTexture.textureType,
objectTexture.name,
objectTexture.image,
objectTexture.images,
objectTexture.wrapS,
objectTexture.wrapT,
GameLib.API.Vector2.FromObject(objectTexture.repeat),
objectTexture.data,
objectTexture.format,
objectTexture.mapping,
objectTexture.magFilter,
objectTexture.minFilter,
objectTexture.storageType,
objectTexture.anisotropy,
GameLib.API.Vector2.FromObject(objectTexture.offset),
objectTexture.generateMipmaps,
objectTexture.flipY,
objectTexture.mipmaps,
objectTexture.unpackAlignment,
objectTexture.premultiplyAlpha,
objectTexture.encoding,
objectTexture.canvas,
objectTexture.animated,
objectTexture.reverseAnimation,
objectTexture.forward,
objectTexture.parentEntity
)
};