import ByteArray from "../utils/ByteArray"; import Context3D from "./Context3D"; import Vector from "../Vector"; declare namespace openfl.display3D { /** * The VertexBuffer3D class represents a set of vertex data uploaded to a rendering context. * * Use a VertexBuffer3D object to define the data associated with each point in a set * of vertexes. You can upload the vertex data either from a Vector array or a ByteArray. * (Once uploaded, the data in the original array is no longer referenced; changing or * discarding the source array does not change the vertex data.) * * The data associated with each vertex is in an application-defined format and is used * as the input for the vertex shader program. Identify which values belong to which * vertex program input using the Context3D `setVertexBufferAt()` function. A vertex * program can use up to eight inputs (also known as vertex attribute registers). Each * input can require between one and four 32-bit values. For example, the [x,y,z] * position coordinates of a vertex can be passed to a vertex program as a vector * containing three 32 bit values. The Context3DVertexBufferFormat class defines * constants for the supported formats for shader inputs. You can supply up to * sixty-four 32-bit values (256 bytes) of data for each point (but a single vertex * shader cannot use all of the data in this case). * * The `setVertexBufferAt()` function also identifies which vertex buffer to use for * rendering any subsequent `drawTriangles()` calls. To render data from a different * vertex buffer, call setVertexBufferAt() again with the appropriate arguments. (You * can store data for the same point in multiple vertex buffers, say position data in * one buffer and texture coordinates in another, but typically rendering is more * efficient if all the data for a point comes from a single buffer.) * * The Index3DBuffer object passed to the Context3D `drawTriangles()` method organizes * the vertex data into triangles. Each value in the index buffer is the index to a * vertex in the vertex buffer. A set of three indexes, in sequence, defines a triangle. * * You cannot create a VertexBuffer3D object directly. Use the Context3D * `createVertexBuffer()` method instead. * * To free the render context resources associated with a vertex buffer, call the object's * `dispose()` method. * */ export class VertexBuffer3D { protected constructor(context3D: Context3D, numVertices: number, dataPerVertex: number, bufferUsage: string); /** * Frees all resources associated with this object. After disposing a vertex * buffer, calling `upload()` and rendering using this object will fail. * */ dispose(): void; /** * Uploads the data for a set of points to the rendering context from a byte array. * * @param data a byte array containing the vertex data. Each data value is four * bytes long. The number of values in a vertex is specified at buffer creation * using the data32PerVertex parameter to the Context3D `createVertexBuffer3D()` * method. The length of the data in bytes must be `byteArrayOffset` plus four times * the number of values per vertex times the number of vertices. The ByteArray object * must use the little endian format. * @param byteArrayOffset number of bytes to skip from the beginning of data * @param startVertex The index of the first vertex to be loaded. A value for * startVertex not equal to zero may be used to load a sub-region of the vertex data. * @param numVertices The number of vertices to be loaded from data. * @throws TypeError Null Pointer Error: when data is `null`. * @throws RangeError Bad Input Size: if `byteArrayOffset` is less than 0, or if * `byteArrayOffset` is greater than or equal to the length of data, or if no. of * elements in data - `byteArrayOffset` is less than `numVertices*data32pervertex*4` * given in Context3D `createVertexBuffer()`. * @throws Error 3768: The Stage3D API may not be used during background execution. * */ uploadFromByteArray(data: ByteArray, byteArrayOffset: number, startVertex: number, numVertices: number): void; /** * Uploads the data for a set of points to the rendering context from a typed array. * * @param data a typed array of 32-bit values. A single vertex is comprised of a * number of values stored sequentially in the vector. The number of values in a * vertex is specified at buffer creation using the `data32PerVertex` parameter to the * Context3D `createVertexBuffer3D()` method. * @param byteLength The number of bytes to read. * */ uploadFromTypedArray(data: any, byteLength?: number): void; /** * Uploads the data for a set of points to the rendering context from a vector array. * * @param data a vector of 32-bit values. A single vertex is comprised of a * number of values stored sequentially in the vector. The number of values in a * vertex is specified at buffer creation using the data32PerVertex parameter to the * Context3D `createVertexBuffer3D()` method. The length of the vector must be the * number of values per vertex times the number of vertexes. * @param startVertex The index of the first vertex to be loaded. A value for * `startVertex` not equal to zero may be used to load a sub-region of the vertex data. * @param numVertices The number of vertices represented by data. * @throws TypeError Null Pointer Error: when `data` is `null`. * @throws RangeError Bad Input Size: when number of elements in data is less than * `numVertices * data32PerVertex` given in Context3D `createVertexBuffer()`, or * when `startVertex + numVertices` is greater than `numVertices` given in Context3D * `createVertexBuffer()`. * */ uploadFromVector(data: Vector, startVertex: number, numVertices: number): void; } } export default openfl.display3D.VertexBuffer3D;