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
|
|
|
|
*/
|
2017-05-11 04:48:02 +02:00
|
|
|
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();
|
2017-01-17 13:24:45 +01:00
|
|
|
|
|
|
|
if (GameLib.Utils.UndefinedOrNull(apiTexture)) {
|
|
|
|
apiTexture = {};
|
|
|
|
}
|
|
|
|
|
2017-05-11 04:48:02 +02:00
|
|
|
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-10-23 14:52:35 +02:00
|
|
|
apiTexture.images,
|
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,
|
2017-10-09 10:18:59 +02:00
|
|
|
apiTexture.canvas,
|
2017-01-19 17:50:11 +01:00
|
|
|
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,
|
2017-01-17 13:24:45 +01:00
|
|
|
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,
|
2017-01-17 13:24:45 +01:00
|
|
|
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-10-23 14:52:35 +02:00
|
|
|
this.images = this.images.map(
|
|
|
|
function(image) {
|
|
|
|
if (image instanceof GameLib.D3.API.Image) {
|
|
|
|
return new GameLib.D3.Image(
|
|
|
|
this.graphics,
|
|
|
|
image
|
|
|
|
);
|
2017-11-10 19:04:26 +01:00
|
|
|
} else {
|
|
|
|
return image;
|
2017-10-23 14:52:35 +02:00
|
|
|
}
|
|
|
|
}.bind(this)
|
|
|
|
);
|
|
|
|
|
2017-10-09 10:18:59 +02:00
|
|
|
if (this.canvas instanceof GameLib.D3.API.Canvas) {
|
|
|
|
this.canvas = new GameLib.D3.Canvas(
|
|
|
|
this.graphics,
|
|
|
|
this.canvas
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2017-06-16 15:49:53 +02:00
|
|
|
GameLib.Component.call(
|
|
|
|
this,
|
|
|
|
GameLib.Component.COMPONENT_TEXTURE,
|
|
|
|
{
|
2017-10-09 10:18:59 +02:00
|
|
|
'image' : GameLib.D3.Image,
|
2017-10-23 14:52:35 +02:00
|
|
|
'images' : [GameLib.D3.Image],
|
2017-10-09 10:18:59 +02:00
|
|
|
'canvas' : GameLib.D3.Canvas
|
2017-06-16 15:49:53 +02:00
|
|
|
}
|
|
|
|
);
|
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;
|
2017-10-23 14:52:35 +02:00
|
|
|
GameLib.D3.Texture.TEXTURE_TYPE_CANVAS = 0x3;
|
2017-06-12 15:35:13 +02:00
|
|
|
|
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
|
|
|
*/
|
2017-06-26 18:20:34 +02:00
|
|
|
GameLib.D3.Texture.prototype.createInstance = function() {
|
2017-06-09 16:03:05 +02:00
|
|
|
|
2017-06-28 17:09:06 +02:00
|
|
|
if (this.typeId === GameLib.D3.Texture.TEXTURE_TYPE_CUBE) {
|
|
|
|
|
2017-10-23 14:52:35 +02:00
|
|
|
if (this.images.length !== 6) {
|
|
|
|
throw new Error('not enough images for cube texture');
|
2017-06-26 18:20:34 +02:00
|
|
|
}
|
2017-06-16 18:45:25 +02:00
|
|
|
|
2017-10-23 14:52:35 +02:00
|
|
|
var imageInstances = this.images.map(
|
|
|
|
function(image) {
|
|
|
|
|
|
|
|
if (GameLib.Utils.UndefinedOrNull(image)) {
|
|
|
|
throw new Error('no image');
|
|
|
|
}
|
|
|
|
|
|
|
|
if (GameLib.Utils.UndefinedOrNull(image.instance)) {
|
|
|
|
throw new Error('no image instance');
|
|
|
|
}
|
|
|
|
|
|
|
|
return image.instance
|
|
|
|
}
|
|
|
|
);
|
|
|
|
|
|
|
|
this.instance = new THREE.CubeTexture(imageInstances);
|
|
|
|
|
|
|
|
} else if (this.typeId === GameLib.D3.Texture.TEXTURE_TYPE_NORMAL) {
|
|
|
|
|
2017-10-27 10:08:16 +02:00
|
|
|
if (
|
|
|
|
GameLib.Utils.UndefinedOrNull(this.image) ||
|
|
|
|
GameLib.Utils.UndefinedOrNull(this.image.instance)
|
|
|
|
) {
|
2017-10-23 14:52:35 +02:00
|
|
|
|
|
|
|
this.instance = new THREE.Texture();
|
2017-06-12 15:35:13 +02:00
|
|
|
|
2017-10-23 14:52:35 +02:00
|
|
|
} else {
|
|
|
|
|
2017-10-27 10:08:16 +02:00
|
|
|
//if (GameLib.Utils.UndefinedOrNull(this.image.instance)) {
|
|
|
|
// throw new Error('no image instance');
|
|
|
|
//}
|
2017-06-28 17:09:06 +02:00
|
|
|
|
2017-10-23 14:52:35 +02:00
|
|
|
this.instance = new THREE.Texture(
|
2017-06-28 17:09:06 +02:00
|
|
|
this.image.instance
|
|
|
|
);
|
2017-10-23 14:52:35 +02:00
|
|
|
|
2017-06-28 17:09:06 +02:00
|
|
|
}
|
2017-06-09 16:03:05 +02:00
|
|
|
|
2017-10-23 14:52:35 +02:00
|
|
|
} else if (this.typeId === GameLib.D3.Texture.TEXTURE_TYPE_CANVAS) {
|
|
|
|
|
|
|
|
if (GameLib.Utils.UndefinedOrNull(this.canvas)) {
|
|
|
|
|
|
|
|
this.instance = new THREE.Texture();
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
if (GameLib.Utils.UndefinedOrNull(this.canvas.instance)) {
|
|
|
|
throw new Error('no canvas instance');
|
|
|
|
}
|
|
|
|
|
|
|
|
this.instance = new THREE.Texture(
|
|
|
|
this.canvas.instance
|
|
|
|
);
|
|
|
|
|
2017-06-26 18:20:34 +02:00
|
|
|
}
|
2017-10-23 14:52:35 +02:00
|
|
|
|
2017-06-28 17:09:06 +02:00
|
|
|
}
|
2017-10-23 14:52:35 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Some settings we copy from the instance
|
|
|
|
*/
|
|
|
|
this.mapping = this.instance.mapping;
|
|
|
|
this.encoding = this.instance.encoding;
|
|
|
|
this.format = this.instance.format;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Others we apply to the instance
|
|
|
|
*/
|
|
|
|
this.instance.name = this.name;
|
|
|
|
this.instance.flipY = this.flipY;
|
|
|
|
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.wrapS = this.wrapS;
|
|
|
|
this.instance.wrapT = this.wrapT;
|
|
|
|
|
|
|
|
this.instance.needsUpdate = true;
|
|
|
|
|
|
|
|
GameLib.Component.prototype.createInstance.call(this);
|
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-06-26 18:20:34 +02:00
|
|
|
|
2017-10-23 14:52:35 +02:00
|
|
|
if (GameLib.Utils.UndefinedOrNull(this.instance)) {
|
|
|
|
try {
|
|
|
|
this.createInstance();
|
|
|
|
return;
|
|
|
|
} catch (error) {
|
|
|
|
console.error(error);
|
|
|
|
}
|
|
|
|
}
|
2017-08-22 19:18:14 +02:00
|
|
|
|
2017-08-27 12:56:14 +02:00
|
|
|
var imageChanged = false;
|
|
|
|
|
2017-10-23 14:52:35 +02:00
|
|
|
if (this.typeId === GameLib.D3.Texture.TEXTURE_TYPE_NORMAL) {
|
|
|
|
|
|
|
|
if (
|
|
|
|
GameLib.Utils.UndefinedOrNull(this.image) &&
|
|
|
|
this.instance.image
|
|
|
|
) {
|
|
|
|
try {
|
|
|
|
this.createInstance();
|
|
|
|
imageChanged = true;
|
|
|
|
} catch (error) {
|
|
|
|
console.error(error);
|
|
|
|
}
|
|
|
|
}
|
2017-06-26 18:20:34 +02:00
|
|
|
|
2017-10-23 14:52:35 +02:00
|
|
|
if (this.image && this.image.instance && this.instance.image !== this.image.instance) {
|
|
|
|
try {
|
|
|
|
this.createInstance();
|
|
|
|
imageChanged = true;
|
|
|
|
} catch (error) {
|
|
|
|
console.error(error);
|
|
|
|
}
|
|
|
|
}
|
2017-08-27 12:56:14 +02:00
|
|
|
|
2017-10-23 14:52:35 +02:00
|
|
|
} else if (this.typeId === GameLib.D3.Texture.TEXTURE_TYPE_CANVAS) {
|
2017-10-09 10:18:59 +02:00
|
|
|
|
2017-10-27 10:08:16 +02:00
|
|
|
if (
|
|
|
|
GameLib.Utils.UndefinedOrNull(this.canvas) &&
|
|
|
|
this.instance.canvas
|
|
|
|
) {
|
|
|
|
try {
|
|
|
|
this.createInstance();
|
|
|
|
imageChanged = true;
|
|
|
|
} catch (error) {
|
|
|
|
console.error(error);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (this.canvas && this.canvas.instance && this.instance.image !== this.canvas.instance) {
|
|
|
|
try {
|
|
|
|
this.createInstance();
|
|
|
|
imageChanged = true;
|
|
|
|
} catch (error) {
|
|
|
|
console.error(error);
|
|
|
|
}
|
|
|
|
}
|
2017-10-09 10:18:59 +02:00
|
|
|
|
2017-10-23 14:52:35 +02:00
|
|
|
} else if (this.typeId === GameLib.D3.Texture.TEXTURE_TYPE_CUBE) {
|
2017-08-27 12:56:14 +02:00
|
|
|
|
2017-10-23 14:52:35 +02:00
|
|
|
console.log('todo : cube images change check here');
|
2017-10-09 10:18:59 +02:00
|
|
|
|
|
|
|
}
|
2017-06-26 18:20:34 +02:00
|
|
|
|
2017-10-23 14:52:35 +02:00
|
|
|
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;
|
2017-08-27 12:56:14 +02:00
|
|
|
|
|
|
|
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}
|
|
|
|
*/
|
2017-06-26 18:20:34 +02:00
|
|
|
GameLib.D3.Texture.prototype.toApiObject = function() {
|
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-10-23 14:52:35 +02:00
|
|
|
GameLib.Utils.IdOrNull(this.image),
|
|
|
|
this.images.map(
|
|
|
|
function(image) {
|
|
|
|
return GameLib.Utils.IdOrNull(image)
|
|
|
|
}
|
|
|
|
),
|
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-10-09 10:18:59 +02:00
|
|
|
GameLib.Utils.IdOrNull(this.canvas),
|
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
|
|
|
};
|