react-native-shine 0.7.0 → 0.8.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/lib/module/components/Content.js +126 -135
- package/lib/module/components/Content.js.map +1 -1
- package/lib/module/components/Shine.js +22 -3
- package/lib/module/components/Shine.js.map +1 -1
- package/lib/module/components/ShineGroup.js +0 -4
- package/lib/module/components/ShineGroup.js.map +1 -1
- package/lib/module/enums/colorPresets.js +192 -0
- package/lib/module/enums/colorPresets.js.map +1 -1
- package/lib/module/enums/effectDefaults.js +59 -0
- package/lib/module/enums/effectDefaults.js.map +1 -0
- package/lib/module/enums/effectPresets.js +67 -10
- package/lib/module/enums/effectPresets.js.map +1 -1
- package/lib/module/shaders/bindGroupLayouts.js +50 -27
- package/lib/module/shaders/bindGroupLayouts.js.map +1 -1
- package/lib/module/shaders/bindGroupUtils.js +30 -44
- package/lib/module/shaders/bindGroupUtils.js.map +1 -1
- package/lib/module/shaders/colorConversions.js +78 -0
- package/lib/module/shaders/colorConversions.js.map +1 -0
- package/lib/module/shaders/computeShaders/precomputeColorMask.js +34 -0
- package/lib/module/shaders/computeShaders/precomputeColorMask.js.map +1 -0
- package/lib/module/shaders/fragmentShaders/baseTextureFragment.js +4 -9
- package/lib/module/shaders/fragmentShaders/baseTextureFragment.js.map +1 -1
- package/lib/module/shaders/fragmentShaders/colorMaskFragment.js +28 -41
- package/lib/module/shaders/fragmentShaders/colorMaskFragment.js.map +1 -1
- package/lib/module/shaders/fragmentShaders/glareFlareFragment.js +84 -0
- package/lib/module/shaders/fragmentShaders/glareFlareFragment.js.map +1 -0
- package/lib/module/shaders/fragmentShaders/glareFragment.js +8 -88
- package/lib/module/shaders/fragmentShaders/glareFragment.js.map +1 -1
- package/lib/module/shaders/fragmentShaders/holoFragment.js +120 -11
- package/lib/module/shaders/fragmentShaders/holoFragment.js.map +1 -1
- package/lib/module/shaders/fragmentShaders/maskFragment.js +5 -4
- package/lib/module/shaders/fragmentShaders/maskFragment.js.map +1 -1
- package/lib/module/shaders/fragmentShaders/reverseHoloFragment.js +7 -7
- package/lib/module/shaders/fragmentShaders/reverseHoloFragment.js.map +1 -1
- package/lib/module/shaders/pipelineSetups.js +5 -62
- package/lib/module/shaders/pipelineSetups.js.map +1 -1
- package/lib/module/shaders/resourceManagement/bufferManager.js.map +1 -1
- package/lib/module/shaders/resourceManagement/buffersMap.js +41 -0
- package/lib/module/shaders/resourceManagement/buffersMap.js.map +1 -0
- package/lib/module/shaders/resourceManagement/pipelineMap.js +115 -0
- package/lib/module/shaders/resourceManagement/pipelineMap.js.map +1 -0
- package/lib/module/shaders/resourceManagement/textures.js +2 -2
- package/lib/module/shaders/resourceManagement/textures.js.map +1 -1
- package/lib/module/shaders/tgpuUtils.js +41 -0
- package/lib/module/shaders/tgpuUtils.js.map +1 -1
- package/lib/module/shaders/utils.js +21 -2
- package/lib/module/shaders/utils.js.map +1 -1
- package/lib/module/shaders/vertexShaders/mainRotationEffectVertex.js +4 -4
- package/lib/module/shaders/vertexShaders/mainRotationEffectVertex.js.map +1 -1
- package/lib/module/types/typeUtils.js +29 -159
- package/lib/module/types/typeUtils.js.map +1 -1
- package/lib/module/types/types.js +8 -1
- package/lib/module/types/types.js.map +1 -1
- package/lib/module/utils/size.js +4 -4
- package/lib/module/utils/vector.js +38 -38
- package/lib/typescript/src/components/Content.d.ts +6 -6
- package/lib/typescript/src/components/Content.d.ts.map +1 -1
- package/lib/typescript/src/components/Shine.d.ts.map +1 -1
- package/lib/typescript/src/components/ShineGroup.d.ts +1 -1
- package/lib/typescript/src/components/ShineGroup.d.ts.map +1 -1
- package/lib/typescript/src/enums/colorPresets.d.ts +152 -0
- package/lib/typescript/src/enums/colorPresets.d.ts.map +1 -1
- package/lib/typescript/src/enums/effectDefaults.d.ts +39 -0
- package/lib/typescript/src/enums/effectDefaults.d.ts.map +1 -0
- package/lib/typescript/src/enums/effectPresets.d.ts +284 -5
- package/lib/typescript/src/enums/effectPresets.d.ts.map +1 -1
- package/lib/typescript/src/shaders/bindGroupLayouts.d.ts +82 -41
- package/lib/typescript/src/shaders/bindGroupLayouts.d.ts.map +1 -1
- package/lib/typescript/src/shaders/bindGroupUtils.d.ts +86 -70
- package/lib/typescript/src/shaders/bindGroupUtils.d.ts.map +1 -1
- package/lib/typescript/src/shaders/colorConversions.d.ts +4 -0
- package/lib/typescript/src/shaders/colorConversions.d.ts.map +1 -0
- package/lib/typescript/src/shaders/computeShaders/precomputeColorMask.d.ts +5 -0
- package/lib/typescript/src/shaders/computeShaders/precomputeColorMask.d.ts.map +1 -0
- package/lib/typescript/src/shaders/fragmentShaders/baseTextureFragment.d.ts.map +1 -1
- package/lib/typescript/src/shaders/fragmentShaders/colorMaskFragment.d.ts.map +1 -1
- package/lib/typescript/src/shaders/fragmentShaders/glareFlareFragment.d.ts +5 -0
- package/lib/typescript/src/shaders/fragmentShaders/glareFlareFragment.d.ts.map +1 -0
- package/lib/typescript/src/shaders/fragmentShaders/glareFragment.d.ts +0 -3
- package/lib/typescript/src/shaders/fragmentShaders/glareFragment.d.ts.map +1 -1
- package/lib/typescript/src/shaders/fragmentShaders/holoFragment.d.ts +7 -0
- package/lib/typescript/src/shaders/fragmentShaders/holoFragment.d.ts.map +1 -1
- package/lib/typescript/src/shaders/fragmentShaders/maskFragment.d.ts.map +1 -1
- package/lib/typescript/src/shaders/fragmentShaders/reverseHoloFragment.d.ts.map +1 -1
- package/lib/typescript/src/shaders/pipelineSetups.d.ts +3 -10
- package/lib/typescript/src/shaders/pipelineSetups.d.ts.map +1 -1
- package/lib/typescript/src/shaders/resourceManagement/bufferManager.d.ts +5 -3
- package/lib/typescript/src/shaders/resourceManagement/bufferManager.d.ts.map +1 -1
- package/lib/typescript/src/shaders/resourceManagement/buffersMap.d.ts +10 -0
- package/lib/typescript/src/shaders/resourceManagement/buffersMap.d.ts.map +1 -0
- package/lib/typescript/src/shaders/resourceManagement/pipelineMap.d.ts +24 -0
- package/lib/typescript/src/shaders/resourceManagement/pipelineMap.d.ts.map +1 -0
- package/lib/typescript/src/shaders/resourceManagement/textures.d.ts +0 -1
- package/lib/typescript/src/shaders/resourceManagement/textures.d.ts.map +1 -1
- package/lib/typescript/src/shaders/tgpuUtils.d.ts +3 -0
- package/lib/typescript/src/shaders/tgpuUtils.d.ts.map +1 -1
- package/lib/typescript/src/shaders/utils.d.ts +1 -0
- package/lib/typescript/src/shaders/utils.d.ts.map +1 -1
- package/lib/typescript/src/types/typeUtils.d.ts +16 -51
- package/lib/typescript/src/types/typeUtils.d.ts.map +1 -1
- package/lib/typescript/src/types/types.d.ts +59 -54
- package/lib/typescript/src/types/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/components/Content.tsx +130 -269
- package/src/components/Shine.tsx +28 -3
- package/src/components/ShineGroup.tsx +0 -4
- package/src/enums/colorPresets.ts +59 -1
- package/src/enums/effectDefaults.ts +57 -0
- package/src/enums/effectPresets.ts +142 -9
- package/src/shaders/bindGroupLayouts.ts +64 -28
- package/src/shaders/bindGroupUtils.ts +66 -69
- package/src/shaders/colorConversions.ts +88 -0
- package/src/shaders/computeShaders/precomputeColorMask.ts +29 -0
- package/src/shaders/fragmentShaders/baseTextureFragment.ts +2 -10
- package/src/shaders/fragmentShaders/colorMaskFragment.ts +34 -55
- package/src/shaders/fragmentShaders/glareFlareFragment.ts +79 -0
- package/src/shaders/fragmentShaders/glareFragment.ts +9 -84
- package/src/shaders/fragmentShaders/holoFragment.ts +139 -11
- package/src/shaders/fragmentShaders/maskFragment.ts +3 -9
- package/src/shaders/fragmentShaders/reverseHoloFragment.ts +4 -9
- package/src/shaders/pipelineSetups.ts +16 -125
- package/src/shaders/resourceManagement/bufferManager.ts +8 -3
- package/src/shaders/resourceManagement/buffersMap.ts +80 -0
- package/src/shaders/resourceManagement/pipelineMap.ts +169 -0
- package/src/shaders/resourceManagement/textures.ts +2 -2
- package/src/shaders/tgpuUtils.ts +29 -0
- package/src/shaders/utils.ts +29 -0
- package/src/shaders/vertexShaders/mainRotationEffectVertex.ts +2 -2
- package/src/types/typeUtils.ts +53 -164
- package/src/types/types.ts +111 -60
package/src/types/typeUtils.ts
CHANGED
|
@@ -1,158 +1,70 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { vec2f, vec3f, vec4f } from 'typegpu/data';
|
|
2
2
|
import * as d from 'typegpu/data';
|
|
3
3
|
import type {
|
|
4
|
-
GlareOptions,
|
|
5
4
|
ColorMask,
|
|
6
|
-
DeepPartiallyOptional,
|
|
7
5
|
vec3,
|
|
8
6
|
HoloOptions,
|
|
9
|
-
|
|
7
|
+
vec2,
|
|
8
|
+
vec4,
|
|
9
|
+
ColorMaskPreTypedSchema,
|
|
10
10
|
} from './types';
|
|
11
|
-
import { div } from 'typegpu/std';
|
|
12
11
|
import { WAVE_CALLBACKS } from '../enums/waveCallback';
|
|
13
|
-
import {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
const { hueBlendPower, hueShiftAngleMax, hueShiftAngleMin } =
|
|
21
|
-
glareColor || {};
|
|
22
|
-
|
|
23
|
-
const glareOp = {
|
|
24
|
-
glowPower: glowPower ?? 1.0,
|
|
25
|
-
lightIntensity: lightIntensity ?? 1.0,
|
|
26
|
-
glareIntensity: glareIntensity ?? 1.0,
|
|
27
|
-
glareColor: {
|
|
28
|
-
hueShiftAngleMax: hueShiftAngleMax ?? 1.0,
|
|
29
|
-
hueShiftAngleMin: hueShiftAngleMin ?? 0.0,
|
|
30
|
-
hueBlendPower: hueBlendPower ?? 1.0,
|
|
31
|
-
},
|
|
32
|
-
};
|
|
33
|
-
|
|
34
|
-
return glareOp;
|
|
35
|
-
};
|
|
12
|
+
import {
|
|
13
|
+
COLOR_MASK_MAX_COUNT,
|
|
14
|
+
type ColorMaskSchema,
|
|
15
|
+
} from '../shaders/bindGroupLayouts';
|
|
16
|
+
import { div } from 'typegpu/std';
|
|
17
|
+
import { deepMerge } from '../shaders/utils';
|
|
18
|
+
import { COLOR_MASK_DEFAULT_OPTIONS } from '../enums/effectDefaults';
|
|
36
19
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
lightIntensity: f32(glareOptions.lightIntensity),
|
|
41
|
-
glareIntensity: f32(glareOptions.glareIntensity),
|
|
42
|
-
glareColor: {
|
|
43
|
-
hueShiftAngleMax: f32(glareOptions.glareColor.hueShiftAngleMax),
|
|
44
|
-
hueShiftAngleMin: f32(glareOptions.glareColor.hueShiftAngleMin),
|
|
45
|
-
hueBlendPower: f32(glareOptions.glareColor.hueBlendPower),
|
|
46
|
-
},
|
|
47
|
-
};
|
|
48
|
-
};
|
|
20
|
+
const COLOR_MASK_PLACEHOLDER = new Array(COLOR_MASK_MAX_COUNT).fill(
|
|
21
|
+
COLOR_MASK_DEFAULT_OPTIONS
|
|
22
|
+
);
|
|
49
23
|
|
|
50
24
|
export const createColorMasks = (
|
|
51
|
-
colorMasks: DeepPartiallyOptional<ColorMask, 'baseColor'>[]
|
|
52
|
-
): ColorMask[] => {
|
|
53
|
-
const newColorMasks: ColorMask[] = [];
|
|
54
|
-
for (const i in colorMasks) {
|
|
55
|
-
const {
|
|
56
|
-
baseColor,
|
|
57
|
-
rgbToleranceRange,
|
|
58
|
-
useHSV,
|
|
59
|
-
hueToleranceRange,
|
|
60
|
-
brightnessTolerance,
|
|
61
|
-
saturationTolerance,
|
|
62
|
-
lowBrightnessThreshold,
|
|
63
|
-
lowSaturationThreshold,
|
|
64
|
-
} = colorMasks[i]!;
|
|
65
|
-
const baseTolerance = {
|
|
66
|
-
upper: [20, 20, 20] as vec3,
|
|
67
|
-
lower: [20, 20, 20] as vec3,
|
|
68
|
-
};
|
|
69
|
-
const baseHueTolerance = {
|
|
70
|
-
upper: 20,
|
|
71
|
-
lower: 20,
|
|
72
|
-
};
|
|
73
|
-
const tolerance = { ...baseTolerance, ...rgbToleranceRange };
|
|
74
|
-
const hueTolerance = { ...baseHueTolerance, ...hueToleranceRange };
|
|
75
|
-
const newColorMask: ColorMask = {
|
|
76
|
-
baseColor: baseColor,
|
|
77
|
-
rgbToleranceRange: tolerance,
|
|
78
|
-
useHSV: useHSV!!,
|
|
79
|
-
hueToleranceRange: hueTolerance,
|
|
80
|
-
brightnessTolerance: brightnessTolerance ?? 1.0,
|
|
81
|
-
saturationTolerance: saturationTolerance ?? 1.0,
|
|
82
|
-
lowBrightnessThreshold: lowBrightnessThreshold ?? 0.0,
|
|
83
|
-
lowSaturationThreshold: lowSaturationThreshold ?? 0.0,
|
|
84
|
-
debugMode: colorMaskDebug,
|
|
85
|
-
};
|
|
86
|
-
|
|
87
|
-
newColorMasks[i] = newColorMask;
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
// TODO: add radian and degree angle handling
|
|
91
|
-
// '123deg' <- interpret as a numeric angle value
|
|
92
|
-
// 2 <- interpret as a radian value
|
|
93
|
-
|
|
94
|
-
return newColorMasks;
|
|
95
|
-
};
|
|
96
|
-
|
|
97
|
-
const fillColorMaskBufferWithDummies = (
|
|
98
|
-
colorMasks: ColorMask[]
|
|
99
|
-
): ColorMask[] => {
|
|
100
|
-
const dummyFilledColorMasks = new Array(COLOR_MASK_MAX_COUNT);
|
|
101
|
-
for (let i = 0; i < dummyFilledColorMasks.length; i++) {
|
|
102
|
-
if (i < colorMasks.length) {
|
|
103
|
-
dummyFilledColorMasks[i] = colorMasks[i];
|
|
104
|
-
} else {
|
|
105
|
-
dummyFilledColorMasks[i] = {
|
|
106
|
-
baseColor: [0, 0, 0],
|
|
107
|
-
useHSV: false,
|
|
108
|
-
rgbToleranceRange: {
|
|
109
|
-
upper: [0, 0, 0],
|
|
110
|
-
lower: [0, 0, 0],
|
|
111
|
-
},
|
|
112
|
-
hueToleranceRange: {
|
|
113
|
-
upper: 0,
|
|
114
|
-
lower: 0,
|
|
115
|
-
},
|
|
116
|
-
};
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
return dummyFilledColorMasks;
|
|
120
|
-
};
|
|
121
|
-
|
|
122
|
-
export const colorMasksToTyped = (
|
|
123
25
|
colorMasks: ColorMask[],
|
|
124
26
|
reverseHighlight: boolean
|
|
125
27
|
) => {
|
|
126
|
-
const
|
|
127
|
-
(mask) =>
|
|
128
|
-
|
|
28
|
+
const dummyFilledArray = [
|
|
29
|
+
...colorMasks.map((mask) => {
|
|
30
|
+
const merged = deepMerge(COLOR_MASK_DEFAULT_OPTIONS, mask);
|
|
31
|
+
if ('hueMin' in mask || 'hueMax' in mask) {
|
|
32
|
+
merged.useHSV = 1;
|
|
33
|
+
}
|
|
34
|
+
return merged;
|
|
35
|
+
}),
|
|
36
|
+
...COLOR_MASK_PLACEHOLDER.slice(
|
|
37
|
+
0,
|
|
38
|
+
COLOR_MASK_MAX_COUNT - colorMasks.length
|
|
39
|
+
),
|
|
40
|
+
] as ColorMaskPreTypedSchema[];
|
|
41
|
+
|
|
129
42
|
return {
|
|
130
|
-
masks:
|
|
43
|
+
masks: dummyFilledArray.map(colorMaskToTyped),
|
|
131
44
|
usedMaskCount: colorMasks.length,
|
|
132
45
|
reverseHighlight: reverseHighlight ? 1 : 0,
|
|
133
46
|
};
|
|
134
47
|
};
|
|
135
48
|
|
|
136
|
-
export const colorMaskToTyped = (
|
|
137
|
-
|
|
49
|
+
export const colorMaskToTyped = ({
|
|
50
|
+
hueMin,
|
|
51
|
+
hueMax,
|
|
52
|
+
...colorMask
|
|
53
|
+
}: ColorMaskPreTypedSchema): ColorMaskSchema => {
|
|
54
|
+
const hueRange = (hueMax - hueMin + 360) % 360;
|
|
55
|
+
return {
|
|
56
|
+
...colorMask,
|
|
138
57
|
baseColor: div(numberArrToTyped(colorMask.baseColor), 255),
|
|
139
58
|
rgbToleranceRange: {
|
|
140
59
|
upper: div(numberArrToTyped(colorMask.rgbToleranceRange.upper), 255),
|
|
141
60
|
lower: div(numberArrToTyped(colorMask.rgbToleranceRange.lower), 255),
|
|
142
61
|
},
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
brightnessTolerance: f32(colorMask.brightnessTolerance),
|
|
149
|
-
saturationTolerance: f32(colorMask.saturationTolerance),
|
|
150
|
-
lowSaturationThreshold: f32(colorMask.lowSaturationThreshold),
|
|
151
|
-
lowBrightnessThreshold: f32(colorMask.lowBrightnessThreshold),
|
|
152
|
-
debugMode: d.u32(colorMask.debugMode ? d.u32(1) : d.u32(0)),
|
|
62
|
+
hueStart: hueMin,
|
|
63
|
+
hueRange: hueRange === 0 && hueMin !== hueMax ? 360 : hueRange,
|
|
64
|
+
minLimits: d.vec2f(colorMask.saturationMin, colorMask.lightnessMin),
|
|
65
|
+
maxLimits: d.vec2f(colorMask.saturationMax, colorMask.lightnessMax),
|
|
66
|
+
debugMode: colorMask.debugMode ? 1 : 0,
|
|
153
67
|
};
|
|
154
|
-
|
|
155
|
-
return result;
|
|
156
68
|
};
|
|
157
69
|
|
|
158
70
|
export const createHoloOptions = (
|
|
@@ -167,38 +79,12 @@ export const createHoloOptions = (
|
|
|
167
79
|
return holoOpt;
|
|
168
80
|
};
|
|
169
81
|
|
|
170
|
-
export
|
|
171
|
-
|
|
172
|
-
)
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
options;
|
|
177
|
-
|
|
178
|
-
channelFlags = {
|
|
179
|
-
redChannel: redChannel ?? d.f32(0.0),
|
|
180
|
-
greenChannel: greenChannel ?? d.f32(0.0),
|
|
181
|
-
blueChannel: blueChannel ?? d.f32(0.0),
|
|
182
|
-
hue: hue ?? d.f32(0.0),
|
|
183
|
-
saturation: saturation ?? d.f32(0.0),
|
|
184
|
-
value: value ?? d.f32(0.0),
|
|
185
|
-
};
|
|
186
|
-
} else {
|
|
187
|
-
channelFlags = {
|
|
188
|
-
redChannel: d.f32(1.0),
|
|
189
|
-
greenChannel: d.f32(0.0),
|
|
190
|
-
blueChannel: d.f32(0.0),
|
|
191
|
-
hue: d.f32(0.0),
|
|
192
|
-
saturation: d.f32(0.0),
|
|
193
|
-
value: d.f32(0.0),
|
|
194
|
-
};
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
return channelFlags;
|
|
198
|
-
};
|
|
199
|
-
|
|
200
|
-
export const numberArrToTyped = (vec: number[]) => {
|
|
201
|
-
let convFn: ((...args: number[]) => any) | null = null;
|
|
82
|
+
export function numberArrToTyped(vec: vec2): d.v2f;
|
|
83
|
+
export function numberArrToTyped(vec: vec3): d.v3f;
|
|
84
|
+
export function numberArrToTyped(vec: vec4): d.v4f;
|
|
85
|
+
export function numberArrToTyped(vec: number[]): d.v2f | d.v3f | d.v4f;
|
|
86
|
+
export function numberArrToTyped(vec: number[]) {
|
|
87
|
+
let convFn: ((...args: number[]) => d.v2f | d.v3f | d.v4f) | null = null;
|
|
202
88
|
switch (vec.length) {
|
|
203
89
|
case 2:
|
|
204
90
|
convFn = vec2f;
|
|
@@ -210,9 +96,12 @@ export const numberArrToTyped = (vec: number[]) => {
|
|
|
210
96
|
convFn = vec4f;
|
|
211
97
|
break;
|
|
212
98
|
default:
|
|
213
|
-
throw new Error(
|
|
99
|
+
throw new Error(
|
|
100
|
+
'numberArrToTyped: Vector must be of length [2-4] but it was ' +
|
|
101
|
+
vec.length
|
|
102
|
+
);
|
|
214
103
|
}
|
|
215
104
|
|
|
216
105
|
const typed = convFn(...vec);
|
|
217
106
|
return typed;
|
|
218
|
-
}
|
|
107
|
+
}
|
package/src/types/types.ts
CHANGED
|
@@ -1,80 +1,48 @@
|
|
|
1
1
|
import type {
|
|
2
2
|
TgpuBindGroup,
|
|
3
3
|
TgpuBindGroupLayout,
|
|
4
|
+
TgpuFragmentFn,
|
|
4
5
|
TgpuRenderPipeline,
|
|
6
|
+
TgpuRoot,
|
|
7
|
+
TgpuUniform,
|
|
8
|
+
ValidateBufferSchema,
|
|
5
9
|
} from 'typegpu';
|
|
6
10
|
import type { WaveCallbackFn } from '../enums/waveCallback';
|
|
11
|
+
import type { AnyWgslData, Infer, Vec2f, Vec4f } from 'typegpu/data';
|
|
12
|
+
import type {
|
|
13
|
+
ColorMaskSchema,
|
|
14
|
+
maskTextureBindGroupLayout,
|
|
15
|
+
} from '../shaders/bindGroupLayouts';
|
|
7
16
|
|
|
8
17
|
export type vec2 = [number, number];
|
|
9
18
|
export type vec3 = [number, number, number];
|
|
10
19
|
export type vec4 = [number, number, number, number];
|
|
11
20
|
export type quaternion = vec4;
|
|
12
|
-
|
|
13
|
-
export type
|
|
14
|
-
glowPower: number;
|
|
15
|
-
lightIntensity: number;
|
|
16
|
-
glareIntensity: number;
|
|
17
|
-
glareColor: {
|
|
18
|
-
hueBlendPower: number;
|
|
19
|
-
hueShiftAngleMax: number;
|
|
20
|
-
hueShiftAngleMin: number;
|
|
21
|
-
};
|
|
22
|
-
};
|
|
23
|
-
|
|
24
|
-
export type ColorMask = {
|
|
21
|
+
type BaseColorMask = { debugMode: boolean };
|
|
22
|
+
export type RGBColorMask = BaseColorMask & {
|
|
25
23
|
baseColor: vec3;
|
|
26
|
-
useHSV?: boolean;
|
|
27
|
-
hueToleranceRange: { upper: number; lower: number };
|
|
28
|
-
brightnessTolerance?: number;
|
|
29
|
-
saturationTolerance?: number;
|
|
30
|
-
lowBrightnessThreshold?: number;
|
|
31
|
-
lowSaturationThreshold?: number;
|
|
32
24
|
rgbToleranceRange: {
|
|
33
25
|
upper: vec3;
|
|
34
26
|
lower: vec3;
|
|
35
27
|
};
|
|
36
|
-
debugMode?: boolean;
|
|
37
28
|
};
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
any,
|
|
46
|
-
any,
|
|
47
|
-
any,
|
|
48
|
-
any,
|
|
49
|
-
any,
|
|
50
|
-
any,
|
|
51
|
-
any,
|
|
52
|
-
any,
|
|
53
|
-
any,
|
|
54
|
-
any,
|
|
55
|
-
any,
|
|
56
|
-
any,
|
|
57
|
-
];
|
|
58
|
-
|
|
59
|
-
export type Effect =
|
|
60
|
-
| {
|
|
61
|
-
name: 'reverseHolo';
|
|
62
|
-
options: Partial<ReverseHoloDetectionChannelFlags>;
|
|
63
|
-
}
|
|
64
|
-
| {
|
|
65
|
-
name: 'holo';
|
|
66
|
-
options?: HoloOptions;
|
|
67
|
-
};
|
|
68
|
-
|
|
69
|
-
export type ReverseHoloDetectionChannelFlags = {
|
|
70
|
-
redChannel: number;
|
|
71
|
-
greenChannel: number;
|
|
72
|
-
blueChannel: number;
|
|
73
|
-
hue: number;
|
|
74
|
-
saturation: number;
|
|
75
|
-
value: number;
|
|
29
|
+
export type HSLColorMask = BaseColorMask & {
|
|
30
|
+
hueMin: number;
|
|
31
|
+
hueMax: number;
|
|
32
|
+
saturationMin: number;
|
|
33
|
+
saturationMax: number;
|
|
34
|
+
lightnessMin: number;
|
|
35
|
+
lightnessMax: number;
|
|
76
36
|
};
|
|
77
37
|
|
|
38
|
+
export type ColorMask =
|
|
39
|
+
| DeepPartiallyOptional<RGBColorMask, 'baseColor'>
|
|
40
|
+
| DeepPartial<HSLColorMask>;
|
|
41
|
+
|
|
42
|
+
export type ColorMaskPreTypedSchema = HSLColorMask &
|
|
43
|
+
RGBColorMask &
|
|
44
|
+
Pick<ColorMaskSchema, 'useHSV'>;
|
|
45
|
+
|
|
78
46
|
export type HoloOptions = {
|
|
79
47
|
intensity: number;
|
|
80
48
|
waveCallback: WaveCallbackFn;
|
|
@@ -100,8 +68,15 @@ export type DeepPartial<T> = {
|
|
|
100
68
|
[P in keyof T]?: T[P] extends Primitive | any[] ? T[P] : DeepPartial<T[P]>;
|
|
101
69
|
};
|
|
102
70
|
|
|
103
|
-
export type DeepPartiallyOptional<T, K extends keyof T> =
|
|
104
|
-
DeepPartial<Omit<T, K
|
|
71
|
+
export type DeepPartiallyOptional<T, K extends keyof T> = T extends any
|
|
72
|
+
? Required<Pick<T, K>> & DeepPartial<Omit<T, K>>
|
|
73
|
+
: never;
|
|
74
|
+
|
|
75
|
+
export type UnionToIntersection<U> = (
|
|
76
|
+
U extends any ? (k: U) => void : never
|
|
77
|
+
) extends (k: infer I) => void
|
|
78
|
+
? I
|
|
79
|
+
: never;
|
|
105
80
|
|
|
106
81
|
export type BindGroupPair = {
|
|
107
82
|
layout: TgpuBindGroupLayout;
|
|
@@ -113,3 +88,79 @@ export type ColorAttachment = Parameters<
|
|
|
113
88
|
>[0];
|
|
114
89
|
|
|
115
90
|
export type PipelineAttachmentPair = [TgpuRenderPipeline, ColorAttachment];
|
|
91
|
+
|
|
92
|
+
export type FragmentShaderReturnType = Vec4f;
|
|
93
|
+
export type FragmentType = TgpuFragmentFn<
|
|
94
|
+
{
|
|
95
|
+
uv: Vec2f;
|
|
96
|
+
},
|
|
97
|
+
FragmentShaderReturnType
|
|
98
|
+
>;
|
|
99
|
+
|
|
100
|
+
export type AnySchema = ValidateBufferSchema<AnyWgslData>;
|
|
101
|
+
|
|
102
|
+
export type BufferConfig<S extends AnySchema> = {
|
|
103
|
+
schema: S;
|
|
104
|
+
defaultOptions: Infer<S>;
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
export type TgpuUniformBuffer<S extends AnySchema> = TgpuUniform<S>['buffer'];
|
|
108
|
+
|
|
109
|
+
export type TgpuUniformBufferTuple<
|
|
110
|
+
T extends readonly BufferConfig<AnySchema>[],
|
|
111
|
+
> = {
|
|
112
|
+
[K in keyof T]: T[K] extends BufferConfig<infer S>
|
|
113
|
+
? TgpuUniformBuffer<S>
|
|
114
|
+
: never;
|
|
115
|
+
};
|
|
116
|
+
export type BindGroupCreatorArgument = {
|
|
117
|
+
root: TgpuRoot;
|
|
118
|
+
maskBindGroup: TgpuBindGroup<UnwrapLayout<typeof maskTextureBindGroupLayout>>;
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
export type EffectDefinition<
|
|
122
|
+
TConfig extends readonly BufferConfig<AnySchema>[],
|
|
123
|
+
> = {
|
|
124
|
+
buffers: TConfig;
|
|
125
|
+
fragment: FragmentType;
|
|
126
|
+
bindGroupCreator: (
|
|
127
|
+
argument: BindGroupCreatorArgument,
|
|
128
|
+
buffers: TgpuUniformBufferTuple<TConfig>
|
|
129
|
+
) => TgpuBindGroup[];
|
|
130
|
+
blend?: GPUBlendState;
|
|
131
|
+
};
|
|
132
|
+
|
|
133
|
+
type ValidateBuffers<T> = {
|
|
134
|
+
[K in keyof T]: T[K] extends { schema: infer S }
|
|
135
|
+
? S extends AnySchema
|
|
136
|
+
? {
|
|
137
|
+
schema: S;
|
|
138
|
+
defaultOptions: Infer<S>;
|
|
139
|
+
}
|
|
140
|
+
: never
|
|
141
|
+
: never;
|
|
142
|
+
};
|
|
143
|
+
|
|
144
|
+
export function createEffect<
|
|
145
|
+
const TConfig extends readonly BufferConfig<AnySchema>[],
|
|
146
|
+
>(
|
|
147
|
+
definition: EffectDefinition<TConfig> & {
|
|
148
|
+
buffers: ValidateBuffers<TConfig>;
|
|
149
|
+
}
|
|
150
|
+
) {
|
|
151
|
+
return definition;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
export type UnwrapLayout<T> =
|
|
155
|
+
T extends TgpuBindGroupLayout<infer U> ? U : never;
|
|
156
|
+
|
|
157
|
+
type GetInferredFromConfig<T> = T extends { schema: infer S }
|
|
158
|
+
? S extends AnySchema
|
|
159
|
+
? Infer<S>
|
|
160
|
+
: never
|
|
161
|
+
: never;
|
|
162
|
+
|
|
163
|
+
export type ExtractEffectOptions<TDef> =
|
|
164
|
+
TDef extends EffectDefinition<infer TConfig>
|
|
165
|
+
? UnionToIntersection<GetInferredFromConfig<TConfig[number]>>
|
|
166
|
+
: never;
|