react-native-shine 0.7.1 → 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 +112 -145
- package/lib/module/components/Content.js.map +1 -1
- package/lib/module/components/Shine.js +14 -5
- 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 +47 -29
- 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 +5 -5
- package/lib/module/shaders/computeShaders/precomputeColorMask.js.map +1 -1
- 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 +2 -61
- package/lib/module/shaders/pipelineSetups.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 +26 -155
- 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 +77 -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/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 +0 -6
- package/lib/typescript/src/shaders/pipelineSetups.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 +8 -47
- 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 +126 -296
- package/src/components/Shine.tsx +22 -5
- 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 +57 -28
- package/src/shaders/bindGroupUtils.ts +66 -69
- package/src/shaders/colorConversions.ts +88 -0
- package/src/shaders/computeShaders/precomputeColorMask.ts +4 -4
- 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 +2 -120
- 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 +39 -159
- package/src/types/types.ts +111 -60
package/src/types/typeUtils.ts
CHANGED
|
@@ -1,163 +1,70 @@
|
|
|
1
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
|
-
ReverseHoloDetectionChannelFlags,
|
|
10
7
|
vec2,
|
|
11
8
|
vec4,
|
|
9
|
+
ColorMaskPreTypedSchema,
|
|
12
10
|
} from './types';
|
|
13
|
-
import { div } from 'typegpu/std';
|
|
14
11
|
import { WAVE_CALLBACKS } from '../enums/waveCallback';
|
|
15
|
-
import { colorMaskDebug } from '../config/debugMode';
|
|
16
12
|
import {
|
|
17
13
|
COLOR_MASK_MAX_COUNT,
|
|
18
14
|
type ColorMaskSchema,
|
|
19
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';
|
|
20
19
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
)
|
|
24
|
-
const { glowPower, glareColor, lightIntensity, glareIntensity } = options;
|
|
25
|
-
const { hueBlendPower, hueShiftAngleMax, hueShiftAngleMin } =
|
|
26
|
-
glareColor || {};
|
|
27
|
-
|
|
28
|
-
const glareOp = {
|
|
29
|
-
glowPower: glowPower ?? 1.0,
|
|
30
|
-
lightIntensity: lightIntensity ?? 1.0,
|
|
31
|
-
glareIntensity: glareIntensity ?? 1.0,
|
|
32
|
-
glareColor: {
|
|
33
|
-
hueShiftAngleMax: hueShiftAngleMax ?? 1.0,
|
|
34
|
-
hueShiftAngleMin: hueShiftAngleMin ?? 0.0,
|
|
35
|
-
hueBlendPower: hueBlendPower ?? 1.0,
|
|
36
|
-
},
|
|
37
|
-
};
|
|
38
|
-
|
|
39
|
-
return glareOp;
|
|
40
|
-
};
|
|
41
|
-
|
|
42
|
-
export const glareOptionsToTyped = (glareOptions: GlareOptions) => {
|
|
43
|
-
return {
|
|
44
|
-
glowPower: glareOptions.glowPower,
|
|
45
|
-
lightIntensity: glareOptions.lightIntensity,
|
|
46
|
-
glareIntensity: glareOptions.glareIntensity,
|
|
47
|
-
glareColor: {
|
|
48
|
-
hueShiftAngleMax: glareOptions.glareColor.hueShiftAngleMax,
|
|
49
|
-
hueShiftAngleMin: glareOptions.glareColor.hueShiftAngleMin,
|
|
50
|
-
hueBlendPower: glareOptions.glareColor.hueBlendPower,
|
|
51
|
-
},
|
|
52
|
-
};
|
|
53
|
-
};
|
|
20
|
+
const COLOR_MASK_PLACEHOLDER = new Array(COLOR_MASK_MAX_COUNT).fill(
|
|
21
|
+
COLOR_MASK_DEFAULT_OPTIONS
|
|
22
|
+
);
|
|
54
23
|
|
|
55
24
|
export const createColorMasks = (
|
|
56
|
-
colorMasks: DeepPartiallyOptional<ColorMask, 'baseColor'>[]
|
|
57
|
-
): ColorMask[] => {
|
|
58
|
-
const newColorMasks: ColorMask[] = [];
|
|
59
|
-
for (const i in colorMasks) {
|
|
60
|
-
const {
|
|
61
|
-
baseColor,
|
|
62
|
-
rgbToleranceRange,
|
|
63
|
-
useHSV,
|
|
64
|
-
hueToleranceRange,
|
|
65
|
-
brightnessTolerance,
|
|
66
|
-
saturationTolerance,
|
|
67
|
-
lowBrightnessThreshold,
|
|
68
|
-
lowSaturationThreshold,
|
|
69
|
-
} = colorMasks[i]!;
|
|
70
|
-
const baseTolerance = {
|
|
71
|
-
upper: [20, 20, 20] as vec3,
|
|
72
|
-
lower: [20, 20, 20] as vec3,
|
|
73
|
-
};
|
|
74
|
-
const baseHueTolerance = {
|
|
75
|
-
upper: 20,
|
|
76
|
-
lower: 20,
|
|
77
|
-
};
|
|
78
|
-
const tolerance = { ...baseTolerance, ...rgbToleranceRange };
|
|
79
|
-
const hueTolerance = { ...baseHueTolerance, ...hueToleranceRange };
|
|
80
|
-
const newColorMask: ColorMask = {
|
|
81
|
-
baseColor: baseColor,
|
|
82
|
-
rgbToleranceRange: tolerance,
|
|
83
|
-
useHSV: useHSV!!,
|
|
84
|
-
hueToleranceRange: hueTolerance,
|
|
85
|
-
brightnessTolerance: brightnessTolerance ?? 1.0,
|
|
86
|
-
saturationTolerance: saturationTolerance ?? 1.0,
|
|
87
|
-
lowBrightnessThreshold: lowBrightnessThreshold ?? 0.0,
|
|
88
|
-
lowSaturationThreshold: lowSaturationThreshold ?? 0.0,
|
|
89
|
-
debugMode: colorMaskDebug,
|
|
90
|
-
};
|
|
91
|
-
|
|
92
|
-
newColorMasks[i] = newColorMask;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
// TODO: add radian and degree angle handling
|
|
96
|
-
// '123deg' <- interpret as a numeric angle value
|
|
97
|
-
// 2 <- interpret as a radian value
|
|
98
|
-
|
|
99
|
-
return newColorMasks;
|
|
100
|
-
};
|
|
101
|
-
|
|
102
|
-
const fillColorMaskBufferWithDummies = (
|
|
103
|
-
colorMasks: ColorMask[]
|
|
104
|
-
): ColorMask[] => {
|
|
105
|
-
const dummyFilledColorMasks = new Array(COLOR_MASK_MAX_COUNT);
|
|
106
|
-
for (let i = 0; i < dummyFilledColorMasks.length; i++) {
|
|
107
|
-
if (i < colorMasks.length) {
|
|
108
|
-
dummyFilledColorMasks[i] = colorMasks[i];
|
|
109
|
-
} else {
|
|
110
|
-
dummyFilledColorMasks[i] = {
|
|
111
|
-
baseColor: [0, 0, 0],
|
|
112
|
-
useHSV: false,
|
|
113
|
-
rgbToleranceRange: {
|
|
114
|
-
upper: [0, 0, 0],
|
|
115
|
-
lower: [0, 0, 0],
|
|
116
|
-
},
|
|
117
|
-
hueToleranceRange: {
|
|
118
|
-
upper: 0,
|
|
119
|
-
lower: 0,
|
|
120
|
-
},
|
|
121
|
-
};
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
return dummyFilledColorMasks;
|
|
125
|
-
};
|
|
126
|
-
|
|
127
|
-
export const colorMasksToTyped = (
|
|
128
25
|
colorMasks: ColorMask[],
|
|
129
26
|
reverseHighlight: boolean
|
|
130
27
|
) => {
|
|
131
|
-
const
|
|
132
|
-
(mask) =>
|
|
133
|
-
|
|
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
|
+
|
|
134
42
|
return {
|
|
135
|
-
masks:
|
|
43
|
+
masks: dummyFilledArray.map(colorMaskToTyped),
|
|
136
44
|
usedMaskCount: colorMasks.length,
|
|
137
45
|
reverseHighlight: reverseHighlight ? 1 : 0,
|
|
138
46
|
};
|
|
139
47
|
};
|
|
140
48
|
|
|
141
|
-
export const colorMaskToTyped = (
|
|
142
|
-
|
|
49
|
+
export const colorMaskToTyped = ({
|
|
50
|
+
hueMin,
|
|
51
|
+
hueMax,
|
|
52
|
+
...colorMask
|
|
53
|
+
}: ColorMaskPreTypedSchema): ColorMaskSchema => {
|
|
54
|
+
const hueRange = (hueMax - hueMin + 360) % 360;
|
|
55
|
+
return {
|
|
56
|
+
...colorMask,
|
|
143
57
|
baseColor: div(numberArrToTyped(colorMask.baseColor), 255),
|
|
144
58
|
rgbToleranceRange: {
|
|
145
59
|
upper: div(numberArrToTyped(colorMask.rgbToleranceRange.upper), 255),
|
|
146
60
|
lower: div(numberArrToTyped(colorMask.rgbToleranceRange.lower), 255),
|
|
147
61
|
},
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
},
|
|
153
|
-
brightnessTolerance: colorMask.brightnessTolerance,
|
|
154
|
-
saturationTolerance: colorMask.saturationTolerance,
|
|
155
|
-
lowSaturationThreshold: colorMask.lowSaturationThreshold,
|
|
156
|
-
lowBrightnessThreshold: colorMask.lowBrightnessThreshold,
|
|
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),
|
|
157
66
|
debugMode: colorMask.debugMode ? 1 : 0,
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
return result;
|
|
67
|
+
};
|
|
161
68
|
};
|
|
162
69
|
|
|
163
70
|
export const createHoloOptions = (
|
|
@@ -172,36 +79,6 @@ export const createHoloOptions = (
|
|
|
172
79
|
return holoOpt;
|
|
173
80
|
};
|
|
174
81
|
|
|
175
|
-
export const createReverseHoloDetectionChannelFlags = (
|
|
176
|
-
options?: Partial<ReverseHoloDetectionChannelFlags>
|
|
177
|
-
) => {
|
|
178
|
-
let channelFlags;
|
|
179
|
-
if (options) {
|
|
180
|
-
const { redChannel, greenChannel, blueChannel, hue, saturation, value } =
|
|
181
|
-
options;
|
|
182
|
-
|
|
183
|
-
channelFlags = {
|
|
184
|
-
redChannel: redChannel ?? 0.0,
|
|
185
|
-
greenChannel: greenChannel ?? 0.0,
|
|
186
|
-
blueChannel: blueChannel ?? 0.0,
|
|
187
|
-
hue: hue ?? 0.0,
|
|
188
|
-
saturation: saturation ?? 0.0,
|
|
189
|
-
value: value ?? 0.0,
|
|
190
|
-
};
|
|
191
|
-
} else {
|
|
192
|
-
channelFlags = {
|
|
193
|
-
redChannel: 1.0,
|
|
194
|
-
greenChannel: 0.0,
|
|
195
|
-
blueChannel: 0.0,
|
|
196
|
-
hue: 0.0,
|
|
197
|
-
saturation: 0.0,
|
|
198
|
-
value: 0.0,
|
|
199
|
-
};
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
return channelFlags;
|
|
203
|
-
};
|
|
204
|
-
|
|
205
82
|
export function numberArrToTyped(vec: vec2): d.v2f;
|
|
206
83
|
export function numberArrToTyped(vec: vec3): d.v3f;
|
|
207
84
|
export function numberArrToTyped(vec: vec4): d.v4f;
|
|
@@ -219,7 +96,10 @@ export function numberArrToTyped(vec: number[]) {
|
|
|
219
96
|
convFn = vec4f;
|
|
220
97
|
break;
|
|
221
98
|
default:
|
|
222
|
-
throw new Error(
|
|
99
|
+
throw new Error(
|
|
100
|
+
'numberArrToTyped: Vector must be of length [2-4] but it was ' +
|
|
101
|
+
vec.length
|
|
102
|
+
);
|
|
223
103
|
}
|
|
224
104
|
|
|
225
105
|
const typed = convFn(...vec);
|
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;
|