@galacean/effects-webgl 0.0.1-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ext-wrap.d.ts +22 -0
- package/dist/gl-context-manager.d.ts +16 -0
- package/dist/gl-engine.d.ts +11 -0
- package/dist/gl-frame-buffer.d.ts +33 -0
- package/dist/gl-geometry.d.ts +78 -0
- package/dist/gl-gpu-buffer.d.ts +36 -0
- package/dist/gl-material-state.d.ts +50 -0
- package/dist/gl-material.d.ts +106 -0
- package/dist/gl-pipeline-context.d.ts +316 -0
- package/dist/gl-program.d.ts +40 -0
- package/dist/gl-render-buffer.d.ts +12 -0
- package/dist/gl-renderer-internal.d.ts +43 -0
- package/dist/gl-renderer.d.ts +41 -0
- package/dist/gl-shader-library.d.ts +26 -0
- package/dist/gl-shader.d.ts +28 -0
- package/dist/gl-texture.d.ts +26 -0
- package/dist/gl-uniform-utils.d.ts +45 -0
- package/dist/gl-vertex-array-object.d.ts +20 -0
- package/dist/index.d.ts +12 -0
- package/package.json +49 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { Disposable } from '@galacean/effects-core';
|
|
2
|
+
import { RenderPass } from '@galacean/effects-core';
|
|
3
|
+
import type { GLRenderer } from './gl-renderer';
|
|
4
|
+
import type { GLTexture } from './gl-texture';
|
|
5
|
+
/**
|
|
6
|
+
* 常用的 GPU 方法,不是规范必须实现的
|
|
7
|
+
*/
|
|
8
|
+
export interface RendererExtensions {
|
|
9
|
+
copyTexture?: (source: GLTexture, tex: GLTexture) => void;
|
|
10
|
+
resetColorAttachments?: (rp: RenderPass, colorAttachments: GLTexture[]) => void;
|
|
11
|
+
}
|
|
12
|
+
export declare class ExtWrap implements RendererExtensions, Disposable {
|
|
13
|
+
readonly renderer: GLRenderer;
|
|
14
|
+
private copyRenderPass?;
|
|
15
|
+
constructor(renderer: GLRenderer);
|
|
16
|
+
resetColorAttachments(rp: RenderPass, colorTextures: GLTexture[]): void;
|
|
17
|
+
copyTexture(source: GLTexture, tex: GLTexture): void;
|
|
18
|
+
copy2(source: GLTexture, target: GLTexture): void;
|
|
19
|
+
copy1(source: GLTexture, target: GLTexture): void;
|
|
20
|
+
private createCopyRenderPass;
|
|
21
|
+
dispose(): void;
|
|
22
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { LostHandler, RestoreHandler } from '@galacean/effects-core';
|
|
2
|
+
export declare class GLContextManager {
|
|
3
|
+
canvas: HTMLCanvasElement | OffscreenCanvas | null;
|
|
4
|
+
readonly glType: 'webgl' | 'webgl2';
|
|
5
|
+
gl: WebGLRenderingContext | WebGL2RenderingContext | null;
|
|
6
|
+
private readonly contextLostListener;
|
|
7
|
+
private readonly contextRestoredListener;
|
|
8
|
+
private readonly restoreHandlers;
|
|
9
|
+
private readonly lostHandlers;
|
|
10
|
+
constructor(canvas: HTMLCanvasElement | OffscreenCanvas | null, glType?: 'webgl' | 'webgl2', options?: WebGLContextAttributes);
|
|
11
|
+
dispose(): void;
|
|
12
|
+
addLostHandler(lostHandler: LostHandler): void;
|
|
13
|
+
removeLostHandler(lostHandler: LostHandler): void;
|
|
14
|
+
addRestoreHandler(restoreHandler: RestoreHandler): void;
|
|
15
|
+
removeRestoreHandler(restorable: RestoreHandler): void;
|
|
16
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Engine } from '@galacean/effects-core';
|
|
2
|
+
import type { GLRendererInternal } from './gl-renderer-internal';
|
|
3
|
+
import type { GLRenderer } from './gl-renderer';
|
|
4
|
+
import type { GLPipelineContext } from './gl-pipeline-context';
|
|
5
|
+
export declare class GLEngine extends Engine {
|
|
6
|
+
constructor(gl: WebGLRenderingContext | WebGL2RenderingContext);
|
|
7
|
+
dispose(): void;
|
|
8
|
+
getGLRenderer(): GLRenderer;
|
|
9
|
+
getGLRendererInternal(): GLRendererInternal;
|
|
10
|
+
getGLPipelineContext(): GLPipelineContext;
|
|
11
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { Disposable, FrameBufferProps, RenderBuffer, Renderer, Texture } from '@galacean/effects-core';
|
|
2
|
+
import { FrameBuffer, RenderPassDestroyAttachmentType } from '@galacean/effects-core';
|
|
3
|
+
import { GLRenderBuffer } from './gl-render-buffer';
|
|
4
|
+
import type { GLRenderer } from './gl-renderer';
|
|
5
|
+
import { GLTexture } from './gl-texture';
|
|
6
|
+
import type { GLEngine } from './gl-engine';
|
|
7
|
+
export declare class GLFrameBuffer extends FrameBuffer implements Disposable {
|
|
8
|
+
storeInvalidAttachments?: GLenum[];
|
|
9
|
+
depthStencilRenderBuffer?: GLRenderBuffer;
|
|
10
|
+
depthTexture?: GLTexture;
|
|
11
|
+
stencilTexture?: GLTexture;
|
|
12
|
+
colorTextures: GLTexture[];
|
|
13
|
+
fbo?: WebGLFramebuffer;
|
|
14
|
+
engine: GLEngine;
|
|
15
|
+
readonly renderer: GLRenderer;
|
|
16
|
+
private readonly attachmentTextures;
|
|
17
|
+
constructor(props: FrameBufferProps, renderer: Renderer);
|
|
18
|
+
get stencilStorage(): RenderBuffer | undefined;
|
|
19
|
+
get depthStorage(): RenderBuffer | undefined;
|
|
20
|
+
getDepthTexture(): Texture | undefined;
|
|
21
|
+
getStencilTexture(): Texture | undefined;
|
|
22
|
+
getColorTextures(): Texture[];
|
|
23
|
+
private updateAttachmentTextures;
|
|
24
|
+
private updateProps;
|
|
25
|
+
private getStoreAttachments;
|
|
26
|
+
unbind(): void;
|
|
27
|
+
bind(): void;
|
|
28
|
+
resetColorTextures(colorTextures?: Texture[]): void;
|
|
29
|
+
resize(x: number, y: number, width: number, height: number): void;
|
|
30
|
+
dispose(opt?: {
|
|
31
|
+
depthStencilAttachment?: RenderPassDestroyAttachmentType;
|
|
32
|
+
}): void;
|
|
33
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import type { Disposable, GeometryProps, spec, Engine } from '@galacean/effects-core';
|
|
2
|
+
import { Geometry } from '@galacean/effects-core';
|
|
3
|
+
import type { GLGPUBufferProps } from './gl-gpu-buffer';
|
|
4
|
+
import { GLGPUBuffer } from './gl-gpu-buffer';
|
|
5
|
+
import type { GLPipelineContext } from './gl-pipeline-context';
|
|
6
|
+
import type { GLVertexArrayObject } from './gl-vertex-array-object';
|
|
7
|
+
/**
|
|
8
|
+
* 应用层 Geometry 对象,本身不直接保存 GPU 资源而是通过 geometryInternal 成员保存 GPU 资源
|
|
9
|
+
*/
|
|
10
|
+
export declare class GLGeometry extends Geometry implements Disposable {
|
|
11
|
+
/**
|
|
12
|
+
* 索引缓冲区
|
|
13
|
+
*/
|
|
14
|
+
indicesBuffer?: GLGPUBuffer;
|
|
15
|
+
drawCount: number;
|
|
16
|
+
drawStart: number;
|
|
17
|
+
mode: number;
|
|
18
|
+
/**
|
|
19
|
+
* 记录顶点属性信息用于 GLProgram 绑定顶点属性
|
|
20
|
+
*/
|
|
21
|
+
attributes: Record<string, spec.AttributeWithType>;
|
|
22
|
+
/**
|
|
23
|
+
* JS 端记录数据,用于 flush
|
|
24
|
+
*/
|
|
25
|
+
bufferProps: Record<string, GLGPUBufferProps>;
|
|
26
|
+
/**
|
|
27
|
+
* 记录了顶点属性与 GPUBuffer 对应关系
|
|
28
|
+
*/
|
|
29
|
+
buffers: Record<string, GLGPUBuffer>;
|
|
30
|
+
indices?: spec.TypedArray;
|
|
31
|
+
readonly vaos: Record<string, GLVertexArrayObject | undefined>;
|
|
32
|
+
protected initialized: boolean;
|
|
33
|
+
private options?;
|
|
34
|
+
private attributesReleasable;
|
|
35
|
+
private indicesReleasable;
|
|
36
|
+
private dirtyFlags;
|
|
37
|
+
private attributesName;
|
|
38
|
+
private destroyed;
|
|
39
|
+
engine?: Engine;
|
|
40
|
+
constructor(engine: Engine, props: GeometryProps);
|
|
41
|
+
get isDestroyed(): boolean;
|
|
42
|
+
get isInitialized(): boolean;
|
|
43
|
+
getOptions(): {
|
|
44
|
+
name?: string | undefined;
|
|
45
|
+
attributes?: Record<string, import("@galacean/effects-core").Attribute> | undefined;
|
|
46
|
+
indices?: {
|
|
47
|
+
data: spec.TypedArray;
|
|
48
|
+
releasable?: boolean | undefined;
|
|
49
|
+
} | undefined;
|
|
50
|
+
mode?: import("@galacean/effects-core").GeometryDrawMode | undefined;
|
|
51
|
+
drawCount?: number | undefined;
|
|
52
|
+
drawStart?: number | undefined;
|
|
53
|
+
instanceCount?: number | undefined;
|
|
54
|
+
bufferUsage?: 35044 | 35048 | undefined;
|
|
55
|
+
maxVertex?: number | undefined;
|
|
56
|
+
};
|
|
57
|
+
/**
|
|
58
|
+
* Geometry 的 GPU 资源初始化方法,在绘制前调用
|
|
59
|
+
*/
|
|
60
|
+
initialize(): void;
|
|
61
|
+
getAttributeBuffer(name: string): GLGPUBuffer | undefined;
|
|
62
|
+
setAttributeData(name: string, data: spec.TypedArray): void;
|
|
63
|
+
getAttributeData(name: string): spec.TypedArray | undefined;
|
|
64
|
+
setAttributeSubData(name: string, offset: number, data: spec.TypedArray): void;
|
|
65
|
+
getIndexData(): spec.TypedArray | undefined;
|
|
66
|
+
setIndexData(data?: spec.TypedArray): void;
|
|
67
|
+
setIndexSubData(offset: number, data: spec.TypedArray): void;
|
|
68
|
+
getAttributeStride(name: string): number;
|
|
69
|
+
getAttributeNames(): string[];
|
|
70
|
+
setDrawStart(count: number): void;
|
|
71
|
+
getDrawStart(): number;
|
|
72
|
+
setDrawCount(count: number): void;
|
|
73
|
+
getDrawCount(): number;
|
|
74
|
+
private getAttributeBufferOption;
|
|
75
|
+
createIndicesBuffer(pipelineContext: GLPipelineContext, data: spec.TypedArray): GLGPUBuffer;
|
|
76
|
+
flush(): void;
|
|
77
|
+
dispose(): void;
|
|
78
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { Disposable, spec } from '@galacean/effects-core';
|
|
2
|
+
import type { GLPipelineContext } from './gl-pipeline-context';
|
|
3
|
+
type GPUBufferTarget = WebGLRenderingContext['ARRAY_BUFFER'] | WebGLRenderingContext['ELEMENT_ARRAY_BUFFER'] | WebGL2RenderingContext['COPY_READ_BUFFER'] | WebGL2RenderingContext['COPY_WRITE_BUFFER'] | WebGL2RenderingContext['TRANSFORM_FEEDBACK_BUFFER'] | WebGL2RenderingContext['UNIFORM_BUFFER'] | WebGL2RenderingContext['PIXEL_PACK_BUFFER'] | WebGL2RenderingContext['PIXEL_UNPACK_BUFFER'];
|
|
4
|
+
type GPUBufferType = WebGLRenderingContext['UNSIGNED_INT'] | WebGLRenderingContext['UNSIGNED_SHORT'] | WebGLRenderingContext['UNSIGNED_BYTE'] | WebGLRenderingContext['FLOAT'] | WebGLRenderingContext['INT'] | WebGLRenderingContext['SHORT'] | WebGLRenderingContext['BYTE'];
|
|
5
|
+
export interface GLGPUBufferProps {
|
|
6
|
+
name?: string;
|
|
7
|
+
target?: GPUBufferTarget;
|
|
8
|
+
type?: GPUBufferType;
|
|
9
|
+
/**
|
|
10
|
+
* 数据元素的总量
|
|
11
|
+
*/
|
|
12
|
+
elementCount?: number;
|
|
13
|
+
data?: spec.TypedArray;
|
|
14
|
+
usage?: WebGLRenderingContext['STATIC_DRAW'] | WebGLRenderingContext['DYNAMIC_DRAW'];
|
|
15
|
+
}
|
|
16
|
+
export declare class GLGPUBuffer implements Disposable {
|
|
17
|
+
readonly pipelineContext: GLPipelineContext;
|
|
18
|
+
readonly bytesPerElement: number;
|
|
19
|
+
readonly target: GPUBufferTarget;
|
|
20
|
+
readonly type: GPUBufferType;
|
|
21
|
+
readonly usage: WebGLRenderingContext['STATIC_DRAW'] | WebGLRenderingContext['DYNAMIC_DRAW'] | WebGLRenderingContext['STREAM_DRAW'];
|
|
22
|
+
readonly glBuffer: WebGLBuffer | null;
|
|
23
|
+
private byteLength;
|
|
24
|
+
private destroyed;
|
|
25
|
+
constructor(pipelineContext: GLPipelineContext, props: GLGPUBufferProps);
|
|
26
|
+
get elementCount(): number;
|
|
27
|
+
get isDestroyed(): boolean;
|
|
28
|
+
private createGLBuffer;
|
|
29
|
+
bind(): void;
|
|
30
|
+
bufferData(data: spec.TypedArray | number): void;
|
|
31
|
+
bufferSubData(elementOffset: number, data: spec.TypedArray): void;
|
|
32
|
+
dispose(): void;
|
|
33
|
+
readSubData(elementOffset: number, dstBuffer: spec.TypedArray): boolean;
|
|
34
|
+
}
|
|
35
|
+
export declare function getBytesPerElementByGLType(type: number): number;
|
|
36
|
+
export {};
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { GLPipelineContext } from './gl-pipeline-context';
|
|
2
|
+
export declare class GLMaterialState {
|
|
3
|
+
blending: boolean;
|
|
4
|
+
blendFunctionParameters: [blendSrc: GLenum, blendDst: GLenum, blendSrcAlpha: GLenum, blendDstAlpha: GLenum];
|
|
5
|
+
blendEquationParameters: [blendEquationRGB: GLenum, blendEquationAlpha: GLenum];
|
|
6
|
+
blendColor: [r: number, g: number, b: number, a: number];
|
|
7
|
+
depthTest: boolean;
|
|
8
|
+
depthMask: boolean;
|
|
9
|
+
depthRange: [zNear: GLenum, zFar: GLenum];
|
|
10
|
+
depthFunc: GLenum;
|
|
11
|
+
polygonOffset: [factor: GLenum, units: GLenum];
|
|
12
|
+
polygonOffsetFill: boolean;
|
|
13
|
+
sampleAlphaToCoverage: boolean;
|
|
14
|
+
colorMask: [r: boolean, g: boolean, b: boolean, a: boolean];
|
|
15
|
+
stencilTest: boolean;
|
|
16
|
+
stencilMask: [front: GLenum, back: GLenum];
|
|
17
|
+
stencilRef: [front: GLenum, back: GLenum];
|
|
18
|
+
stencilFunc: [front: GLenum, back: GLenum];
|
|
19
|
+
stencilOpFail: [front: GLenum, back: GLenum];
|
|
20
|
+
stencilOpZFail: [front: GLenum, back: GLenum];
|
|
21
|
+
stencilOpZPass: [front: GLenum, back: GLenum];
|
|
22
|
+
culling: boolean;
|
|
23
|
+
frontFace: GLenum;
|
|
24
|
+
cullFace: GLenum;
|
|
25
|
+
constructor();
|
|
26
|
+
setBlendColor(color: [r: number, g: number, b: number, a: number]): void;
|
|
27
|
+
setBlending(value: boolean): void;
|
|
28
|
+
setBlendFunctionParameters(value: [blendSrc: GLenum, blendDst: GLenum, blendSrcAlpha: GLenum, blendDstAlpha: GLenum]): void;
|
|
29
|
+
setBlendEquationParameters(value: [rgb: GLenum, alpha: GLenum]): void;
|
|
30
|
+
setDepthTest(value: boolean): void;
|
|
31
|
+
setDepthMask(value: boolean): void;
|
|
32
|
+
setDepthRange(value: [zNear: GLenum, zFar: GLenum]): void;
|
|
33
|
+
setDepthFunc(value: GLenum): void;
|
|
34
|
+
setPolygonOffsetFill(value: boolean): void;
|
|
35
|
+
setPolygonOffset(value: [factor: GLenum, units: GLenum]): void;
|
|
36
|
+
setSampleAlphaToCoverage(value: boolean): void;
|
|
37
|
+
setColorMask(color: [r: boolean, g: boolean, b: boolean, a: boolean]): void;
|
|
38
|
+
setStencilTest(value: boolean): void;
|
|
39
|
+
setStencilMask(value: [front: GLenum, back: GLenum]): void;
|
|
40
|
+
setStencilRef(value: [front: GLenum, back: GLenum]): void;
|
|
41
|
+
setStencilFunc(value: [front: GLenum, back: GLenum]): void;
|
|
42
|
+
setStencilOpFail(value: [front: GLenum, back: GLenum]): void;
|
|
43
|
+
setStencilOpZFail(value: [front: GLenum, back: GLenum]): void;
|
|
44
|
+
setStencilOpZPass(value: [front: GLenum, back: GLenum]): void;
|
|
45
|
+
setCulling(value: boolean): void;
|
|
46
|
+
setFrontFace(value: GLenum): void;
|
|
47
|
+
setCullFace(value: GLenum): void;
|
|
48
|
+
reset(): void;
|
|
49
|
+
apply(pipelineContext: GLPipelineContext): void;
|
|
50
|
+
}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import type { MaterialDestroyOptions, MaterialProps, MaterialStates, UndefinedAble, Texture, spec, Engine, GlobalUniforms } from '@galacean/effects-core';
|
|
2
|
+
import { Material } from '@galacean/effects-core';
|
|
3
|
+
import { GLMaterialState } from './gl-material-state';
|
|
4
|
+
import type { GLPipelineContext } from './gl-pipeline-context';
|
|
5
|
+
import type { GLShader } from './gl-shader';
|
|
6
|
+
import type { GLRenderer } from './gl-renderer';
|
|
7
|
+
export declare class GLMaterial extends Material {
|
|
8
|
+
shader: GLShader;
|
|
9
|
+
floats: Record<string, number>;
|
|
10
|
+
ints: Record<string, number>;
|
|
11
|
+
vector2s: Record<string, spec.vec2>;
|
|
12
|
+
vector3s: Record<string, spec.vec3>;
|
|
13
|
+
vector4s: Record<string, spec.vec4>;
|
|
14
|
+
matrices: Record<string, spec.mat4>;
|
|
15
|
+
matrice3s: Record<string, spec.mat3>;
|
|
16
|
+
textures: Record<string, Texture>;
|
|
17
|
+
floatArrays: Record<string, number[]>;
|
|
18
|
+
vector4Arrays: Record<string, number[]>;
|
|
19
|
+
matrixArrays: Record<string, number[]>;
|
|
20
|
+
samplers: string[];
|
|
21
|
+
uniforms: string[];
|
|
22
|
+
uniformDirtyFlag: boolean;
|
|
23
|
+
glMaterialState: GLMaterialState;
|
|
24
|
+
private engine?;
|
|
25
|
+
constructor(engine: Engine, props: MaterialProps);
|
|
26
|
+
get blending(): UndefinedAble<boolean>;
|
|
27
|
+
set blending(blending: UndefinedAble<boolean>);
|
|
28
|
+
get blendColor(): UndefinedAble<[r: number, g: number, b: number, a: number]>;
|
|
29
|
+
set blendColor(color: UndefinedAble<[r: number, g: number, b: number, a: number]>);
|
|
30
|
+
get blendFunction(): UndefinedAble<[blendSrc: number, blendDst: number, blendSrcAlpha: number, blendDstAlpha: number]>;
|
|
31
|
+
set blendFunction(func: UndefinedAble<[blendSrc: number, blendDst: number, blendSrcAlpha: number, blendDstAlpha: number]>);
|
|
32
|
+
get blendEquation(): UndefinedAble<[rgb: number, alpha: number]>;
|
|
33
|
+
set blendEquation(equation: UndefinedAble<[rgb: number, alpha: number]>);
|
|
34
|
+
get depthTest(): UndefinedAble<boolean>;
|
|
35
|
+
set depthTest(value: UndefinedAble<boolean>);
|
|
36
|
+
get depthMask(): UndefinedAble<boolean>;
|
|
37
|
+
set depthMask(value: UndefinedAble<boolean>);
|
|
38
|
+
get depthRange(): UndefinedAble<[number, number]>;
|
|
39
|
+
set depthRange(value: UndefinedAble<[number, number]>);
|
|
40
|
+
get depthFunc(): UndefinedAble<number>;
|
|
41
|
+
set depthFunc(value: UndefinedAble<number>);
|
|
42
|
+
get polygonOffsetFill(): UndefinedAble<boolean>;
|
|
43
|
+
set polygonOffsetFill(value: UndefinedAble<boolean>);
|
|
44
|
+
get polygonOffset(): UndefinedAble<[number, number]>;
|
|
45
|
+
set polygonOffset(value: UndefinedAble<[number, number]>);
|
|
46
|
+
get sampleAlphaToCoverage(): UndefinedAble<boolean>;
|
|
47
|
+
set sampleAlphaToCoverage(value: UndefinedAble<boolean>);
|
|
48
|
+
get colorMask(): UndefinedAble<[r: boolean, g: boolean, b: boolean, a: boolean]>;
|
|
49
|
+
set colorMask(value: UndefinedAble<[r: boolean, g: boolean, b: boolean, a: boolean]>);
|
|
50
|
+
get stencilTest(): UndefinedAble<boolean>;
|
|
51
|
+
set stencilTest(value: UndefinedAble<boolean>);
|
|
52
|
+
get stencilMask(): UndefinedAble<[number, number]>;
|
|
53
|
+
set stencilMask(value: UndefinedAble<[number, number]>);
|
|
54
|
+
get stencilRef(): UndefinedAble<[number, number]>;
|
|
55
|
+
set stencilRef(value: UndefinedAble<[number, number]>);
|
|
56
|
+
get stencilFunc(): UndefinedAble<[number, number]>;
|
|
57
|
+
set stencilFunc(value: UndefinedAble<[number, number]>);
|
|
58
|
+
get stencilOpFail(): UndefinedAble<[number, number]>;
|
|
59
|
+
set stencilOpFail(value: UndefinedAble<[number, number]>);
|
|
60
|
+
get stencilOpZFail(): UndefinedAble<[number, number]>;
|
|
61
|
+
set stencilOpZFail(value: UndefinedAble<[number, number]>);
|
|
62
|
+
get stencilOpZPass(): UndefinedAble<[number, number]>;
|
|
63
|
+
set stencilOpZPass(value: UndefinedAble<[number, number]>);
|
|
64
|
+
get culling(): UndefinedAble<boolean>;
|
|
65
|
+
set culling(value: UndefinedAble<boolean>);
|
|
66
|
+
get frontFace(): UndefinedAble<number>;
|
|
67
|
+
set frontFace(value: UndefinedAble<number>);
|
|
68
|
+
get cullFace(): UndefinedAble<number>;
|
|
69
|
+
set cullFace(value: UndefinedAble<number>);
|
|
70
|
+
enableKeyword(keyword: string): void;
|
|
71
|
+
disableKeyword(keyword: string): void;
|
|
72
|
+
isKeywordEnabled(keyword: string): boolean;
|
|
73
|
+
createMaterialStates(states: MaterialStates): void;
|
|
74
|
+
get isDestroyed(): boolean;
|
|
75
|
+
/**shader和texture的GPU资源初始化。 */
|
|
76
|
+
initialize(): void;
|
|
77
|
+
setupStates(pipelineContext: GLPipelineContext): void;
|
|
78
|
+
use(renderer: GLRenderer, globalUniforms?: GlobalUniforms): void;
|
|
79
|
+
getFloat(name: string): number | null;
|
|
80
|
+
setFloat(name: string, value: number): void;
|
|
81
|
+
getInt(name: string): number | null;
|
|
82
|
+
setInt(name: string, value: number): void;
|
|
83
|
+
getFloats(name: string): number[] | null;
|
|
84
|
+
setFloats(name: string, value: number[]): void;
|
|
85
|
+
getVector2(name: string): spec.vec2 | null;
|
|
86
|
+
setVector2(name: string, value: spec.vec2): void;
|
|
87
|
+
getVector3(name: string): spec.vec3 | null;
|
|
88
|
+
setVector3(name: string, value: spec.vec3): void;
|
|
89
|
+
getVector4(name: string): spec.vec4 | null;
|
|
90
|
+
setVector4(name: string, value: spec.vec4): void;
|
|
91
|
+
getMatrix(name: string): spec.mat4 | null;
|
|
92
|
+
setMatrix(name: string, value: spec.mat4): void;
|
|
93
|
+
setMatrix3(name: string, value: spec.mat3): void;
|
|
94
|
+
getVector4Array(name: string): number[];
|
|
95
|
+
setVector4Array(name: string, array: spec.vec4[]): void;
|
|
96
|
+
getMatrixArray(name: string): number[] | null;
|
|
97
|
+
setMatrixArray(name: string, array: spec.mat4[]): void;
|
|
98
|
+
setMatrixNumberArray(name: string, array: number[]): void;
|
|
99
|
+
getTexture(name: string): Texture | null;
|
|
100
|
+
setTexture(name: string, texture: Texture): void;
|
|
101
|
+
hasUniform(name: string): boolean;
|
|
102
|
+
clone(props?: MaterialProps): Material;
|
|
103
|
+
cloneUniforms(sourceMaterial: Material): void;
|
|
104
|
+
private checkUniform;
|
|
105
|
+
dispose(options?: MaterialDestroyOptions): void;
|
|
106
|
+
}
|
|
@@ -0,0 +1,316 @@
|
|
|
1
|
+
import type { Disposable, Texture } from '@galacean/effects-core';
|
|
2
|
+
import { GLShaderLibrary } from './gl-shader-library';
|
|
3
|
+
import type { GLEngine } from './gl-engine';
|
|
4
|
+
export type Nullable<T> = T | null;
|
|
5
|
+
export declare class GLPipelineContext implements Disposable {
|
|
6
|
+
engine: GLEngine;
|
|
7
|
+
gl: WebGLRenderingContext | WebGL2RenderingContext;
|
|
8
|
+
textureUnitDict: Record<string, WebGLTexture | null>;
|
|
9
|
+
shaderLibrary: GLShaderLibrary;
|
|
10
|
+
private readonly maxTextureCount;
|
|
11
|
+
private glCapabilityCache;
|
|
12
|
+
private currentFramebuffer;
|
|
13
|
+
private currentTextureBinding;
|
|
14
|
+
private currentRenderBuffer;
|
|
15
|
+
private activeTextureIndex;
|
|
16
|
+
private pixelStorei;
|
|
17
|
+
constructor(engine: GLEngine, gl: WebGLRenderingContext | WebGL2RenderingContext);
|
|
18
|
+
dispose(): void;
|
|
19
|
+
private reset;
|
|
20
|
+
toggle(capability: GLenum, enable?: boolean): void;
|
|
21
|
+
/**
|
|
22
|
+
* 对于该上下文开启某种特性
|
|
23
|
+
* @param capability
|
|
24
|
+
* example:
|
|
25
|
+
* gl.enable(gl.DITHER);
|
|
26
|
+
*/
|
|
27
|
+
enable(capability: GLenum): void;
|
|
28
|
+
/**
|
|
29
|
+
* 基于某种上下文关闭特性
|
|
30
|
+
* @param capability
|
|
31
|
+
* example:
|
|
32
|
+
* gl.disable(gl.DITHER);
|
|
33
|
+
*/
|
|
34
|
+
disable(capability: GLenum): void;
|
|
35
|
+
/**
|
|
36
|
+
* 绑定framebuffer webgl2新增: gl.DRAW_FRAMEBUFFER 和 gl.READ_FRAMEBUFFER
|
|
37
|
+
* @param target
|
|
38
|
+
* @param framebuffer
|
|
39
|
+
* example:
|
|
40
|
+
* const framebuffer = gl.createFramebuffer();
|
|
41
|
+
* gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer);
|
|
42
|
+
*/
|
|
43
|
+
bindFramebuffer(target: GLenum, framebuffer: WebGLFramebuffer | null): void;
|
|
44
|
+
bindRenderBuffer(target: GLenum, renderBuffer: WebGLRenderbuffer | null): void;
|
|
45
|
+
/**
|
|
46
|
+
* 绑定系统 framebuffer
|
|
47
|
+
*/
|
|
48
|
+
bindSystemFramebuffer(): void;
|
|
49
|
+
/**
|
|
50
|
+
* 将定义好的 WebGLProgram 对象添加到当前的渲染状态中。
|
|
51
|
+
* @param program
|
|
52
|
+
* example:
|
|
53
|
+
* gl.useProgram(program);
|
|
54
|
+
* gl.useProgram(null);
|
|
55
|
+
*/
|
|
56
|
+
useProgram(program: WebGLProgram | null): void;
|
|
57
|
+
/**
|
|
58
|
+
* 使用预设值来清空缓冲
|
|
59
|
+
* @param mask
|
|
60
|
+
* example:
|
|
61
|
+
* gl.clear(gl.DEPTH_BUFFER_BIT);
|
|
62
|
+
* gl.clear(gl.DEPTH_BUFFER_BIT | gl.COLOR_BUFFER_BIT);
|
|
63
|
+
*/
|
|
64
|
+
clear(mask: number): void;
|
|
65
|
+
/*** depth start ***/
|
|
66
|
+
/**
|
|
67
|
+
* 设置深度缓冲区的深度清除值
|
|
68
|
+
* @param depth
|
|
69
|
+
* example:
|
|
70
|
+
* gl.clearDepth(0.5);
|
|
71
|
+
*/
|
|
72
|
+
clearDepth(depth: GLclampf): void;
|
|
73
|
+
/**
|
|
74
|
+
* 指定将输入像素深度与当前深度缓冲区值进行比较的函数。
|
|
75
|
+
* @param func
|
|
76
|
+
* example:
|
|
77
|
+
* gl.enable(gl.DEPTH_TEST);
|
|
78
|
+
* gl.depthFunc(gl.NEVER);
|
|
79
|
+
*/
|
|
80
|
+
depthFunc(func: GLenum): void;
|
|
81
|
+
/**
|
|
82
|
+
* 设置是否启用写入深度缓冲。
|
|
83
|
+
* @param flag
|
|
84
|
+
* example:
|
|
85
|
+
* gl.depthMask(false);
|
|
86
|
+
*/
|
|
87
|
+
depthMask(flag: boolean): void;
|
|
88
|
+
polygonOffset(factor: number, unit: number): void;
|
|
89
|
+
/**
|
|
90
|
+
* 将 z 值从规范化设备坐标映射到窗口坐标
|
|
91
|
+
* @param zNear
|
|
92
|
+
* @param zFar
|
|
93
|
+
* example:
|
|
94
|
+
* gl.depthRange(0.2, 0.6);
|
|
95
|
+
*/
|
|
96
|
+
depthRange(zNear: number, zFar: number): void;
|
|
97
|
+
/*** depth end ***/
|
|
98
|
+
/*** stencil start ***/
|
|
99
|
+
/**
|
|
100
|
+
* 模版测试设置函数和引用值。
|
|
101
|
+
* @param func
|
|
102
|
+
* @param ref
|
|
103
|
+
* @param mask
|
|
104
|
+
* example:
|
|
105
|
+
* gl.enable(gl.STENCIL_TEST);
|
|
106
|
+
* gl.stencilFunc(gl.LESS, 0, 0b1110011);
|
|
107
|
+
*/
|
|
108
|
+
clearStencil(s: GLint): void;
|
|
109
|
+
/**
|
|
110
|
+
* 控制启用和禁用模板平面中单个位的正面和背面写入
|
|
111
|
+
* @param mask
|
|
112
|
+
* example:
|
|
113
|
+
* gl.stencilMask(0xff);
|
|
114
|
+
*/
|
|
115
|
+
stencilMask(mask: number): void;
|
|
116
|
+
/**
|
|
117
|
+
* 模版测试设置函数和引用值。
|
|
118
|
+
* @param func
|
|
119
|
+
* @param ref
|
|
120
|
+
* @param mask
|
|
121
|
+
* example:
|
|
122
|
+
* gl.enable(gl.STENCIL_TEST);
|
|
123
|
+
* gl.stencilFunc(gl.LESS, 0, 0b1110011);
|
|
124
|
+
*/
|
|
125
|
+
stencilFunc(func: GLenum, ref: GLint, mask: GLuint): void;
|
|
126
|
+
/**
|
|
127
|
+
* 单面模版测试
|
|
128
|
+
* @param face
|
|
129
|
+
* @param func
|
|
130
|
+
* @param ref
|
|
131
|
+
* @param mask
|
|
132
|
+
* example:
|
|
133
|
+
* gl.enable(gl.STENCIL_TEST);
|
|
134
|
+
* gl.stencilFuncSeparate(gl.FRONT, gl.LESS, 0.2, 1110011);
|
|
135
|
+
*/
|
|
136
|
+
stencilFuncSeparate(face: GLenum, func: GLenum, ref: GLint, mask: GLuint): void;
|
|
137
|
+
/**
|
|
138
|
+
* 单面的mask写入
|
|
139
|
+
* @param face
|
|
140
|
+
* @param mask
|
|
141
|
+
* example:
|
|
142
|
+
* gl.stencilMaskSeparate(gl.FRONT, 110101);
|
|
143
|
+
*/
|
|
144
|
+
stencilMaskSeparate(face: GLenum, mask: GLuint): void;
|
|
145
|
+
/**
|
|
146
|
+
* 设置正面和背面模板测试操作
|
|
147
|
+
* @param fail
|
|
148
|
+
* @param zfail
|
|
149
|
+
* @param zpass
|
|
150
|
+
* example:
|
|
151
|
+
* gl.enable(gl.STENCIL_TEST);
|
|
152
|
+
* gl.stencilOp(gl.INCR, gl.DECR, gl.INVERT);
|
|
153
|
+
*/
|
|
154
|
+
stencilOp(fail: GLenum, zfail: GLenum, zpass: GLenum): void;
|
|
155
|
+
/**
|
|
156
|
+
* 设置正面和/或背面模板测试操作
|
|
157
|
+
* @param face
|
|
158
|
+
* @param fail
|
|
159
|
+
* @param zfail
|
|
160
|
+
* @param zpass
|
|
161
|
+
* example:
|
|
162
|
+
* gl.enable(gl.STENCIL_TEST);
|
|
163
|
+
* gl.stencilOpSeparate(gl.FRONT, gl.INCR, gl.DECR, gl.INVERT);
|
|
164
|
+
*/
|
|
165
|
+
stencilOpSeparate(face: GLenum, fail: GLenum, zfail: GLenum, zpass: GLenum): void;
|
|
166
|
+
/*** stencil end ***/
|
|
167
|
+
/*** face start ***/
|
|
168
|
+
/**
|
|
169
|
+
* 剔除方式
|
|
170
|
+
* @param mode
|
|
171
|
+
* example:
|
|
172
|
+
* gl.enable(gl.CULL_FACE);
|
|
173
|
+
* gl.cullFace(gl.FRONT_AND_BACK);
|
|
174
|
+
*/
|
|
175
|
+
cullFace(mode: GLenum): void;
|
|
176
|
+
/**
|
|
177
|
+
* 设置卷绕方向
|
|
178
|
+
* @param mode
|
|
179
|
+
* example:
|
|
180
|
+
* gl.frontFace(gl.CW);
|
|
181
|
+
*/
|
|
182
|
+
frontFace(mode: GLenum): void;
|
|
183
|
+
/*** face end ***/
|
|
184
|
+
/*** color start ***/
|
|
185
|
+
/**
|
|
186
|
+
* 设置颜色写入
|
|
187
|
+
* @param red
|
|
188
|
+
* @param green
|
|
189
|
+
* @param blue
|
|
190
|
+
* @param alpha
|
|
191
|
+
* example:
|
|
192
|
+
* gl.colorMask(true, true, true, false);
|
|
193
|
+
*/
|
|
194
|
+
clearColor(red: GLclampf, green: GLclampf, blue: GLclampf, alpha: GLclampf): void;
|
|
195
|
+
/**
|
|
196
|
+
* 设置颜色写入
|
|
197
|
+
* @param red
|
|
198
|
+
* @param green
|
|
199
|
+
* @param blue
|
|
200
|
+
* @param alpha
|
|
201
|
+
* example:
|
|
202
|
+
* gl.colorMask(true, true, true, false);
|
|
203
|
+
*/
|
|
204
|
+
colorMask(red: boolean, green: boolean, blue: boolean, alpha: boolean): void;
|
|
205
|
+
/**
|
|
206
|
+
* 设置源和目标混合因子
|
|
207
|
+
* @param red
|
|
208
|
+
* @param green
|
|
209
|
+
* @param blue
|
|
210
|
+
* @param alpha
|
|
211
|
+
* example:
|
|
212
|
+
* gl.blendColor(0, 0.5, 1, 1);
|
|
213
|
+
*/
|
|
214
|
+
blendColor(red: GLclampf, green: GLclampf, blue: GLclampf, alpha: GLclampf): void;
|
|
215
|
+
/**
|
|
216
|
+
* 用于混合像素算法
|
|
217
|
+
* @param sfactor
|
|
218
|
+
* @param dfactor
|
|
219
|
+
* example:
|
|
220
|
+
* gl.enable(gl.BLEND);
|
|
221
|
+
* gl.blendFunc(gl.SRC_COLOR, gl.DST_COLOR);
|
|
222
|
+
*/
|
|
223
|
+
blendFunc(sfactor: GLenum, dfactor: GLenum): void;
|
|
224
|
+
/**
|
|
225
|
+
* 分别设置应用在 RGB 和 Alpha 上的 factor
|
|
226
|
+
* @param srcRGB
|
|
227
|
+
* @param dstRGB
|
|
228
|
+
* @param srcAlpha
|
|
229
|
+
* @param dstAlpha
|
|
230
|
+
* example:
|
|
231
|
+
* gl.enable(gl.BLEND);
|
|
232
|
+
* gl.blendFuncSeparate(gl.SRC_COLOR, gl.DST_COLOR, gl.ONE, gl.ZERO);
|
|
233
|
+
*/
|
|
234
|
+
blendFuncSeparate(srcRGB: GLenum, dstRGB: GLenum, srcAlpha: GLenum, dstAlpha: GLenum): void;
|
|
235
|
+
/**
|
|
236
|
+
* 设置混合模式
|
|
237
|
+
* @param mode
|
|
238
|
+
* example:
|
|
239
|
+
* gl.blendEquation(gl.FUNC_ADD);
|
|
240
|
+
* gl.blendEquation(gl.FUNC_SUBTRACT);
|
|
241
|
+
* gl.blendEquation(gl.FUNC_REVERSE_SUBTRACT);
|
|
242
|
+
*/
|
|
243
|
+
blendEquation(mode: GLenum): void;
|
|
244
|
+
/**
|
|
245
|
+
* 可以分别对 RGB 和 Alpha 做不同的操作处理
|
|
246
|
+
* @param modeRGB
|
|
247
|
+
* @param modeAlpha
|
|
248
|
+
* example:
|
|
249
|
+
* gl.blendEquationSeparate(gl.FUNC_ADD, gl.FUNC_SUBTRACT);
|
|
250
|
+
*/
|
|
251
|
+
blendEquationSeparate(modeRGB: GLenum, modeAlpha: GLenum): void;
|
|
252
|
+
/*** color end ***/
|
|
253
|
+
/**
|
|
254
|
+
* 图像预处理
|
|
255
|
+
* @param pname
|
|
256
|
+
* @param param
|
|
257
|
+
* example:
|
|
258
|
+
* var tex = gl.createTexture();
|
|
259
|
+
* gl.bindTexture(gl.TEXTURE_2D, tex);
|
|
260
|
+
* gl.pixelStorei(gl.PACK_ALIGNMENT, 4);
|
|
261
|
+
*/
|
|
262
|
+
setPixelStorei(pname: GLenum, param: GLenum): void;
|
|
263
|
+
/**
|
|
264
|
+
* 用来设置视口,即指定从标准设备到窗口坐标的x、y仿射变换。
|
|
265
|
+
* @param x
|
|
266
|
+
* @param y
|
|
267
|
+
* @param width
|
|
268
|
+
* @param height
|
|
269
|
+
* example:
|
|
270
|
+
* gl.viewport(0, 0, width, height);
|
|
271
|
+
*/
|
|
272
|
+
viewport(x: number, y: number, width: number, height: number): void;
|
|
273
|
+
/**
|
|
274
|
+
* 激活指定的纹理单元
|
|
275
|
+
* @param texture
|
|
276
|
+
* example:
|
|
277
|
+
* gl.activeTexture(gl.TEXTURE1);
|
|
278
|
+
*/
|
|
279
|
+
activeTexture(texture: GLenum): void;
|
|
280
|
+
/**
|
|
281
|
+
* 绑定WebGLTexture
|
|
282
|
+
* @param target
|
|
283
|
+
* @param texture
|
|
284
|
+
* @param force
|
|
285
|
+
* example:
|
|
286
|
+
* const texture = gl.createTexture();
|
|
287
|
+
* gl.bindTexture(gl.TEXTURE_2D, texture)
|
|
288
|
+
*/
|
|
289
|
+
bindTexture(target: GLenum, texture: WebGLTexture | null, force?: boolean): void;
|
|
290
|
+
private set1;
|
|
291
|
+
private set2;
|
|
292
|
+
private set3;
|
|
293
|
+
private set4;
|
|
294
|
+
get(name: string): any;
|
|
295
|
+
setFloat(uniform: Nullable<WebGLUniformLocation>, value: number): void;
|
|
296
|
+
setInt(uniform: Nullable<WebGLUniformLocation>, value: number): void;
|
|
297
|
+
setFloats(uniform: Nullable<WebGLUniformLocation>, value: number[]): void;
|
|
298
|
+
setVector2(uniform: Nullable<WebGLUniformLocation>, value: number[]): void;
|
|
299
|
+
setVector3(uniform: Nullable<WebGLUniformLocation>, value: number[]): void;
|
|
300
|
+
setVector4(uniform: Nullable<WebGLUniformLocation>, value: number[]): void;
|
|
301
|
+
setVector4Array(uniform: Nullable<WebGLUniformLocation>, array: number[]): void;
|
|
302
|
+
setMatrix(uniform: Nullable<WebGLUniformLocation>, value: number[]): void;
|
|
303
|
+
setMatrix3(uniform: Nullable<WebGLUniformLocation>, value: number[]): void;
|
|
304
|
+
setMatrixArray(uniform: Nullable<WebGLUniformLocation>, array: number[]): void;
|
|
305
|
+
setTexture(uniform: Nullable<WebGLUniformLocation>, channel: number, texture: Texture): void;
|
|
306
|
+
/**
|
|
307
|
+
* 查询所有uniform的location。
|
|
308
|
+
* @param program 查询的shader program
|
|
309
|
+
* @param uniformsNames 查询的uniform名称列表
|
|
310
|
+
* @returns
|
|
311
|
+
*/
|
|
312
|
+
getUniforms(program: WebGLProgram, uniformsNames: string[]): Nullable<WebGLUniformLocation>[];
|
|
313
|
+
private setFloat4;
|
|
314
|
+
private setFloat3;
|
|
315
|
+
private setFloat2;
|
|
316
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { Disposable } from '@galacean/effects-core';
|
|
2
|
+
import type { GLGeometry } from './gl-geometry';
|
|
3
|
+
import { GLVertexArrayObject } from './gl-vertex-array-object';
|
|
4
|
+
import type { GLEngine } from './gl-engine';
|
|
5
|
+
export interface ProgramAttributeInfo {
|
|
6
|
+
readonly name: string;
|
|
7
|
+
readonly size: number;
|
|
8
|
+
readonly type: number;
|
|
9
|
+
readonly loc: number;
|
|
10
|
+
}
|
|
11
|
+
export interface ProgramUniformInfo {
|
|
12
|
+
readonly loc: WebGLUniformLocation;
|
|
13
|
+
readonly subInfos: ProgramUniformInfo[];
|
|
14
|
+
readonly name: string;
|
|
15
|
+
readonly size: number;
|
|
16
|
+
readonly type: number;
|
|
17
|
+
readonly textureIndex: number;
|
|
18
|
+
readonly isTexture: boolean;
|
|
19
|
+
}
|
|
20
|
+
export declare class GLProgram implements Disposable {
|
|
21
|
+
engine: GLEngine;
|
|
22
|
+
readonly program: WebGLProgram;
|
|
23
|
+
private readonly shared;
|
|
24
|
+
private readonly id;
|
|
25
|
+
private readonly uniformBlockMap;
|
|
26
|
+
private attribInfoMap;
|
|
27
|
+
private uniformInfoMap;
|
|
28
|
+
private pipelineContext;
|
|
29
|
+
constructor(engine: GLEngine, program: WebGLProgram, shared: boolean, id: string);
|
|
30
|
+
bind(): void;
|
|
31
|
+
/**
|
|
32
|
+
* 绑定 vao 对象并设置顶点属性
|
|
33
|
+
* 如果当前环境不支持 vao,则使用 gl 函数依次设置属性。
|
|
34
|
+
* @param geometry
|
|
35
|
+
* @returns
|
|
36
|
+
*/
|
|
37
|
+
setupAttributes(geometry: GLGeometry): GLVertexArrayObject;
|
|
38
|
+
createAttribMap(): Record<string, ProgramAttributeInfo>;
|
|
39
|
+
dispose(): void;
|
|
40
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { RenderBufferProps } from '@galacean/effects-core';
|
|
2
|
+
import { RenderBuffer } from '@galacean/effects-core';
|
|
3
|
+
import type { GLRendererInternal } from './gl-renderer-internal';
|
|
4
|
+
export declare class GLRenderBuffer extends RenderBuffer {
|
|
5
|
+
buffer: WebGLRenderbuffer | null;
|
|
6
|
+
private initialized;
|
|
7
|
+
private renderer?;
|
|
8
|
+
constructor(props: RenderBufferProps, renderer?: GLRendererInternal);
|
|
9
|
+
initialize(renderer: GLRendererInternal): void;
|
|
10
|
+
setSize(width: number, height: number): void;
|
|
11
|
+
dispose(): void;
|
|
12
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { Disposable, LostHandler, Material, Geometry } from '@galacean/effects-core';
|
|
2
|
+
import type { GLFrameBuffer } from './gl-frame-buffer';
|
|
3
|
+
import type { GLGPUBuffer } from './gl-gpu-buffer';
|
|
4
|
+
import type { GLPipelineContext } from './gl-pipeline-context';
|
|
5
|
+
import type { GLRenderBuffer } from './gl-render-buffer';
|
|
6
|
+
import { GLTexture } from './gl-texture';
|
|
7
|
+
import { GLVertexArrayObject } from './gl-vertex-array-object';
|
|
8
|
+
import type { GLEngine } from './gl-engine';
|
|
9
|
+
export declare class GLRendererInternal implements Disposable, LostHandler {
|
|
10
|
+
engine: GLEngine;
|
|
11
|
+
emptyTexture2D: GLTexture;
|
|
12
|
+
emptyTextureCube: GLTexture;
|
|
13
|
+
pipelineContext: GLPipelineContext;
|
|
14
|
+
gl: WebGLRenderingContext | WebGL2RenderingContext;
|
|
15
|
+
readonly name: string;
|
|
16
|
+
readonly textures: GLTexture[];
|
|
17
|
+
private readonly renderBuffers;
|
|
18
|
+
private readonly frameBuffers;
|
|
19
|
+
private sourceFbo;
|
|
20
|
+
private targetFbo;
|
|
21
|
+
private destroyed;
|
|
22
|
+
constructor(engine: GLEngine);
|
|
23
|
+
get height(): number;
|
|
24
|
+
get width(): number;
|
|
25
|
+
get canvas(): HTMLCanvasElement | OffscreenCanvas;
|
|
26
|
+
get isDestroyed(): boolean;
|
|
27
|
+
copy2(source: GLTexture, target: GLTexture): void;
|
|
28
|
+
resetColorAttachments(rp: GLFrameBuffer, colors: GLTexture[]): void;
|
|
29
|
+
createGLRenderBuffer(renderbuffer: GLRenderBuffer): WebGLRenderbuffer | null;
|
|
30
|
+
resize(width: number, height: number): void;
|
|
31
|
+
drawGeometry(geometry: Geometry, material: Material): void;
|
|
32
|
+
createGLFrameBuffer(frameBuffer: GLFrameBuffer, name?: string): WebGLFramebuffer | null;
|
|
33
|
+
/**创建包裹VAO对象。 */
|
|
34
|
+
createVAO(name: string): GLVertexArrayObject | undefined;
|
|
35
|
+
deleteGLTexture(texture: GLTexture): void;
|
|
36
|
+
deleteGPUBuffer(buffer: GLGPUBuffer | null): void;
|
|
37
|
+
deleteGLFrameBuffer(frameBuffer: GLFrameBuffer): void;
|
|
38
|
+
deleteGLRenderBuffer(renderbuffer: GLRenderBuffer): void;
|
|
39
|
+
private deleteResource;
|
|
40
|
+
lost(e: Event): void;
|
|
41
|
+
dispose(haltGL?: boolean): void;
|
|
42
|
+
}
|
|
43
|
+
export declare function assignInspectorName(obj: Record<string, any>, name?: string, id?: string): void;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { Disposable, FrameBuffer, Geometry, LostHandler, Material, Mesh, RenderFrame, RenderPass, RenderPassClearAction, RenderPassStoreAction, RestoreHandler, ShaderLibrary, mat4 } from '@galacean/effects-core';
|
|
2
|
+
import { Renderer, FilterMode, RenderTextureFormat } from '@galacean/effects-core';
|
|
3
|
+
import { ExtWrap } from './ext-wrap';
|
|
4
|
+
import { GLContextManager } from './gl-context-manager';
|
|
5
|
+
import { GLPipelineContext } from './gl-pipeline-context';
|
|
6
|
+
import { GLRendererInternal } from './gl-renderer-internal';
|
|
7
|
+
export declare class GLRenderer extends Renderer implements Disposable {
|
|
8
|
+
readonly canvas: HTMLCanvasElement | OffscreenCanvas;
|
|
9
|
+
glRenderer: GLRendererInternal;
|
|
10
|
+
extension: ExtWrap;
|
|
11
|
+
frameBuffer: FrameBuffer;
|
|
12
|
+
temporaryRTs: Record<string, FrameBuffer>;
|
|
13
|
+
pipelineContext: GLPipelineContext;
|
|
14
|
+
readonly context: GLContextManager;
|
|
15
|
+
constructor(canvas: HTMLCanvasElement | OffscreenCanvas, framework: 'webgl' | 'webgl2', renderOptions?: WebGLContextAttributes);
|
|
16
|
+
get isDestroyed(): boolean;
|
|
17
|
+
get height(): number;
|
|
18
|
+
get width(): number;
|
|
19
|
+
renderRenderFrame(renderFrame: RenderFrame): void;
|
|
20
|
+
renderRenderPass(pass: RenderPass): void;
|
|
21
|
+
renderMeshes(meshes: Mesh[]): void;
|
|
22
|
+
setGlobalFloat(name: string, value: number): void;
|
|
23
|
+
setGlobalInt(name: string, value: number): void;
|
|
24
|
+
setGlobalMatrix(name: string, value: mat4): void;
|
|
25
|
+
drawGeometry(geometry: Geometry, material: Material): void;
|
|
26
|
+
setFrameBuffer(frameBuffer: FrameBuffer | null): void;
|
|
27
|
+
getFrameBuffer(): FrameBuffer | null;
|
|
28
|
+
getTemporaryRT(name: string, width: number, height: number, depthBuffer: number, filter: FilterMode, format: RenderTextureFormat): FrameBuffer | null;
|
|
29
|
+
setViewport(x: number, y: number, width: number, height: number): void;
|
|
30
|
+
clear(action: RenderPassStoreAction | RenderPassClearAction): void;
|
|
31
|
+
addLostHandler(lostHandler: LostHandler): void;
|
|
32
|
+
addRestoreHandler(restoreHandler: RestoreHandler): void;
|
|
33
|
+
getShaderLibrary(): ShaderLibrary | undefined;
|
|
34
|
+
getWidth(): number;
|
|
35
|
+
getHeight(): number;
|
|
36
|
+
dispose(haltGL?: boolean): void;
|
|
37
|
+
lost(e: Event): void;
|
|
38
|
+
restore(): void;
|
|
39
|
+
resize(width: number, height: number): void;
|
|
40
|
+
private checkGlobalUniform;
|
|
41
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { Disposable, RestoreHandler, ShaderCompileResult, ShaderLibrary, ShaderWithSource } from '@galacean/effects-core';
|
|
2
|
+
import { GLShader } from './gl-shader';
|
|
3
|
+
import type { GLPipelineContext } from './gl-pipeline-context';
|
|
4
|
+
import type { GLEngine } from './gl-engine';
|
|
5
|
+
export declare class GLShaderLibrary implements ShaderLibrary, Disposable, RestoreHandler {
|
|
6
|
+
engine: GLEngine;
|
|
7
|
+
pipelineContext: GLPipelineContext;
|
|
8
|
+
readonly shaderResults: Record<string, ShaderCompileResult>;
|
|
9
|
+
private readonly glAsyncCompileExt;
|
|
10
|
+
private programMap;
|
|
11
|
+
private glVertShaderMap;
|
|
12
|
+
private glFragShaderMap;
|
|
13
|
+
private shaderAllDone;
|
|
14
|
+
private cachedShaders;
|
|
15
|
+
constructor(engine: GLEngine, pipelineContext: GLPipelineContext);
|
|
16
|
+
compileAllShaders(asyncCallback?: (results: ShaderCompileResult[]) => void): void;
|
|
17
|
+
addShader(shaderSource: ShaderWithSource): string;
|
|
18
|
+
createShader(shaderSource: ShaderWithSource): GLShader;
|
|
19
|
+
compileShader(shader: GLShader, asyncCallback?: (result: ShaderCompileResult) => void): void;
|
|
20
|
+
private computeShaderCacheId;
|
|
21
|
+
private createProgram;
|
|
22
|
+
private createGLShader;
|
|
23
|
+
deleteShader(cacheId: string): void;
|
|
24
|
+
restore(): void;
|
|
25
|
+
dispose(): void;
|
|
26
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { ShaderCompileResult, ShaderWithSource, Texture, Engine } from '@galacean/effects-core';
|
|
2
|
+
import { Shader } from '@galacean/effects-core';
|
|
3
|
+
import type { GLProgram } from './gl-program';
|
|
4
|
+
import type { GLPipelineContext } from './gl-pipeline-context';
|
|
5
|
+
export declare class GLShader extends Shader {
|
|
6
|
+
pipelineContext: GLPipelineContext;
|
|
7
|
+
program: GLProgram;
|
|
8
|
+
compileResult: ShaderCompileResult;
|
|
9
|
+
id: string;
|
|
10
|
+
initialized: boolean;
|
|
11
|
+
uniformLocations: Record<string, WebGLUniformLocation | null>;
|
|
12
|
+
private samplerChannels;
|
|
13
|
+
constructor(source: ShaderWithSource);
|
|
14
|
+
initialize(engine: Engine): void;
|
|
15
|
+
setFloat(name: string, value: number): void;
|
|
16
|
+
setInt(name: string, value: number): void;
|
|
17
|
+
setFloats(name: string, value: number[]): void;
|
|
18
|
+
setTexture(name: string, texture: Texture): void;
|
|
19
|
+
setVector2(name: string, value: number[]): void;
|
|
20
|
+
setVector3(name: string, value: number[]): void;
|
|
21
|
+
setVector4(name: string, value: number[]): void;
|
|
22
|
+
setMatrix(name: string, value: number[]): void;
|
|
23
|
+
setMatrix3(name: string, value: number[]): void;
|
|
24
|
+
setVector4Array(name: string, array: number[]): void;
|
|
25
|
+
setMatrixArray(name: string, array: number[]): void;
|
|
26
|
+
fillShaderInformation(uniformNames: string[], samplers: string[]): void;
|
|
27
|
+
dispose(): void;
|
|
28
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { Disposable, RestoreHandler, TextureConfigOptions, TextureSourceOptions, Engine } from '@galacean/effects-core';
|
|
2
|
+
import { Texture } from '@galacean/effects-core';
|
|
3
|
+
export declare class GLTexture extends Texture implements Disposable, RestoreHandler {
|
|
4
|
+
textureBuffer: WebGLTexture | null;
|
|
5
|
+
target: GLenum;
|
|
6
|
+
private pipelineContext;
|
|
7
|
+
private initialized;
|
|
8
|
+
constructor(engine: Engine, source: TextureSourceOptions);
|
|
9
|
+
/** 绑定当前Texture对象。*/
|
|
10
|
+
bind(force?: boolean): void;
|
|
11
|
+
/** 初始化Texture的GPU资源。*/
|
|
12
|
+
initialize(): void;
|
|
13
|
+
clone(): GLTexture;
|
|
14
|
+
release(): void;
|
|
15
|
+
update(sourceOptions: TextureSourceOptions): void;
|
|
16
|
+
setTextureFilters(gl: WebGLRenderingContext | WebGL2RenderingContext, target: GLenum, options: TextureConfigOptions): void;
|
|
17
|
+
private texImage2D;
|
|
18
|
+
private texImage2DData;
|
|
19
|
+
private resizeImage;
|
|
20
|
+
reloadData(): Promise<void>;
|
|
21
|
+
offloadData(): void;
|
|
22
|
+
uploadCurrentVideoFrame(): Promise<boolean>;
|
|
23
|
+
updateSource(opts: TextureSourceOptions): void;
|
|
24
|
+
restore(): void;
|
|
25
|
+
dispose(): void;
|
|
26
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { Disposable, UniformValue, spec } from '@galacean/effects-core';
|
|
2
|
+
import { GLGPUBuffer } from './gl-gpu-buffer';
|
|
3
|
+
import type { GLPipelineContext } from './gl-pipeline-context';
|
|
4
|
+
type BlockUniformInfo = [
|
|
5
|
+
type: number,
|
|
6
|
+
offset: number,
|
|
7
|
+
size: number,
|
|
8
|
+
blockIndex: number,
|
|
9
|
+
arrayStride: number,
|
|
10
|
+
maxStride: number,
|
|
11
|
+
rowMajor: number,
|
|
12
|
+
index: number,
|
|
13
|
+
byteLength: number
|
|
14
|
+
];
|
|
15
|
+
export interface UniformBlockSpec {
|
|
16
|
+
index: number;
|
|
17
|
+
usedByVertexShader: boolean;
|
|
18
|
+
usedByFragmentShader: boolean;
|
|
19
|
+
size: number;
|
|
20
|
+
uniformIndices: number[];
|
|
21
|
+
used: boolean;
|
|
22
|
+
name: string;
|
|
23
|
+
uniforms: Record<string, BlockUniformInfo>;
|
|
24
|
+
id: string;
|
|
25
|
+
}
|
|
26
|
+
interface UBODirtyFlag {
|
|
27
|
+
start: number;
|
|
28
|
+
dirty: boolean;
|
|
29
|
+
buffer?: spec.TypedArray;
|
|
30
|
+
}
|
|
31
|
+
export declare class UniformBlockBuffer implements Disposable {
|
|
32
|
+
private readonly info;
|
|
33
|
+
buffer?: GLGPUBuffer;
|
|
34
|
+
dirtyFlags: Record<string, UBODirtyFlag>;
|
|
35
|
+
keepData: boolean;
|
|
36
|
+
constructor(pipelineContext: GLPipelineContext, info: UniformBlockSpec);
|
|
37
|
+
setValues(uniformValues: Record<string, UniformValue>, dirtyFlags: Record<string, boolean>, uniformValueOffsets: Record<string, spec.vec2>): void;
|
|
38
|
+
bind(gl: WebGL2RenderingContext, program: WebGLProgram, bufferBindIndex: number): void;
|
|
39
|
+
dispose(): void;
|
|
40
|
+
}
|
|
41
|
+
export declare function createUniformBlockDataFromProgram(gl: WebGL2RenderingContext, program: WebGLProgram): {
|
|
42
|
+
blockSpecs: UniformBlockSpec[];
|
|
43
|
+
blockUniformNames: string[];
|
|
44
|
+
};
|
|
45
|
+
export {};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { Disposable } from '@galacean/effects-core';
|
|
2
|
+
import type { GLEngine } from './gl-engine';
|
|
3
|
+
export declare class GLVertexArrayObject implements Disposable {
|
|
4
|
+
private engine;
|
|
5
|
+
ready: boolean;
|
|
6
|
+
disposed: boolean;
|
|
7
|
+
readonly vao: WebGLVertexArrayObject | null;
|
|
8
|
+
private vaoExt;
|
|
9
|
+
private gl;
|
|
10
|
+
constructor(engine: GLEngine, name?: string);
|
|
11
|
+
bind(): void;
|
|
12
|
+
unbind(): void;
|
|
13
|
+
private createVertexArray;
|
|
14
|
+
/**
|
|
15
|
+
* 根据 gpu level 选择对应的绑定函数
|
|
16
|
+
* @param vao
|
|
17
|
+
*/
|
|
18
|
+
private bindVertexArray;
|
|
19
|
+
dispose(): void;
|
|
20
|
+
}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export * from './gl-geometry';
|
|
2
|
+
export * from './gl-renderer';
|
|
3
|
+
export * from './gl-material';
|
|
4
|
+
export * from './gl-renderer-internal';
|
|
5
|
+
export * from './gl-render-buffer';
|
|
6
|
+
export * from './gl-texture';
|
|
7
|
+
export * from './gl-frame-buffer';
|
|
8
|
+
export * from './gl-gpu-buffer';
|
|
9
|
+
export * from './gl-vertex-array-object';
|
|
10
|
+
export * from './gl-pipeline-context';
|
|
11
|
+
export * from './gl-shader-library';
|
|
12
|
+
export * from './gl-engine';
|
package/package.json
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@galacean/effects-webgl",
|
|
3
|
+
"version": "0.0.1-alpha.0",
|
|
4
|
+
"description": "Galacean Effects runtime webgl for the web",
|
|
5
|
+
"types": "./dist/index.d.ts",
|
|
6
|
+
"files": [
|
|
7
|
+
"dist"
|
|
8
|
+
],
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"types": "./dist/index.d.ts"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"contributors": [
|
|
15
|
+
{
|
|
16
|
+
"name": "燃然"
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"name": "飂兮"
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"name": "十弦"
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"name": "云垣"
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"name": "茂安"
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"name": "意绮"
|
|
32
|
+
}
|
|
33
|
+
],
|
|
34
|
+
"author": "Ant Group CO., Ltd.",
|
|
35
|
+
"license": "MIT",
|
|
36
|
+
"publishConfig": {
|
|
37
|
+
"access": "public",
|
|
38
|
+
"registry": "https://registry.npmjs.org"
|
|
39
|
+
},
|
|
40
|
+
"dependencies": {
|
|
41
|
+
"@galacean/effects-core": "0.0.1-alpha.0"
|
|
42
|
+
},
|
|
43
|
+
"scripts": {
|
|
44
|
+
"prebuild": "pnpm clean",
|
|
45
|
+
"build": "pnpm build:declaration",
|
|
46
|
+
"build:declaration": "tsc -d --declarationDir dist --emitDeclarationOnly",
|
|
47
|
+
"clean": "rimraf dist && rimraf '*+(.tsbuildinfo)'"
|
|
48
|
+
}
|
|
49
|
+
}
|