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
|
@@ -1,69 +1,31 @@
|
|
|
1
|
-
import type { TgpuBindGroup, TgpuBindGroupLayout, TgpuRenderPipeline } from 'typegpu';
|
|
1
|
+
import type { TgpuBindGroup, TgpuBindGroupLayout, TgpuFragmentFn, TgpuRenderPipeline, TgpuRoot, TgpuUniform, ValidateBufferSchema } from 'typegpu';
|
|
2
2
|
import type { WaveCallbackFn } from '../enums/waveCallback';
|
|
3
|
+
import type { AnyWgslData, Infer, Vec2f, Vec4f } from 'typegpu/data';
|
|
4
|
+
import type { ColorMaskSchema, maskTextureBindGroupLayout } from '../shaders/bindGroupLayouts';
|
|
3
5
|
export type vec2 = [number, number];
|
|
4
6
|
export type vec3 = [number, number, number];
|
|
5
7
|
export type vec4 = [number, number, number, number];
|
|
6
8
|
export type quaternion = vec4;
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
lightIntensity: number;
|
|
10
|
-
glareIntensity: number;
|
|
11
|
-
glareColor: {
|
|
12
|
-
hueBlendPower: number;
|
|
13
|
-
hueShiftAngleMax: number;
|
|
14
|
-
hueShiftAngleMin: number;
|
|
15
|
-
};
|
|
9
|
+
type BaseColorMask = {
|
|
10
|
+
debugMode: boolean;
|
|
16
11
|
};
|
|
17
|
-
export type
|
|
12
|
+
export type RGBColorMask = BaseColorMask & {
|
|
18
13
|
baseColor: vec3;
|
|
19
|
-
useHSV?: boolean;
|
|
20
|
-
hueToleranceRange: {
|
|
21
|
-
upper: number;
|
|
22
|
-
lower: number;
|
|
23
|
-
};
|
|
24
|
-
brightnessTolerance?: number;
|
|
25
|
-
saturationTolerance?: number;
|
|
26
|
-
lowBrightnessThreshold?: number;
|
|
27
|
-
lowSaturationThreshold?: number;
|
|
28
14
|
rgbToleranceRange: {
|
|
29
15
|
upper: vec3;
|
|
30
16
|
lower: vec3;
|
|
31
17
|
};
|
|
32
|
-
debugMode?: boolean;
|
|
33
|
-
};
|
|
34
|
-
export type ColorMaskArrayShaderAssert = [
|
|
35
|
-
any,
|
|
36
|
-
any,
|
|
37
|
-
any,
|
|
38
|
-
any,
|
|
39
|
-
any,
|
|
40
|
-
any,
|
|
41
|
-
any,
|
|
42
|
-
any,
|
|
43
|
-
any,
|
|
44
|
-
any,
|
|
45
|
-
any,
|
|
46
|
-
any,
|
|
47
|
-
any,
|
|
48
|
-
any,
|
|
49
|
-
any,
|
|
50
|
-
any
|
|
51
|
-
];
|
|
52
|
-
export type Effect = {
|
|
53
|
-
name: 'reverseHolo';
|
|
54
|
-
options: Partial<ReverseHoloDetectionChannelFlags>;
|
|
55
|
-
} | {
|
|
56
|
-
name: 'holo';
|
|
57
|
-
options?: HoloOptions;
|
|
58
18
|
};
|
|
59
|
-
export type
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
19
|
+
export type HSLColorMask = BaseColorMask & {
|
|
20
|
+
hueMin: number;
|
|
21
|
+
hueMax: number;
|
|
22
|
+
saturationMin: number;
|
|
23
|
+
saturationMax: number;
|
|
24
|
+
lightnessMin: number;
|
|
25
|
+
lightnessMax: number;
|
|
66
26
|
};
|
|
27
|
+
export type ColorMask = DeepPartiallyOptional<RGBColorMask, 'baseColor'> | DeepPartial<HSLColorMask>;
|
|
28
|
+
export type ColorMaskPreTypedSchema = HSLColorMask & RGBColorMask & Pick<ColorMaskSchema, 'useHSV'>;
|
|
67
29
|
export type HoloOptions = {
|
|
68
30
|
intensity: number;
|
|
69
31
|
waveCallback: WaveCallbackFn;
|
|
@@ -75,11 +37,54 @@ export type Primitive = string | number | boolean | bigint | symbol | null | und
|
|
|
75
37
|
export type DeepPartial<T> = {
|
|
76
38
|
[P in keyof T]?: T[P] extends Primitive | any[] ? T[P] : DeepPartial<T[P]>;
|
|
77
39
|
};
|
|
78
|
-
export type DeepPartiallyOptional<T, K extends keyof T> = Required<Pick<T, K>> & DeepPartial<Omit<T, K
|
|
40
|
+
export type DeepPartiallyOptional<T, K extends keyof T> = T extends any ? Required<Pick<T, K>> & DeepPartial<Omit<T, K>> : never;
|
|
41
|
+
export type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (k: infer I) => void ? I : never;
|
|
79
42
|
export type BindGroupPair = {
|
|
80
43
|
layout: TgpuBindGroupLayout;
|
|
81
44
|
group: TgpuBindGroup;
|
|
82
45
|
};
|
|
83
46
|
export type ColorAttachment = Parameters<TgpuRenderPipeline['withColorAttachment']>[0];
|
|
84
47
|
export type PipelineAttachmentPair = [TgpuRenderPipeline, ColorAttachment];
|
|
48
|
+
export type FragmentShaderReturnType = Vec4f;
|
|
49
|
+
export type FragmentType = TgpuFragmentFn<{
|
|
50
|
+
uv: Vec2f;
|
|
51
|
+
}, FragmentShaderReturnType>;
|
|
52
|
+
export type AnySchema = ValidateBufferSchema<AnyWgslData>;
|
|
53
|
+
export type BufferConfig<S extends AnySchema> = {
|
|
54
|
+
schema: S;
|
|
55
|
+
defaultOptions: Infer<S>;
|
|
56
|
+
};
|
|
57
|
+
export type TgpuUniformBuffer<S extends AnySchema> = TgpuUniform<S>['buffer'];
|
|
58
|
+
export type TgpuUniformBufferTuple<T extends readonly BufferConfig<AnySchema>[]> = {
|
|
59
|
+
[K in keyof T]: T[K] extends BufferConfig<infer S> ? TgpuUniformBuffer<S> : never;
|
|
60
|
+
};
|
|
61
|
+
export type BindGroupCreatorArgument = {
|
|
62
|
+
root: TgpuRoot;
|
|
63
|
+
maskBindGroup: TgpuBindGroup<UnwrapLayout<typeof maskTextureBindGroupLayout>>;
|
|
64
|
+
};
|
|
65
|
+
export type EffectDefinition<TConfig extends readonly BufferConfig<AnySchema>[]> = {
|
|
66
|
+
buffers: TConfig;
|
|
67
|
+
fragment: FragmentType;
|
|
68
|
+
bindGroupCreator: (argument: BindGroupCreatorArgument, buffers: TgpuUniformBufferTuple<TConfig>) => TgpuBindGroup[];
|
|
69
|
+
blend?: GPUBlendState;
|
|
70
|
+
};
|
|
71
|
+
type ValidateBuffers<T> = {
|
|
72
|
+
[K in keyof T]: T[K] extends {
|
|
73
|
+
schema: infer S;
|
|
74
|
+
} ? S extends AnySchema ? {
|
|
75
|
+
schema: S;
|
|
76
|
+
defaultOptions: Infer<S>;
|
|
77
|
+
} : never : never;
|
|
78
|
+
};
|
|
79
|
+
export declare function createEffect<const TConfig extends readonly BufferConfig<AnySchema>[]>(definition: EffectDefinition<TConfig> & {
|
|
80
|
+
buffers: ValidateBuffers<TConfig>;
|
|
81
|
+
}): EffectDefinition<TConfig> & {
|
|
82
|
+
buffers: ValidateBuffers<TConfig>;
|
|
83
|
+
};
|
|
84
|
+
export type UnwrapLayout<T> = T extends TgpuBindGroupLayout<infer U> ? U : never;
|
|
85
|
+
type GetInferredFromConfig<T> = T extends {
|
|
86
|
+
schema: infer S;
|
|
87
|
+
} ? S extends AnySchema ? Infer<S> : never : never;
|
|
88
|
+
export type ExtractEffectOptions<TDef> = TDef extends EffectDefinition<infer TConfig> ? UnionToIntersection<GetInferredFromConfig<TConfig[number]>> : never;
|
|
89
|
+
export {};
|
|
85
90
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/types/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,mBAAmB,EACnB,kBAAkB,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/types/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-shine",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.0",
|
|
4
4
|
"description": "Fast and efficient way of adding interactive effects that are run entirely on shaders using typeGPU.",
|
|
5
5
|
"main": "./lib/module/index.js",
|
|
6
6
|
"types": "./lib/typescript/src/index.d.ts",
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { useEffect, useMemo, useRef, useState } from 'react';
|
|
1
|
+
import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
2
2
|
import { PixelRatio, View, type ViewStyle } from 'react-native';
|
|
3
3
|
import Animated, {
|
|
4
4
|
SensorType,
|
|
@@ -15,50 +15,22 @@ import {
|
|
|
15
15
|
} from 'react-native-wgpu';
|
|
16
16
|
import * as d from 'typegpu/data';
|
|
17
17
|
import type {
|
|
18
|
+
SampledFlag,
|
|
19
|
+
StorageFlag,
|
|
18
20
|
TextureProps,
|
|
19
|
-
TgpuRenderPipeline,
|
|
20
21
|
TgpuRoot,
|
|
21
22
|
TgpuTexture,
|
|
22
23
|
} from 'typegpu';
|
|
24
|
+
import { scheduleOnUI } from 'react-native-worklets';
|
|
23
25
|
import {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
26
|
+
colorMaskArraySchema,
|
|
27
|
+
precomputeColorMaskBindGroupLayout,
|
|
28
|
+
precomputeColorMaskOutputBindGroupLayout,
|
|
29
|
+
rotationSchema,
|
|
27
30
|
} from '../shaders/bindGroupLayouts';
|
|
28
31
|
import useAnimationFrame from '../hooks/useAnimationFrame';
|
|
29
|
-
import { TypedBufferMap } from '../shaders/resourceManagement/bufferManager';
|
|
30
|
-
import {
|
|
31
|
-
createColorMaskBindGroup,
|
|
32
|
-
createGlareBindGroup,
|
|
33
|
-
createReverseHoloDetectionChannelFlagsBindGroup,
|
|
34
|
-
createRotationValuesBindGroup,
|
|
35
|
-
} from '../shaders/bindGroupUtils';
|
|
36
|
-
import colorMaskFragment from '../shaders/fragmentShaders/colorMaskFragment';
|
|
37
|
-
import { newGlareFragment } from '../shaders/fragmentShaders/glareFragment';
|
|
38
|
-
import {
|
|
39
|
-
attachBindGroups,
|
|
40
|
-
blend,
|
|
41
|
-
createMaskPipeline,
|
|
42
|
-
createRainbowHoloPipeline as createHoloPipeline,
|
|
43
|
-
createReverseHoloPipeline,
|
|
44
|
-
getDefaultTarget,
|
|
45
|
-
} from '../shaders/pipelineSetups';
|
|
46
|
-
import mainVertex from '../shaders/vertexShaders/mainVertex';
|
|
47
32
|
import { subscribeToOrientationChange } from '../shaders/utils';
|
|
48
|
-
import type {
|
|
49
|
-
ColorAttachment,
|
|
50
|
-
ColorMask,
|
|
51
|
-
DeepPartiallyOptional,
|
|
52
|
-
Effect,
|
|
53
|
-
GlareOptions,
|
|
54
|
-
PipelineAttachmentPair,
|
|
55
|
-
} from '../types/types';
|
|
56
|
-
import {
|
|
57
|
-
colorMasksToTyped,
|
|
58
|
-
createColorMasks,
|
|
59
|
-
createGlareOptions,
|
|
60
|
-
createReverseHoloDetectionChannelFlags,
|
|
61
|
-
} from '../types/typeUtils';
|
|
33
|
+
import type { ColorMask } from '../types/types';
|
|
62
34
|
import type { V2d, V3d } from '../types/vector';
|
|
63
35
|
import {
|
|
64
36
|
addV3d,
|
|
@@ -75,18 +47,19 @@ import {
|
|
|
75
47
|
zeroV3d,
|
|
76
48
|
} from '../utils/vector';
|
|
77
49
|
import { baseTextureFragment } from '../shaders/fragmentShaders/baseTextureFragment';
|
|
50
|
+
import { PipelineManager } from '../shaders/resourceManagement/pipelineMap';
|
|
51
|
+
import { blend, type Effect } from '../enums/effectPresets';
|
|
52
|
+
import { createColorMasks } from '../types/typeUtils';
|
|
53
|
+
import { createColorMaskBindGroup } from '../shaders/bindGroupUtils';
|
|
54
|
+
import colorMaskFragment from '../shaders/fragmentShaders/colorMaskFragment';
|
|
55
|
+
import { precomputeColorMask } from '../shaders/computeShaders/precomputeColorMask';
|
|
78
56
|
|
|
79
57
|
export interface SharedProps {
|
|
80
58
|
width: number;
|
|
81
59
|
height: number;
|
|
82
|
-
|
|
83
|
-
enableGlare?: boolean;
|
|
84
|
-
highlightColors?: DeepPartiallyOptional<ColorMask, 'baseColor'>[];
|
|
60
|
+
highlightColors?: ColorMask[];
|
|
85
61
|
isHighlightInclusive?: boolean;
|
|
86
62
|
lightPosition?: SharedValue<V2d>;
|
|
87
|
-
// addReverseHolo?: boolean;
|
|
88
|
-
// reverseHoloDetectionChannelOptions?: Partial<ReverseHoloDetectionChannelFlags>;
|
|
89
|
-
// addHolo?: boolean;
|
|
90
63
|
translateViewIn3d?:
|
|
91
64
|
| boolean
|
|
92
65
|
| {
|
|
@@ -102,55 +75,35 @@ interface ContentProps extends SharedProps {
|
|
|
102
75
|
root: TgpuRoot;
|
|
103
76
|
imageTexture: TgpuTexture<TextureProps>;
|
|
104
77
|
maskTexture?: TgpuTexture<TextureProps>;
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
interface PipelineMap {
|
|
108
|
-
baseTexture: TgpuRenderPipeline;
|
|
109
|
-
glare: TgpuRenderPipeline | void;
|
|
110
|
-
colorMask: TgpuRenderPipeline | void;
|
|
111
|
-
mask: TgpuRenderPipeline | void;
|
|
112
|
-
reverseHolo: TgpuRenderPipeline | void;
|
|
113
|
-
holo: TgpuRenderPipeline | void;
|
|
78
|
+
colorMaskStorageTexture?: TgpuTexture<any> & StorageFlag;
|
|
114
79
|
}
|
|
115
80
|
|
|
116
81
|
export default function Content({
|
|
117
|
-
|
|
118
|
-
// addReverseHolo,
|
|
119
|
-
// reverseHoloDetectionChannelOptions,
|
|
120
|
-
effects,
|
|
82
|
+
effects = [{ name: 'glare' }],
|
|
121
83
|
highlightColors,
|
|
122
84
|
isHighlightInclusive = true,
|
|
123
|
-
glareOptions,
|
|
124
|
-
enableGlare = true,
|
|
125
85
|
height,
|
|
126
86
|
imageTexture,
|
|
127
87
|
maskTexture,
|
|
128
88
|
root,
|
|
129
|
-
lightPosition
|
|
89
|
+
lightPosition,
|
|
130
90
|
width,
|
|
131
91
|
translateViewIn3d = false,
|
|
132
92
|
style,
|
|
133
93
|
containerStyle,
|
|
94
|
+
colorMaskStorageTexture,
|
|
134
95
|
}: ContentProps) {
|
|
135
96
|
const { device } = root;
|
|
136
97
|
// const { ref, context } = useGPUContext();
|
|
137
98
|
const ref = useRef<CanvasRef>(null);
|
|
138
99
|
const [context, setContext] = useState<RNCanvasContext | null>(null);
|
|
139
|
-
// const context = ref.current!.getContext('webgpu')!;
|
|
140
100
|
|
|
141
101
|
useEffect(() => {
|
|
142
102
|
if (ref) setContext(ref.current?.getContext('webgpu')!);
|
|
143
103
|
}, [ref]);
|
|
144
104
|
|
|
145
105
|
const presentationFormat = navigator.gpu.getPreferredCanvasFormat();
|
|
146
|
-
const
|
|
147
|
-
|
|
148
|
-
//changing canvas size to prevent blur
|
|
149
|
-
const pixelRatio = PixelRatio.get();
|
|
150
|
-
const size = { x: width, y: height };
|
|
151
|
-
const pixelSize = transformV2d(scaleV2d(size, pixelRatio), (v) =>
|
|
152
|
-
Math.max(1, Math.round(v))
|
|
153
|
-
);
|
|
106
|
+
const isCanvasReady = useSharedValue(true);
|
|
154
107
|
|
|
155
108
|
const landscape = useSharedValue<boolean>(false);
|
|
156
109
|
const rotation = useSharedValue<V3d>(zeroV3d); // final GPU offsets
|
|
@@ -162,9 +115,10 @@ export default function Content({
|
|
|
162
115
|
const calibrated = useSharedValue<boolean>(false);
|
|
163
116
|
const gravitySensor = useAnimatedSensor(SensorType.GRAVITY, { interval: 20 });
|
|
164
117
|
|
|
165
|
-
const
|
|
166
|
-
() =>
|
|
167
|
-
|
|
118
|
+
const pipelineCache = useMemo(
|
|
119
|
+
() =>
|
|
120
|
+
new PipelineManager(root, presentationFormat, imageTexture, maskTexture),
|
|
121
|
+
[imageTexture, maskTexture, presentationFormat, root]
|
|
168
122
|
);
|
|
169
123
|
|
|
170
124
|
const animatedStyle = useAnimatedStyle(() => {
|
|
@@ -200,9 +154,9 @@ export default function Content({
|
|
|
200
154
|
useDerivedValue(() => {
|
|
201
155
|
'worklet';
|
|
202
156
|
|
|
203
|
-
if (
|
|
204
|
-
rotation.value =
|
|
205
|
-
? { x:
|
|
157
|
+
if (lightPosition) {
|
|
158
|
+
rotation.value = lightPosition
|
|
159
|
+
? { x: lightPosition.value.x, y: lightPosition.value.y, z: 0 }
|
|
206
160
|
: zeroV3d;
|
|
207
161
|
|
|
208
162
|
return;
|
|
@@ -251,11 +205,88 @@ export default function Content({
|
|
|
251
205
|
);
|
|
252
206
|
});
|
|
253
207
|
|
|
254
|
-
//
|
|
208
|
+
//TODO: is this needed here?
|
|
209
|
+
const effectsCache =
|
|
210
|
+
JSON.stringify(effects) + JSON.stringify(highlightColors);
|
|
211
|
+
|
|
255
212
|
useEffect(() => {
|
|
256
|
-
|
|
213
|
+
const initPipelines = async () => {
|
|
214
|
+
pipelineCache.pipelinesMap.clear();
|
|
215
|
+
|
|
216
|
+
pipelineCache.addPipeline(baseTextureFragment);
|
|
217
|
+
|
|
218
|
+
effects.forEach(({ name, options }) => {
|
|
219
|
+
pipelineCache.addPipelineWithBuffer(name, options);
|
|
220
|
+
});
|
|
221
|
+
|
|
222
|
+
//TODO: move to effect definition
|
|
223
|
+
if (highlightColors) {
|
|
224
|
+
const colorMaskBuffer = pipelineCache.buffersMap.syncUniformBuffer(
|
|
225
|
+
colorMaskArraySchema,
|
|
226
|
+
createColorMasks(highlightColors, isHighlightInclusive)
|
|
227
|
+
);
|
|
228
|
+
const colorMaskBindGroup = createColorMaskBindGroup(
|
|
229
|
+
root,
|
|
230
|
+
colorMaskBuffer
|
|
231
|
+
);
|
|
232
|
+
|
|
233
|
+
if (colorMaskStorageTexture) {
|
|
234
|
+
const precomputeColorMaskBindGroup = root.createBindGroup(
|
|
235
|
+
precomputeColorMaskBindGroupLayout,
|
|
236
|
+
{
|
|
237
|
+
colorMaskStorage: colorMaskStorageTexture as TgpuTexture<{
|
|
238
|
+
size: readonly number[];
|
|
239
|
+
format: 'rgba8unorm';
|
|
240
|
+
}> &
|
|
241
|
+
StorageFlag,
|
|
242
|
+
}
|
|
243
|
+
);
|
|
244
|
+
const precomputeColorMaskOutputBindGroup = root.createBindGroup(
|
|
245
|
+
precomputeColorMaskOutputBindGroupLayout,
|
|
246
|
+
{
|
|
247
|
+
colorMaskOutput: colorMaskStorageTexture as TgpuTexture<{
|
|
248
|
+
size: readonly number[];
|
|
249
|
+
format: 'rgba8unorm';
|
|
250
|
+
}> &
|
|
251
|
+
SampledFlag,
|
|
252
|
+
}
|
|
253
|
+
);
|
|
254
|
+
pipelineCache.addComputePipeline(precomputeColorMask, [
|
|
255
|
+
colorMaskBindGroup,
|
|
256
|
+
precomputeColorMaskBindGroup,
|
|
257
|
+
]);
|
|
258
|
+
await pipelineCache.runComputePipeline(precomputeColorMask);
|
|
259
|
+
// colorMaskOutputTexture.write(colorMaskStorageTexture);
|
|
260
|
+
|
|
261
|
+
pipelineCache.addPipeline(
|
|
262
|
+
colorMaskFragment,
|
|
263
|
+
[colorMaskBindGroup, precomputeColorMaskOutputBindGroup],
|
|
264
|
+
blend
|
|
265
|
+
);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
};
|
|
269
|
+
initPipelines();
|
|
270
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
271
|
+
}, [
|
|
272
|
+
effectsCache,
|
|
273
|
+
isHighlightInclusive,
|
|
274
|
+
pipelineCache,
|
|
275
|
+
root,
|
|
276
|
+
colorMaskStorageTexture,
|
|
277
|
+
]);
|
|
278
|
+
|
|
279
|
+
useEffect(() => {
|
|
280
|
+
if (!context) {
|
|
281
|
+
return;
|
|
282
|
+
}
|
|
283
|
+
// changing canvas size to prevent blur
|
|
284
|
+
const pixelRatio = PixelRatio.get();
|
|
285
|
+
const size = { x: width, y: height };
|
|
286
|
+
const pixelSize = transformV2d(scaleV2d(size, pixelRatio), (v) =>
|
|
287
|
+
Math.max(1, Math.round(v))
|
|
288
|
+
);
|
|
257
289
|
|
|
258
|
-
//this sets the underlying resolution of the canvas to prevent blurriness
|
|
259
290
|
const canvasElement = context.canvas;
|
|
260
291
|
|
|
261
292
|
if (
|
|
@@ -265,203 +296,33 @@ export default function Content({
|
|
|
265
296
|
canvasElement.width = pixelSize.x;
|
|
266
297
|
canvasElement.height = pixelSize.y;
|
|
267
298
|
}
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
// minFilter: 'linear',
|
|
278
|
-
// mipmapFilter: 'linear',
|
|
279
|
-
// });
|
|
280
|
-
|
|
281
|
-
const sampler = root['~unstable'].createSampler({
|
|
282
|
-
magFilter: 'linear',
|
|
283
|
-
minFilter: 'linear',
|
|
284
|
-
mipmapFilter: 'linear',
|
|
285
|
-
}) as any as GPUSampler; //TODO: delete this cast when TgpuFixedSampler gets exposed
|
|
286
|
-
|
|
287
|
-
const imageTextureBindGroup = root.createBindGroup(textureBindGroupLayout, {
|
|
288
|
-
texture: root.unwrap(imageTexture).createView(),
|
|
289
|
-
sampler,
|
|
299
|
+
//this is a workaround to prevent error logs but it should be handled by webgpu
|
|
300
|
+
scheduleOnUI(() => {
|
|
301
|
+
'worklet';
|
|
302
|
+
context.configure({
|
|
303
|
+
device,
|
|
304
|
+
format: presentationFormat,
|
|
305
|
+
alphaMode: 'premultiplied',
|
|
306
|
+
});
|
|
307
|
+
isCanvasReady.value = true;
|
|
290
308
|
});
|
|
309
|
+
}, [context, device, height, presentationFormat, width, isCanvasReady]);
|
|
291
310
|
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
rotationBuffer
|
|
297
|
-
);
|
|
298
|
-
|
|
299
|
-
const glareBuffer = bufferMap.addBuffer(
|
|
300
|
-
root,
|
|
301
|
-
'glare',
|
|
302
|
-
createGlareOptions(glareOptions ?? {})
|
|
303
|
-
);
|
|
304
|
-
const glareBindGroup = createGlareBindGroup(root, glareBuffer);
|
|
305
|
-
|
|
306
|
-
const colorMaskBuffer = bufferMap.addBuffer(
|
|
307
|
-
root,
|
|
308
|
-
'colorMask',
|
|
309
|
-
colorMasksToTyped(
|
|
310
|
-
createColorMasks(
|
|
311
|
-
highlightColors ?? [{ baseColor: [-20, -20, -20], useHSV: false }]
|
|
312
|
-
),
|
|
313
|
-
isHighlightInclusive
|
|
314
|
-
)
|
|
315
|
-
);
|
|
316
|
-
const colorMaskBindGroup = createColorMaskBindGroup(root, colorMaskBuffer);
|
|
317
|
-
|
|
318
|
-
const reverseHoloEffect = effects
|
|
319
|
-
? effects.find((e) => e.name === 'reverseHolo')
|
|
320
|
-
: undefined;
|
|
321
|
-
const reverseHoloDetectionChannelFlagsBuffer = bufferMap.addBuffer(
|
|
322
|
-
root,
|
|
323
|
-
'reverseHoloDetectionChannelFlags',
|
|
324
|
-
createReverseHoloDetectionChannelFlags(reverseHoloEffect?.options)
|
|
325
|
-
);
|
|
326
|
-
const reverseHoloDetectionChannelFlagsBindGroup =
|
|
327
|
-
createReverseHoloDetectionChannelFlagsBindGroup(
|
|
328
|
-
root,
|
|
329
|
-
reverseHoloDetectionChannelFlagsBuffer,
|
|
330
|
-
glareBuffer
|
|
331
|
-
);
|
|
332
|
-
|
|
333
|
-
const holoEffect = effects
|
|
334
|
-
? effects.find((e) => e.name === 'holo')
|
|
335
|
-
: undefined;
|
|
336
|
-
|
|
337
|
-
const pipelineMap: PipelineMap = {
|
|
338
|
-
baseTexture: attachBindGroups(
|
|
339
|
-
root['~unstable']
|
|
340
|
-
.withVertex(mainVertex, {})
|
|
341
|
-
.withFragment(
|
|
342
|
-
baseTextureFragment,
|
|
343
|
-
getDefaultTarget(presentationFormat)
|
|
344
|
-
)
|
|
345
|
-
.createPipeline(),
|
|
346
|
-
[imageTextureBindGroup, rotationBindGroup]
|
|
347
|
-
),
|
|
348
|
-
glare: attachBindGroups(
|
|
349
|
-
root['~unstable']
|
|
350
|
-
.withVertex(mainVertex, {})
|
|
351
|
-
.withFragment(newGlareFragment, getDefaultTarget(presentationFormat))
|
|
352
|
-
.createPipeline(),
|
|
353
|
-
[
|
|
354
|
-
imageTextureBindGroup,
|
|
355
|
-
rotationBindGroup,
|
|
356
|
-
glareBindGroup,
|
|
357
|
-
colorMaskBindGroup,
|
|
358
|
-
]
|
|
359
|
-
),
|
|
360
|
-
colorMask: attachBindGroups(
|
|
361
|
-
root['~unstable']
|
|
362
|
-
.withVertex(mainVertex, {})
|
|
363
|
-
.withFragment(
|
|
364
|
-
colorMaskFragment,
|
|
365
|
-
getDefaultTarget(presentationFormat, blend)
|
|
366
|
-
)
|
|
367
|
-
.createPipeline(),
|
|
368
|
-
[imageTextureBindGroup, colorMaskBindGroup, rotationBindGroup]
|
|
369
|
-
),
|
|
370
|
-
mask: createMaskPipeline(
|
|
371
|
-
root,
|
|
372
|
-
maskTexture,
|
|
373
|
-
[imageTextureBindGroup, rotationBindGroup],
|
|
374
|
-
sampler,
|
|
375
|
-
presentationFormat
|
|
376
|
-
),
|
|
377
|
-
reverseHolo: createReverseHoloPipeline(
|
|
378
|
-
root,
|
|
379
|
-
maskTexture,
|
|
380
|
-
[
|
|
381
|
-
imageTextureBindGroup,
|
|
382
|
-
rotationBindGroup,
|
|
383
|
-
reverseHoloDetectionChannelFlagsBindGroup,
|
|
384
|
-
],
|
|
385
|
-
sampler,
|
|
386
|
-
presentationFormat
|
|
387
|
-
),
|
|
388
|
-
holo: createHoloPipeline(
|
|
389
|
-
root,
|
|
390
|
-
imageTexture,
|
|
391
|
-
[rotationBindGroup],
|
|
392
|
-
sampler,
|
|
393
|
-
presentationFormat
|
|
394
|
-
),
|
|
395
|
-
};
|
|
396
|
-
|
|
397
|
-
const modifyBuffers = () => {
|
|
398
|
-
rotationBuffer.write(d.vec3f(...componentsFromV3d(rotation.value)));
|
|
399
|
-
};
|
|
400
|
-
|
|
401
|
-
const renderPipelines = () => {
|
|
402
|
-
const view = context.getCurrentTexture().createView();
|
|
403
|
-
const initialAttachment: ColorAttachment = {
|
|
404
|
-
view,
|
|
405
|
-
clearValue: [0, 0, 0, 0],
|
|
406
|
-
loadOp: 'clear',
|
|
407
|
-
storeOp: 'store',
|
|
408
|
-
};
|
|
409
|
-
const loadingAttachment: ColorAttachment = {
|
|
410
|
-
view,
|
|
411
|
-
clearValue: [0, 0, 0, 0],
|
|
412
|
-
loadOp: 'load',
|
|
413
|
-
storeOp: 'store',
|
|
414
|
-
};
|
|
415
|
-
|
|
416
|
-
const { baseTexture, glare, mask, colorMask, holo, reverseHolo } =
|
|
417
|
-
pipelineMap;
|
|
418
|
-
|
|
419
|
-
const pairs: PipelineAttachmentPair[] = [
|
|
420
|
-
[baseTexture, initialAttachment],
|
|
421
|
-
];
|
|
422
|
-
|
|
423
|
-
if ((glareOptions || !enableGlare) && glare) {
|
|
424
|
-
pairs.push([glare, loadingAttachment]);
|
|
425
|
-
}
|
|
426
|
-
if (mask) pairs.push([mask, loadingAttachment]);
|
|
427
|
-
if (reverseHoloEffect && reverseHolo)
|
|
428
|
-
pairs.push([reverseHolo, loadingAttachment]);
|
|
429
|
-
if (holoEffect && holo) pairs.push([holo, loadingAttachment]);
|
|
430
|
-
if (colorMask) pairs.push([colorMask, loadingAttachment]);
|
|
431
|
-
|
|
432
|
-
pairs.forEach(([pipeline, attachment]) =>
|
|
433
|
-
pipeline.withColorAttachment(attachment).draw(6)
|
|
434
|
-
);
|
|
435
|
-
};
|
|
436
|
-
|
|
437
|
-
const presentContext = () => context.present();
|
|
311
|
+
const frameCallback = useCallback(() => {
|
|
312
|
+
if (!context || !isCanvasReady.value) {
|
|
313
|
+
return;
|
|
314
|
+
}
|
|
438
315
|
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
presentContext();
|
|
443
|
-
};
|
|
316
|
+
pipelineCache.buffersMap
|
|
317
|
+
.get(rotationSchema)
|
|
318
|
+
?.write(d.vec3f(...componentsFromV3d(rotation.value)));
|
|
444
319
|
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
context,
|
|
450
|
-
root,
|
|
451
|
-
presentationFormat,
|
|
452
|
-
imageTexture,
|
|
453
|
-
maskTexture,
|
|
454
|
-
rotation,
|
|
455
|
-
bufferMap,
|
|
456
|
-
glareOptions,
|
|
457
|
-
enableGlare,
|
|
458
|
-
highlightColors,
|
|
459
|
-
pixelSize,
|
|
460
|
-
effects,
|
|
461
|
-
isHighlightInclusive,
|
|
462
|
-
]);
|
|
320
|
+
const view = context.getCurrentTexture().createView();
|
|
321
|
+
pipelineCache.renderPipelines(view);
|
|
322
|
+
context.present();
|
|
323
|
+
}, [context, pipelineCache, rotation, isCanvasReady]);
|
|
463
324
|
|
|
464
|
-
useAnimationFrame(
|
|
325
|
+
useAnimationFrame(frameCallback);
|
|
465
326
|
|
|
466
327
|
return (
|
|
467
328
|
<View
|