starling-framework
Version:
A fast, productive library for 2D cross-platform development.
448 lines • 25.4 kB
TypeScript
import TextureOptions from "./TextureOptions";
import ConcreteTexture from "./ConcreteTexture";
import VertexData from "../rendering/VertexData";
import ByteArray from "openfl/utils/ByteArray";
import NetStream from "openfl/net/NetStream";
import Rectangle from "openfl/geom/Rectangle";
import Point from "openfl/geom/Point";
import Matrix from "openfl/geom/Matrix";
import TextureBase from "openfl/display3D/textures/TextureBase";
import Context3DTextureFormat from "openfl/display3D/Context3DTextureFormat";
import BitmapData from "openfl/display/BitmapData";
import Bitmap from "openfl/display/Bitmap";
declare namespace starling.textures {
/**
* <p>A texture stores the information that represents an image. It cannot be added to the
* * display list directly; instead it has to be mapped onto a display object. In Starling,
* * the most probably candidate for this job is the <code>Image</code> class.</p>
* *
* * <strong>Creating a texture</strong>
* *
* * <p>The <code>Texture</code> class is abstract, i.e. you cannot create instance of this
* * class through its constructor. Instead, it offers a variety of factory methods, like
* * <code>fromBitmapData</code> or <code>fromEmbeddedAsset</code>.</p>
* *
* * <strong>Texture Formats</strong>
* *
* * <p>Since textures can be created from a "BitmapData" object, Starling supports any bitmap
* * format that is supported by Flash. And since you can render any Flash display object into
* * a BitmapData object, you can use this to display non-Starling content in Starling - e.g.
* * Shape objects.</p>
* *
* * <p>Starling also supports ATF textures (Adobe Texture Format), which is a container for
* * compressed texture formats that can be rendered very efficiently by the GPU. Refer to
* * the Flash documentation for more information about this format.</p>
* *
* * <p>Beginning with AIR 17, you can use Starling textures to show video content (if the
* * current platform supports it; see "SystemUtil.supportsVideoTexture").
* * The two factory methods "fromCamera" and "fromNetStream" allow you to make use of
* * this feature.</p>
* *
* * <strong>Mip Mapping</strong>
* *
* * <p>MipMaps are scaled down versions of a texture. When an image is displayed smaller than
* * its natural size, the GPU may display the mip maps instead of the original texture. This
* * reduces aliasing and accelerates rendering. It does, however, also need additional memory;
* * for that reason, mipmapping is disabled by default.</p>
* *
* * <strong>Texture Frame</strong>
* *
* * <p>The frame property of a texture allows you to let a texture appear inside the bounds of
* * an image, leaving a transparent border around the texture. The frame rectangle is specified
* * in the coordinate system of the texture (not the image):</p>
* *
* * <listing>
* * var frame:Rectangle = new Rectangle(-10, -10, 30, 30);
* * var texture:Texture = Texture.fromTexture(anotherTexture, null, frame);
* * var image:Image = new Image(texture);</listing>
* *
* * <p>This code would create an image with a size of 30x30, with the texture placed at
* * <code>x=10, y=10</code> within that image (assuming that 'anotherTexture' has a width and
* * height of 10 pixels, it would appear in the middle of the image).</p>
* *
* * <p>The texture atlas makes use of this feature, as it allows to crop transparent edges
* * of a texture and making up for the changed size by specifying the original texture frame.
* * Tools like <a href="http://www.texturepacker.com/">TexturePacker</a> use this to
* * optimize the atlas.</p>
* *
* * <strong>Texture Coordinates</strong>
* *
* * <p>If, on the other hand, you want to show only a part of the texture in an image
* * (i.e. to crop the the texture), you can either create a subtexture (with the method
* * 'Texture.fromTexture()' and specifying a rectangle for the region), or you can manipulate
* * the texture coordinates of the image object. The method <code>image.setTexCoords</code>
* * allows you to do that.</p>
* *
* * <strong>Context Loss</strong>
* *
* * <p>When the current rendering context is lost (which can happen on all platforms, but is
* * especially common on Android and Windows), all texture data is destroyed. However,
* * Starling will try to restore the textures. To do that, it will keep the bitmap
* * and ATF data in memory - at the price of increased RAM consumption. You can optimize
* * this behavior, though, by restoring the texture directly from its source, like in this
* * example:</p>
* *
* * <listing>
* * var texture:Texture = Texture.fromBitmap(new EmbeddedBitmap());
* * texture.root.onRestore = function():void
* * {
* * texture.root.uploadFromBitmap(new EmbeddedBitmap());
* * };</listing>
* *
* * <p>The <code>onRestore</code>-method will be called when the context was lost and the
* * texture has been recreated (but is still empty). If you use the "AssetManager" class to
* * manage your textures, this will be done automatically.</p>
* *
* * @see starling.display.Image
* * @see starling.utils.AssetManager
* * @see starling.utils.SystemUtil
* * @see TextureAtlas
*
*/
export class Texture {
/**
* @private
*/
protected constructor();
/**
* Creates a texture from any of the supported data types, using the specified options.
* *
* * @param data Either an embedded asset class, a Bitmap, BitmapData, or a ByteArray
* * with ATF data.
* * @param options Specifies options about the texture settings, e.g. the scale factor.
* * If left empty, the default options will be used.
*
*/
static fromData(data: any, options?: TextureOptions): Texture;
/**
* Creates a texture from a <code>TextureBase</code> object.
* *
* * @param base a Stage3D texture object created through the current context.
* * @param width the width of the texture in pixels (not points!).
* * @param height the height of the texture in pixels (not points!).
* * @param options specifies options about the texture settings, e.g. the scale factor.
* * If left empty, the default options will be used. Note that not all
* * options are supported by all texture types.
*
*/
static fromTextureBase(base: TextureBase, width: number, height: number, options?: TextureOptions): ConcreteTexture;
/**
* Creates a texture object from an embedded asset class. Textures created with this
* * method will be restored directly from the asset class in case of a context loss,
* * which guarantees a very economic memory usage.
* *
* * @param assetClass must contain either a Bitmap or a ByteArray with ATF data.
* * @param mipMapping for Bitmaps, indicates if mipMaps will be created;
* * for ATF data, indicates if the contained mipMaps will be used.
* * @param optimizeForRenderToTexture indicates if this texture will be used as
* * render target.
* * @param scale the scale factor of the created texture.
* * @param format the context3D texture format to use. Ignored for ATF data.
* * @param forcePotTexture indicates if the underlying Stage3D texture should be created
* * as the power-of-two based "Texture" class instead of the more memory
* * efficient "RectangleTexture". (Only applicable to bitmaps; ATF
* * textures are always POT-textures, anyway.)
*
*/
static fromEmbeddedAsset(assetClass: any, mipMapping?: boolean, optimizeForRenderToTexture?: boolean, scale?: number, format?: Context3DTextureFormat, forcePotTexture?: boolean): Texture;
/**
* Creates a texture object from a bitmap.
* * Beware: you must not dispose the bitmap's data if Starling should handle a lost device
* * context (except if you handle restoration yourself via "texture.root.onRestore").
* *
* * @param bitmap the texture will be created with the bitmap data of this object.
* * @param generateMipMaps indicates if mipMaps will be created.
* * @param optimizeForRenderToTexture indicates if this texture will be used as
* * render target
* * @param scale the scale factor of the created texture. This affects the reported
* * width and height of the texture object.
* * @param format the context3D texture format to use. Pass one of the packed or
* * compressed formats to save memory (at the price of reduced image
* * quality).
* * @param forcePotTexture indicates if the underlying Stage3D texture should be created
* * as the power-of-two based "Texture" class instead of the more memory
* * efficient "RectangleTexture".
* * @param async If you pass a callback function, the texture will be uploaded
* * asynchronously, which allows smooth rendering even during the
* * loading process. However, don't use the texture before the callback
* * has been executed. This is the expected function definition:
* * <code>function(texture:Texture, error:ErrorEvent):void;</code>
* * The second parameter is optional and typically <code>null</code>.
*
*/
static fromBitmap(bitmap: Bitmap, generateMipMaps?: boolean, optimizeForRenderToTexture?: boolean, scale?: number, format?: Context3DTextureFormat, forcePotTexture?: boolean, async?: (arg0: Texture) => void): Texture;
/**
* Creates a texture object from bitmap data.
* * Beware: you must not dispose 'data' if Starling should handle a lost device context
* * (except if you handle restoration yourself via "texture.root.onRestore").
* *
* * @param data the bitmap data to upload to the texture.
* * @param generateMipMaps indicates if mipMaps will be created.
* * @param optimizeForRenderToTexture indicates if this texture will be used as
* * render target
* * @param scale the scale factor of the created texture. This affects the reported
* * width and height of the texture object.
* * @param format the context3D texture format to use. Pass one of the packed or
* * compressed formats to save memory (at the price of reduced image
* * quality).
* * @param forcePotTexture indicates if the underlying Stage3D texture should be created
* * as the power-of-two based "Texture" class instead of the more memory
* * efficient "RectangleTexture".
* * @param async If you pass a callback function, the texture will be uploaded
* * asynchronously, which allows smooth rendering even during the
* * loading process. However, don't use the texture before the callback
* * has been executed. This is the expected function definition:
* * <code>function(texture:Texture, error:ErrorEvent):void;</code>
* * The second parameter is optional and typically <code>null</code>.
*
*/
static fromBitmapData(data: BitmapData, generateMipMaps?: boolean, optimizeForRenderToTexture?: boolean, scale?: number, format?: Context3DTextureFormat, forcePotTexture?: boolean, async?: (arg0: Texture) => void): Texture;
/**
* Creates a texture from ATF data (Adobe Texture Compression).
* * Beware: you must not dispose 'data' if Starling should handle a lost device context;
* * alternatively, you can handle restoration yourself via "texture.root.onRestore".
* *
* * @param data the raw data from an ATF file.
* * @param scale the scale factor of the created texture. This affects the reported
* * width and height of the texture object.
* * @param useMipMaps If the ATF data contains mipmaps, this parameter controls if they
* * are used; if it does not, this parameter has no effect.
* * @param async If you pass a callback function, the texture will be decoded
* * asynchronously, which allows a smooth framerate even during the
* * loading process. However, don't use the texture before the callback
* * has been executed. This is the expected function definition:
* * <code>function(texture:Texture):void;</code>
* * @param premultipliedAlpha Indicates if the ATF data contains pixels in PMA format.
* * This is "false" for most ATF files, but can be customized in some
* * tools.
*
*/
static fromAtfData(data: ByteArray, scale?: number, useMipMaps?: boolean, async?: (arg0: Texture) => void, premultipliedAlpha?: boolean): Texture;
/**
* Creates a video texture from a NetStream.
* *
* * <p>Below, you'll find a minimal sample showing how to stream a video from a file.
* * Note that <code>ns.play()</code> is called only after creating the texture, and
* * outside the <code>onComplete</code>-callback. It's recommended to always make the
* * calls in this order; otherwise, playback won't start on some platforms.</p>
* *
* * <listing>
* * var nc:NetConnection = new NetConnection();
* * nc.connect(null);
* *
* * var ns:NetStream = new NetStream(nc);
* * var texture:Texture = Texture.fromNetStream(ns, 1, function():void
* * {
* * addChild(new Image(texture));
* * });
* *
* * var file:File = File.applicationDirectory.resolvePath("bugs-bunny.m4v");
* * ns.play(file.url);</listing>
* *
* * @param stream the NetStream from which the video data is streamed. Beware that 'play'
* * should be called only after the method returns, and outside the
* * <code>onComplete</code> callback.
* * @param scale the scale factor of the created texture. This affects the reported
* * width and height of the texture object.
* * @param onComplete will be executed when the texture is ready. Contains a parameter
* * of type 'Texture'.
*
*/
static fromNetStream(stream: NetStream, scale?: number, onComplete?: (arg0: Texture) => void): Texture;
/**
* Creates a texture with a certain size and color.
* *
* * @param width in points; number of pixels depends on scale parameter
* * @param height in points; number of pixels depends on scale parameter
* * @param color the RGB color the texture will be filled up
* * @param alpha the alpha value that will be used for every pixel
* * @param optimizeForRenderToTexture indicates if this texture will be used as render target
* * @param scale if you omit this parameter, 'Starling.contentScaleFactor' will be used.
* * @param format the context3D texture format to use. Pass one of the packed or
* * compressed formats to save memory.
* * @param forcePotTexture indicates if the underlying Stage3D texture should be created
* * as the power-of-two based "Texture" class instead of the more memory
* * efficient "RectangleTexture".
*
*/
static fromColor(width: number, height: number, color?: number, alpha?: number, optimizeForRenderToTexture?: boolean, scale?: number, format?: string, forcePotTexture?: boolean): Texture;
/**
* Creates an empty texture of a certain size.
* * Beware that the texture can only be used after you either upload some color data
* * ("texture.root.upload...") or clear the texture ("texture.root.clear()").
* *
* * @param width in points; number of pixels depends on scale parameter
* * @param height in points; number of pixels depends on scale parameter
* * @param premultipliedAlpha the PMA format you will use the texture with. If you will
* * use the texture for bitmap data, use "true"; for ATF data, use "false".
* * @param mipMapping indicates if mipmaps should be used for this texture. When you upload
* * bitmap data, this decides if mipmaps will be created; when you upload ATF
* * data, this decides if mipmaps inside the ATF file will be displayed.
* * @param optimizeForRenderToTexture indicates if this texture will be used as render target
* * @param scale if you omit this parameter, 'Starling.contentScaleFactor' will be used.
* * @param format the context3D texture format to use. Pass one of the packed or
* * compressed formats to save memory (at the price of reduced image quality).
* * @param forcePotTexture indicates if the underlying Stage3D texture should be created
* * as the power-of-two based "Texture" class instead of the more memory
* * efficient "RectangleTexture".
*
*/
static empty(width: number, height: number, premultipliedAlpha?: boolean, mipMapping?: boolean, optimizeForRenderToTexture?: boolean, scale?: number, format?: string, forcePotTexture?: boolean): Texture;
/**
* Creates a texture that contains a region (in pixels) of another texture. The new
* * texture will reference the base texture; no data is duplicated.
* *
* * @param texture The texture you want to create a SubTexture from.
* * @param region The region of the parent texture that the SubTexture will show
* * (in points).
* * @param frame If the texture was trimmed, the frame rectangle can be used to restore
* * the trimmed area.
* * @param rotated If true, the SubTexture will show the parent region rotated by
* * 90 degrees (CCW).
* * @param scaleModifier The scale factor of the new texture will be calculated by
* * multiplying the parent texture's scale factor with this value.
*
*/
static fromTexture(texture: Texture, region?: Rectangle, frame?: Rectangle, rotated?: boolean, scaleModifier?: number): Texture;
/**
* Returns the maximum size constraint (for both width and height) for uncompressed
* * textures in the current Context3D profile.
*/
static get maxSize(): number;
static getMaxSize(textureFormat?: Context3DTextureFormat): number;
/**
* Indicates if it should be attempted to upload bitmaps asynchronously when the <code>async</code> parameter
* * is supplied to supported methods. Since this feature is still not 100% reliable in AIR 26 (especially on
* * Android), it defaults to 'false' for now.
* *
* * <p>If the feature is disabled or not available in the current AIR/Flash runtime, the async callback will
* * still be executed; however, the upload itself will be made synchronously.</p>
*
*/
static get asyncBitmapUploadEnabled(): boolean;
static set asyncBitmapUploadEnabled(value: boolean)
/**
* Disposes the underlying texture data. Note that not all textures need to be disposed:
* * SubTextures (created with 'Texture.fromTexture') just reference other textures and
* * and do not take up resources themselves; this is also true for textures from an
* * atlas.
*/
dispose(): void;
/**
* Sets up a VertexData instance with the correct positions for 4 vertices so that
* * the texture can be mapped onto it unscaled. If the texture has a <code>frame</code>,
* * the vertices will be offset accordingly.
* *
* * @param vertexData the VertexData instance to which the positions will be written.
* * @param vertexID the start position within the VertexData instance.
* * @param attrName the attribute name referencing the vertex positions.
* * @param bounds useful only for textures with a frame. This will position the
* * vertices at the correct position within the given bounds,
* * distorted appropriately.
*
*/
setupVertexPositions(vertexData: VertexData, vertexID?: number, attrName?: string, bounds?: Rectangle): void;
/**
* Sets up a VertexData instance with the correct texture coordinates for
* * 4 vertices so that the texture is mapped to the complete quad.
* *
* * @param vertexData the vertex data to which the texture coordinates will be written.
* * @param vertexID the start position within the VertexData instance.
* * @param attrName the attribute name referencing the vertex positions.
*
*/
setupTextureCoordinates(vertexData: VertexData, vertexID?: number, attrName?: string): void;
/**
* Transforms the given texture coordinates from the local coordinate system
* * into the root texture's coordinate system.
*/
localToGlobal(u: number, v: number, out?: Point): Point;
/**
* Transforms the given texture coordinates from the root texture's coordinate system
* * to the local coordinate system.
*/
globalToLocal(u: number, v: number, out?: Point): Point;
/**
* Writes the given texture coordinates to a VertexData instance after transforming
* * them into the root texture's coordinate system. That way, the texture coordinates
* * can be used directly to sample the texture in the fragment shader.
*/
setTexCoords(vertexData: VertexData, vertexID: number, attrName: string, u: number, v: number): void;
/**
* Reads a pair of texture coordinates from the given VertexData instance and transforms
* * them into the current texture's coordinate system. (Remember, the VertexData instance
* * will always contain the coordinates in the root texture's coordinate system!)
*/
getTexCoords(vertexData: VertexData, vertexID: number, attrName?: string, out?: Point): Point;
/**
* The texture frame if it has one (see class description), otherwise <code>null</code>.
* * <p>CAUTION: not a copy, but the actual object! Do not modify!</p>
*/
get frame(): Rectangle;
/**
* The height of the texture in points, taking into account the frame rectangle
* * (if there is one).
*/
get frameWidth(): number;
/**
* The width of the texture in points, taking into account the frame rectangle
* * (if there is one).
*/
get frameHeight(): number;
/**
* The width of the texture in points.
*/
get width(): number;
/**
* The height of the texture in points.
*/
get height(): number;
/**
* The width of the texture in pixels (without scale adjustment).
*/
get nativeWidth(): number;
/**
* The height of the texture in pixels (without scale adjustment).
*/
get nativeHeight(): number;
/**
* The scale factor, which influences width and height properties.
*/
get scale(): number;
/**
* The Stage3D texture object the texture is based on.
*/
get base(): TextureBase;
/**
* The concrete texture the texture is based on.
*/
get root(): ConcreteTexture;
/**
* The <code>Context3DTextureFormat</code> of the underlying texture data.
*/
get format(): Context3DTextureFormat;
/**
* Indicates if the texture contains mip maps.
*/
get mipMapping(): boolean;
/**
* Indicates if the alpha values are premultiplied into the RGB values.
*/
get premultipliedAlpha(): boolean;
/**
* The matrix that is used to transform the texture coordinates into the coordinate
* * space of the parent texture, if there is one. @default null
* *
* * <p>CAUTION: not a copy, but the actual object! Never modify this matrix!</p>
*/
get transformationMatrix(): Matrix;
/**
* The matrix that is used to transform the texture coordinates into the coordinate
* * space of the root texture, if this instance is not the root. @default null
* *
* * <p>CAUTION: not a copy, but the actual object! Never modify this matrix!</p>
*/
get transformationMatrixToRoot(): Matrix;
}
}
export default starling.textures.Texture;