UNPKG

starling-framework

Version:

A fast, productive library for 2D cross-platform development.

129 lines (109 loc) 5.58 kB
import Starling from "./../../starling/core/Starling"; import ArgumentError from "openfl/errors/ArgumentError"; import StringUtil from "./../../starling/utils/StringUtil"; import VertexDataAttribute from "./../../starling/rendering/VertexDataAttribute"; import Vector from "openfl/Vector"; import VertexBuffer3D from "openfl/display3D/VertexBuffer3D"; declare namespace starling.rendering { /** Describes the memory layout of VertexData instances, as used for every single vertex. * * <p>The format is set up via a simple String. Here is an example:</p> * * <listing> * format = VertexDataFormat.fromString("position:number2, color:bytes4");</listing> * * <p>This String describes two attributes: "position" and "color". The keywords after * the colons depict the format and size of the data that each attribute uses; in this * case, we store two floats for the position (taking up the x- and y-coordinates) and four * bytes for the color. (The available formats are the same as those defined in the * <code>Context3DVertexBufferFormat</code> class: * <code>float1, float2, float3, float4, bytes4</code>.)</p> * * <p>You cannot create a VertexData instance with its constructor; instead, you must use the * static <code>fromString</code>-method. The reason for this behavior: the class maintains * a cache, and a call to <code>fromString</code> will return an existing instance if an * equivalent format has already been created in the past. That saves processing time and * memory.</p> * * <p>VertexDataFormat instances are immutable, i.e. they are solely defined by their format * string and cannot be changed later.</p> * * @see VertexData */ export class VertexDataFormat { /** Don't use the constructor, but call <code>VertexDataFormat.fromString</code> instead. * This allows for efficient format caching. */ public constructor(); /** Creates a new VertexDataFormat instance from the given String, or returns one from * the cache (if an equivalent String has already been used before). * * @param format * * Describes the attributes of each vertex, consisting of a comma-separated * list of attribute names and their format, e.g.: * * <pre>"position:number2, texCoords:number2, color:bytes4"</pre> * * <p>This set of attributes will be allocated for each vertex, and they will be * stored in exactly the given order.</p> * * <ul> * <li>Names are used to access the specific attributes of a vertex. They are * completely arbitrary.</li> * <li>The available formats can be found in the <code>Context3DVertexBufferFormat</code> * class in the <code>flash.display3D</code> package.</li> * <li>Both names and format strings are case-sensitive.</li> * <li>Always use <code>bytes4</code> for color data that you want to access with the * respective methods.</li> * <li>Furthermore, the attribute names of colors should include the string "color" * (or the uppercase variant). If that's the case, the "alpha" channel of the color * will automatically be initialized with "1.0" when the VertexData object is * created or resized.</li> * </ul> */ public static fromString(format:string):VertexDataFormat; /** Creates a new VertexDataFormat instance by appending the given format string * to the current instance's format. */ public extend(format:string):VertexDataFormat; // query methods /** Returns the size of a certain vertex attribute in bytes. */ public getSize(attrName:string):number; /** Returns the size of a certain vertex attribute in 32 bit units. */ public getSizeIn32Bits(attrName:string):number; /** Returns the offset (in bytes) of an attribute within a vertex. */ public getOffset(attrName:string):number; /** Returns the offset (in 32 bit units) of an attribute within a vertex. */ public getOffsetIn32Bits(attrName:string):number; /** Returns the format of a certain vertex attribute, identified by its name. * Typical values: <code>float1, float2, float3, float4, bytes4</code>. */ public getFormat(attrName:string):string; /** Returns the name of the attribute at the given position within the vertex format. */ public getName(attrIndex:number):string; /** Indicates if the format contains an attribute with the given name. */ public hasAttribute(attrName:string):boolean; // context methods /** Specifies which vertex data attribute corresponds to a single vertex shader * program input. This wraps the <code>Context3D</code>-method with the same name, * automatically replacing <code>attrName</code> with the corresponding values for * <code>bufferOffset</code> and <code>format</code>. */ public setVertexBufferAt(index:number, buffer:VertexBuffer3D, attrName:string):void; /** Returns the normalized format string. */ public toString():string; // properties /** Returns the normalized format string. */ public readonly formatString:string; protected get_formatString():string; /** The size (in bytes) of each vertex. */ public readonly vertexSize:number; protected get_vertexSize():number; /** The size (in 32 bit units) of each vertex. */ public readonly vertexSizeIn32Bits:number; protected get_vertexSizeIn32Bits():number; /** The number of attributes per vertex. */ public readonly numAttributes:number; protected get_numAttributes():number; } } export default starling.rendering.VertexDataFormat;