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

342 lines
8.9 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
* @constructor
*/
GameLib.D3.Texture = function(
2016-11-17 18:31:41 +01:00
graphics,
2017-06-08 18:17:03 +02:00
apiTexture
2016-11-17 18:31:41 +01:00
) {
2016-12-02 16:03:03 +01:00
this.graphics = graphics;
this.graphics.isNotThreeThrow();
if (GameLib.Utils.UndefinedOrNull(apiTexture)) {
apiTexture = {};
}
if (apiTexture instanceof GameLib.D3.Texture) {
return apiTexture;
}
2017-01-06 16:53:53 +01:00
GameLib.D3.API.Texture.call(
2017-01-05 19:34:28 +01:00
this,
apiTexture.id,
apiTexture.typeId,
apiTexture.name,
2017-06-08 18:17:03 +02:00
apiTexture.image,
2017-01-05 19:34:28 +01:00
apiTexture.wrapS,
apiTexture.wrapT,
apiTexture.repeat,
apiTexture.data,
apiTexture.format,
apiTexture.mapping,
apiTexture.magFilter,
apiTexture.minFilter,
apiTexture.textureType,
apiTexture.anisotropy,
apiTexture.offset,
apiTexture.generateMipmaps,
apiTexture.flipY,
apiTexture.mipmaps,
apiTexture.unpackAlignment,
apiTexture.premultiplyAlpha,
2017-01-19 17:50:11 +01:00
apiTexture.encoding,
apiTexture.parentEntity
2017-01-05 19:34:28 +01:00
);
2016-12-02 16:03:03 +01:00
2016-12-15 14:53:39 +01:00
this.offset = new GameLib.Vector2(
2017-06-08 18:17:03 +02:00
this.graphics,
this.offset,
this
2016-12-02 13:00:56 +01:00
);
2016-12-15 14:53:39 +01:00
this.repeat = new GameLib.Vector2(
2017-06-08 18:17:03 +02:00
this.graphics,
this.repeat,
this
2016-12-02 13:00:56 +01:00
);
2017-06-09 16:03:05 +02:00
if (this.image instanceof GameLib.D3.API.Image) {
this.image = new GameLib.D3.Image(
this.graphics,
this.image
);
}
2016-11-17 18:31:41 +01:00
2017-06-16 15:49:53 +02:00
GameLib.Component.call(
this,
GameLib.Component.COMPONENT_TEXTURE,
{
'image' : GameLib.D3.Image
}
);
2016-11-21 16:08:39 +01:00
};
2017-01-05 19:34:28 +01:00
GameLib.D3.Texture.prototype = Object.create(GameLib.D3.API.Texture.prototype);
GameLib.D3.Texture.prototype.constructor = GameLib.D3.Texture;
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.
2017-06-12 15:35:13 +02:00
GameLib.D3.Texture.TEXTURE_TYPE_NORMAL = 0x1;
GameLib.D3.Texture.TEXTURE_TYPE_CUBE = 0x2;
2016-10-14 12:32:53 +02:00
/**
2016-11-17 18:31:41 +01:00
* Creates an instance of our texture object
2017-02-01 16:09:34 +01:00
* @returns {*}
2016-10-14 12:32:53 +02:00
*/
GameLib.D3.Texture.prototype.createInstance = function() {
2017-06-09 16:03:05 +02:00
2017-09-01 13:14:14 +02:00
// console.log('texture create instance');
2017-06-28 17:09:06 +02:00
var instance = null;
if (this.typeId === GameLib.D3.Texture.TEXTURE_TYPE_CUBE) {
if (this.image && this.image.instance) {
2017-06-28 17:09:06 +02:00
instance = new THREE.CubeTexture(
[
this.image.instance,
this.image.instance,
this.image.instance,
this.image.instance,
this.image.instance,
this.image.instance
]
);
instance.needsUpdate = true;
} else {
2017-08-15 22:26:12 +02:00
instance = new THREE.CubeTexture();
}
2017-06-16 18:45:25 +02:00
2017-06-28 17:09:06 +02:00
if (this.mapping !== GameLib.D3.Texture.TYPE_CUBE_REFLECTION_MAPPING &&
this.mapping !== GameLib.D3.Texture.TYPE_CUBE_REFRACTION_MAPPING
) {
this.mapping = GameLib.D3.Texture.TYPE_CUBE_REFLECTION_MAPPING;
}
2017-06-12 15:35:13 +02:00
2017-06-28 17:09:06 +02:00
} else {
if (this.image && this.image.instance) {
2017-06-28 17:09:06 +02:00
instance = new THREE.Texture(
this.image.instance
);
instance.needsUpdate = true;
} else {
2017-08-15 22:26:12 +02:00
instance = new THREE.Texture();
2017-06-28 17:09:06 +02:00
}
2017-06-09 16:03:05 +02:00
2017-06-28 17:09:06 +02:00
if (this.mapping !== GameLib.D3.Texture.TYPE_UV_MAPPING) {
this.mapping = GameLib.D3.Texture.TYPE_UV_MAPPING;
}
2017-06-28 17:09:06 +02: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;
//instance.mapping = this.mapping;
// instance.format = this.format;
instance.wrapS = this.wrapS;
instance.wrapT = this.wrapT;
2017-06-28 17:09:06 +02:00
return instance;
2016-11-17 18:31:41 +01:00
};
2016-11-18 16:00:13 +01:00
/**
* Updates the instance with the current state
*/
GameLib.D3.Texture.prototype.updateInstance = function() {
2017-09-01 13:14:14 +02:00
// console.log('texture update instance');
var imageChanged = false;
if (!this.instance) {
console.error('no texture instance');
return;
}
if (this.image && this.image.instance) {
if (this.typeId === GameLib.D3.Texture.TEXTURE_TYPE_NORMAL) {
if (this.instance.image !== this.image.instance) {
this.instance = new THREE.Texture(
this.image.instance
);
this.mapping = this.instance.mapping;
imageChanged = true;
}
} else if (this.typeId === GameLib.D3.Texture.TEXTURE_TYPE_CUBE) {
if (this.instance.image[0] !== this.image.instance) {
this.instance = new THREE.CubeTexture(
[
this.image.instance,
this.image.instance,
this.image.instance,
this.image.instance,
this.image.instance,
this.image.instance
]
);
this.mapping = this.instance.mapping;
imageChanged = true;
}
}
}
this.instance.name = this.name;
this.instance.flipY = this.flipY;
// this.instance.encoding = this.encoding;
this.instance.offset.x = this.offset.x;
this.instance.offset.y = this.offset.y;
this.instance.repeat.x = this.repeat.x;
this.instance.repeat.y = this.repeat.y;
this.instance.mapping = this.mapping;
//this.instance.format = this.format;
this.instance.wrapS = this.wrapS;
this.instance.wrapT = this.wrapT;
this.instance.needsUpdate = true;
if (imageChanged) {
this.publish(
GameLib.Event.IMAGE_CHANGED,
{
texture : 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.toApiObject = function() {
2017-06-14 11:45:48 +02:00
2017-06-12 15:35:13 +02:00
var apiImage = null;
if (this.image) {
apiImage = this.image.id
}
2017-06-14 11:45:48 +02:00
var apiTexture = new GameLib.D3.API.Texture(
2016-12-09 20:32:09 +01:00
this.id,
this.typeId,
this.name,
2017-06-12 15:35:13 +02:00
apiImage,
2016-12-09 20:32:09 +01:00
this.wrapS,
this.wrapT,
2017-05-16 14:51:57 +02:00
this.repeat.toApiObject(),
2016-12-09 20:32:09 +01:00
this.data,
this.format,
this.mapping,
this.magFilter,
this.minFilter,
this.textureType,
this.anisotropy,
2017-05-16 14:51:57 +02:00
this.offset.toApiObject(),
2016-12-09 20:32:09 +01:00
this.generateMipmaps,
this.flipY,
this.mipmaps,
this.unpackAlignment,
this.premultiplyAlpha,
2017-01-19 17:50:11 +01:00
this.encoding,
2017-06-13 14:09:18 +02:00
GameLib.Utils.IdOrNull(this.parentEntity)
2017-06-14 11:45:48 +02:00
);
return apiTexture;
2016-12-09 20:32:09 +01:00
};
/**
* Converts from an Object texture to a GameLib.D3.Texture
* @param graphics GameLib.D3.Graphics
* @param objectTexture Object
* @constructor
*/
2017-06-14 14:21:57 +02:00
GameLib.D3.Texture.FromObject = function(
2016-12-09 20:32:09 +01:00
graphics,
2017-06-08 18:17:03 +02:00
objectTexture
2016-12-09 20:32:09 +01:00
) {
2017-06-14 14:21:57 +02:00
var apiTexture = GameLib.D3.API.Texture.FromObject(objectTexture);
2017-01-10 17:04:30 +01:00
2016-12-09 20:32:09 +01:00
return new GameLib.D3.Texture(
graphics,
2017-06-08 18:17:03 +02:00
apiTexture
2016-12-09 20:32:09 +01:00
);
2017-01-05 19:34:28 +01:00
};