@thi.ng/webgl
Version:
WebGL & GLSL abstraction layer
128 lines • 3.77 kB
TypeScript
import type { GLType, IObjectOf, Type } from "@thi.ng/api";
import type { AttribPool } from "@thi.ng/vector-pools";
import type { IndexBufferSpec, IWebGLBuffer } from "./buffers.js";
import type { AttribBufferData, IShader, ShaderSpec, UniformValues } from "./shader.js";
import type { ITexture } from "./texture.js";
export declare enum DrawMode {
POINTS = 0,
LINES = 1,
LINE_LOOP = 2,
LINE_STRIP = 3,
TRIANGLES = 4,
TRIANGLE_STRIP = 5,
TRIANGLE_FAN = 6
}
export type ModelAttributeSpecs = IObjectOf<ModelAttributeSpec>;
export interface ModelSpec {
/**
* Initialized {@link IShader} instance
*/
shader: IShader;
/**
* GLSL attribute declarations. Also see {@link ModelSpec.attribPool} as
* alternative input format.
*/
attribs: ModelAttributeSpecs;
/**
* Geometry attributes given as
* [`AttribPool`](https://docs.thi.ng/umbrella/vector-pools/classes/AttribPool.html).
*/
attribPool?: AttribPool;
/**
* GLSL uniform value overrides
*/
uniforms?: UniformValues;
/**
* Buffer spec for indexed geometry
*/
indices?: IndexBufferSpec;
/**
* Array of initialized {@link ITexture} instances.
* Each non-null item will be auto-bound to its respective texture unit,
* each time the model is drawn via {@link draw}
*/
textures?: ITexture[];
/**
* Extra configuration for instanced geometry. Also see
* {@link ModelSpec.instancePool} as alternative input format.
*/
instances?: InstancingSpec;
/**
* Instance attributes given as
* [`AttribPool`](https://docs.thi.ng/umbrella/vector-pools/classes/AttribPool.html).
*/
instancePool?: AttribPool;
/**
* WebGL draw mode. Defaults to `TRIANGLES`
*/
mode?: DrawMode;
/**
* Number of vertices/indices to draw
*/
num: number;
}
/**
* Version of {@link ModelSpec} in which neither any buffers nor the shader have
* been compiled yet and the latter is only specified as {@link ShaderSpec}.
*/
export interface UncompiledModelSpec extends Omit<ModelSpec, "shader"> {
shader: ShaderSpec;
}
/**
* Data specification of a single WebGL attribute
*/
export interface ModelAttributeSpec {
/**
* Backing {@link WebGLArrayBuffer} instance. Usually this will be
* auto-initialized by {@link compileModel}.
*/
buffer?: IWebGLBuffer<AttribBufferData>;
/**
* Raw attribute data from which `buffer` will be initialized
*/
data?: AttribBufferData;
/**
* Attribute element size (in component values, not bytes).
* Default: 3
*/
size?: number;
/**
* Auto-normalization flag when writing buffer data.
* Default: false
*/
normalized?: boolean;
/**
* Byte offset of 1st attrib component.
* Default: 0
*/
offset?: number;
/**
* Attribute stride in bytes.
* Default: 0 = densely packed
*/
stride?: number;
/**
* Attribute's WebGL data type.
* Default: gl.FLOAT
*/
type?: Type | GLType;
/**
* Only used for instanced attributes. See:
* https://www.khronos.org/registry/OpenGL/extensions/ANGLE/ANGLE_instanced_arrays.txt
*/
divisor?: number;
/**
* Only used if {@link ModelAttributeSpec.buffer} is being auto-generated.
* If true (default: false), the buffer will retain a handler to the given
* {@link ModelAttributeSpec.data} array and can be later conveniently
* updated via {@link WebGLArrayBuffer.update}.
*
* @defaultValue false
*/
retain?: boolean;
}
export interface InstancingSpec {
attribs: IObjectOf<ModelAttributeSpec>;
num: number;
}
//# sourceMappingURL=model.d.ts.map