mirror of
https://github.com/pissang/claygl.git
synced 2026-02-01 17:27:08 +00:00
typescript bug fix, add typescript example
This commit is contained in:
parent
3d53b1d3ca
commit
42acb814e4
@ -4,7 +4,12 @@ var fs = require('fs');
|
||||
var ROOT = "../src/";
|
||||
var OUTPUT_PORTAL = "qtek.js";
|
||||
|
||||
var template = fs.readFileSync("qtek_template.js", "utf-8")
|
||||
var TS_ROOT = "../typescript/";
|
||||
var TS_PORTAL = "qtek.d.ts";
|
||||
|
||||
var template = fs.readFileSync("qtek_template.js", "utf-8");
|
||||
|
||||
var tsReferenceList = [];
|
||||
|
||||
glob("**/*.js", {
|
||||
cwd : ROOT
|
||||
@ -27,13 +32,26 @@ glob("**/*.js", {
|
||||
return memo[propName];
|
||||
}, namespace);
|
||||
|
||||
object[baseName] = "__require('qtek/"+filePathWithOutExt+"')__";
|
||||
})
|
||||
object[baseName] = "__require('qtek/" + filePathWithOutExt + "')__";
|
||||
|
||||
// Get typescript reference list
|
||||
var tsPath = TS_ROOT + filePathWithOutExt + ".d.ts";
|
||||
|
||||
if (fs.existsSync(tsPath)) {
|
||||
tsReferenceList.push(filePathWithOutExt);
|
||||
}
|
||||
});
|
||||
|
||||
var jsString = JSON.stringify( namespace, null, '\t' );
|
||||
jsString = jsString.replace(/\"\__require\((\S*?)\)__\"/g, 'require($1)')
|
||||
|
||||
var output = template.replace(/\{\{\$exportsObject\}\}/, jsString);
|
||||
|
||||
fs.writeFileSync( ROOT+OUTPUT_PORTAL, output, "utf-8");
|
||||
fs.writeFileSync(ROOT + OUTPUT_PORTAL, output, "utf-8");
|
||||
|
||||
// Write to ts reference file
|
||||
var referenceCode = tsReferenceList.map(function(path) {
|
||||
return '///<reference path="' + path + '" />';
|
||||
}).join('\n');
|
||||
fs.writeFileSync(TS_ROOT + TS_PORTAL, referenceCode, "utf-8");
|
||||
});
|
||||
@ -37,7 +37,7 @@ define(function(require) {
|
||||
joint : new Geometry.Attribute('joint', 'float', 4, 'JOINT', true),
|
||||
// For wireframe display
|
||||
// http://codeflow.org/entries/2012/aug/02/easy-wireframe-display-with-barycentric-coordinates/
|
||||
barycentric : new Geometry.Attribute('barycentric', 'float', 3, null, true),
|
||||
barycentric : new Geometry.Attribute('barycentric', 'float', 3, null, true)
|
||||
},
|
||||
|
||||
hint : glenum.DYNAMIC_DRAW,
|
||||
|
||||
@ -105,7 +105,6 @@ define(function(require) {
|
||||
|
||||
if (! texture.width) {
|
||||
throw new Error("The texture attached to color buffer is not a valid.");
|
||||
return;
|
||||
}
|
||||
|
||||
_gl.bindFramebuffer(_gl.FRAMEBUFFER, this.getFrameBuffer(_gl));
|
||||
@ -118,7 +117,7 @@ define(function(require) {
|
||||
// http://blog.tojicode.com/2012/07/using-webgldepthtexture.html
|
||||
attachment = attachment || _gl.COLOR_ATTACHMENT0;
|
||||
target = target || _gl.TEXTURE_2D;
|
||||
mipmapLevel = mipmapLevel || 0
|
||||
mipmapLevel = mipmapLevel || 0;
|
||||
|
||||
if (attachment === _gl.DEPTH_ATTACHMENT) {
|
||||
|
||||
@ -163,4 +162,4 @@ define(function(require) {
|
||||
FrameBuffer.DEPTH_STENCIL_ATTACHMENT = glenum.DEPTH_STENCIL_ATTACHMENT;
|
||||
|
||||
return FrameBuffer;
|
||||
})
|
||||
});
|
||||
@ -90,7 +90,7 @@ define(function(require) {
|
||||
useFace : true,
|
||||
|
||||
//Max Value of Uint16, i.e. 0xffff
|
||||
chunkSize : 65535,
|
||||
chunkSize : 65535
|
||||
}, function() {
|
||||
// Use cache
|
||||
this.cache = new Cache();
|
||||
|
||||
@ -9,11 +9,11 @@
|
||||
<div id="time" style="position:absolute;left:10px;top:10px;color:white;"></div>
|
||||
<script type="text/javascript">
|
||||
require(['qtek/qtek'], function(qtek){
|
||||
var Shader = qtek.Shader
|
||||
var Material = qtek.Material
|
||||
var Mesh = qtek.Mesh
|
||||
var Cube = qtek.geometry.Cube
|
||||
var meshUtil = qtek.util.mesh
|
||||
var Shader = qtek.Shader;
|
||||
var Material = qtek.Material;
|
||||
var Mesh = qtek.Mesh;
|
||||
var Cube = qtek.geometry.Cube;
|
||||
var meshUtil = qtek.util.mesh;
|
||||
var shaderLibrary = qtek.shader.library;
|
||||
var animation = new qtek.animation.Animation;
|
||||
animation.start();
|
||||
|
||||
11
tests/typescript/cubes.html
Normal file
11
tests/typescript/cubes.html
Normal file
@ -0,0 +1,11 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
|
||||
<title>Cubes</title>
|
||||
</head>
|
||||
<body>
|
||||
<script type="text/javascript" src="../../dist/qtek.js"></script>
|
||||
<script type="text/javascript" src="js/cubes.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
40
tests/typescript/js/cubes.js
Normal file
40
tests/typescript/js/cubes.js
Normal file
@ -0,0 +1,40 @@
|
||||
///<reference path="../../../typescript/qtek.d.ts" />
|
||||
var renderer = new qtek.Renderer();
|
||||
var scene = new qtek.Scene();
|
||||
var camera = new qtek.camera.Perspective();
|
||||
var animation = new qtek.animation.Animation();
|
||||
animation.start();
|
||||
|
||||
renderer.resize(window.innerWidth, window.innerHeight);
|
||||
document.body.appendChild(renderer.canvas);
|
||||
|
||||
camera.aspect = renderer.width / renderer.height;
|
||||
|
||||
var rootNode = new qtek.Node();
|
||||
var cubeGeo = new qtek.geometry.Cube();
|
||||
var cubeMat = new qtek.Material({
|
||||
shader: qtek.shader.library.get('buildin.basic', "diffuseMap")
|
||||
});
|
||||
var diffuseTexture = new qtek.texture.Texture2D();
|
||||
diffuseTexture.load('../assets/textures/crate.gif');
|
||||
cubeMat.setUniform("diffuseMap", diffuseTexture);
|
||||
|
||||
for (var i = 0; i < 10; i++) {
|
||||
for (var j = 0; j < 10; j++) {
|
||||
for (var k = 0; k < 10; k++) {
|
||||
var mesh = new qtek.Mesh({
|
||||
material: cubeMat,
|
||||
geometry: cubeGeo
|
||||
});
|
||||
mesh.scale.set(0.5, 0.5, 0.5);
|
||||
mesh.position.set(10 - Math.random() * 20, 10 - Math.random() * 20, 10 - Math.random() * 20);
|
||||
rootNode.add(mesh);
|
||||
}
|
||||
}
|
||||
}
|
||||
scene.add(rootNode);
|
||||
|
||||
animation.on('frame', function (deltaTime) {
|
||||
renderer.render(scene, camera);
|
||||
rootNode.rotation.rotateY(0.01);
|
||||
});
|
||||
40
tests/typescript/js/cubes.ts
Normal file
40
tests/typescript/js/cubes.ts
Normal file
@ -0,0 +1,40 @@
|
||||
///<reference path="../../../typescript/qtek.d.ts" />
|
||||
var renderer: qtek.Renderer = new qtek.Renderer();
|
||||
var scene: qtek.Scene = new qtek.Scene();
|
||||
var camera: qtek.camera.Perspective = new qtek.camera.Perspective();
|
||||
var animation: qtek.animation.Animation = new qtek.animation.Animation();
|
||||
animation.start();
|
||||
|
||||
renderer.resize(window.innerWidth, window.innerHeight);
|
||||
document.body.appendChild(renderer.canvas);
|
||||
|
||||
camera.aspect = renderer.width / renderer.height;
|
||||
|
||||
var rootNode: qtek.Node = new qtek.Node();
|
||||
var cubeGeo: qtek.geometry.Cube = new qtek.geometry.Cube();
|
||||
var cubeMat: qtek.Material = new qtek.Material({
|
||||
shader: qtek.shader.library.get('buildin.basic', "diffuseMap")
|
||||
});
|
||||
var diffuseTexture: qtek.texture.Texture2D = new qtek.texture.Texture2D();
|
||||
diffuseTexture.load('../assets/textures/crate.gif');
|
||||
cubeMat.setUniform("diffuseMap", diffuseTexture);
|
||||
|
||||
for(var i:number = 0; i < 10; i++) {
|
||||
for(var j: number = 0; j < 10; j++) {
|
||||
for(var k: number = 0; k < 10; k++) {
|
||||
var mesh: qtek.Mesh = new qtek.Mesh({
|
||||
material: cubeMat,
|
||||
geometry: cubeGeo
|
||||
});
|
||||
mesh.scale.set(0.5, 0.5, 0.5);
|
||||
mesh.position.set(10-Math.random()*20, 10-Math.random()*20, 10-Math.random() * 20);
|
||||
rootNode.add(mesh);
|
||||
}
|
||||
}
|
||||
}
|
||||
scene.add(rootNode);
|
||||
|
||||
animation.on('frame', function(deltaTime) {
|
||||
renderer.render(scene, camera);
|
||||
rootNode.rotation.rotateY(0.01);
|
||||
});
|
||||
1
typescript/DynamicGeometry.d.ts
vendored
1
typescript/DynamicGeometry.d.ts
vendored
@ -1,6 +1,5 @@
|
||||
///<reference path="Geometry.d.ts" />
|
||||
///<reference path="StaticGeometry.d.ts" />
|
||||
///<reference path="webgl.d.ts" />
|
||||
///<reference path="math/Matrix4.d.ts" />
|
||||
declare module qtek {
|
||||
|
||||
|
||||
1
typescript/Geometry.d.ts
vendored
1
typescript/Geometry.d.ts
vendored
@ -1,7 +1,6 @@
|
||||
///<reference path="math/BoundingBox.d.ts" />
|
||||
///<reference path="core/Base.d.ts" />
|
||||
///<reference path="core/Cache.d.ts" />
|
||||
///<reference path="webgl.d.ts" />
|
||||
declare module qtek {
|
||||
|
||||
interface IGeometryAttributeBuffer {
|
||||
|
||||
18
typescript/Material.d.ts
vendored
18
typescript/Material.d.ts
vendored
@ -1,10 +1,20 @@
|
||||
///<reference path="core/Base.d.ts" />
|
||||
///<reference path="Shader.d.ts" />
|
||||
///<reference path="webgl.d.ts" />
|
||||
declare module qtek {
|
||||
|
||||
interface IMaterialOption {
|
||||
name?: string;
|
||||
shader?: Shader;
|
||||
depthTest?: boolean;
|
||||
depthMask?: boolean;
|
||||
transparent?: boolean;
|
||||
blend?: (gl: WebGLRenderingContext) => void;
|
||||
}
|
||||
|
||||
export class Material extends core.Base {
|
||||
|
||||
|
||||
constructor(option?: IMaterialOption);
|
||||
|
||||
name: string;
|
||||
|
||||
uniforms: IDictionary<IShaderUniform>;
|
||||
@ -23,7 +33,7 @@ declare module qtek {
|
||||
|
||||
setUniform(symbol: string, value: any): void;
|
||||
|
||||
setUniforms(object: object): void;
|
||||
setUniforms(object: Object): void;
|
||||
|
||||
enableUniform(symbol: string): void;
|
||||
|
||||
@ -32,7 +42,7 @@ declare module qtek {
|
||||
isUniformEnabled(symbol: string): void;
|
||||
|
||||
set(symbol: string, value: any): void;
|
||||
set(object: object): void;
|
||||
set(object: Object): void;
|
||||
|
||||
get(symbol: string): any;
|
||||
|
||||
|
||||
1
typescript/Mesh.d.ts
vendored
1
typescript/Mesh.d.ts
vendored
@ -2,7 +2,6 @@
|
||||
///<reference path="Material.d.ts" />
|
||||
///<reference path="Geometry.d.ts" />
|
||||
///<reference path="Skeleton.d.ts" />
|
||||
///<reference path="webgl.d.ts" />
|
||||
declare module qtek {
|
||||
|
||||
interface IMeshOption extends INodeOption {
|
||||
|
||||
2
typescript/Node.d.ts
vendored
2
typescript/Node.d.ts
vendored
@ -52,7 +52,7 @@ declare module qtek {
|
||||
|
||||
getDescendantByName(name: string): Node;
|
||||
|
||||
traverse(callback: (current: Node, parent: Node) => void, parent?: Node, ctor?: T): void;
|
||||
traverse(callback: (current: Node, parent: Node) => void, parent?: Node, ctor?: Function): void;
|
||||
|
||||
setLocalTransform(matrix: math.Matrix4): void;
|
||||
|
||||
|
||||
29
typescript/Renderer.d.ts
vendored
29
typescript/Renderer.d.ts
vendored
@ -8,8 +8,6 @@
|
||||
///<reference path="Texture.d.ts" />
|
||||
///<reference path="FrameBuffer.d.ts" />
|
||||
///<reference path="math/Vector2.d.ts" />
|
||||
///<reference path="webgl.d.ts" />
|
||||
|
||||
declare module qtek {
|
||||
|
||||
interface IRendererOption {
|
||||
@ -107,19 +105,22 @@ declare module qtek {
|
||||
screenToNdc(x: number, y: number, out?: math.Vector2): math.Vector2;
|
||||
|
||||
// Events
|
||||
on(name: 'beforerender', handler: (renderer: Renderer, scene: Scene, camera: Camera) => void, context?: any);
|
||||
on(name: 'beforerender:opaque', handler: (renderer: Renderer, queue: IRenderable[]) => void, context?: any);
|
||||
on(name: 'beforerender:transparent', handler: (renderer: Renderer, queue: IRenderable[]) => void, context?: any);
|
||||
on(name: 'afterrender:opaque', handler: (renderer: Renderer, queue: IRenderable[], renderInfo: IRenderInfo) => void, context?: any);
|
||||
on(name: 'afterrender:transparent', handler: (renderer: Renderer, queue: IRenderable[], renderInfo: IRenderInfo) => void, context?: any);
|
||||
on(name: 'afterrender', handler: (renderer: Renderer, scene: Scene, camera: Camera, renderInfo: IRenderInfo) => void, context?: any);
|
||||
on(name: 'beforerender', handler: (renderer?: Renderer, scene?: Scene, camera?: Camera) => void, context?: any): void;
|
||||
on(name: 'beforerender:opaque', handler: (renderer?: Renderer, queue?: IRenderable[]) => void, context?: any): void;
|
||||
on(name: 'beforerender:transparent', handler: (renderer?: Renderer, queue?: IRenderable[]) => void, context?: any): void;
|
||||
on(name: 'afterrender:opaque', handler: (renderer?: Renderer, queue?: IRenderable[], renderInfo?: IRenderInfo) => void, context?: any): void;
|
||||
on(name: 'afterrender:transparent', handler: (renderer?: Renderer, queue?: IRenderable[], renderInfo?: IRenderInfo) => void, context?: any): void;
|
||||
on(name: 'afterrender', handler: (renderer?: Renderer, scene?: Scene, camera?: Camera, renderInfo?: IRenderInfo) => void, context?: any): void;
|
||||
on(name: string, handler: Function, context?: any): void;
|
||||
|
||||
before(name: 'render', handler: (renderer: Renderer, scene: Scene, camera: Camera) => void, context?: any);
|
||||
before(name: 'render:opaque', handler: (renderer: Renderer, queue: IRenderable[]) => void, context?: any);
|
||||
before(name: 'render:transparent', handler: (renderer: Renderer, queue: IRenderable[]) => void, context?: any);
|
||||
after(name: 'render:opaque', handler: (renderer: Renderer, queue: IRenderable[], renderInfo: IRenderInfo) => void, context?: any);
|
||||
after(name: 'render:transparent', handler: (renderer: Renderer, queue: IRenderable[], renderInfo: IRenderInfo) => void, context?: any);
|
||||
after(name: 'render', handler: (renderer: Renderer, scene: Scene, camera: Camera, renderInfo: IRenderInfo) => void, context?: any);
|
||||
before(name: 'render', handler: (renderer?: Renderer, scene?: Scene, camera?: Camera) => void, context?: any): void;
|
||||
before(name: 'render:opaque', handler: (renderer?: Renderer, queue?: IRenderable[]) => void, context?: any): void;
|
||||
before(name: 'render:transparent', handler: (renderer?: Renderer, queue?: IRenderable[]) => void, context?: any): void;
|
||||
after(name: 'render:opaque', handler: (renderer?: Renderer, queue?: IRenderable[], renderInfo?: IRenderInfo) => void, context?: any): void;
|
||||
after(name: 'render:transparent', handler: (renderer?: Renderer, queue?: IRenderable[], renderInfo?: IRenderInfo) => void, context?: any): void;
|
||||
after(name: 'render', handler: (renderer?: Renderer, scene?: Scene, camera?: Camera, renderInfo?: IRenderInfo) => void, context?: any): void;
|
||||
before(name: string, handler: Function, context?: any): void;
|
||||
after(name: string, handler: Function, context?: any): void;
|
||||
|
||||
static opaqueSortFunc(x: IRenderable, y: IRenderable): boolean;
|
||||
|
||||
|
||||
2
typescript/Scene.d.ts
vendored
2
typescript/Scene.d.ts
vendored
@ -1,8 +1,6 @@
|
||||
///<reference path="Material.d.ts" />
|
||||
///<reference path="Shader.d.ts" />
|
||||
///<reference path="Node.d.ts" />
|
||||
///<reference path="webgl.d.ts" />
|
||||
|
||||
declare module qtek {
|
||||
|
||||
interface IRenderable {
|
||||
|
||||
1
typescript/Shader.d.ts
vendored
1
typescript/Shader.d.ts
vendored
@ -1,7 +1,6 @@
|
||||
///<reference path="core/util.d.ts" />
|
||||
///<reference path="core/Cache.d.ts" />
|
||||
///<reference path="core/Base.d.ts" />
|
||||
///<reference path="webgl.d.ts" />
|
||||
declare module qtek {
|
||||
|
||||
interface IShaderAttribSemantic {
|
||||
|
||||
2
typescript/Skeleton.d.ts
vendored
2
typescript/Skeleton.d.ts
vendored
@ -26,7 +26,7 @@ declare module qtek {
|
||||
|
||||
getSubSkinMatrices(meshId: number, joints: number[]): Float32Array;
|
||||
|
||||
addClip(clip: animation.SkinningClip, mapRule?: object): number;
|
||||
addClip(clip: animation.SkinningClip, mapRule?: Object): number;
|
||||
|
||||
removeClip(clip: animation.SkinningClip): void;
|
||||
|
||||
|
||||
1
typescript/StaticGeometry.d.ts
vendored
1
typescript/StaticGeometry.d.ts
vendored
@ -1,5 +1,4 @@
|
||||
///<reference path="Geometry.d.ts" />
|
||||
///<reference path="webgl.d.ts" />
|
||||
///<reference path="math/Matrix4.d.ts" />
|
||||
declare module qtek {
|
||||
|
||||
|
||||
1
typescript/Texture.d.ts
vendored
1
typescript/Texture.d.ts
vendored
@ -1,6 +1,5 @@
|
||||
///<reference path="core/Base.d.ts" />
|
||||
///<reference path="core/Cache.d.ts" />
|
||||
///<reference path="webgl.d.ts" />
|
||||
declare module qtek {
|
||||
|
||||
interface ITextureOption {
|
||||
|
||||
22
typescript/animation/Animation.d.ts
vendored
22
typescript/animation/Animation.d.ts
vendored
@ -12,7 +12,7 @@ declare module qtek {
|
||||
stage?: IStage;
|
||||
}
|
||||
|
||||
interface IAnimationOption {
|
||||
interface IAnimationAnimateOption {
|
||||
loop?: boolean;
|
||||
getter?: (key: string) => any;
|
||||
setter?: (key: string, value: any) => any;
|
||||
@ -20,24 +20,24 @@ declare module qtek {
|
||||
|
||||
interface IAnimationDeferred<T> {
|
||||
|
||||
when(time: number, props: Object) : IAnimationDeferred;
|
||||
when(time: number, props: Object) : IAnimationDeferred<T>;
|
||||
|
||||
during(callback: (target: T, percent: number)=> any): IAnimationDeferred;
|
||||
during(callback: (target: T, percent: number)=> any): IAnimationDeferred<T>;
|
||||
|
||||
start(): IAnimationDeferred;
|
||||
start(easing: string): IAnimationDeferred;
|
||||
start(easing: (percent: number) => number): IAnimationDeferred;
|
||||
start(): IAnimationDeferred<T>;
|
||||
start(easing: string): IAnimationDeferred<T>;
|
||||
start(easing: (percent: number) => number): IAnimationDeferred<T>;
|
||||
|
||||
stop(): IAnimationDeferred;
|
||||
stop(): IAnimationDeferred<T>;
|
||||
|
||||
delay(time: string): IAnimationDeferred;
|
||||
delay(time: string): IAnimationDeferred<T>;
|
||||
|
||||
done(callback: Function): IAnimationDeferred;
|
||||
done(callback: Function): IAnimationDeferred<T>;
|
||||
}
|
||||
|
||||
export class Animation extends qtek.core.Base {
|
||||
|
||||
constructor(stage?: IStage);
|
||||
constructor(option?: IAnimationOption);
|
||||
|
||||
stage: IStage;
|
||||
|
||||
@ -53,7 +53,7 @@ declare module qtek {
|
||||
|
||||
stop(): void;
|
||||
|
||||
animate<T>(target: T, options: IAnimationOption): IAnimationDeferred<T>;
|
||||
animate<T>(target: T, options: IAnimationAnimateOption): IAnimationDeferred<T>;
|
||||
}
|
||||
}
|
||||
}
|
||||
6
typescript/animation/Blend1DClip.d.ts
vendored
6
typescript/animation/Blend1DClip.d.ts
vendored
@ -7,7 +7,7 @@ declare module qtek {
|
||||
output?: T;
|
||||
}
|
||||
|
||||
interface IClipInputEntry<T extends BlendClip> {
|
||||
interface IBlend1DClipInputEntry<T extends BlendClip> {
|
||||
position: number;
|
||||
clip: T;
|
||||
offset: number;
|
||||
@ -15,9 +15,11 @@ declare module qtek {
|
||||
|
||||
export class Blend1DClip<T extends BlendClip> extends Clip {
|
||||
|
||||
constructor(option?: IBlend1DClipOption<T>);
|
||||
|
||||
output: T;
|
||||
|
||||
inputs: IClipInputEntry[];
|
||||
inputs: IBlend1DClipInputEntry<T>[];
|
||||
|
||||
position: number;
|
||||
|
||||
|
||||
10
typescript/animation/Blend2DClip.d.ts
vendored
10
typescript/animation/Blend2DClip.d.ts
vendored
@ -8,21 +8,23 @@ declare module qtek {
|
||||
output?: T;
|
||||
}
|
||||
|
||||
interface IClipInputEntry<T extends BlendClip> {
|
||||
position: qtek.math.Vector2;
|
||||
interface IBlend2DClipInputEntry<T extends BlendClip> {
|
||||
position: math.Vector2;
|
||||
clip: T;
|
||||
offset: number;
|
||||
}
|
||||
|
||||
export class Blend2DClip<T extends BlendClip> extends Clip {
|
||||
|
||||
constructor(option?: IBlend2DClipOption<T>);
|
||||
|
||||
output: T;
|
||||
|
||||
inputs: IClipInputEntry[];
|
||||
inputs: IBlend2DClipInputEntry<T>[];
|
||||
|
||||
position: number;
|
||||
|
||||
addInput(position: qtek.math.Vector2, inputClip: T, offset: number);
|
||||
addInput(position: math.Vector2, inputClip: T, offset: number);
|
||||
}
|
||||
}
|
||||
}
|
||||
12
typescript/animation/Clip.d.ts
vendored
12
typescript/animation/Clip.d.ts
vendored
@ -2,8 +2,8 @@ declare module qtek {
|
||||
|
||||
export module animation {
|
||||
|
||||
interface IClipOption<T> {
|
||||
target?: T;
|
||||
interface IClipOption {
|
||||
target?: any;
|
||||
life?: number;
|
||||
delay?: number;
|
||||
gap?: number;
|
||||
@ -15,12 +15,14 @@ declare module qtek {
|
||||
string;
|
||||
(percent: number): number;
|
||||
}
|
||||
onframe?: (target: T, schedule: number) => void;
|
||||
onframe?: (target: any, schedule: number) => void;
|
||||
onrestart?: () => void;
|
||||
ondestroy?: () => void;
|
||||
}
|
||||
|
||||
export class Clip<T> {
|
||||
export class Clip {
|
||||
|
||||
constructor(option?: IClipOption);
|
||||
|
||||
gap: number;
|
||||
|
||||
@ -46,7 +48,7 @@ declare module qtek {
|
||||
|
||||
export class BlendClip extends Clip {
|
||||
|
||||
blend1D(c1: Clip , c2: Clip, w: number): void;
|
||||
blend1D(c1: Clip, c2: Clip, w: number): void;
|
||||
|
||||
blend2D(c1: Clip, c2: Clip, c3: Clip, f: number, g: number): void;
|
||||
|
||||
|
||||
12
typescript/async/Task.d.ts
vendored
12
typescript/async/Task.d.ts
vendored
@ -9,7 +9,7 @@ declare module qtek {
|
||||
responseType?: string;
|
||||
}
|
||||
|
||||
export class Task extends core.mixin.notifier {
|
||||
export class Task implements core.mixin.notifier {
|
||||
|
||||
resolve(data?: any): void;
|
||||
|
||||
@ -21,6 +21,16 @@ declare module qtek {
|
||||
|
||||
isSettled(): boolean;
|
||||
|
||||
trigger(name: string, ...args): void;
|
||||
|
||||
on(name: string, action: Function, context?:any): void;
|
||||
|
||||
once(name: string, action: Function, context?:any): void;
|
||||
|
||||
off(name: string, action?: Function): void;
|
||||
|
||||
has(name: string, action: Function): void;
|
||||
|
||||
static makeTask(): Task;
|
||||
|
||||
static makeRequestTask(url: string): Task;
|
||||
|
||||
2
typescript/camera/Orthographic.d.ts
vendored
2
typescript/camera/Orthographic.d.ts
vendored
@ -12,7 +12,7 @@ declare module qtek {
|
||||
bottom?: number;
|
||||
}
|
||||
|
||||
export class Orthographic {
|
||||
export class Orthographic extends Camera {
|
||||
|
||||
constructor(option?: IOrthographicCameraOption);
|
||||
|
||||
|
||||
2
typescript/camera/Perspective.d.ts
vendored
2
typescript/camera/Perspective.d.ts
vendored
@ -10,7 +10,7 @@ declare module qtek {
|
||||
far?: number;
|
||||
}
|
||||
|
||||
export class Perspective {
|
||||
export class Perspective extends Camera {
|
||||
|
||||
constructor(option?: IPerspectiveCameraOption);
|
||||
|
||||
|
||||
2
typescript/compositor/Node.d.ts
vendored
2
typescript/compositor/Node.d.ts
vendored
@ -55,7 +55,7 @@ declare module qtek {
|
||||
|
||||
render(renderer: Renderer): void;
|
||||
|
||||
updateParameter(outputName: string, renderer: Renderer): object;
|
||||
updateParameter(outputName: string, renderer: Renderer): Object;
|
||||
|
||||
setParameter(name: string, value: any): void;
|
||||
|
||||
|
||||
1
typescript/compositor/texturePool.d.ts
vendored
1
typescript/compositor/texturePool.d.ts
vendored
@ -1,5 +1,4 @@
|
||||
///<reference path="../Texture.d.ts" />
|
||||
///<reference path="../webgl.d.ts" />
|
||||
declare module qtek {
|
||||
|
||||
export module compositor {
|
||||
|
||||
12
typescript/core/Base.d.ts
vendored
12
typescript/core/Base.d.ts
vendored
@ -4,8 +4,18 @@ declare module qtek {
|
||||
|
||||
export module core {
|
||||
|
||||
export class Base extends mixin.notifier {
|
||||
export class Base implements mixin.notifier {
|
||||
__GUID__ : number
|
||||
|
||||
trigger(name: string, ...args): void;
|
||||
|
||||
on(name: string, action: Function, context?:any): void;
|
||||
|
||||
once(name: string, action: Function, context?:any): void;
|
||||
|
||||
off(name: string, action?: Function): void;
|
||||
|
||||
has(name: string, action: Function): void;
|
||||
}
|
||||
}
|
||||
}
|
||||
6
typescript/core/container.d.ts
vendored
6
typescript/core/container.d.ts
vendored
@ -1,12 +1,12 @@
|
||||
declare module qtek {
|
||||
|
||||
interface IList<T> {
|
||||
[index: number]: T,
|
||||
length: number
|
||||
[index: number]: T;
|
||||
length: number;
|
||||
}
|
||||
|
||||
interface IDictionary<T> {
|
||||
[index: string]: T
|
||||
[index: string]: T;
|
||||
}
|
||||
|
||||
}
|
||||
1
typescript/core/glinfo.d.ts
vendored
1
typescript/core/glinfo.d.ts
vendored
@ -1,4 +1,3 @@
|
||||
///<reference path="../webgl.d.ts" />
|
||||
declare module qtek {
|
||||
|
||||
export module core {
|
||||
|
||||
30
typescript/core/mixin/notifier.d.ts
vendored
30
typescript/core/mixin/notifier.d.ts
vendored
@ -1,33 +1,33 @@
|
||||
declare module qtek{
|
||||
|
||||
interface INotifierEventHandler {
|
||||
action: Function;
|
||||
context: any;
|
||||
}
|
||||
|
||||
export module core {
|
||||
|
||||
export module mixin {
|
||||
|
||||
interface IHandler {
|
||||
action: Function;
|
||||
context: any;
|
||||
}
|
||||
|
||||
export class notifier {
|
||||
export interface notifier {
|
||||
|
||||
trigger(name: string, ...args): void;
|
||||
trigger?(name: string, ...args): void;
|
||||
|
||||
on(name: string, action: Function, context?:any): IHandler;
|
||||
on?(name: string, action: Function, context?:any): void;
|
||||
|
||||
once(name: string, action: Function, context?:any): IHandler;
|
||||
once?(name: string, action: Function, context?:any): void;
|
||||
|
||||
before(name: string, action: Function, context?:any): IHandler;
|
||||
before?(name: string, action: Function, context?:any): void;
|
||||
|
||||
after(name: string, action: Function, context?:any): IHandler;
|
||||
after?(name: string, action: Function, context?:any): void;
|
||||
|
||||
success(action: Function, context?:any): IHandler;
|
||||
success?(action: Function, context?:any): void;
|
||||
|
||||
error(action: Function, context?:any): IHandler;
|
||||
error?(action: Function, context?:any): void;
|
||||
|
||||
off(name: string, action?: Function): void;
|
||||
off?(name: string, action?: Function): void;
|
||||
|
||||
has(name: string, action: Function): void;
|
||||
has?(name: string, action: Function): void;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
1
typescript/core/request.d.ts
vendored
1
typescript/core/request.d.ts
vendored
@ -1,4 +1,3 @@
|
||||
///<reference path="../webgl.d.ts" />
|
||||
declare module qtek {
|
||||
|
||||
export module core {
|
||||
|
||||
3
typescript/core/util.d.ts
vendored
3
typescript/core/util.d.ts
vendored
@ -1,4 +1,3 @@
|
||||
///<reference path="../webgl.d.ts" />
|
||||
///<reference path="container.d.ts" />
|
||||
declare module qtek {
|
||||
|
||||
@ -11,7 +10,7 @@ declare module qtek {
|
||||
}
|
||||
|
||||
interface DictionaryIterator<T, TResult> {
|
||||
(item: T, key: string, obj: IDictionary): TResult;
|
||||
(item: T, key: string, obj: IDictionary<T>): TResult;
|
||||
}
|
||||
|
||||
export function genGUID(): number;
|
||||
|
||||
9
typescript/loader/FX.d.ts
vendored
9
typescript/loader/FX.d.ts
vendored
@ -20,12 +20,13 @@ declare module qtek {
|
||||
|
||||
bufferRootPath: string;
|
||||
|
||||
load(string: url): void;
|
||||
load(url: string): void;
|
||||
|
||||
parse(json: object): compositor.Compositor;
|
||||
parse(json: Object): compositor.Compositor;
|
||||
|
||||
on(name: "success", handler: (compositor: compositor.Compositor) => void, context?: any);
|
||||
success(handler: (compositor: compositor.Compositor) => void, context?: any);
|
||||
once(name: "success", handler: (compositor: compositor.Compositor) => void, context?: any): void;
|
||||
once(name: string, handler: Function, context?: any): void;
|
||||
success(handler: (compositor: compositor.Compositor) => void, context?: any): void;
|
||||
}
|
||||
}
|
||||
}
|
||||
9
typescript/loader/GLTF.d.ts
vendored
9
typescript/loader/GLTF.d.ts
vendored
@ -30,7 +30,7 @@ declare module qtek {
|
||||
|
||||
export class GLTF extends core.Base {
|
||||
|
||||
constructor(option?: IGLTFLoaderOption): void;
|
||||
constructor(option?: IGLTFLoaderOption);
|
||||
|
||||
rootPath: string;
|
||||
textureRootPath: string;
|
||||
@ -40,10 +40,11 @@ declare module qtek {
|
||||
|
||||
load(url: string): void;
|
||||
|
||||
parse(json: object): IGLTFLoaderResult;
|
||||
parse(json: Object): IGLTFLoaderResult;
|
||||
|
||||
on(name: "success", (result: IGLTFLoaderResult)=> void, context?: any);
|
||||
success((result: IGLTFLoaderResult)=> void, context?: any);
|
||||
once(name: "success", handler: (result: IGLTFLoaderResult)=> void, context?: any): void;
|
||||
once(name: string, handler: Function, context?: any): void;
|
||||
success(handler: (result: IGLTFLoaderResult)=> void, context?: any);
|
||||
}
|
||||
}
|
||||
}
|
||||
7
typescript/loader/ThreeModel.d.ts
vendored
7
typescript/loader/ThreeModel.d.ts
vendored
@ -19,10 +19,11 @@ declare module qtek {
|
||||
|
||||
load(url: string): void;
|
||||
|
||||
parse(data: object): Mesh[];
|
||||
parse(data: Object): Mesh[];
|
||||
|
||||
on(name: "success", handler: (meshList: Mesh[])=> void, context?: any);
|
||||
success(handler: (meshList: Mesh[])=> void, context?: any);
|
||||
once(name: "success", handler: (meshList: Mesh[])=> void, context?: any): void;
|
||||
once(name: string, handler: Function, context?: any): void;
|
||||
success(handler: (meshList: Mesh[])=> void, context?: any): void;
|
||||
}
|
||||
}
|
||||
}
|
||||
1
typescript/plugin/Skybox.d.ts
vendored
1
typescript/plugin/Skybox.d.ts
vendored
@ -1,6 +1,5 @@
|
||||
///<reference path="../Mesh.d.ts" />
|
||||
///<reference path="../Scene.d.ts" />
|
||||
///<reference path="../webgl.d.ts" />
|
||||
declare module qtek {
|
||||
|
||||
export module plugin {
|
||||
|
||||
1
typescript/plugin/Skydome.d.ts
vendored
1
typescript/plugin/Skydome.d.ts
vendored
@ -1,6 +1,5 @@
|
||||
///<reference path="../Mesh.d.ts" />
|
||||
///<reference path="../Scene.d.ts" />
|
||||
///<reference path="../webgl.d.ts" />
|
||||
declare module qtek {
|
||||
|
||||
export module plugin {
|
||||
|
||||
78
typescript/qtek.d.ts
vendored
Normal file
78
typescript/qtek.d.ts
vendored
Normal file
@ -0,0 +1,78 @@
|
||||
///<reference path="Camera" />
|
||||
///<reference path="DynamicGeometry" />
|
||||
///<reference path="FrameBuffer" />
|
||||
///<reference path="Geometry" />
|
||||
///<reference path="Joint" />
|
||||
///<reference path="Light" />
|
||||
///<reference path="Material" />
|
||||
///<reference path="Mesh" />
|
||||
///<reference path="Node" />
|
||||
///<reference path="Renderer" />
|
||||
///<reference path="Scene" />
|
||||
///<reference path="Shader" />
|
||||
///<reference path="Skeleton" />
|
||||
///<reference path="StaticGeometry" />
|
||||
///<reference path="Texture" />
|
||||
///<reference path="animation/Animation" />
|
||||
///<reference path="animation/Blend1DClip" />
|
||||
///<reference path="animation/Blend2DClip" />
|
||||
///<reference path="animation/Clip" />
|
||||
///<reference path="animation/SamplerClip" />
|
||||
///<reference path="animation/SkinningClip" />
|
||||
///<reference path="animation/TransformClip" />
|
||||
///<reference path="async/Task" />
|
||||
///<reference path="async/TaskGroup" />
|
||||
///<reference path="camera/Orthographic" />
|
||||
///<reference path="camera/Perspective" />
|
||||
///<reference path="compositor/Compositor" />
|
||||
///<reference path="compositor/Graph" />
|
||||
///<reference path="compositor/Node" />
|
||||
///<reference path="compositor/Pass" />
|
||||
///<reference path="compositor/SceneNode" />
|
||||
///<reference path="compositor/TextureNode" />
|
||||
///<reference path="compositor/texturePool" />
|
||||
///<reference path="core/Base" />
|
||||
///<reference path="core/Cache" />
|
||||
///<reference path="core/glinfo" />
|
||||
///<reference path="core/mixin/derive" />
|
||||
///<reference path="core/mixin/notifier" />
|
||||
///<reference path="core/request" />
|
||||
///<reference path="core/util" />
|
||||
///<reference path="geometry/Cone" />
|
||||
///<reference path="geometry/Cube" />
|
||||
///<reference path="geometry/Cylinder" />
|
||||
///<reference path="geometry/Plane" />
|
||||
///<reference path="geometry/Sphere" />
|
||||
///<reference path="light/Ambient" />
|
||||
///<reference path="light/Directional" />
|
||||
///<reference path="light/Point" />
|
||||
///<reference path="light/Spot" />
|
||||
///<reference path="loader/FX" />
|
||||
///<reference path="loader/GLTF" />
|
||||
///<reference path="loader/ThreeModel" />
|
||||
///<reference path="math/BoundingBox" />
|
||||
///<reference path="math/Frustum" />
|
||||
///<reference path="math/Matrix2" />
|
||||
///<reference path="math/Matrix2d" />
|
||||
///<reference path="math/Matrix3" />
|
||||
///<reference path="math/Matrix4" />
|
||||
///<reference path="math/Plane" />
|
||||
///<reference path="math/Quaternion" />
|
||||
///<reference path="math/Ray" />
|
||||
///<reference path="math/Value" />
|
||||
///<reference path="math/Vector2" />
|
||||
///<reference path="math/Vector3" />
|
||||
///<reference path="math/Vector4" />
|
||||
///<reference path="particleSystem/Emitter" />
|
||||
///<reference path="particleSystem/ForceField" />
|
||||
///<reference path="particleSystem/Particle" />
|
||||
///<reference path="particleSystem/ParticleSystem" />
|
||||
///<reference path="plugin/FirstPersonControl" />
|
||||
///<reference path="plugin/OrbitControl" />
|
||||
///<reference path="plugin/Skybox" />
|
||||
///<reference path="plugin/Skydome" />
|
||||
///<reference path="prePass/EnvironmentMap" />
|
||||
///<reference path="prePass/ShadowMap" />
|
||||
///<reference path="shader/library" />
|
||||
///<reference path="texture/Texture2D" />
|
||||
///<reference path="texture/TextureCube" />
|
||||
8
typescript/texture/Texture2D.d.ts
vendored
8
typescript/texture/Texture2D.d.ts
vendored
@ -32,6 +32,14 @@ declare module qtek {
|
||||
unbind(gl): boolean;
|
||||
|
||||
load(src: string): void;
|
||||
|
||||
once(name: "success", handler: Function, context?: any): void;
|
||||
success(handler: Function, context?: any): void;
|
||||
|
||||
once(name: "error", handler: Function, context?: any): void;
|
||||
error(handler: Function, context?: any): void;
|
||||
|
||||
once(name: string, handler: Function, context?: any): void;
|
||||
}
|
||||
}
|
||||
}
|
||||
10
typescript/texture/TextureCube.d.ts
vendored
10
typescript/texture/TextureCube.d.ts
vendored
@ -35,7 +35,7 @@ declare module qtek {
|
||||
pixels?: ITextureCubePixels
|
||||
}
|
||||
|
||||
export class Texture2D extends Texture {
|
||||
export class TextureCube extends Texture {
|
||||
|
||||
constructor(option?: ITextureCubeOption);
|
||||
|
||||
@ -56,6 +56,14 @@ declare module qtek {
|
||||
unbind(gl): boolean;
|
||||
|
||||
load(imageList: ITextureCubeImageSrc): void;
|
||||
|
||||
once(name: "success", handler: Function, context?: any): void;
|
||||
success(handler: Function, context?: any): void;
|
||||
|
||||
once(name: "error", handler: Function, context?: any): void;
|
||||
error(handler: Function, context?: any): void;
|
||||
|
||||
once(name: string, handler: Function, context?: any): void;
|
||||
}
|
||||
}
|
||||
}
|
||||
535
typescript/webgl.d.ts
vendored
535
typescript/webgl.d.ts
vendored
@ -1,535 +0,0 @@
|
||||
// https://github.com/RicoP/webgl.d.ts
|
||||
interface WebGLContextAttributes {
|
||||
alpha : bool;
|
||||
depth : bool;
|
||||
stencil : bool;
|
||||
antialias : bool;
|
||||
premultipliedAlpha : bool;
|
||||
}
|
||||
|
||||
interface WebGLObject {
|
||||
$__dummyprop__WebGLObject : any;
|
||||
}
|
||||
|
||||
interface WebGLBuffer extends WebGLObject {
|
||||
$__dummyprop__WebGLBuffer : any;
|
||||
}
|
||||
|
||||
interface WebGLFramebuffer extends WebGLObject {
|
||||
$__dummyprop__WebGLFramebuffer : any;
|
||||
}
|
||||
|
||||
interface WebGLProgram extends WebGLObject {
|
||||
$__dummyprop__WebGLProgram : any;
|
||||
}
|
||||
|
||||
interface WebGLRenderbuffer extends WebGLObject {
|
||||
$__dummyprop__WebGLRenderbuffer : any;
|
||||
}
|
||||
|
||||
interface WebGLShader extends WebGLObject {
|
||||
$__dummyprop__WebGLShader : any;
|
||||
}
|
||||
|
||||
interface WebGLTexture extends WebGLObject {
|
||||
$__dummyprop__WebGLTexture : any;
|
||||
}
|
||||
|
||||
interface WebGLUniformLocation {
|
||||
$__dummyprop__WebGLUniformLocation : any;
|
||||
}
|
||||
|
||||
interface WebGLActiveInfo {
|
||||
size : number;
|
||||
type : number;
|
||||
name : string;
|
||||
}
|
||||
|
||||
interface WebGLRenderingContext {
|
||||
DEPTH_BUFFER_BIT : number;
|
||||
STENCIL_BUFFER_BIT : number;
|
||||
COLOR_BUFFER_BIT : number;
|
||||
POINTS : number;
|
||||
LINES : number;
|
||||
LINE_LOOP : number;
|
||||
LINE_STRIP : number;
|
||||
TRIANGLES : number;
|
||||
TRIANGLE_STRIP : number;
|
||||
TRIANGLE_FAN : number;
|
||||
ZERO : number;
|
||||
ONE : number;
|
||||
SRC_COLOR : number;
|
||||
ONE_MINUS_SRC_COLOR : number;
|
||||
SRC_ALPHA : number;
|
||||
ONE_MINUS_SRC_ALPHA : number;
|
||||
DST_ALPHA : number;
|
||||
ONE_MINUS_DST_ALPHA : number;
|
||||
DST_COLOR : number;
|
||||
ONE_MINUS_DST_COLOR : number;
|
||||
SRC_ALPHA_SATURATE : number;
|
||||
FUNC_ADD : number;
|
||||
BLEND_EQUATION : number;
|
||||
BLEND_EQUATION_RGB : number;
|
||||
BLEND_EQUATION_ALPHA : number;
|
||||
FUNC_SUBTRACT : number;
|
||||
FUNC_REVERSE_SUBTRACT : number;
|
||||
BLEND_DST_RGB : number;
|
||||
BLEND_SRC_RGB : number;
|
||||
BLEND_DST_ALPHA : number;
|
||||
BLEND_SRC_ALPHA : number;
|
||||
CONSTANT_COLOR : number;
|
||||
ONE_MINUS_CONSTANT_COLOR : number;
|
||||
CONSTANT_ALPHA : number;
|
||||
ONE_MINUS_CONSTANT_ALPHA : number;
|
||||
BLEND_COLOR : number;
|
||||
ARRAY_BUFFER : number;
|
||||
ELEMENT_ARRAY_BUFFER : number;
|
||||
ARRAY_BUFFER_BINDING : number;
|
||||
ELEMENT_ARRAY_BUFFER_BINDING : number;
|
||||
STREAM_DRAW : number;
|
||||
STATIC_DRAW : number;
|
||||
DYNAMIC_DRAW : number;
|
||||
BUFFER_SIZE : number;
|
||||
BUFFER_USAGE : number;
|
||||
CURRENT_VERTEX_ATTRIB : number;
|
||||
FRONT : number;
|
||||
BACK : number;
|
||||
FRONT_AND_BACK : number;
|
||||
TEXTURE_2D : number;
|
||||
CULL_FACE : number;
|
||||
BLEND : number;
|
||||
DITHER : number;
|
||||
STENCIL_TEST : number;
|
||||
DEPTH_TEST : number;
|
||||
SCISSOR_TEST : number;
|
||||
POLYGON_OFFSET_FILL : number;
|
||||
SAMPLE_ALPHA_TO_COVERAGE : number;
|
||||
SAMPLE_COVERAGE : number;
|
||||
NO_ERROR : number;
|
||||
INVALID_ENUM : number;
|
||||
INVALID_VALUE : number;
|
||||
INVALID_OPERATION : number;
|
||||
OUT_OF_MEMORY : number;
|
||||
CW : number;
|
||||
CCW : number;
|
||||
LINE_WIDTH : number;
|
||||
ALIASED_POINT_SIZE_RANGE : number;
|
||||
ALIASED_LINE_WIDTH_RANGE : number;
|
||||
CULL_FACE_MODE : number;
|
||||
FRONT_FACE : number;
|
||||
DEPTH_RANGE : number;
|
||||
DEPTH_WRITEMASK : number;
|
||||
DEPTH_CLEAR_VALUE : number;
|
||||
DEPTH_FUNC : number;
|
||||
STENCIL_CLEAR_VALUE : number;
|
||||
STENCIL_FUNC : number;
|
||||
STENCIL_FAIL : number;
|
||||
STENCIL_PASS_DEPTH_FAIL : number;
|
||||
STENCIL_PASS_DEPTH_PASS : number;
|
||||
STENCIL_REF : number;
|
||||
STENCIL_VALUE_MASK : number;
|
||||
STENCIL_WRITEMASK : number;
|
||||
STENCIL_BACK_FUNC : number;
|
||||
STENCIL_BACK_FAIL : number;
|
||||
STENCIL_BACK_PASS_DEPTH_FAIL : number;
|
||||
STENCIL_BACK_PASS_DEPTH_PASS : number;
|
||||
STENCIL_BACK_REF : number;
|
||||
STENCIL_BACK_VALUE_MASK : number;
|
||||
STENCIL_BACK_WRITEMASK : number;
|
||||
VIEWPORT : number;
|
||||
SCISSOR_BOX : number;
|
||||
COLOR_CLEAR_VALUE : number;
|
||||
COLOR_WRITEMASK : number;
|
||||
UNPACK_ALIGNMENT : number;
|
||||
PACK_ALIGNMENT : number;
|
||||
MAX_TEXTURE_SIZE : number;
|
||||
MAX_VIEWPORT_DIMS : number;
|
||||
SUBPIXEL_BITS : number;
|
||||
RED_BITS : number;
|
||||
GREEN_BITS : number;
|
||||
BLUE_BITS : number;
|
||||
ALPHA_BITS : number;
|
||||
DEPTH_BITS : number;
|
||||
STENCIL_BITS : number;
|
||||
POLYGON_OFFSET_UNITS : number;
|
||||
POLYGON_OFFSET_FACTOR : number;
|
||||
TEXTURE_BINDING_2D : number;
|
||||
SAMPLE_BUFFERS : number;
|
||||
SAMPLES : number;
|
||||
SAMPLE_COVERAGE_VALUE : number;
|
||||
SAMPLE_COVERAGE_INVERT : number;
|
||||
NUM_COMPRESSED_TEXTURE_FORMATS : number;
|
||||
COMPRESSED_TEXTURE_FORMATS : number;
|
||||
DONT_CARE : number;
|
||||
FASTEST : number;
|
||||
NICEST : number;
|
||||
GENERATE_MIPMAP_HINT : number;
|
||||
BYTE : number;
|
||||
UNSIGNED_BYTE : number;
|
||||
SHORT : number;
|
||||
UNSIGNED_SHORT : number;
|
||||
INT : number;
|
||||
UNSIGNED_INT : number;
|
||||
FLOAT : number;
|
||||
DEPTH_COMPONENT : number;
|
||||
ALPHA : number;
|
||||
RGB : number;
|
||||
RGBA : number;
|
||||
LUMINANCE : number;
|
||||
LUMINANCE_ALPHA : number;
|
||||
UNSIGNED_SHORT_4_4_4_4 : number;
|
||||
UNSIGNED_SHORT_5_5_5_1 : number;
|
||||
UNSIGNED_SHORT_5_6_5 : number;
|
||||
FRAGMENT_SHADER : number;
|
||||
VERTEX_SHADER : number;
|
||||
MAX_VERTEX_ATTRIBS : number;
|
||||
MAX_VERTEX_UNIFORM_VECTORS : number;
|
||||
MAX_VARYING_VECTORS : number;
|
||||
MAX_COMBINED_TEXTURE_IMAGE_UNITS : number;
|
||||
MAX_VERTEX_TEXTURE_IMAGE_UNITS : number;
|
||||
MAX_TEXTURE_IMAGE_UNITS : number;
|
||||
MAX_FRAGMENT_UNIFORM_VECTORS : number;
|
||||
SHADER_TYPE : number;
|
||||
DELETE_STATUS : number;
|
||||
LINK_STATUS : number;
|
||||
VALIDATE_STATUS : number;
|
||||
ATTACHED_SHADERS : number;
|
||||
ACTIVE_UNIFORMS : number;
|
||||
ACTIVE_UNIFORM_MAX_LENGTH : number;
|
||||
ACTIVE_ATTRIBUTES : number;
|
||||
ACTIVE_ATTRIBUTE_MAX_LENGTH : number;
|
||||
SHADING_LANGUAGE_VERSION : number;
|
||||
CURRENT_PROGRAM : number;
|
||||
NEVER : number;
|
||||
LESS : number;
|
||||
EQUAL : number;
|
||||
LEQUAL : number;
|
||||
GREATER : number;
|
||||
NOTEQUAL : number;
|
||||
GEQUAL : number;
|
||||
ALWAYS : number;
|
||||
KEEP : number;
|
||||
REPLACE : number;
|
||||
INCR : number;
|
||||
DECR : number;
|
||||
INVERT : number;
|
||||
INCR_WRAP : number;
|
||||
DECR_WRAP : number;
|
||||
VENDOR : number;
|
||||
RENDERER : number;
|
||||
VERSION : number;
|
||||
NEAREST : number;
|
||||
LINEAR : number;
|
||||
NEAREST_MIPMAP_NEAREST : number;
|
||||
LINEAR_MIPMAP_NEAREST : number;
|
||||
NEAREST_MIPMAP_LINEAR : number;
|
||||
LINEAR_MIPMAP_LINEAR : number;
|
||||
TEXTURE_MAG_FILTER : number;
|
||||
TEXTURE_MIN_FILTER : number;
|
||||
TEXTURE_WRAP_S : number;
|
||||
TEXTURE_WRAP_T : number;
|
||||
TEXTURE : number;
|
||||
TEXTURE_CUBE_MAP : number;
|
||||
TEXTURE_BINDING_CUBE_MAP : number;
|
||||
TEXTURE_CUBE_MAP_POSITIVE_X : number;
|
||||
TEXTURE_CUBE_MAP_NEGATIVE_X : number;
|
||||
TEXTURE_CUBE_MAP_POSITIVE_Y : number;
|
||||
TEXTURE_CUBE_MAP_NEGATIVE_Y : number;
|
||||
TEXTURE_CUBE_MAP_POSITIVE_Z : number;
|
||||
TEXTURE_CUBE_MAP_NEGATIVE_Z : number;
|
||||
MAX_CUBE_MAP_TEXTURE_SIZE : number;
|
||||
TEXTURE0 : number;
|
||||
TEXTURE1 : number;
|
||||
TEXTURE2 : number;
|
||||
TEXTURE3 : number;
|
||||
TEXTURE4 : number;
|
||||
TEXTURE5 : number;
|
||||
TEXTURE6 : number;
|
||||
TEXTURE7 : number;
|
||||
TEXTURE8 : number;
|
||||
TEXTURE9 : number;
|
||||
TEXTURE10 : number;
|
||||
TEXTURE11 : number;
|
||||
TEXTURE12 : number;
|
||||
TEXTURE13 : number;
|
||||
TEXTURE14 : number;
|
||||
TEXTURE15 : number;
|
||||
TEXTURE16 : number;
|
||||
TEXTURE17 : number;
|
||||
TEXTURE18 : number;
|
||||
TEXTURE19 : number;
|
||||
TEXTURE20 : number;
|
||||
TEXTURE21 : number;
|
||||
TEXTURE22 : number;
|
||||
TEXTURE23 : number;
|
||||
TEXTURE24 : number;
|
||||
TEXTURE25 : number;
|
||||
TEXTURE26 : number;
|
||||
TEXTURE27 : number;
|
||||
TEXTURE28 : number;
|
||||
TEXTURE29 : number;
|
||||
TEXTURE30 : number;
|
||||
TEXTURE31 : number;
|
||||
ACTIVE_TEXTURE : number;
|
||||
REPEAT : number;
|
||||
CLAMP_TO_EDGE : number;
|
||||
MIRRORED_REPEAT : number;
|
||||
FLOAT_VEC2 : number;
|
||||
FLOAT_VEC3 : number;
|
||||
FLOAT_VEC4 : number;
|
||||
INT_VEC2 : number;
|
||||
INT_VEC3 : number;
|
||||
INT_VEC4 : number;
|
||||
BOOL : number;
|
||||
BOOL_VEC2 : number;
|
||||
BOOL_VEC3 : number;
|
||||
BOOL_VEC4 : number;
|
||||
FLOAT_MAT2 : number;
|
||||
FLOAT_MAT3 : number;
|
||||
FLOAT_MAT4 : number;
|
||||
SAMPLER_2D : number;
|
||||
SAMPLER_CUBE : number;
|
||||
VERTEX_ATTRIB_ARRAY_ENABLED : number;
|
||||
VERTEX_ATTRIB_ARRAY_SIZE : number;
|
||||
VERTEX_ATTRIB_ARRAY_STRIDE : number;
|
||||
VERTEX_ATTRIB_ARRAY_TYPE : number;
|
||||
VERTEX_ATTRIB_ARRAY_NORMALIZED : number;
|
||||
VERTEX_ATTRIB_ARRAY_POINTER : number;
|
||||
VERTEX_ATTRIB_ARRAY_BUFFER_BINDING : number;
|
||||
COMPILE_STATUS : number;
|
||||
INFO_LOG_LENGTH : number;
|
||||
SHADER_SOURCE_LENGTH : number;
|
||||
LOW_FLOAT : number;
|
||||
MEDIUM_FLOAT : number;
|
||||
HIGH_FLOAT : number;
|
||||
LOW_INT : number;
|
||||
MEDIUM_INT : number;
|
||||
HIGH_INT : number;
|
||||
FRAMEBUFFER : number;
|
||||
RENDERBUFFER : number;
|
||||
RGBA4 : number;
|
||||
RGB5_A1 : number;
|
||||
RGB565 : number;
|
||||
DEPTH_COMPONENT16 : number;
|
||||
STENCIL_INDEX : number;
|
||||
STENCIL_INDEX8 : number;
|
||||
DEPTH_STENCIL : number;
|
||||
RENDERBUFFER_WIDTH : number;
|
||||
RENDERBUFFER_HEIGHT : number;
|
||||
RENDERBUFFER_INTERNAL_FORMAT : number;
|
||||
RENDERBUFFER_RED_SIZE : number;
|
||||
RENDERBUFFER_GREEN_SIZE : number;
|
||||
RENDERBUFFER_BLUE_SIZE : number;
|
||||
RENDERBUFFER_ALPHA_SIZE : number;
|
||||
RENDERBUFFER_DEPTH_SIZE : number;
|
||||
RENDERBUFFER_STENCIL_SIZE : number;
|
||||
FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE : number;
|
||||
FRAMEBUFFER_ATTACHMENT_OBJECT_NAME : number;
|
||||
FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL : number;
|
||||
FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE : number;
|
||||
COLOR_ATTACHMENT0 : number;
|
||||
DEPTH_ATTACHMENT : number;
|
||||
STENCIL_ATTACHMENT : number;
|
||||
DEPTH_STENCIL_ATTACHMENT : number;
|
||||
NONE : number;
|
||||
FRAMEBUFFER_COMPLETE : number;
|
||||
FRAMEBUFFER_INCOMPLETE_ATTACHMENT : number;
|
||||
FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT : number;
|
||||
FRAMEBUFFER_INCOMPLETE_DIMENSIONS : number;
|
||||
FRAMEBUFFER_UNSUPPORTED : number;
|
||||
FRAMEBUFFER_BINDING : number;
|
||||
RENDERBUFFER_BINDING : number;
|
||||
MAX_RENDERBUFFER_SIZE : number;
|
||||
INVALID_FRAMEBUFFER_OPERATION : number;
|
||||
UNPACK_FLIP_Y_WEBGL : number;
|
||||
UNPACK_PREMULTIPLY_ALPHA_WEBGL : number;
|
||||
CONTEXT_LOST_WEBGL : number;
|
||||
UNPACK_COLORSPACE_CONVERSION_WEBGL : number;
|
||||
BROWSER_DEFAULT_WEBGL : number;
|
||||
canvas : HTMLCanvasElement;
|
||||
getContextAttributes() : WebGLContextAttributes;
|
||||
isContextLost() : bool;
|
||||
getSupportedExtensions() : string[];
|
||||
getExtension(name : string) : any;
|
||||
activeTexture(texture : number) : void;
|
||||
attachShader(program : WebGLProgram, shader : WebGLShader) : void;
|
||||
bindAttribLocation(program : WebGLProgram, index : number, name : string) : void;
|
||||
bindBuffer(target : number, buffer : WebGLBuffer) : void;
|
||||
bindFramebuffer(target : number, framebuffer : WebGLFramebuffer) : void;
|
||||
bindRenderbuffer(target : number, renderbuffer : WebGLRenderbuffer) : void;
|
||||
bindTexture(target : number, texture : WebGLTexture) : void;
|
||||
blendColor(red : number, green : number, blue : number, alpha : number) : void;
|
||||
blendEquation(mode : number) : void;
|
||||
blendEquationSeparate(modeRGB : number, modeAlpha : number) : void;
|
||||
blendFunc(sfactor : number, dfactor : number) : void;
|
||||
blendFuncSeparate(srcRGB : number, dstRGB : number, srcAlpha : number, dstAlpha : number) : void;
|
||||
bufferData(target : number, size : number, usage : number) : void;
|
||||
bufferData(target : number, data : ArrayBufferView, usage : number) : void;
|
||||
bufferData(target : number, data : ArrayBuffer, usage : number) : void;
|
||||
bufferSubData(target : number, offset : number, data : ArrayBufferView) : void;
|
||||
bufferSubData(target : number, offset : number, data : ArrayBuffer) : void;
|
||||
checkFramebufferStatus(target : number) : number;
|
||||
clear(mask : number) : void;
|
||||
clearColor(red : number, green : number, blue : number, alpha : number) : void;
|
||||
clearDepth(depth : number) : void;
|
||||
clearStencil(s : number) : void;
|
||||
colorMask(red : bool, green : bool, blue : bool, alpha : bool) : void;
|
||||
compileShader(shader : WebGLShader) : void;
|
||||
copyTexImage2D(target : number, level : number, internalformat : number, x : number, y : number, width : number, height : number, border : number) : void;
|
||||
copyTexSubImage2D(target : number, level : number, xoffset : number, yoffset : number, x : number, y : number, width : number, height : number) : void;
|
||||
createBuffer() : WebGLBuffer;
|
||||
createFramebuffer() : WebGLFramebuffer;
|
||||
createProgram() : WebGLProgram;
|
||||
createRenderbuffer() : WebGLRenderbuffer;
|
||||
createShader(type : number) : WebGLShader;
|
||||
createTexture() : WebGLTexture;
|
||||
cullFace(mode : number) : void;
|
||||
deleteBuffer(buffer : WebGLBuffer) : void;
|
||||
deleteFramebuffer(framebuffer : WebGLFramebuffer) : void;
|
||||
deleteProgram(program : WebGLProgram) : void;
|
||||
deleteRenderbuffer(renderbuffer : WebGLRenderbuffer) : void;
|
||||
deleteShader(shader : WebGLShader) : void;
|
||||
deleteTexture(texture : WebGLTexture) : void;
|
||||
depthFunc(func : number) : void;
|
||||
depthMask(flag : bool) : void;
|
||||
depthRange(zNear : number, zFar : number) : void;
|
||||
detachShader(program : WebGLProgram, shader : WebGLShader) : void;
|
||||
disable(cap : number) : void;
|
||||
disableVertexAttribArray(index : number) : void;
|
||||
drawArrays(mode : number, first : number, count : number) : void;
|
||||
drawElements(mode : number, count : number, type : number, offset : number) : void;
|
||||
enable(cap : number) : void;
|
||||
enableVertexAttribArray(index : number) : void;
|
||||
finish() : void;
|
||||
flush() : void;
|
||||
framebufferRenderbuffer(target : number, attachment : number, renderbuffertarget : number, renderbuffer : WebGLRenderbuffer) : void;
|
||||
framebufferTexture2D(target : number, attachment : number, textarget : number, texture : WebGLTexture, level : number) : void;
|
||||
frontFace(mode : number) : void;
|
||||
generateMipmap(target : number) : void;
|
||||
getActiveAttrib(program : WebGLProgram, index : number) : WebGLActiveInfo;
|
||||
getActiveUniform(program : WebGLProgram, index : number) : WebGLActiveInfo;
|
||||
getAttachedShaders(program : WebGLProgram) : WebGLShader[];
|
||||
getAttribLocation(program : WebGLProgram, name : string) : number;
|
||||
getParameter(pname : number) : any;
|
||||
getBufferParameter(target : number, pname : number) : any;
|
||||
getError() : number;
|
||||
getFramebufferAttachmentParameter(target : number, attachment : number, pname : number) : any;
|
||||
getProgramParameter(program : WebGLProgram, pname : number) : any;
|
||||
getProgramInfoLog(program : WebGLProgram) : string;
|
||||
getRenderbufferParameter(target : number, pname : number) : any;
|
||||
getShaderParameter(shader : WebGLShader, pname : number) : any;
|
||||
getShaderInfoLog(shader : WebGLShader) : string;
|
||||
getShaderSource(shader : WebGLShader) : string;
|
||||
getTexParameter(target : number, pname : number) : any;
|
||||
getUniform(program : WebGLProgram, location : WebGLUniformLocation) : any;
|
||||
getUniformLocation(program : WebGLProgram, name : string) : WebGLUniformLocation;
|
||||
getVertexAttrib(index : number, pname : number) : any;
|
||||
getVertexAttribOffset(index : number, pname : number) : number;
|
||||
hint(target : number, mode : number) : void;
|
||||
isBuffer(buffer : WebGLBuffer) : bool;
|
||||
isEnabled(cap : number) : bool;
|
||||
isFramebuffer(framebuffer : WebGLFramebuffer) : bool;
|
||||
isProgram(program : WebGLProgram) : bool;
|
||||
isRenderbuffer(renderbuffer : WebGLRenderbuffer) : bool;
|
||||
isShader(shader : WebGLShader) : bool;
|
||||
isTexture(texture : WebGLTexture) : bool;
|
||||
lineWidth(width : number) : void;
|
||||
linkProgram(program : WebGLProgram) : void;
|
||||
pixelStorei(pname : number, param : number) : void;
|
||||
polygonOffset(factor : number, units : number) : void;
|
||||
readPixels(x : number, y : number, width : number, height : number, format : number, type : number, pixels : ArrayBufferView) : void;
|
||||
renderbufferStorage(target : number, internalformat : number, width : number, height : number) : void;
|
||||
sampleCoverage(value : number, invert : bool) : void;
|
||||
scissor(x : number, y : number, width : number, height : number) : void;
|
||||
shaderSource(shader : WebGLShader, source : string) : void;
|
||||
stencilFunc(func : number, ref : number, mask : number) : void;
|
||||
stencilFuncSeparate(face : number, func : number, ref : number, mask : number) : void;
|
||||
stencilMask(mask : number) : void;
|
||||
stencilMaskSeparate(face : number, mask : number) : void;
|
||||
stencilOp(fail : number, zfail : number, zpass : number) : void;
|
||||
stencilOpSeparate(face : number, fail : number, zfail : number, zpass : number) : void;
|
||||
texImage2D(target : number, level : number, internalformat : number, width : number, height : number, border : number, format : number, type : number, pixels : ArrayBufferView) : void;
|
||||
texImage2D(target : number, level : number, internalformat : number, format : number, type : number, pixels : ImageData) : void;
|
||||
texImage2D(target : number, level : number, internalformat : number, format : number, type : number, image : HTMLImageElement) : void;
|
||||
texImage2D(target : number, level : number, internalformat : number, format : number, type : number, canvas : HTMLCanvasElement) : void;
|
||||
texImage2D(target : number, level : number, internalformat : number, format : number, type : number, video : HTMLVideoElement) : void;
|
||||
texParameterf(target : number, pname : number, param : number) : void;
|
||||
texParameteri(target : number, pname : number, param : number) : void;
|
||||
texSubImage2D(target : number, level : number, xoffset : number, yoffset : number, width : number, height : number, format : number, type : number, pixels : ArrayBufferView) : void;
|
||||
texSubImage2D(target : number, level : number, xoffset : number, yoffset : number, format : number, type : number, pixels : ImageData) : void;
|
||||
texSubImage2D(target : number, level : number, xoffset : number, yoffset : number, format : number, type : number, image : HTMLImageElement) : void;
|
||||
texSubImage2D(target : number, level : number, xoffset : number, yoffset : number, format : number, type : number, canvas : HTMLCanvasElement) : void;
|
||||
texSubImage2D(target : number, level : number, xoffset : number, yoffset : number, format : number, type : number, video : HTMLVideoElement) : void;
|
||||
uniform1f(location : WebGLUniformLocation, x : number) : void;
|
||||
uniform1fv(location : WebGLUniformLocation, v : Float32Array) : void;
|
||||
uniform1fv(location : WebGLUniformLocation, v : number[]) : void;
|
||||
uniform1i(location : WebGLUniformLocation, x : number) : void;
|
||||
uniform1iv(location : WebGLUniformLocation, v : Int32Array) : void;
|
||||
uniform1iv(location : WebGLUniformLocation, v : number[]) : void;
|
||||
uniform2f(location : WebGLUniformLocation, x : number, y : number) : void;
|
||||
uniform2fv(location : WebGLUniformLocation, v : Float32Array) : void;
|
||||
uniform2fv(location : WebGLUniformLocation, v : number[]) : void;
|
||||
uniform2i(location : WebGLUniformLocation, x : number, y : number) : void;
|
||||
uniform2iv(location : WebGLUniformLocation, v : Int32Array) : void;
|
||||
uniform2iv(location : WebGLUniformLocation, v : number[]) : void;
|
||||
uniform3f(location : WebGLUniformLocation, x : number, y : number, z : number) : void;
|
||||
uniform3fv(location : WebGLUniformLocation, v : Float32Array) : void;
|
||||
uniform3fv(location : WebGLUniformLocation, v : number[]) : void;
|
||||
uniform3i(location : WebGLUniformLocation, x : number, y : number, z : number) : void;
|
||||
uniform3iv(location : WebGLUniformLocation, v : Int32Array) : void;
|
||||
uniform3iv(location : WebGLUniformLocation, v : number[]) : void;
|
||||
uniform4f(location : WebGLUniformLocation, x : number, y : number, z : number, w : number) : void;
|
||||
uniform4fv(location : WebGLUniformLocation, v : Float32Array) : void;
|
||||
uniform4fv(location : WebGLUniformLocation, v : number[]) : void;
|
||||
uniform4i(location : WebGLUniformLocation, x : number, y : number, z : number, w : number) : void;
|
||||
uniform4iv(location : WebGLUniformLocation, v : Int32Array) : void;
|
||||
uniform4iv(location : WebGLUniformLocation, v : number[]) : void;
|
||||
uniformMatrix2fv(location : WebGLUniformLocation, transpose : bool, value : Float32Array) : void;
|
||||
uniformMatrix2fv(location : WebGLUniformLocation, transpose : bool, value : number[]) : void;
|
||||
uniformMatrix3fv(location : WebGLUniformLocation, transpose : bool, value : Float32Array) : void;
|
||||
uniformMatrix3fv(location : WebGLUniformLocation, transpose : bool, value : number[]) : void;
|
||||
uniformMatrix4fv(location : WebGLUniformLocation, transpose : bool, value : Float32Array) : void;
|
||||
uniformMatrix4fv(location : WebGLUniformLocation, transpose : bool, value : number[]) : void;
|
||||
useProgram(program : WebGLProgram) : void;
|
||||
validateProgram(program : WebGLProgram) : void;
|
||||
vertexAttrib1f(indx : number, x : number) : void;
|
||||
vertexAttrib1fv(indx : number, values : Float32Array) : void;
|
||||
vertexAttrib1fv(indx : number, values : number[]) : void;
|
||||
vertexAttrib2f(indx : number, x : number, y : number) : void;
|
||||
vertexAttrib2fv(indx : number, values : Float32Array) : void;
|
||||
vertexAttrib2fv(indx : number, values : number[]) : void;
|
||||
vertexAttrib3f(indx : number, x : number, y : number, z : number) : void;
|
||||
vertexAttrib3fv(indx : number, values : Float32Array) : void;
|
||||
vertexAttrib3fv(indx : number, values : number[]) : void;
|
||||
vertexAttrib4f(indx : number, x : number, y : number, z : number, w : number) : void;
|
||||
vertexAttrib4fv(indx : number, values : Float32Array) : void;
|
||||
vertexAttrib4fv(indx : number, values : number[]) : void;
|
||||
vertexAttribPointer(indx : number, size : number, type : number, normalized : bool, stride : number, offset : number) : void;
|
||||
viewport(x : number, y : number, width : number, height : number) : void;
|
||||
}
|
||||
|
||||
interface WebGLContextEvent extends Event {
|
||||
statusMessage : string;
|
||||
initWebGLContextEvent(typeArg : string, canBubbleArg : bool, cancelableArg : bool, statusMessageArg : string) : void;
|
||||
}
|
||||
|
||||
//Extend the window object with cross Browser callbacks so TS will not complain
|
||||
//Also add the (non-standard) Canvas Element parameter for performance improvement
|
||||
interface WindowAnimationTiming {
|
||||
requestAnimationFrame(callback: FrameRequestCallback, canvas ?: HTMLCanvasElement): number;
|
||||
//msRequestAnimationFrame(callback: FrameRequestCallback, canvas ?: HTMLCanvasElement): number;
|
||||
mozRequestAnimationFrame(callback: FrameRequestCallback, canvas ?: HTMLCanvasElement): number;
|
||||
webkitRequestAnimationFrame(callback: FrameRequestCallback, canvas ?: HTMLCanvasElement): number;
|
||||
oRequestAnimationFrame(callback: FrameRequestCallback, canvas ?: HTMLCanvasElement): number;
|
||||
|
||||
cancelRequestAnimationFrame(handle: number): void;
|
||||
//msCancelRequestAnimationFrame(handle: number): void;
|
||||
mozCancelRequestAnimationFrame(handle: number): void;
|
||||
webkitCancelRequestAnimationFrame(handle: number): void;
|
||||
oCancelRequestAnimationFrame(handle: number): void;
|
||||
}
|
||||
|
||||
//To make WebGL work
|
||||
interface HTMLCanvasElement {
|
||||
getContext(contextId: string, params : {}): WebGLRenderingContext;
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user