@predy-js/render-interface 0.1.61-beta.10 → 0.1.61-beta.11
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/index.js +138 -60
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +136 -60
- package/dist/index.mjs.map +1 -1
- package/dist/src/render/MarsMaterial.d.ts +2 -3
- package/dist/src/render/MarsMaterialDataBlock.d.ts +10 -4
- package/dist/src/render/MarsRenderer.d.ts +3 -0
- package/dist/src/webgl/GLProgram.d.ts +2 -0
- package/dist/statistic.js +1 -1
- package/dist/types/Material.d.ts +21 -24
- package/dist/types/RenderFrame.d.ts +3 -5
- package/dist/types/RenderPass.d.ts +2 -2
- package/dist/types/Renderer.d.ts +21 -12
- package/dist/types/ShaderLibrary.d.ts +4 -4
- package/dist/types/native/ImageBitmapInternal.d.ts +0 -2
- package/dist/types/native/RenderFrameInternal.d.ts +1 -9
- package/dist/types/native/RendererInternal.d.ts +10 -0
- package/package.json +1 -1
- package/types/Material.ts +34 -31
- package/types/RenderFrame.ts +3 -5
- package/types/RenderPass.ts +2 -2
- package/types/Renderer.ts +24 -13
- package/types/ShaderLibrary.ts +4 -4
- package/types/native/ImageBitmapInternal.ts +0 -2
- package/types/native/RenderFrameInternal.ts +1 -9
- package/types/native/RendererInternal.ts +13 -0
@@ -1,5 +1,4 @@
|
|
1
1
|
import type { Material, MaterialDestroyOptions, MaterialOptions, MaterialRenderStates } from '../../types';
|
2
|
-
import type { UniformSemantic } from '../../types';
|
3
2
|
import { MaterialRenderType } from '../../types/Material';
|
4
3
|
import type { Immutable } from '../../types/type';
|
5
4
|
import { GLMaterial } from '../webgl/GLMaterial';
|
@@ -14,16 +13,16 @@ export declare class MarsMaterial implements Material {
|
|
14
13
|
readonly renderType: MaterialRenderType;
|
15
14
|
readonly states: Immutable<MaterialRenderStates>;
|
16
15
|
readonly renderer?: MarsRenderer;
|
16
|
+
private _dbMap;
|
17
17
|
private _isDestroyed;
|
18
|
-
readonly uniformSemantics: Record<string, UniformSemantic>;
|
19
18
|
get isDestroyed(): boolean;
|
20
19
|
get dataBlocks(): MarsMaterialDataBlock[];
|
21
20
|
get defaultDataBlock(): MarsMaterialDataBlock;
|
22
21
|
constructor(options: MaterialOptions);
|
23
22
|
createMaterialStates(states: MaterialRenderStates): Immutable<MaterialRenderStates>;
|
24
23
|
addDataBlock(b: MarsMaterialDataBlock): void;
|
24
|
+
getDataBlockByName(name: string): MarsMaterialDataBlock;
|
25
25
|
removeDataBlock(b: MarsMaterialDataBlock): void;
|
26
|
-
setUniformSemantic(uniformName: string, semantic: string | undefined): void;
|
27
26
|
assignRenderer(renderer: MarsRenderer): MarsMaterial;
|
28
27
|
destroy(options?: MaterialDestroyOptions): void;
|
29
28
|
}
|
@@ -1,27 +1,32 @@
|
|
1
|
-
import type { MaterialDataBlock, MaterialDataBlockDestroyOptions, MaterialDataBlockOptions, UniformSemantic, UniformValue, vec2 } from '../../types';
|
1
|
+
import type { MaterialDataBlock, MaterialDataBlockDestroyOptions, MaterialDataBlockOptions, UniformSemantic, UniformValue, vec2, Texture } from '../../types';
|
2
2
|
import type { MarsRenderer } from './MarsRenderer';
|
3
|
+
import { MarsTexture } from './MarsTexture';
|
3
4
|
import type { UniformBlockSpec } from '../webgl/GLUniformUtils';
|
4
5
|
import { UniformBlockBuffer } from '../webgl/GLUniformUtils';
|
5
6
|
export declare class MarsMaterialDataBlock implements MaterialDataBlock {
|
6
7
|
readonly _uniformValues: Record<string, UniformValue>;
|
8
|
+
readonly _uniformTextures: Record<string, MarsTexture | MarsTexture[]>;
|
7
9
|
readonly _uniformFlags: Record<string, boolean>;
|
8
10
|
readonly _uniformValueRanges: Record<string, vec2>;
|
9
11
|
readonly name: string;
|
10
|
-
readonly uniformSemantics
|
12
|
+
readonly uniformSemantics: {
|
11
13
|
[key: string]: UniformSemantic;
|
12
14
|
};
|
13
15
|
readonly renderer?: MarsRenderer;
|
14
16
|
readonly uboBufferMap: Record<string, UniformBlockBuffer>;
|
15
17
|
protected _isDestroyed: boolean;
|
18
|
+
private _uniformPrivate;
|
16
19
|
private readonly _keepUboData;
|
17
20
|
constructor(props: MaterialDataBlockOptions & {
|
18
21
|
keepUboData?: boolean;
|
19
22
|
}, renderer?: MarsRenderer);
|
20
|
-
_assignUniformValueRenderer(value:
|
23
|
+
_assignUniformValueRenderer(value: MarsTexture | MarsTexture[], renderer?: MarsRenderer): void;
|
21
24
|
invalidAllFlags(): void;
|
22
25
|
clearFlags(): void;
|
23
26
|
isDirty(shaderCacheId: string, name: string): boolean;
|
24
27
|
get isDestroyed(): boolean;
|
28
|
+
setUniformTexture(uniformName: string, texture: MarsTexture | MarsTexture[] | undefined): void;
|
29
|
+
getUniformTexture<T extends (Texture | Texture[]) = MarsTexture>(uniformName: string): T | undefined;
|
25
30
|
assignRenderer(renderer: MarsRenderer): MaterialDataBlock;
|
26
31
|
createUboBuffer(spec: UniformBlockSpec): UniformBlockBuffer | undefined;
|
27
32
|
setUboBuffer(uboBuffer: UniformBlockBuffer): void;
|
@@ -32,9 +37,10 @@ export declare class MarsMaterialDataBlock implements MaterialDataBlock {
|
|
32
37
|
getUniformValues(): {
|
33
38
|
[p: string]: UniformValue;
|
34
39
|
};
|
35
|
-
setUniformValue(name: string, value: UniformValue | undefined): boolean;
|
40
|
+
setUniformValue(name: string, value: UniformValue | undefined, isSemantic?: boolean): boolean;
|
36
41
|
setUniformValues(map: {
|
37
42
|
[p: string]: UniformValue;
|
38
43
|
}): void;
|
44
|
+
setUniformSemantic(name: string, semantic: string | undefined): void;
|
39
45
|
clone(name: string): MarsMaterialDataBlock;
|
40
46
|
}
|
@@ -17,4 +17,7 @@ export declare class MarsRenderer implements GPURenderer {
|
|
17
17
|
createRenderFrame(options?: RenderFrameOptions): MarsRenderFrame;
|
18
18
|
destroy(haltGL?: boolean): void;
|
19
19
|
resize(width: number, height: number): void;
|
20
|
+
cancelAnimationFrame(id: number): void;
|
21
|
+
getErrors(): string[];
|
22
|
+
requestAnimationFrame(cb: FrameRequestCallback): number;
|
20
23
|
}
|
@@ -3,6 +3,7 @@ import type { GLGeometry } from './GLGeometry';
|
|
3
3
|
import type { RenderState } from '../../types/RenderFrame';
|
4
4
|
import type { GLVertexArrayObject } from './GLVertexArrayObject';
|
5
5
|
import type { UniformBlockSpec } from './GLUniformUtils';
|
6
|
+
import type { UniformValue } from '../../types';
|
6
7
|
export interface ProgramAttributeInfo {
|
7
8
|
readonly name: string;
|
8
9
|
readonly size: number;
|
@@ -35,6 +36,7 @@ export declare class GLProgram {
|
|
35
36
|
constructor(renderer: GLGPURenderer, program: WebGLProgram, shared: boolean, id: string);
|
36
37
|
init(renderer: GLGPURenderer, program: WebGLProgram): void;
|
37
38
|
bind(): void;
|
39
|
+
getSemanticValue(state: RenderState, semanticName: string): UniformValue | import("../../types").GPUBuffer | null | undefined;
|
38
40
|
setupUniforms(state: RenderState): void;
|
39
41
|
setGLUniformValue(name: string, value: any, info: ProgramUniformInfo, gl: WebGL2RenderingContext | WebGLRenderingContext): void;
|
40
42
|
setupAttributes(geometry: GLGeometry): GLVertexArrayObject;
|
package/dist/statistic.js
CHANGED
package/dist/types/Material.d.ts
CHANGED
@@ -1,9 +1,9 @@
|
|
1
|
-
import type { Texture } from './Texture';
|
2
1
|
import type { ShaderUseCacheId, ShaderWithSource } from './ShaderLibrary';
|
3
2
|
import type { IGPUResource, IGPURenderer } from './IGPURenderer';
|
4
3
|
import type { Immutable, TypedArray } from './type';
|
5
4
|
import type { GPURenderer } from './Renderer';
|
6
5
|
import type { DestroyOptions } from './constants';
|
6
|
+
import type { Texture } from './Texture';
|
7
7
|
export type UniformSemantic = 'VIEW' | 'MODEL' | 'MODELVIEW' | 'PROJECTION' | 'VIEWPROJECTION' | 'MODELVIEWPROJECTION' | string;
|
8
8
|
export interface MaterialRenderStates {
|
9
9
|
sampleAlphaToCoverage?: boolean;
|
@@ -15,13 +15,13 @@ export interface MaterialRenderStates {
|
|
15
15
|
blendSrc?: number;
|
16
16
|
blendDst?: number;
|
17
17
|
/**
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
18
|
+
* The blend color is a state value,
|
19
|
+
* like the blend equations and blend parameters. Therefore,
|
20
|
+
* it cannot change within a single draw call;
|
21
|
+
* fragment shaders cannot write to, modify,
|
22
|
+
* or even access the blend color.
|
23
|
+
* All buffers share the same blend color.
|
24
|
+
*/
|
25
25
|
blendColor?: [r: number, g: number, b: number, a: number];
|
26
26
|
colorMask?: [r: boolean, g: boolean, b: boolean, a: boolean];
|
27
27
|
depthTest?: boolean;
|
@@ -52,12 +52,6 @@ export interface MaterialOptions {
|
|
52
52
|
shader: ShaderWithSource | ShaderUseCacheId;
|
53
53
|
name?: string;
|
54
54
|
dataBlocks?: MaterialDataBlockOptions[];
|
55
|
-
uniformSemantics?: {
|
56
|
-
[key: string]: UniformSemantic;
|
57
|
-
};
|
58
|
-
uniformValues?: {
|
59
|
-
[key: string]: UniformValue;
|
60
|
-
};
|
61
55
|
}
|
62
56
|
/**
|
63
57
|
* @example
|
@@ -85,7 +79,7 @@ export interface MaterialOptions {
|
|
85
79
|
* });
|
86
80
|
* mtl2 use the same program with mtl0
|
87
81
|
*/
|
88
|
-
export type UniformValueDataType = TypedArray | number | number[] |
|
82
|
+
export type UniformValueDataType = TypedArray | number | number[] | number[][];
|
89
83
|
export type UniformValue = UniformValueDataType | UniformStruct | UniformStruct[];
|
90
84
|
export type UniformStruct = {
|
91
85
|
[key: string]: UniformValueDataType;
|
@@ -107,13 +101,13 @@ export declare class Material implements IGPUResource {
|
|
107
101
|
addDataBlock(b: MaterialDataBlock): void;
|
108
102
|
removeDataBlock(b: MaterialDataBlock): void;
|
109
103
|
destroy(options?: MaterialDestroyOptions): void;
|
110
|
-
setUniformSemantic(uniformName: string, semantic: string | undefined): void;
|
111
104
|
assignRenderer(renderer: GPURenderer): Material;
|
112
105
|
}
|
113
106
|
export interface MaterialDataBlockOptions {
|
114
107
|
uniformValues?: {
|
115
108
|
[key: string]: UniformValue;
|
116
109
|
};
|
110
|
+
uniformTextures?: Record<string, Texture | Texture[]>;
|
117
111
|
name?: string;
|
118
112
|
uniformSemantics?: {
|
119
113
|
[key: string]: UniformSemantic;
|
@@ -131,6 +125,7 @@ export declare class MaterialDataBlock implements IGPUResource {
|
|
131
125
|
};
|
132
126
|
constructor(options: MaterialDataBlockOptions);
|
133
127
|
hasUniformValue(name: string): boolean;
|
128
|
+
setUniformSemantic(name: string, semantic: string | undefined): void;
|
134
129
|
setUniformValue(name: string, value: UniformValue): boolean;
|
135
130
|
getUniformValue(name: string): UniformValue;
|
136
131
|
getUniformValues(): {
|
@@ -139,15 +134,17 @@ export declare class MaterialDataBlock implements IGPUResource {
|
|
139
134
|
setUniformValues(map: {
|
140
135
|
[key: string]: UniformValue;
|
141
136
|
}): void;
|
137
|
+
setUniformTexture(uniformName: string, texture: Texture | Texture[] | undefined): void;
|
138
|
+
getUniformTexture<T extends Texture[] | Texture = Texture>(uniformName: string): T | undefined;
|
142
139
|
/**
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
140
|
+
* indicate uniform data should be resent to GPU, but not the full range,
|
141
|
+
* only works for ubo,if not an ubo, this method has no side effect
|
142
|
+
* offset and count are counted by typed entry, not the number elements
|
143
|
+
* entry means matrix or vector in shader
|
144
|
+
* @param name uniform name
|
145
|
+
* @param offset entry offset,first entry to send to gpu, default 0
|
146
|
+
* @param count entry count,entry count to send to gpu,default to end
|
147
|
+
*/
|
151
148
|
updateUniformSubData(name: string, offset: number, count: number): void;
|
152
149
|
destroy(options?: MaterialDataBlockDestroyOptions): void;
|
153
150
|
assignRenderer(renderer: GPURenderer): MaterialDataBlock;
|
@@ -1,7 +1,5 @@
|
|
1
|
-
import type {
|
2
|
-
import type { RenderPass, RenderPassLoadAction, RenderPassDestroyOptions, SemanticMap } from './RenderPass';
|
1
|
+
import type { RenderPass, RenderPassLoadAction, RenderPassDestroyOptions, SemanticMap, SemanticGetter } from './RenderPass';
|
3
2
|
import type { Mesh } from './Mesh';
|
4
|
-
import type { GPUBuffer } from './GPUBuffer';
|
5
3
|
import type { vec4 } from './type';
|
6
4
|
import type { GPURenderer } from './index';
|
7
5
|
import type { IGPURenderer, IGPUResource } from './IGPURenderer';
|
@@ -16,12 +14,12 @@ export interface RenderFrameOptions {
|
|
16
14
|
renderPasses?: RenderPass[];
|
17
15
|
viewport?: vec4;
|
18
16
|
semantics?: {
|
19
|
-
[key: string]:
|
17
|
+
[key: string]: SemanticGetter;
|
20
18
|
};
|
21
19
|
loadAction?: RenderPassLoadAction;
|
22
20
|
name?: string;
|
23
21
|
}
|
24
|
-
export type SemanticFunc = (state: RenderState) =>
|
22
|
+
export type SemanticFunc = (state: RenderState) => SemanticGetter | null | undefined;
|
25
23
|
export type RenderFrameDestroyOptions = {
|
26
24
|
passes?: RenderPassDestroyOptions | DestroyOptions.keep;
|
27
25
|
semantics?: DestroyOptions;
|
@@ -81,7 +81,7 @@ export interface RenderPassAttachmentOptions {
|
|
81
81
|
viewportScale?: number;
|
82
82
|
multiSample?: number;
|
83
83
|
}
|
84
|
-
export type SemanticGetter = UniformValue | SemanticFunc | GPUBuffer;
|
84
|
+
export type SemanticGetter = UniformValue | SemanticFunc | GPUBuffer | Texture | Texture[];
|
85
85
|
export interface RenderPassOptions extends RenderPassAttachmentOptions {
|
86
86
|
name?: string;
|
87
87
|
meshes?: Mesh[];
|
@@ -119,7 +119,7 @@ export interface RenderPassDelegate {
|
|
119
119
|
willBeginRenderPass?: (renderPass: RenderPass, state: RenderState) => void;
|
120
120
|
didEndRenderPass?: (renderPass: RenderPass, state: RenderState) => void;
|
121
121
|
willRenderMesh?: (mesh: Mesh, state: RenderState) => void;
|
122
|
-
|
122
|
+
didRenderMesh?: (mesh: Mesh, state: RenderState) => void;
|
123
123
|
}
|
124
124
|
export declare class RenderPass implements IGPUResource {
|
125
125
|
readonly isDestroyed: boolean;
|
package/dist/types/Renderer.d.ts
CHANGED
@@ -24,8 +24,8 @@ export declare class GPURenderer implements IGPURenderer {
|
|
24
24
|
readonly height: number;
|
25
25
|
readonly width: number;
|
26
26
|
/**
|
27
|
-
|
28
|
-
|
27
|
+
* if webgl not support, gpu.level will be 0
|
28
|
+
*/
|
29
29
|
readonly shaderLibrary: ShaderLibrary;
|
30
30
|
readonly gpu: GPUCapability;
|
31
31
|
readonly canvas: Canvas;
|
@@ -35,17 +35,26 @@ export declare class GPURenderer implements IGPURenderer {
|
|
35
35
|
createRenderFrame(options?: RenderFrameOptions): RenderFrame;
|
36
36
|
createBuffer(options: GPUBufferOptions): GPUBuffer;
|
37
37
|
/**
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
38
|
+
* 根据不同平台封装实现 requestAnimationFrame,
|
39
|
+
* FrameRequestCallback函数回调中进行渲染数据更新,
|
40
|
+
* OpenGL/WebGL在绘制开始之前(传递此帧数据)
|
41
|
+
* Metal在commandBuffer提交后(传递下一帧数据)
|
42
|
+
* @param cb
|
43
|
+
*/
|
44
|
+
requestAnimationFrame(cb: FrameRequestCallback): number;
|
45
|
+
cancelAnimationFrame(id: number): void;
|
46
|
+
/**
|
47
|
+
* only resize when width or height is different from now,
|
48
|
+
* when resized,all full-screen renderPasses attached to this renderer should be resized as well
|
49
|
+
* 只有当宽高不同的时候,才实际进行函数
|
50
|
+
* 当重新调整宽高后,这个renderer创建的renderPasses,如果没有被指定 viewport(全屏),那么需要resize 所有的renderPass
|
51
|
+
* @param width
|
52
|
+
* @param height
|
53
|
+
*/
|
45
54
|
resize(width: number, height: number): void;
|
46
55
|
/**
|
47
|
-
|
48
|
-
|
49
|
-
|
56
|
+
* destroy all resources created by this renderer
|
57
|
+
* @param haltGL if true, this method will call webgl lose context extension which leads webgl absolutely halt
|
58
|
+
*/
|
50
59
|
destroy(haltGL?: boolean): void;
|
51
60
|
}
|
@@ -1,7 +1,7 @@
|
|
1
1
|
export type Shader = ShaderWithSource | ShaderUseCacheId;
|
2
2
|
export type ShaderWithSource = InstancedShaderWithSource | SharedShaderWithSource;
|
3
3
|
export interface MetaShaderSpec {
|
4
|
-
mtlBinary?: ArrayBuffer;
|
4
|
+
mtlBinary?: ArrayBuffer | string;
|
5
5
|
mtlSource?: string;
|
6
6
|
mtlVertex?: string;
|
7
7
|
mtlFragment?: string;
|
@@ -51,9 +51,9 @@ export interface ShaderLibrary {
|
|
51
51
|
readonly cacheIds: string[];
|
52
52
|
getShaderResult(cacheId: string): ShaderCompileResult | undefined;
|
53
53
|
/**
|
54
|
-
|
55
|
-
|
56
|
-
|
54
|
+
* 添加shader
|
55
|
+
* @param shader
|
56
|
+
*/
|
57
57
|
addShader(shader: Shader): string;
|
58
58
|
/**
|
59
59
|
* @param cacheId
|
@@ -16,14 +16,6 @@ export declare abstract class RenderFrameInternal implements ResourceInternal {
|
|
16
16
|
renderPasses: RenderPassInternal[];
|
17
17
|
protected constructor(options: RenderFrameInternalOptions);
|
18
18
|
abstract destroy(): void;
|
19
|
-
|
20
|
-
* warp层完成所有数据传输后,通知客户端,可以进行实际渲染,
|
21
|
-
* 实际渲染根据客户端时机进行,在调用end()之前,客户端会根据实际刷新进行绘制
|
22
|
-
*/
|
23
|
-
abstract begin(): void;
|
24
|
-
/**
|
25
|
-
* 将RenderFrame移除渲染队列
|
26
|
-
*/
|
27
|
-
abstract end(): void;
|
19
|
+
abstract render(): void;
|
28
20
|
abstract updateLoadAction(action: RenderPassLoadAction): void;
|
29
21
|
}
|
@@ -31,6 +31,10 @@ export declare abstract class RendererInternal implements ResourceInternal {
|
|
31
31
|
readonly width: number;
|
32
32
|
readonly height: number;
|
33
33
|
abstract destroy(): void;
|
34
|
+
/**
|
35
|
+
* 需要进行重新渲染
|
36
|
+
*/
|
37
|
+
abstract invalid(): void;
|
34
38
|
abstract createBuffer(options: GPUBufferInternalOptions): GPUBufferInternal;
|
35
39
|
abstract createGeometry(options: GeometryInternalOptions): GeometryInternal;
|
36
40
|
abstract createDataBlock(options: DataBlockInternalOptions): DataBlockInternal;
|
@@ -42,6 +46,12 @@ export declare abstract class RendererInternal implements ResourceInternal {
|
|
42
46
|
abstract getResourceInfo(): InternalResInfo;
|
43
47
|
abstract requestAnimationFrame(callback: (timestamp: number) => void): number;
|
44
48
|
abstract cancelAnimationFrame(id: number): void;
|
49
|
+
/**
|
50
|
+
* 获取错误信息,目前支持最大获取5条,
|
51
|
+
* 每次调用此函数后,清空错误队列
|
52
|
+
*/
|
53
|
+
abstract getErrors(): string[];
|
54
|
+
abstract resize(width: number, height: number): void;
|
45
55
|
abstract createImageBitmap(data: ArrayBuffer | string, //图片文件的数据
|
46
56
|
options: ImageBitmapConstructor, callback: ImageBitmapCallback): void;
|
47
57
|
}
|
package/package.json
CHANGED
package/types/Material.ts
CHANGED
@@ -1,18 +1,18 @@
|
|
1
|
-
import type { Texture } from './Texture';
|
2
1
|
import type { ShaderUseCacheId, ShaderWithSource } from './ShaderLibrary';
|
3
2
|
import type { IGPUResource, IGPURenderer } from './IGPURenderer';
|
4
3
|
import type { Immutable, TypedArray } from './type';
|
5
4
|
import type { GPURenderer } from './Renderer';
|
6
5
|
import type { DestroyOptions } from './constants';
|
6
|
+
import type { Texture } from './Texture';
|
7
7
|
|
8
8
|
export type UniformSemantic =
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
9
|
+
| 'VIEW'
|
10
|
+
| 'MODEL'
|
11
|
+
| 'MODELVIEW'
|
12
|
+
| 'PROJECTION'
|
13
|
+
| 'VIEWPROJECTION'
|
14
|
+
| 'MODELVIEWPROJECTION'
|
15
|
+
| string;
|
16
16
|
|
17
17
|
export interface MaterialRenderStates {
|
18
18
|
sampleAlphaToCoverage?: boolean,
|
@@ -24,13 +24,13 @@ export interface MaterialRenderStates {
|
|
24
24
|
blendSrc?: number,
|
25
25
|
blendDst?: number,
|
26
26
|
/**
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
27
|
+
* The blend color is a state value,
|
28
|
+
* like the blend equations and blend parameters. Therefore,
|
29
|
+
* it cannot change within a single draw call;
|
30
|
+
* fragment shaders cannot write to, modify,
|
31
|
+
* or even access the blend color.
|
32
|
+
* All buffers share the same blend color.
|
33
|
+
*/
|
34
34
|
blendColor?: [r: number, g: number, b: number, a: number],
|
35
35
|
colorMask?: [r: boolean, g: boolean, b: boolean, a: boolean],
|
36
36
|
depthTest?: boolean,
|
@@ -63,8 +63,6 @@ export interface MaterialOptions {
|
|
63
63
|
shader: ShaderWithSource | ShaderUseCacheId,
|
64
64
|
name?: string,
|
65
65
|
dataBlocks?: MaterialDataBlockOptions[],
|
66
|
-
uniformSemantics?: { [key: string]: UniformSemantic },
|
67
|
-
uniformValues?: { [key: string]: UniformValue },
|
68
66
|
}
|
69
67
|
|
70
68
|
//使用shader即时编译,此参数会调用 shaderLibrary.addShader() 为 Material提供shaderCacheId属性值,
|
@@ -97,12 +95,12 @@ export interface MaterialOptions {
|
|
97
95
|
* });
|
98
96
|
* mtl2 use the same program with mtl0
|
99
97
|
*/
|
100
|
-
export type UniformValueDataType = TypedArray | number | number[] |
|
98
|
+
export type UniformValueDataType = TypedArray | number | number[] | number[][];
|
101
99
|
// 支持结构体Uniform数据
|
102
100
|
export type UniformValue =
|
103
|
-
|
104
|
-
|
105
|
-
|
101
|
+
UniformValueDataType
|
102
|
+
| UniformStruct
|
103
|
+
| UniformStruct[];
|
106
104
|
|
107
105
|
export type UniformStruct = { [key: string]: UniformValueDataType };
|
108
106
|
|
@@ -137,13 +135,12 @@ export declare class Material implements IGPUResource {
|
|
137
135
|
|
138
136
|
destroy (options?: MaterialDestroyOptions): void;
|
139
137
|
|
140
|
-
setUniformSemantic (uniformName: string, semantic: string | undefined): void;
|
141
|
-
|
142
138
|
assignRenderer (renderer: GPURenderer): Material;
|
143
139
|
}
|
144
140
|
|
145
141
|
export interface MaterialDataBlockOptions {
|
146
142
|
uniformValues?: { [key: string]: UniformValue },
|
143
|
+
uniformTextures?: Record<string, Texture | Texture[]>,
|
147
144
|
name?: string,
|
148
145
|
uniformSemantics?: { [key: string]: UniformSemantic },
|
149
146
|
}
|
@@ -166,6 +163,8 @@ export declare class MaterialDataBlock implements IGPUResource {
|
|
166
163
|
|
167
164
|
hasUniformValue (name: string): boolean;
|
168
165
|
|
166
|
+
setUniformSemantic (name: string, semantic: string | undefined): void;
|
167
|
+
|
169
168
|
setUniformValue (name: string, value: UniformValue): boolean;
|
170
169
|
|
171
170
|
getUniformValue (name: string): UniformValue;
|
@@ -174,15 +173,19 @@ export declare class MaterialDataBlock implements IGPUResource {
|
|
174
173
|
|
175
174
|
setUniformValues (map: { [key: string]: UniformValue }): void;
|
176
175
|
|
176
|
+
setUniformTexture (uniformName: string, texture: Texture | Texture[] | undefined): void;
|
177
|
+
|
178
|
+
getUniformTexture<T extends Texture[] | Texture = Texture>(uniformName: string): T | undefined;
|
179
|
+
|
177
180
|
/**
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
181
|
+
* indicate uniform data should be resent to GPU, but not the full range,
|
182
|
+
* only works for ubo,if not an ubo, this method has no side effect
|
183
|
+
* offset and count are counted by typed entry, not the number elements
|
184
|
+
* entry means matrix or vector in shader
|
185
|
+
* @param name uniform name
|
186
|
+
* @param offset entry offset,first entry to send to gpu, default 0
|
187
|
+
* @param count entry count,entry count to send to gpu,default to end
|
188
|
+
*/
|
186
189
|
updateUniformSubData (name: string, offset: number, count: number): void;
|
187
190
|
|
188
191
|
destroy (options?: MaterialDataBlockDestroyOptions): void;
|
package/types/RenderFrame.ts
CHANGED
@@ -1,11 +1,9 @@
|
|
1
|
-
import type { UniformValue } from './Material';
|
2
1
|
import type {
|
3
2
|
RenderPass,
|
4
3
|
RenderPassLoadAction,
|
5
|
-
RenderPassDestroyOptions, SemanticMap,
|
4
|
+
RenderPassDestroyOptions, SemanticMap, SemanticGetter,
|
6
5
|
} from './RenderPass';
|
7
6
|
import type { Mesh } from './Mesh';
|
8
|
-
import type { GPUBuffer } from './GPUBuffer';
|
9
7
|
import type { vec4 } from './type';
|
10
8
|
import type { GPURenderer } from './index';
|
11
9
|
import type { IGPURenderer, IGPUResource } from './IGPURenderer';
|
@@ -21,12 +19,12 @@ export interface RenderState {
|
|
21
19
|
export interface RenderFrameOptions {
|
22
20
|
renderPasses?: RenderPass[],
|
23
21
|
viewport?: vec4,
|
24
|
-
semantics?: { [key: string]:
|
22
|
+
semantics?: { [key: string]: SemanticGetter },
|
25
23
|
loadAction?: RenderPassLoadAction,
|
26
24
|
name?: string,
|
27
25
|
}
|
28
26
|
|
29
|
-
export type SemanticFunc = (state: RenderState) =>
|
27
|
+
export type SemanticFunc = (state: RenderState) => SemanticGetter | null | undefined;
|
30
28
|
|
31
29
|
export type RenderFrameDestroyOptions = {
|
32
30
|
passes?: RenderPassDestroyOptions | DestroyOptions.keep,
|
package/types/RenderPass.ts
CHANGED
@@ -117,7 +117,7 @@ export interface RenderPassAttachmentOptions {
|
|
117
117
|
multiSample?: number,
|
118
118
|
}
|
119
119
|
|
120
|
-
export type SemanticGetter = UniformValue | SemanticFunc | GPUBuffer;
|
120
|
+
export type SemanticGetter = UniformValue | SemanticFunc | GPUBuffer | Texture | Texture[];
|
121
121
|
|
122
122
|
export interface RenderPassOptions extends RenderPassAttachmentOptions {
|
123
123
|
name?: string,
|
@@ -163,7 +163,7 @@ export interface RenderPassDelegate {
|
|
163
163
|
willBeginRenderPass?: (renderPass: RenderPass, state: RenderState) => void,
|
164
164
|
didEndRenderPass?: (renderPass: RenderPass, state: RenderState) => void,
|
165
165
|
willRenderMesh?: (mesh: Mesh, state: RenderState) => void,
|
166
|
-
|
166
|
+
didRenderMesh?: (mesh: Mesh, state: RenderState) => void,
|
167
167
|
}
|
168
168
|
|
169
169
|
export declare class RenderPass implements IGPUResource {
|
package/types/Renderer.ts
CHANGED
@@ -23,13 +23,12 @@ export interface RendererExtensions {
|
|
23
23
|
copyTexture?: (source: Texture, tex: Texture) => void,
|
24
24
|
resetColorAttachments?: (rp: RenderPass, colorAttachments: Texture[]) => void,
|
25
25
|
}
|
26
|
-
|
27
26
|
export declare class GPURenderer implements IGPURenderer {
|
28
27
|
readonly height: number;
|
29
28
|
readonly width: number;
|
30
29
|
/**
|
31
|
-
|
32
|
-
|
30
|
+
* if webgl not support, gpu.level will be 0
|
31
|
+
*/
|
33
32
|
readonly shaderLibrary: ShaderLibrary;
|
34
33
|
readonly gpu: GPUCapability;
|
35
34
|
readonly canvas: Canvas;
|
@@ -44,19 +43,31 @@ export declare class GPURenderer implements IGPURenderer {
|
|
44
43
|
createBuffer (options: GPUBufferOptions): GPUBuffer;
|
45
44
|
|
46
45
|
/**
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
46
|
+
* 根据不同平台封装实现 requestAnimationFrame,
|
47
|
+
* FrameRequestCallback函数回调中进行渲染数据更新,
|
48
|
+
* OpenGL/WebGL在绘制开始之前(传递此帧数据)
|
49
|
+
* Metal在commandBuffer提交后(传递下一帧数据)
|
50
|
+
* @param cb
|
51
|
+
*/
|
52
|
+
requestAnimationFrame (cb: FrameRequestCallback): number;
|
53
|
+
|
54
|
+
//todo
|
55
|
+
cancelAnimationFrame (id: number): void;
|
56
|
+
|
57
|
+
/**
|
58
|
+
* only resize when width or height is different from now,
|
59
|
+
* when resized,all full-screen renderPasses attached to this renderer should be resized as well
|
60
|
+
* 只有当宽高不同的时候,才实际进行函数
|
61
|
+
* 当重新调整宽高后,这个renderer创建的renderPasses,如果没有被指定 viewport(全屏),那么需要resize 所有的renderPass
|
62
|
+
* @param width
|
63
|
+
* @param height
|
64
|
+
*/
|
54
65
|
resize (width: number, height: number): void;
|
55
66
|
|
56
67
|
/**
|
57
|
-
|
58
|
-
|
59
|
-
|
68
|
+
* destroy all resources created by this renderer
|
69
|
+
* @param haltGL if true, this method will call webgl lose context extension which leads webgl absolutely halt
|
70
|
+
*/
|
60
71
|
destroy (haltGL?: boolean): void;
|
61
72
|
|
62
73
|
}
|
package/types/ShaderLibrary.ts
CHANGED
@@ -2,7 +2,7 @@ export type Shader = ShaderWithSource | ShaderUseCacheId;
|
|
2
2
|
export type ShaderWithSource = InstancedShaderWithSource | SharedShaderWithSource;
|
3
3
|
|
4
4
|
export interface MetaShaderSpec {
|
5
|
-
mtlBinary?: ArrayBuffer,
|
5
|
+
mtlBinary?: ArrayBuffer | string,
|
6
6
|
mtlSource?: string,
|
7
7
|
|
8
8
|
mtlVertex?: string,
|
@@ -72,9 +72,9 @@ export interface ShaderLibrary {
|
|
72
72
|
getShaderResult(cacheId: string): ShaderCompileResult | undefined,
|
73
73
|
|
74
74
|
/**
|
75
|
-
|
76
|
-
|
77
|
-
|
75
|
+
* 添加shader
|
76
|
+
* @param shader
|
77
|
+
*/
|
78
78
|
addShader(shader: Shader): string,
|
79
79
|
|
80
80
|
/**
|