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

295 lines
8.6 KiB
JavaScript
Raw Normal View History

2016-10-14 12:32:53 +02:00
/**
2016-11-17 18:31:41 +01:00
* Texture Superset - The apiTexture properties get moved into the Texture object itself, and then the instance is
* created
* @param apiTexture
* @param graphics GameLib.D3.Graphics
* @param parentMaterial GameLib.D3.Material
* @param parentMaterialInstanceMapId String
2016-11-21 16:08:39 +01:00
* @param imageFactory GameLib.D3.ImageFactory result
2016-11-17 18:31:41 +01:00
* @constructor
*/
2016-11-21 16:08:39 +01:00
GameLib.D3.Texture = function Texture(
2016-11-17 18:31:41 +01:00
apiTexture,
graphics,
parentMaterial,
2016-11-21 16:08:39 +01:00
parentMaterialInstanceMapId,
imageFactory
2016-11-17 18:31:41 +01:00
) {
for (var property in apiTexture) {
if (apiTexture.hasOwnProperty(property)) {
this[property] = apiTexture[property];
}
}
2016-12-02 16:03:03 +01:00
this.graphics = graphics;
this.graphics.isNotThreeThrow();
2016-12-15 14:53:39 +01:00
this.offset = new GameLib.Vector2(
2016-12-02 13:00:56 +01:00
graphics,
this,
this.offset
);
2016-12-15 14:53:39 +01:00
this.repeat = new GameLib.Vector2(
2016-12-02 13:00:56 +01:00
graphics,
this,
this.repeat
);
2016-11-17 18:31:41 +01:00
this.parentMaterial = parentMaterial;
this.parentMaterialInstanceMapId = parentMaterialInstanceMapId;
this.imageInstance = null;
this.instance = null;
2016-11-21 16:08:39 +01:00
this.loadTexture(imageFactory);
};
GameLib.D3.Texture.prototype.loadTexture = function(imageFactory) {
this.imageData = imageFactory(this.imagePath);
2016-11-17 18:31:41 +01:00
this.imageData.then(
function (imageInstance){
this.imageInstance = imageInstance;
this.instance = this.createInstance();
2016-11-21 16:08:39 +01:00
this.parentMaterial.instance[this.parentMaterialInstanceMapId] = this.instance;
this.parentMaterial.instance.needsUpdate = true;
2016-11-17 18:31:41 +01:00
}.bind(this),
function onRejected() {
}
);
};
2016-10-14 12:32:53 +02:00
/**
* Texture Formats
* @type {number}
*/
GameLib.D3.Texture.TYPE_ALPHA_FORMAT = 1019;
GameLib.D3.Texture.TYPE_RGB_FORMAT = 1020;
GameLib.D3.Texture.TYPE_RGBA_FORMAT = 1021;
GameLib.D3.Texture.TYPE_LUMINANCE_FORMAT = 1022;
GameLib.D3.Texture.TYPE_LUMINANCE_ALPHA_FORMAT = 1023;
GameLib.D3.Texture.TYPE_DEPTH_FORMAT = 1026;
/**
* Mapping modes
* @type {number}
*/
GameLib.D3.Texture.TYPE_UV_MAPPING = 300;
GameLib.D3.Texture.TYPE_CUBE_REFLECTION_MAPPING = 301;
GameLib.D3.Texture.TYPE_CUBE_REFRACTION_MAPPING = 302;
GameLib.D3.Texture.TYPE_EQUI_RECTANGULAR_REFLECTION_MAPPING = 303;
GameLib.D3.Texture.TYPE_EQUI_RECTANGULAR_REFRACTION_MAPPING = 304;
GameLib.D3.Texture.TYPE_SPHERICAL_REFLECTION_MAPPING = 305;
GameLib.D3.Texture.TYPE_CUBE_UV_REFLECTION_MAPPING = 306;
GameLib.D3.Texture.TYPE_CUBE_UV_REFRACTION_MAPPING = 307;
/**
* Wrapping Modes
* @type {number}
*/
GameLib.D3.Texture.TYPE_REPEAT_WRAPPING = 1000;
GameLib.D3.Texture.TYPE_CLAMP_TO_EDGE_WRAPPING = 1001;
GameLib.D3.Texture.TYPE_MIRRORED_REPEAT_WRAPPING = 1002;
/**
* Mipmap Filters
* @type {number}
*/
GameLib.D3.Texture.TYPE_NEAREST_FILTER = 1003;
GameLib.D3.Texture.TYPE_NEAREST_MIPMAP_NEAREST_FILTER = 1004;
GameLib.D3.Texture.TYPE_NEAREST_MIPMAP_LINEAR_FILTER = 1005;
GameLib.D3.Texture.TYPE_LINEAR_FILTER = 1006;
GameLib.D3.Texture.TYPE_LINEAR_MIPMAP_NEAREST_FILTER = 1007;
GameLib.D3.Texture.TYPE_LINEAR_MIPMAP_LINEAR_FILTER = 1008;
/**
* Texture Data Types
* @type {number}
*/
GameLib.D3.Texture.TYPE_UNSIGNED_BYTE = 1009;
GameLib.D3.Texture.TYPE_BYTE = 1010;
GameLib.D3.Texture.TYPE_SHORT = 1011;
GameLib.D3.Texture.TYPE_UNSIGNED_SHORT = 1012;
GameLib.D3.Texture.TYPE_INT = 1013;
GameLib.D3.Texture.TYPE_UNSIGNED_INT = 1014;
GameLib.D3.Texture.TYPE_FLOAT = 1015;
GameLib.D3.Texture.TYPE_HALF_FLOAT = 1025;
/**
* Encoding Modes
* @type {number}
*/
GameLib.D3.Texture.TYPE_LINEAR_ENCODING = 3000; // NO ENCODING AT ALL.
GameLib.D3.Texture.TYPE_SRGB_ENCODING = 3001;
GameLib.D3.Texture.TYPE_GAMMA_ENCODING = 3007; // USES GAMMA_FACTOR, FOR BACKWARDS COMPATIBILITY WITH WEBGLRENDERER.GAMMAINPUT/GAMMAOUTPUT
GameLib.D3.Texture.TYPE_RGBE_ENCODING = 3002; // AKA RADIANCE.
GameLib.D3.Texture.TYPE_LOG_LUV_ENCODING = 3003;
GameLib.D3.Texture.TYPE_RGBM7_ENCODING = 3004;
GameLib.D3.Texture.TYPE_RGBM16_ENCODING = 3005;
GameLib.D3.Texture.TYPE_RGBD_ENCODING = 3006; // MAXRANGE IS 256.
GameLib.D3.Texture.TEXTURE_TYPE_ALPHA = 'alpha';
GameLib.D3.Texture.TEXTURE_TYPE_AO = 'ao';
GameLib.D3.Texture.TEXTURE_TYPE_BUMP = 'bump';
GameLib.D3.Texture.TEXTURE_TYPE_DIFFUSE = 'diffuse';
GameLib.D3.Texture.TEXTURE_TYPE_DISPLACEMENT = 'displacement';
GameLib.D3.Texture.TEXTURE_TYPE_EMISSIVE = 'emissive';
GameLib.D3.Texture.TEXTURE_TYPE_ENVIRONMENT = 'environment';
GameLib.D3.Texture.TEXTURE_TYPE_LIGHT = 'light';
GameLib.D3.Texture.TEXTURE_TYPE_METALNESS = 'metalness';
GameLib.D3.Texture.TEXTURE_TYPE_NORMAL = 'normal';
GameLib.D3.Texture.TEXTURE_TYPE_ROUGHNESS = 'roughness';
GameLib.D3.Texture.TEXTURE_TYPE_SPECULAR = 'specular';
2016-10-14 12:32:53 +02:00
/**
2016-11-17 18:31:41 +01:00
* Creates an instance of our texture object
* @returns {GameLib.D3.Texture|THREE.SoftwareRenderer.Texture|THREE.Texture|*|Texture}
2016-10-14 12:32:53 +02:00
*/
2016-11-18 16:00:13 +01:00
GameLib.D3.Texture.prototype.createInstance = function(update) {
var instance = null;
if (update) {
instance = this.instance;
instance.mapping = this.mapping;
instance.wrapS = this.wrapS;
instance.wrapT = this.wrapT;
instance.magFilter = this.magFilter;
instance.minFilter = this.minFilter;
instance.anisotropy = this.anisotropy;
2016-11-18 16:00:13 +01:00
} else {
instance = new this.graphics.instance.Texture(
this.imageInstance,
this.mapping,
this.wrapS,
this.wrapT,
this.magFilter,
this.minFilter,
undefined, //format and textureType is different on different archs
undefined,
this.anisotropy
);
}
2016-11-17 18:31:41 +01:00
instance.name = this.name;
instance.flipY = this.flipY;
instance.encoding = this.encoding;
instance.offset.x = this.offset.x;
instance.offset.y = this.offset.y;
instance.repeat.x = this.repeat.x;
instance.repeat.y = this.repeat.y;
2016-11-17 18:31:41 +01:00
instance.mipmaps = this.mipmaps;
instance.unpackAlignment = this.unpackAlignment;
instance.premultiplyAlpha = this.premultiplyAlpha;
instance.textureType = this.textureType;
2016-11-17 18:31:41 +01:00
instance.needsUpdate = true;
2016-11-17 18:31:41 +01:00
return instance;
};
2016-11-18 16:00:13 +01:00
/**
* Updates the instance with the current state
*/
GameLib.D3.Texture.prototype.updateInstance = function() {
this.instance = this.createInstance(true);
};
2016-11-21 16:08:39 +01:00
2016-12-09 20:32:09 +01:00
/**
* Clones this texture object
* @returns {*}
*/
2016-11-21 16:08:39 +01:00
GameLib.D3.Texture.prototype.clone = function() {
return _.cloneDeep(this);
2016-12-09 20:32:09 +01:00
};
/**
* Converts a GameLib.D3.Texture to a GameLib.D3.API.Texture
* @returns {GameLib.D3.API.Texture}
*/
GameLib.D3.Texture.prototype.toApiTexture = function() {
return new GameLib.D3.API.Texture(
this.id,
this.typeId,
this.name,
this.imagePath,
this.wrapS,
this.wrapT,
this.repeat.toApiVector(),
this.data,
this.format,
this.mapping,
this.magFilter,
this.minFilter,
this.textureType,
this.anisotropy,
this.offset.toApiVector(),
this.generateMipmaps,
this.flipY,
this.mipmaps,
this.unpackAlignment,
this.premultiplyAlpha,
this.encoding
)
};
/**
* Converts from an Object texture to a GameLib.D3.Texture
* @param graphics GameLib.D3.Graphics
* @param objectTexture Object
* @param gameLibMaterial GameLib.D3.Material
* @param map GameLib.D3.TextureMap
* @param gameLibTextureMap GameLib.D3.TextureMapTemplate
* @param imageFactory GameLib.D3.ImageFactory
* @constructor
*/
GameLib.D3.Texture.FromObjectTexture = function(
graphics,
objectTexture,
gameLibMaterial,
map,
gameLibTextureMap,
imageFactory
) {
return new GameLib.D3.Texture(
new GameLib.D3.API.Texture(
objectTexture.id,
map,
objectTexture.name,
objectTexture.imagePath,
objectTexture.wrapS,
objectTexture.wrapT,
2016-12-15 14:53:39 +01:00
new GameLib.API.Vector2(
2016-12-09 20:32:09 +01:00
objectTexture.repeat.x,
objectTexture.repeat.y
),
objectTexture.data,
objectTexture.format,
objectTexture.mapping,
objectTexture.magFilter,
objectTexture.minFilter,
objectTexture.textureType,
objectTexture.anisotropy,
2016-12-15 14:53:39 +01:00
new GameLib.API.Vector2(
2016-12-09 20:32:09 +01:00
objectTexture.offset.x,
objectTexture.offset.y
),
objectTexture.generateMipmaps,
objectTexture.flipY,
objectTexture.mipmaps,
objectTexture.unpackAlignment,
objectTexture.premultiplyAlpha,
objectTexture.encoding
),
graphics,
gameLibMaterial,
gameLibTextureMap[map].instanceMapId,
imageFactory
);
2016-11-21 16:08:39 +01:00
};