@galacean/effects-webgl 0.0.0-experimental-downgrade624-20240904

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/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ MIT LICENSE
2
+
3
+ Copyright (c) 2019-present Ant Group Co., Ltd. https://www.antgroup.com/
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -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,117 @@
1
+ import type { MaterialDestroyOptions, MaterialProps, MaterialStates, UndefinedAble, Texture, Engine, GlobalUniforms } from '@galacean/effects-core';
2
+ import { Material, math } 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
+ type Vector2 = math.Vector2;
8
+ type Vector3 = math.Vector3;
9
+ type Vector4 = math.Vector4;
10
+ type Matrix3 = math.Matrix3;
11
+ type Matrix4 = math.Matrix4;
12
+ type Quaternion = math.Quaternion;
13
+ declare const Vector4: typeof math.Vector4, Matrix4: typeof math.Matrix4;
14
+ export declare class GLMaterial extends Material {
15
+ shader: GLShader;
16
+ floats: Record<string, number>;
17
+ ints: Record<string, number>;
18
+ vector2s: Record<string, Vector2>;
19
+ vector3s: Record<string, Vector3>;
20
+ vector4s: Record<string, Vector4>;
21
+ quaternions: Record<string, Quaternion>;
22
+ matrices: Record<string, Matrix4>;
23
+ matrice3s: Record<string, Matrix3>;
24
+ textures: Record<string, Texture>;
25
+ floatArrays: Record<string, number[]>;
26
+ vector4Arrays: Record<string, number[]>;
27
+ matrixArrays: Record<string, number[]>;
28
+ samplers: string[];
29
+ uniforms: string[];
30
+ uniformDirtyFlag: boolean;
31
+ glMaterialState: GLMaterialState;
32
+ private engine?;
33
+ constructor(engine: Engine, props: MaterialProps);
34
+ get blending(): UndefinedAble<boolean>;
35
+ set blending(blending: UndefinedAble<boolean>);
36
+ get blendColor(): UndefinedAble<[r: number, g: number, b: number, a: number]>;
37
+ set blendColor(color: UndefinedAble<[r: number, g: number, b: number, a: number]>);
38
+ get blendFunction(): UndefinedAble<[blendSrc: number, blendDst: number, blendSrcAlpha: number, blendDstAlpha: number]>;
39
+ set blendFunction(func: UndefinedAble<[blendSrc: number, blendDst: number, blendSrcAlpha: number, blendDstAlpha: number]>);
40
+ get blendEquation(): UndefinedAble<[rgb: number, alpha: number]>;
41
+ set blendEquation(equation: UndefinedAble<[rgb: number, alpha: number]>);
42
+ get depthTest(): UndefinedAble<boolean>;
43
+ set depthTest(value: UndefinedAble<boolean>);
44
+ get depthMask(): UndefinedAble<boolean>;
45
+ set depthMask(value: UndefinedAble<boolean>);
46
+ get depthRange(): UndefinedAble<[number, number]>;
47
+ set depthRange(value: UndefinedAble<[number, number]>);
48
+ get depthFunc(): UndefinedAble<number>;
49
+ set depthFunc(value: UndefinedAble<number>);
50
+ get polygonOffsetFill(): UndefinedAble<boolean>;
51
+ set polygonOffsetFill(value: UndefinedAble<boolean>);
52
+ get polygonOffset(): UndefinedAble<[number, number]>;
53
+ set polygonOffset(value: UndefinedAble<[number, number]>);
54
+ get sampleAlphaToCoverage(): UndefinedAble<boolean>;
55
+ set sampleAlphaToCoverage(value: UndefinedAble<boolean>);
56
+ get colorMask(): UndefinedAble<[r: boolean, g: boolean, b: boolean, a: boolean]>;
57
+ set colorMask(value: UndefinedAble<[r: boolean, g: boolean, b: boolean, a: boolean]>);
58
+ get stencilTest(): UndefinedAble<boolean>;
59
+ set stencilTest(value: UndefinedAble<boolean>);
60
+ get stencilMask(): UndefinedAble<[number, number]>;
61
+ set stencilMask(value: UndefinedAble<[number, number]>);
62
+ get stencilRef(): UndefinedAble<[number, number]>;
63
+ set stencilRef(value: UndefinedAble<[number, number]>);
64
+ get stencilFunc(): UndefinedAble<[number, number]>;
65
+ set stencilFunc(value: UndefinedAble<[number, number]>);
66
+ get stencilOpFail(): UndefinedAble<[number, number]>;
67
+ set stencilOpFail(value: UndefinedAble<[number, number]>);
68
+ get stencilOpZFail(): UndefinedAble<[number, number]>;
69
+ set stencilOpZFail(value: UndefinedAble<[number, number]>);
70
+ get stencilOpZPass(): UndefinedAble<[number, number]>;
71
+ set stencilOpZPass(value: UndefinedAble<[number, number]>);
72
+ get culling(): UndefinedAble<boolean>;
73
+ set culling(value: UndefinedAble<boolean>);
74
+ get frontFace(): UndefinedAble<number>;
75
+ set frontFace(value: UndefinedAble<number>);
76
+ get cullFace(): UndefinedAble<number>;
77
+ set cullFace(value: UndefinedAble<number>);
78
+ enableKeyword(keyword: string): void;
79
+ disableKeyword(keyword: string): void;
80
+ isKeywordEnabled(keyword: string): boolean;
81
+ createMaterialStates(states: MaterialStates): void;
82
+ get isDestroyed(): boolean;
83
+ /**shader和texture的GPU资源初始化。 */
84
+ initialize(): void;
85
+ setupStates(pipelineContext: GLPipelineContext): void;
86
+ use(renderer: GLRenderer, globalUniforms?: GlobalUniforms): void;
87
+ getFloat(name: string): number | null;
88
+ setFloat(name: string, value: number): void;
89
+ getInt(name: string): number | null;
90
+ setInt(name: string, value: number): void;
91
+ getFloats(name: string): number[] | null;
92
+ setFloats(name: string, value: number[]): void;
93
+ getVector2(name: string): Vector2 | null;
94
+ setVector2(name: string, value: Vector2): void;
95
+ getVector3(name: string): Vector3 | null;
96
+ setVector3(name: string, value: Vector3): void;
97
+ getVector4(name: string): Vector4 | null;
98
+ setVector4(name: string, value: Vector4): void;
99
+ getQuaternion(name: string): Quaternion | null;
100
+ setQuaternion(name: string, value: Quaternion): void;
101
+ getMatrix(name: string): Matrix4 | null;
102
+ setMatrix(name: string, value: Matrix4): void;
103
+ setMatrix3(name: string, value: Matrix3): void;
104
+ getVector4Array(name: string): number[];
105
+ setVector4Array(name: string, array: Vector4[]): void;
106
+ getMatrixArray(name: string): number[] | null;
107
+ setMatrixArray(name: string, array: Matrix4[]): void;
108
+ setMatrixNumberArray(name: string, array: number[]): void;
109
+ getTexture(name: string): Texture | null;
110
+ setTexture(name: string, texture: Texture): void;
111
+ hasUniform(name: string): boolean;
112
+ clone(props?: MaterialProps): Material;
113
+ cloneUniforms(sourceMaterial: Material): void;
114
+ private checkUniform;
115
+ dispose(options?: MaterialDestroyOptions): void;
116
+ }
117
+ export {};
@@ -0,0 +1,324 @@
1
+ import type { Disposable, Texture, math } from '@galacean/effects-core';
2
+ import { GLShaderLibrary } from './gl-shader-library';
3
+ import type { GLEngine } from './gl-engine';
4
+ type Vector2 = math.Vector2;
5
+ type Vector3 = math.Vector3;
6
+ type Vector4 = math.Vector4;
7
+ type Matrix3 = math.Matrix3;
8
+ type Matrix4 = math.Matrix4;
9
+ type Quaternion = math.Quaternion;
10
+ export type Nullable<T> = T | null;
11
+ export declare class GLPipelineContext implements Disposable {
12
+ engine: GLEngine;
13
+ gl: WebGLRenderingContext | WebGL2RenderingContext;
14
+ textureUnitDict: Record<string, WebGLTexture | null>;
15
+ shaderLibrary: GLShaderLibrary;
16
+ private readonly maxTextureCount;
17
+ private glCapabilityCache;
18
+ private currentFramebuffer;
19
+ private currentTextureBinding;
20
+ private currentRenderBuffer;
21
+ private activeTextureIndex;
22
+ private pixelStorei;
23
+ constructor(engine: GLEngine, gl: WebGLRenderingContext | WebGL2RenderingContext);
24
+ dispose(): void;
25
+ private reset;
26
+ toggle(capability: GLenum, enable?: boolean): void;
27
+ /**
28
+ * 对于该上下文开启某种特性
29
+ * @param capability
30
+ * example:
31
+ * gl.enable(gl.DITHER);
32
+ */
33
+ enable(capability: GLenum): void;
34
+ /**
35
+ * 基于某种上下文关闭特性
36
+ * @param capability
37
+ * example:
38
+ * gl.disable(gl.DITHER);
39
+ */
40
+ disable(capability: GLenum): void;
41
+ /**
42
+ * 绑定framebuffer webgl2新增: gl.DRAW_FRAMEBUFFER 和 gl.READ_FRAMEBUFFER
43
+ * @param target
44
+ * @param framebuffer
45
+ * example:
46
+ * const framebuffer = gl.createFramebuffer();
47
+ * gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer);
48
+ */
49
+ bindFramebuffer(target: GLenum, framebuffer: WebGLFramebuffer | null): void;
50
+ bindRenderBuffer(target: GLenum, renderBuffer: WebGLRenderbuffer | null): void;
51
+ /**
52
+ * 绑定系统 framebuffer
53
+ */
54
+ bindSystemFramebuffer(): void;
55
+ /**
56
+ * 将定义好的 WebGLProgram 对象添加到当前的渲染状态中。
57
+ * @param program
58
+ * example:
59
+ * gl.useProgram(program);
60
+ * gl.useProgram(null);
61
+ */
62
+ useProgram(program: WebGLProgram | null): void;
63
+ /**
64
+ * 使用预设值来清空缓冲
65
+ * @param mask
66
+ * example:
67
+ * gl.clear(gl.DEPTH_BUFFER_BIT);
68
+ * gl.clear(gl.DEPTH_BUFFER_BIT | gl.COLOR_BUFFER_BIT);
69
+ */
70
+ clear(mask: number): void;
71
+ /*** depth start ***/
72
+ /**
73
+ * 设置深度缓冲区的深度清除值
74
+ * @param depth
75
+ * example:
76
+ * gl.clearDepth(0.5);
77
+ */
78
+ clearDepth(depth: GLclampf): void;
79
+ /**
80
+ * 指定将输入像素深度与当前深度缓冲区值进行比较的函数。
81
+ * @param func
82
+ * example:
83
+ * gl.enable(gl.DEPTH_TEST);
84
+ * gl.depthFunc(gl.NEVER);
85
+ */
86
+ depthFunc(func: GLenum): void;
87
+ /**
88
+ * 设置是否启用写入深度缓冲。
89
+ * @param flag
90
+ * example:
91
+ * gl.depthMask(false);
92
+ */
93
+ depthMask(flag: boolean): void;
94
+ polygonOffset(factor: number, unit: number): void;
95
+ /**
96
+ * 将 z 值从规范化设备坐标映射到窗口坐标
97
+ * @param zNear
98
+ * @param zFar
99
+ * example:
100
+ * gl.depthRange(0.2, 0.6);
101
+ */
102
+ depthRange(zNear: number, zFar: number): void;
103
+ /*** depth end ***/
104
+ /*** stencil start ***/
105
+ /**
106
+ * 模版测试设置函数和引用值。
107
+ * @param func
108
+ * @param ref
109
+ * @param mask
110
+ * example:
111
+ * gl.enable(gl.STENCIL_TEST);
112
+ * gl.stencilFunc(gl.LESS, 0, 0b1110011);
113
+ */
114
+ clearStencil(s: GLint): void;
115
+ /**
116
+ * 控制启用和禁用模板平面中单个位的正面和背面写入
117
+ * @param mask
118
+ * example:
119
+ * gl.stencilMask(0xff);
120
+ */
121
+ stencilMask(mask: number): void;
122
+ /**
123
+ * 模版测试设置函数和引用值。
124
+ * @param func
125
+ * @param ref
126
+ * @param mask
127
+ * example:
128
+ * gl.enable(gl.STENCIL_TEST);
129
+ * gl.stencilFunc(gl.LESS, 0, 0b1110011);
130
+ */
131
+ stencilFunc(func: GLenum, ref: GLint, mask: GLuint): void;
132
+ /**
133
+ * 单面模版测试
134
+ * @param face
135
+ * @param func
136
+ * @param ref
137
+ * @param mask
138
+ * example:
139
+ * gl.enable(gl.STENCIL_TEST);
140
+ * gl.stencilFuncSeparate(gl.FRONT, gl.LESS, 0.2, 1110011);
141
+ */
142
+ stencilFuncSeparate(face: GLenum, func: GLenum, ref: GLint, mask: GLuint): void;
143
+ /**
144
+ * 单面的mask写入
145
+ * @param face
146
+ * @param mask
147
+ * example:
148
+ * gl.stencilMaskSeparate(gl.FRONT, 110101);
149
+ */
150
+ stencilMaskSeparate(face: GLenum, mask: GLuint): void;
151
+ /**
152
+ * 设置正面和背面模板测试操作
153
+ * @param fail
154
+ * @param zfail
155
+ * @param zpass
156
+ * example:
157
+ * gl.enable(gl.STENCIL_TEST);
158
+ * gl.stencilOp(gl.INCR, gl.DECR, gl.INVERT);
159
+ */
160
+ stencilOp(fail: GLenum, zfail: GLenum, zpass: GLenum): void;
161
+ /**
162
+ * 设置正面和/或背面模板测试操作
163
+ * @param face
164
+ * @param fail
165
+ * @param zfail
166
+ * @param zpass
167
+ * example:
168
+ * gl.enable(gl.STENCIL_TEST);
169
+ * gl.stencilOpSeparate(gl.FRONT, gl.INCR, gl.DECR, gl.INVERT);
170
+ */
171
+ stencilOpSeparate(face: GLenum, fail: GLenum, zfail: GLenum, zpass: GLenum): void;
172
+ /*** stencil end ***/
173
+ /*** face start ***/
174
+ /**
175
+ * 剔除方式
176
+ * @param mode
177
+ * example:
178
+ * gl.enable(gl.CULL_FACE);
179
+ * gl.cullFace(gl.FRONT_AND_BACK);
180
+ */
181
+ cullFace(mode: GLenum): void;
182
+ /**
183
+ * 设置卷绕方向
184
+ * @param mode
185
+ * example:
186
+ * gl.frontFace(gl.CW);
187
+ */
188
+ frontFace(mode: GLenum): void;
189
+ /*** face end ***/
190
+ /*** color start ***/
191
+ /**
192
+ * 设置颜色写入
193
+ * @param red
194
+ * @param green
195
+ * @param blue
196
+ * @param alpha
197
+ * example:
198
+ * gl.colorMask(true, true, true, false);
199
+ */
200
+ clearColor(red: GLclampf, green: GLclampf, blue: GLclampf, alpha: GLclampf): void;
201
+ /**
202
+ * 设置颜色写入
203
+ * @param red
204
+ * @param green
205
+ * @param blue
206
+ * @param alpha
207
+ * example:
208
+ * gl.colorMask(true, true, true, false);
209
+ */
210
+ colorMask(red: boolean, green: boolean, blue: boolean, alpha: boolean): void;
211
+ /**
212
+ * 设置源和目标混合因子
213
+ * @param red
214
+ * @param green
215
+ * @param blue
216
+ * @param alpha
217
+ * example:
218
+ * gl.blendColor(0, 0.5, 1, 1);
219
+ */
220
+ blendColor(red: GLclampf, green: GLclampf, blue: GLclampf, alpha: GLclampf): void;
221
+ /**
222
+ * 用于混合像素算法
223
+ * @param sfactor
224
+ * @param dfactor
225
+ * example:
226
+ * gl.enable(gl.BLEND);
227
+ * gl.blendFunc(gl.SRC_COLOR, gl.DST_COLOR);
228
+ */
229
+ blendFunc(sfactor: GLenum, dfactor: GLenum): void;
230
+ /**
231
+ * 分别设置应用在 RGB 和 Alpha 上的 factor
232
+ * @param srcRGB
233
+ * @param dstRGB
234
+ * @param srcAlpha
235
+ * @param dstAlpha
236
+ * example:
237
+ * gl.enable(gl.BLEND);
238
+ * gl.blendFuncSeparate(gl.SRC_COLOR, gl.DST_COLOR, gl.ONE, gl.ZERO);
239
+ */
240
+ blendFuncSeparate(srcRGB: GLenum, dstRGB: GLenum, srcAlpha: GLenum, dstAlpha: GLenum): void;
241
+ /**
242
+ * 设置混合模式
243
+ * @param mode
244
+ * example:
245
+ * gl.blendEquation(gl.FUNC_ADD);
246
+ * gl.blendEquation(gl.FUNC_SUBTRACT);
247
+ * gl.blendEquation(gl.FUNC_REVERSE_SUBTRACT);
248
+ */
249
+ blendEquation(mode: GLenum): void;
250
+ /**
251
+ * 可以分别对 RGB 和 Alpha 做不同的操作处理
252
+ * @param modeRGB
253
+ * @param modeAlpha
254
+ * example:
255
+ * gl.blendEquationSeparate(gl.FUNC_ADD, gl.FUNC_SUBTRACT);
256
+ */
257
+ blendEquationSeparate(modeRGB: GLenum, modeAlpha: GLenum): void;
258
+ /*** color end ***/
259
+ /**
260
+ * 图像预处理
261
+ * @param pname
262
+ * @param param
263
+ * example:
264
+ * var tex = gl.createTexture();
265
+ * gl.bindTexture(gl.TEXTURE_2D, tex);
266
+ * gl.pixelStorei(gl.PACK_ALIGNMENT, 4);
267
+ */
268
+ setPixelStorei(pname: GLenum, param: GLenum): void;
269
+ /**
270
+ * 用来设置视口,即指定从标准设备到窗口坐标的x、y仿射变换。
271
+ * @param x
272
+ * @param y
273
+ * @param width
274
+ * @param height
275
+ * example:
276
+ * gl.viewport(0, 0, width, height);
277
+ */
278
+ viewport(x: number, y: number, width: number, height: number): void;
279
+ /**
280
+ * 激活指定的纹理单元
281
+ * @param texture
282
+ * example:
283
+ * gl.activeTexture(gl.TEXTURE1);
284
+ */
285
+ activeTexture(texture: GLenum): void;
286
+ /**
287
+ * 绑定WebGLTexture
288
+ * @param target
289
+ * @param texture
290
+ * @param force
291
+ * example:
292
+ * const texture = gl.createTexture();
293
+ * gl.bindTexture(gl.TEXTURE_2D, texture)
294
+ */
295
+ bindTexture(target: GLenum, texture: WebGLTexture | null, force?: boolean): void;
296
+ private set1;
297
+ private set2;
298
+ private set3;
299
+ private set4;
300
+ get(name: string): any;
301
+ setFloat(uniform: Nullable<WebGLUniformLocation>, value: number): void;
302
+ setInt(uniform: Nullable<WebGLUniformLocation>, value: number): void;
303
+ setFloats(uniform: Nullable<WebGLUniformLocation>, value: number[]): void;
304
+ setVector2(uniform: Nullable<WebGLUniformLocation>, value: Vector2): void;
305
+ setVector3(uniform: Nullable<WebGLUniformLocation>, value: Vector3): void;
306
+ setVector4(uniform: Nullable<WebGLUniformLocation>, value: Vector4): void;
307
+ setQuaternion(uniform: Nullable<WebGLUniformLocation>, value: Quaternion): void;
308
+ setVector4Array(uniform: Nullable<WebGLUniformLocation>, array: number[]): void;
309
+ setMatrix(uniform: Nullable<WebGLUniformLocation>, value: Matrix4): void;
310
+ setMatrix3(uniform: Nullable<WebGLUniformLocation>, value: Matrix3): void;
311
+ setMatrixArray(uniform: Nullable<WebGLUniformLocation>, array: number[]): void;
312
+ setTexture(uniform: Nullable<WebGLUniformLocation>, channel: number, texture: Texture): void;
313
+ /**
314
+ * 查询所有uniform的location。
315
+ * @param program 查询的shader program
316
+ * @param uniformsNames 查询的uniform名称列表
317
+ * @returns
318
+ */
319
+ getUniforms(program: WebGLProgram, uniformsNames: string[]): Nullable<WebGLUniformLocation>[];
320
+ private setFloat4;
321
+ private setFloat3;
322
+ private setFloat2;
323
+ }
324
+ export {};
@@ -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, Geometry, LostHandler, Material } from '@galacean/effects-core';
2
+ import type { GLEngine } from './gl-engine';
3
+ import type { GLFrameBuffer } from './gl-frame-buffer';
4
+ import type { GLGPUBuffer } from './gl-gpu-buffer';
5
+ import type { GLPipelineContext } from './gl-pipeline-context';
6
+ import type { GLRenderBuffer } from './gl-render-buffer';
7
+ import { GLTexture } from './gl-texture';
8
+ import { GLVertexArrayObject } from './gl-vertex-array-object';
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(): void;
42
+ }
43
+ export declare function assignInspectorName(obj: Record<string, any>, name?: string, id?: string): void;
@@ -0,0 +1,43 @@
1
+ import type { Disposable, FrameBuffer, Geometry, LostHandler, Material, Mesh, RenderFrame, RenderPass, RenderPassClearAction, RenderPassStoreAction, RestoreHandler, ShaderLibrary, math } 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
+ type Matrix4 = math.Matrix4;
8
+ export declare class GLRenderer extends Renderer implements Disposable {
9
+ readonly canvas: HTMLCanvasElement | OffscreenCanvas;
10
+ glRenderer: GLRendererInternal;
11
+ extension: ExtWrap;
12
+ frameBuffer: FrameBuffer;
13
+ temporaryRTs: Record<string, FrameBuffer>;
14
+ pipelineContext: GLPipelineContext;
15
+ readonly context: GLContextManager;
16
+ constructor(canvas: HTMLCanvasElement | OffscreenCanvas, framework: 'webgl' | 'webgl2', renderOptions?: WebGLContextAttributes);
17
+ get isDestroyed(): boolean;
18
+ get height(): number;
19
+ get width(): number;
20
+ renderRenderFrame(renderFrame: RenderFrame): void;
21
+ renderRenderPass(pass: RenderPass): void;
22
+ renderMeshes(meshes: Mesh[]): void;
23
+ setGlobalFloat(name: string, value: number): void;
24
+ setGlobalInt(name: string, value: number): void;
25
+ setGlobalMatrix(name: string, value: Matrix4): void;
26
+ drawGeometry(geometry: Geometry, material: Material): void;
27
+ setFrameBuffer(frameBuffer: FrameBuffer | null): void;
28
+ getFrameBuffer(): FrameBuffer | null;
29
+ getTemporaryRT(name: string, width: number, height: number, depthBuffer: number, filter: FilterMode, format: RenderTextureFormat): FrameBuffer | null;
30
+ setViewport(x: number, y: number, width: number, height: number): void;
31
+ clear(action: RenderPassStoreAction | RenderPassClearAction): void;
32
+ addLostHandler(lostHandler: LostHandler): void;
33
+ addRestoreHandler(restoreHandler: RestoreHandler): void;
34
+ getShaderLibrary(): ShaderLibrary | undefined;
35
+ getWidth(): number;
36
+ getHeight(): number;
37
+ dispose(): void;
38
+ lost(e: Event): void;
39
+ restore(): void;
40
+ resize(width: number, height: number): void;
41
+ private checkGlobalUniform;
42
+ }
43
+ export {};
@@ -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,36 @@
1
+ import type { ShaderCompileResult, ShaderWithSource, Texture, Engine, math } 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
+ type Vector2 = math.Vector2;
6
+ type Vector3 = math.Vector3;
7
+ type Vector4 = math.Vector4;
8
+ type Matrix3 = math.Matrix3;
9
+ type Matrix4 = math.Matrix4;
10
+ type Quaternion = math.Quaternion;
11
+ export declare class GLShader extends Shader {
12
+ pipelineContext: GLPipelineContext;
13
+ program: GLProgram;
14
+ compileResult: ShaderCompileResult;
15
+ id: string;
16
+ initialized: boolean;
17
+ uniformLocations: Record<string, WebGLUniformLocation | null>;
18
+ private samplerChannels;
19
+ constructor(source: ShaderWithSource);
20
+ initialize(engine: Engine): void;
21
+ setFloat(name: string, value: number): void;
22
+ setInt(name: string, value: number): void;
23
+ setFloats(name: string, value: number[]): void;
24
+ setTexture(name: string, texture: Texture): void;
25
+ setVector2(name: string, value: Vector2): void;
26
+ setVector3(name: string, value: Vector3): void;
27
+ setVector4(name: string, value: Vector4): void;
28
+ setQuaternion(name: string, value: Quaternion): void;
29
+ setMatrix(name: string, value: Matrix4): void;
30
+ setMatrix3(name: string, value: Matrix3): void;
31
+ setVector4Array(name: string, array: number[]): void;
32
+ setMatrixArray(name: string, array: number[]): void;
33
+ fillShaderInformation(uniformNames: string[], samplers: string[]): void;
34
+ dispose(): void;
35
+ }
36
+ export {};
@@ -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
+ }
@@ -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.0-experimental-downgrade624-20240904",
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.0-experimental-downgrade624-20240904"
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
+ }