/** * 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( graphics, apiTexture ) { this.graphics = graphics; this.graphics.isNotThreeThrow(); if (GameLib.Utils.UndefinedOrNull(apiTexture)) { apiTexture = {}; } if (apiTexture instanceof GameLib.D3.Texture) { return apiTexture; } GameLib.D3.API.Texture.call( this, apiTexture.id, apiTexture.typeId, apiTexture.name, apiTexture.image, 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, apiTexture.encoding, apiTexture.parentEntity ); this.offset = new GameLib.Vector2( this.graphics, this.offset, this ); this.repeat = new GameLib.Vector2( this.graphics, this.repeat, this ); this.image = new GameLib.D3.Image( this.graphics, this.image ); this.instance = this.createInstance(); }; GameLib.D3.Texture.prototype = Object.create(GameLib.D3.API.Texture.prototype); GameLib.D3.Texture.prototype.constructor = GameLib.D3.Texture; /** * 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'; /** * Creates an instance of our texture object * @param update * @returns {*} */ GameLib.D3.Texture.prototype.createInstance = function(update) { if (update) { 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; } else { var instance = new THREE.Texture( this.image.instance ); 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; return instance; } }; /** * Updates the instance with the current state */ GameLib.D3.Texture.prototype.updateInstance = function() { this.createInstance(true); }; /** * Converts a GameLib.D3.Texture to a GameLib.D3.API.Texture * @returns {GameLib.D3.API.Texture} */ GameLib.D3.Texture.prototype.toApiObject = function() { var apiImage = null; if (this.image) { apiImage = this.image.toApiObject(); } return new GameLib.D3.API.Texture( this.id, this.typeId, this.name, apiImage, this.wrapS, this.wrapT, this.repeat.toApiObject(), this.data, this.format, this.mapping, this.magFilter, this.minFilter, this.textureType, this.anisotropy, this.offset.toApiObject(), this.generateMipmaps, this.flipY, this.mipmaps, this.unpackAlignment, this.premultiplyAlpha, this.encoding, this.parentEntity ) }; /** * Converts from an Object texture to a GameLib.D3.Texture * @param graphics GameLib.D3.Graphics * @param objectTexture Object * @constructor */ GameLib.D3.Texture.FromObjectTexture = function( graphics, objectTexture ) { var apiTexture = GameLib.D3.API.Texture.FromObjectTexture(objectTexture); return new GameLib.D3.Texture( graphics, apiTexture ); };