@bigmistqke/view.gl 0.1.5 → 0.1.7
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/README.md +113 -45
- package/dev/src/examples/game-of-life.ts +2 -2
- package/dev/src/examples/pix-sim.ts +2 -2
- package/dist/index.d.mts +3 -2
- package/dist/index.mjs +2 -1
- package/dist/index.mjs.map +1 -1
- package/dist/tag.d.mts +7 -41
- package/dist/tag.mjs +10 -10
- package/dist/tag.mjs.map +1 -1
- package/dist/types-C4TRuvYh.d.mts +477 -0
- package/package.json +2 -2
- package/src/features.ts +2 -1
- package/src/index.ts +6 -1
- package/src/tag.ts +19 -128
- package/src/type-utils.ts +43 -0
- package/src/types.ts +112 -99
- package/src/utils/index.ts +7 -4
- package/test/tag.test.ts +412 -78
- package/dist/types-DIIqZ8e6.d.mts +0 -289
|
@@ -1,289 +0,0 @@
|
|
|
1
|
-
type Prettify<T> = {
|
|
2
|
-
[K in keyof T]: T[K];
|
|
3
|
-
} & {};
|
|
4
|
-
type GL = WebGLRenderingContext | WebGL2RenderingContext;
|
|
5
|
-
type DeepMerge<A extends readonly [...any]> = A extends [infer L, ...infer R] ? DeepMergeTwo<L, DeepMerge<R>> : unknown;
|
|
6
|
-
type DeepMergeTwo<TBase, TOverride> = {
|
|
7
|
-
[K in keyof TBase | keyof TOverride]: K extends keyof TOverride ? K extends keyof TBase ? ShallowMerge<[TBase[K], TOverride[K]]> : TOverride[K] : K extends keyof TBase ? TBase[K] : never;
|
|
8
|
-
};
|
|
9
|
-
type ShallowMerge<A extends readonly [...any]> = A extends [infer L, ...infer R] ? ShallowMergeTwo<L, ShallowMerge<R>> : unknown;
|
|
10
|
-
type OptionalPropertyNames<T> = {
|
|
11
|
-
[K in keyof T]-?: {} extends {
|
|
12
|
-
[P in K]: T[K];
|
|
13
|
-
} ? K : never;
|
|
14
|
-
}[keyof T];
|
|
15
|
-
type SpreadProperties<L, R, K extends keyof L & keyof R> = {
|
|
16
|
-
[P in K]: L[P] | Exclude<R[P], undefined>;
|
|
17
|
-
};
|
|
18
|
-
type Id<T> = T extends infer U ? {
|
|
19
|
-
[K in keyof U]: U[K];
|
|
20
|
-
} : never;
|
|
21
|
-
type ShallowMergeTwo<L, R> = Id<Pick<L, Exclude<keyof L, keyof R>> & Pick<R, Exclude<keyof R, OptionalPropertyNames<R>>> & Pick<R, Exclude<OptionalPropertyNames<R>, keyof L>> & SpreadProperties<L, R, OptionalPropertyNames<R> & keyof L>>;
|
|
22
|
-
/**********************************************************************************/
|
|
23
|
-
/**********************************************************************************/
|
|
24
|
-
type GLTarget = 'ARRAY_BUFFER' | 'ELEMENT_ARRAY_BUFFER';
|
|
25
|
-
type GLUsage = 'STATIC_DRAW' | 'DYNAMIC_DRAW' | 'STREAM_DRAW';
|
|
26
|
-
type UniformKind = 'float' | 'vec2' | 'vec3' | 'vec4' | 'int' | 'ivec2' | 'ivec3' | 'ivec4' | 'bool' | 'bvec2' | 'bvec3' | 'bvec4' | 'mat2' | 'mat3' | 'mat4' | 'sampler2D' | 'samplerCube' | 'uint' | 'uvec2' | 'uvec3' | 'uvec4' | 'mat2x3' | 'mat2x4' | 'mat3x2' | 'mat3x4' | 'mat4x2' | 'mat4x3' | 'sampler3D' | 'sampler2DArray' | 'sampler2DShadow' | 'samplerCubeShadow' | 'sampler2DArrayShadow' | 'isampler2D' | 'isampler3D' | 'isamplerCube' | 'isampler2DArray' | 'usampler2D' | 'usampler3D' | 'usamplerCube' | 'usampler2DArray';
|
|
27
|
-
interface UniformKindMap {
|
|
28
|
-
float: [number];
|
|
29
|
-
vec2: [number, number];
|
|
30
|
-
vec3: [number, number, number];
|
|
31
|
-
vec4: [number, number, number, number];
|
|
32
|
-
int: [number];
|
|
33
|
-
ivec2: [number, number];
|
|
34
|
-
ivec3: [number, number, number];
|
|
35
|
-
ivec4: [number, number, number, number];
|
|
36
|
-
bool: [number];
|
|
37
|
-
bvec2: [number, number];
|
|
38
|
-
bvec3: [number, number, number];
|
|
39
|
-
bvec4: [number, number, number, number];
|
|
40
|
-
uint: [number];
|
|
41
|
-
uvec2: [number, number];
|
|
42
|
-
uvec3: [number, number, number];
|
|
43
|
-
uvec4: [number, number, number, number];
|
|
44
|
-
mat2: [Float32Array] | [
|
|
45
|
-
number,
|
|
46
|
-
number,
|
|
47
|
-
number,
|
|
48
|
-
number
|
|
49
|
-
];
|
|
50
|
-
mat3: [Float32Array] | [
|
|
51
|
-
number,
|
|
52
|
-
number,
|
|
53
|
-
number,
|
|
54
|
-
number,
|
|
55
|
-
number,
|
|
56
|
-
number,
|
|
57
|
-
number,
|
|
58
|
-
number,
|
|
59
|
-
number
|
|
60
|
-
];
|
|
61
|
-
mat4: [Float32Array] | [
|
|
62
|
-
number,
|
|
63
|
-
number,
|
|
64
|
-
number,
|
|
65
|
-
number,
|
|
66
|
-
number,
|
|
67
|
-
number,
|
|
68
|
-
number,
|
|
69
|
-
number,
|
|
70
|
-
number,
|
|
71
|
-
number,
|
|
72
|
-
number,
|
|
73
|
-
number,
|
|
74
|
-
number,
|
|
75
|
-
number,
|
|
76
|
-
number,
|
|
77
|
-
number
|
|
78
|
-
];
|
|
79
|
-
mat2x3: [Float32Array] | [
|
|
80
|
-
number,
|
|
81
|
-
number,
|
|
82
|
-
number,
|
|
83
|
-
number,
|
|
84
|
-
number,
|
|
85
|
-
number
|
|
86
|
-
];
|
|
87
|
-
mat2x4: [Float32Array] | [
|
|
88
|
-
number,
|
|
89
|
-
number,
|
|
90
|
-
number,
|
|
91
|
-
number,
|
|
92
|
-
number,
|
|
93
|
-
number,
|
|
94
|
-
number,
|
|
95
|
-
number
|
|
96
|
-
];
|
|
97
|
-
mat3x2: [Float32Array] | [
|
|
98
|
-
number,
|
|
99
|
-
number,
|
|
100
|
-
number,
|
|
101
|
-
number,
|
|
102
|
-
number,
|
|
103
|
-
number
|
|
104
|
-
];
|
|
105
|
-
mat3x4: [Float32Array] | [
|
|
106
|
-
number,
|
|
107
|
-
number,
|
|
108
|
-
number,
|
|
109
|
-
number,
|
|
110
|
-
number,
|
|
111
|
-
number,
|
|
112
|
-
number,
|
|
113
|
-
number,
|
|
114
|
-
number,
|
|
115
|
-
number,
|
|
116
|
-
number,
|
|
117
|
-
number
|
|
118
|
-
];
|
|
119
|
-
mat4x2: [Float32Array] | [
|
|
120
|
-
number,
|
|
121
|
-
number,
|
|
122
|
-
number,
|
|
123
|
-
number,
|
|
124
|
-
number,
|
|
125
|
-
number,
|
|
126
|
-
number,
|
|
127
|
-
number
|
|
128
|
-
];
|
|
129
|
-
mat4x3: [Float32Array] | [
|
|
130
|
-
number,
|
|
131
|
-
number,
|
|
132
|
-
number,
|
|
133
|
-
number,
|
|
134
|
-
number,
|
|
135
|
-
number,
|
|
136
|
-
number,
|
|
137
|
-
number,
|
|
138
|
-
number,
|
|
139
|
-
number,
|
|
140
|
-
number,
|
|
141
|
-
number
|
|
142
|
-
];
|
|
143
|
-
sampler2D: [number];
|
|
144
|
-
samplerCube: [number];
|
|
145
|
-
sampler3D: [number];
|
|
146
|
-
sampler2DArray: [number];
|
|
147
|
-
sampler2DShadow: [number];
|
|
148
|
-
samplerCubeShadow: [number];
|
|
149
|
-
sampler2DArrayShadow: [number];
|
|
150
|
-
isampler2D: [number];
|
|
151
|
-
isampler3D: [number];
|
|
152
|
-
isamplerCube: [number];
|
|
153
|
-
isampler2DArray: [number];
|
|
154
|
-
usampler2D: [number];
|
|
155
|
-
usampler3D: [number];
|
|
156
|
-
usamplerCube: [number];
|
|
157
|
-
usampler2DArray: [number];
|
|
158
|
-
}
|
|
159
|
-
interface UniformOptions {
|
|
160
|
-
kind: UniformKind;
|
|
161
|
-
size?: number;
|
|
162
|
-
}
|
|
163
|
-
type UniformSchema = Record<string | symbol, UniformOptions>;
|
|
164
|
-
type UniformMethods<TOptions extends UniformOptions> = TOptions['size'] extends number ? {
|
|
165
|
-
set(arg: Float32Array): void;
|
|
166
|
-
} : {
|
|
167
|
-
set(...args: UniformKindMap[TOptions['kind']]): void;
|
|
168
|
-
};
|
|
169
|
-
type UniformView<T extends UniformSchema> = {
|
|
170
|
-
[K in keyof T]: UniformMethods<T[K]>;
|
|
171
|
-
};
|
|
172
|
-
type AttributeKind = 'float' | 'vec2' | 'vec3' | 'vec4' | 'mat2' | 'mat3' | 'mat4' | 'mat2x3' | 'mat2x4' | 'mat3x2' | 'mat3x4' | 'mat4x2' | 'mat4x3' | 'int' | 'ivec2' | 'ivec3' | 'ivec4' | 'uint' | 'uvec2' | 'uvec3' | 'uvec4';
|
|
173
|
-
interface AttributeOptions {
|
|
174
|
-
kind: AttributeKind;
|
|
175
|
-
instanced?: boolean;
|
|
176
|
-
buffer?: WebGLBuffer;
|
|
177
|
-
}
|
|
178
|
-
type AttributeSchema = Record<string | symbol, AttributeOptions>;
|
|
179
|
-
interface AttributeMethods<T = AttributeKind> {
|
|
180
|
-
buffer: WebGLBuffer;
|
|
181
|
-
bind(): void;
|
|
182
|
-
set(data: Float32Array, usage?: GLUsage): {
|
|
183
|
-
bind(): void;
|
|
184
|
-
};
|
|
185
|
-
dispose(): void;
|
|
186
|
-
}
|
|
187
|
-
type AttributeView<T extends AttributeSchema> = {
|
|
188
|
-
[K in keyof T]: AttributeMethods<T[K]['kind']>;
|
|
189
|
-
};
|
|
190
|
-
/**********************************************************************************/
|
|
191
|
-
/**********************************************************************************/
|
|
192
|
-
interface InterleavedAttributeLayout {
|
|
193
|
-
key: string | symbol;
|
|
194
|
-
kind: AttributeKind;
|
|
195
|
-
}
|
|
196
|
-
interface InterleavedAttributeOptions {
|
|
197
|
-
layout: InterleavedAttributeLayout[];
|
|
198
|
-
instanced?: boolean;
|
|
199
|
-
}
|
|
200
|
-
type InterleavedAttributeSchema = Record<string | symbol, InterleavedAttributeOptions>;
|
|
201
|
-
interface InterleavedAttributeMethods<T extends InterleavedAttributeLayout[] = InterleavedAttributeLayout[]> {
|
|
202
|
-
bind(): void;
|
|
203
|
-
unbind(): void;
|
|
204
|
-
set(data: Float32Array, usage?: GLUsage): void;
|
|
205
|
-
dispose(): void;
|
|
206
|
-
}
|
|
207
|
-
type InterleavedAttributeView<T extends InterleavedAttributeSchema> = {
|
|
208
|
-
[K in keyof T]: InterleavedAttributeMethods<T[K]['layout']>;
|
|
209
|
-
};
|
|
210
|
-
/**********************************************************************************/
|
|
211
|
-
/**********************************************************************************/
|
|
212
|
-
interface BufferOptions {
|
|
213
|
-
target?: GLTarget;
|
|
214
|
-
usage?: GLUsage;
|
|
215
|
-
}
|
|
216
|
-
type BufferSchema = Record<string | symbol, BufferOptions>;
|
|
217
|
-
interface BufferMethods {
|
|
218
|
-
set(data: Float32Array | Uint16Array | Uint32Array): void;
|
|
219
|
-
bind(): void;
|
|
220
|
-
dispose(): void;
|
|
221
|
-
}
|
|
222
|
-
type BufferView<T extends BufferSchema> = {
|
|
223
|
-
[K in keyof T]: BufferMethods;
|
|
224
|
-
};
|
|
225
|
-
/**********************************************************************************/
|
|
226
|
-
/**********************************************************************************/
|
|
227
|
-
interface ViewOptions {
|
|
228
|
-
signal?: AbortSignal;
|
|
229
|
-
}
|
|
230
|
-
interface ViewSchema {
|
|
231
|
-
uniforms?: UniformSchema;
|
|
232
|
-
attributes?: AttributeSchema;
|
|
233
|
-
interleavedAttributes?: InterleavedAttributeSchema;
|
|
234
|
-
buffers?: BufferSchema;
|
|
235
|
-
}
|
|
236
|
-
interface ViewSchemaPartial {
|
|
237
|
-
uniforms?: Record<string | symbol, Partial<UniformOptions>>;
|
|
238
|
-
attributes?: Record<string | symbol, Partial<AttributeOptions>>;
|
|
239
|
-
interleavedAttributes?: Record<string | symbol, Partial<InterleavedAttributeOptions>>;
|
|
240
|
-
buffers?: Record<string | symbol, Partial<BufferOptions>>;
|
|
241
|
-
}
|
|
242
|
-
type View<T extends ViewSchema = ViewSchema> = {
|
|
243
|
-
attributes: T['attributes'] extends AttributeSchema ? AttributeView<T['attributes']> : undefined;
|
|
244
|
-
interleavedAttributes: T['interleavedAttributes'] extends InterleavedAttributeSchema ? InterleavedAttributeView<T['interleavedAttributes']> : undefined;
|
|
245
|
-
buffers: T['buffers'] extends BufferSchema ? BufferView<T['buffers']> : undefined;
|
|
246
|
-
uniforms: T['uniforms'] extends UniformSchema ? UniformView<T['uniforms']> : never;
|
|
247
|
-
};
|
|
248
|
-
type GLSLSlotItem = GLSLTag | UniformTag | AttributeTag | InterleaveTag | string | number | symbol;
|
|
249
|
-
type GLSLSlot = GLSLSlotItem | Array<GLSLSlotItem>;
|
|
250
|
-
interface GLSLTag<TSlots extends GLSLSlot[] = GLSLSlot[]> {
|
|
251
|
-
type: 'glsl';
|
|
252
|
-
template: TemplateStringsArray;
|
|
253
|
-
slots: TSlots;
|
|
254
|
-
}
|
|
255
|
-
type UniformTag<TKey extends string | symbol = string | symbol, TKind extends UniformKind = UniformKind, TOptions extends Partial<UniformOptions> = UniformOptions> = TOptions extends {
|
|
256
|
-
size: infer TSize;
|
|
257
|
-
} ? {
|
|
258
|
-
type: 'uniform';
|
|
259
|
-
kind: TKind;
|
|
260
|
-
key: TKey;
|
|
261
|
-
size: TSize;
|
|
262
|
-
} : {
|
|
263
|
-
type: 'uniform';
|
|
264
|
-
kind: TKind;
|
|
265
|
-
key: TKey;
|
|
266
|
-
};
|
|
267
|
-
interface UniformTagFn<TKind extends UniformKind> {
|
|
268
|
-
<const TKey extends string | symbol, const TOptions extends Omit<UniformOptions, 'kind'>>(key: TKey, TOptions: TOptions): Prettify<UniformTag<TKey, TKind, TOptions>>;
|
|
269
|
-
<const TName extends string | symbol>(key: TName): Prettify<UniformTag<TName, TKind>>;
|
|
270
|
-
}
|
|
271
|
-
interface AttributeTag<TKey extends string | symbol = string | symbol, TKind extends AttributeKind = AttributeKind, TInstanced extends boolean | undefined = boolean | undefined> {
|
|
272
|
-
type: 'attribute';
|
|
273
|
-
kind: TKind;
|
|
274
|
-
instanced: TInstanced;
|
|
275
|
-
key: TKey;
|
|
276
|
-
}
|
|
277
|
-
interface AttributeTagFn<TKey extends AttributeKind> {
|
|
278
|
-
<TName extends string | symbol, TOptions extends Omit<AttributeOptions, 'kind'>>(key: TName, options: TOptions): Prettify<AttributeTag<TName, TKey, TOptions['instanced']>>;
|
|
279
|
-
<TName extends string | symbol>(key: TName): Prettify<AttributeTag<TName, TKey, undefined>>;
|
|
280
|
-
}
|
|
281
|
-
type InterleaveTag<TKey extends string | symbol = string | symbol, TLayout extends Array<AttributeTag<string | symbol, AttributeKind, undefined>> = Array<AttributeTag<string | symbol, AttributeKind, undefined>>, TOptions extends Omit<AttributeOptions, 'kind'> = Omit<AttributeOptions, 'kind'>> = TOptions & {
|
|
282
|
-
key: TKey;
|
|
283
|
-
type: 'interleavedAttribute';
|
|
284
|
-
layout: {
|
|
285
|
-
[TKey in keyof TLayout]: Prettify<Pick<TLayout[TKey], 'kind' | 'key'>>;
|
|
286
|
-
};
|
|
287
|
-
};
|
|
288
|
-
|
|
289
|
-
export type { AttributeSchema as A, BufferSchema as B, DeepMerge as D, GL as G, InterleavedAttributeSchema as I, Prettify as P, ShallowMerge as S, UniformSchema as U, ViewSchema as V, ViewOptions as a, View as b, UniformView as c, AttributeView as d, InterleavedAttributeView as e, BufferView as f, GLSLSlot as g, GLSLTag as h, UniformTagFn as i, AttributeTagFn as j, AttributeTag as k, AttributeKind as l, AttributeOptions as m, InterleaveTag as n, ViewSchemaPartial as o, UniformTag as p };
|