react-native-shine 0.2.2 → 0.3.1
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 +22 -7
- package/lib/module/components/Content.js +232 -0
- package/lib/module/components/Content.js.map +1 -0
- package/lib/module/components/Shine.js +33 -0
- package/lib/module/components/Shine.js.map +1 -0
- package/lib/module/components/ShineGroup.js +92 -0
- package/lib/module/components/ShineGroup.js.map +1 -0
- package/lib/module/enums/waveCallback.js +19 -0
- package/lib/module/enums/waveCallback.js.map +1 -0
- package/lib/module/hooks/useAnimationFrame.js +17 -0
- package/lib/module/hooks/useAnimationFrame.js.map +1 -0
- package/lib/module/hooks/useOrientation.js +10 -0
- package/lib/module/hooks/useOrientation.js.map +1 -0
- package/lib/module/index.js +6 -219
- package/lib/module/index.js.map +1 -1
- package/lib/module/shaders/bindGroupLayouts.js +41 -6
- package/lib/module/shaders/bindGroupLayouts.js.map +1 -1
- package/lib/module/shaders/bindGroupUtils.js +34 -41
- package/lib/module/shaders/bindGroupUtils.js.map +1 -1
- package/lib/module/shaders/fragmentShaders/colorMaskFragment.js +2 -2
- package/lib/module/shaders/fragmentShaders/colorMaskFragment.js.map +1 -1
- package/lib/module/shaders/fragmentShaders/glareFragment.js +115 -0
- package/lib/module/shaders/fragmentShaders/glareFragment.js.map +1 -0
- package/lib/module/shaders/fragmentShaders/holoFragment.js +28 -0
- package/lib/module/shaders/fragmentShaders/holoFragment.js.map +1 -0
- package/lib/module/shaders/fragmentShaders/maskFragment.js +20 -0
- package/lib/module/shaders/fragmentShaders/maskFragment.js.map +1 -0
- package/lib/module/shaders/fragmentShaders/reverseHoloFragment.js +46 -0
- package/lib/module/shaders/fragmentShaders/reverseHoloFragment.js.map +1 -0
- package/lib/module/shaders/pipelineSetups.js +72 -17
- package/lib/module/shaders/pipelineSetups.js.map +1 -1
- package/lib/module/shaders/{resourceManagement.js → resourceManagement/bitmaps.js} +2 -1
- package/lib/module/shaders/resourceManagement/bitmaps.js.map +1 -0
- package/lib/module/shaders/resourceManagement/bufferManager.js +46 -0
- package/lib/module/shaders/resourceManagement/bufferManager.js.map +1 -0
- package/lib/module/shaders/resourceManagement/textures.js +24 -0
- package/lib/module/shaders/resourceManagement/textures.js.map +1 -0
- package/lib/module/shaders/tgpuUtils.js +19 -1
- package/lib/module/shaders/tgpuUtils.js.map +1 -1
- package/lib/module/shaders/utils.js +8 -36
- package/lib/module/shaders/utils.js.map +1 -1
- package/lib/module/shaders/vertexShaders/mainRotationEffectVertex.js +47 -0
- package/lib/module/shaders/vertexShaders/mainRotationEffectVertex.js.map +1 -0
- package/lib/module/types/size.js +2 -0
- package/lib/module/types/size.js.map +1 -0
- package/lib/module/types/typeUtils.js +17 -19
- package/lib/module/types/typeUtils.js.map +1 -1
- package/lib/module/types/vector.js +2 -0
- package/lib/module/types/vector.js.map +1 -0
- package/lib/module/utils/size.js +25 -0
- package/lib/module/utils/size.js.map +1 -0
- package/lib/module/utils/vector.js +168 -0
- package/lib/module/utils/vector.js.map +1 -0
- package/lib/typescript/src/components/Content.d.ts +23 -0
- package/lib/typescript/src/components/Content.d.ts.map +1 -0
- package/lib/typescript/src/components/Shine.d.ts +7 -0
- package/lib/typescript/src/components/Shine.d.ts.map +1 -0
- package/lib/typescript/src/components/ShineGroup.d.ts +6 -0
- package/lib/typescript/src/components/ShineGroup.d.ts.map +1 -0
- package/lib/typescript/src/enums/waveCallback.d.ts +9 -0
- package/lib/typescript/src/enums/waveCallback.d.ts.map +1 -0
- package/lib/typescript/src/hooks/useAnimationFrame.d.ts +2 -0
- package/lib/typescript/src/hooks/useAnimationFrame.d.ts.map +1 -0
- package/lib/typescript/src/hooks/useOrientation.d.ts +4 -0
- package/lib/typescript/src/hooks/useOrientation.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +8 -11
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/shaders/bindGroupLayouts.d.ts +46 -8
- package/lib/typescript/src/shaders/bindGroupLayouts.d.ts.map +1 -1
- package/lib/typescript/src/shaders/bindGroupUtils.d.ts +9 -9
- package/lib/typescript/src/shaders/bindGroupUtils.d.ts.map +1 -1
- package/lib/typescript/src/shaders/fragmentShaders/glareFragment.d.ts +8 -0
- package/lib/typescript/src/shaders/fragmentShaders/glareFragment.d.ts.map +1 -0
- package/lib/typescript/src/shaders/fragmentShaders/holoFragment.d.ts +5 -0
- package/lib/typescript/src/shaders/fragmentShaders/holoFragment.d.ts.map +1 -0
- package/lib/typescript/src/shaders/fragmentShaders/maskFragment.d.ts +6 -0
- package/lib/typescript/src/shaders/fragmentShaders/maskFragment.d.ts.map +1 -0
- package/lib/typescript/src/shaders/fragmentShaders/reverseHoloFragment.d.ts +5 -0
- package/lib/typescript/src/shaders/fragmentShaders/reverseHoloFragment.d.ts.map +1 -0
- package/lib/typescript/src/shaders/pipelineSetups.d.ts +9 -4
- package/lib/typescript/src/shaders/pipelineSetups.d.ts.map +1 -1
- package/lib/typescript/src/shaders/{resourceManagement.d.ts → resourceManagement/bitmaps.d.ts} +1 -1
- package/lib/typescript/src/shaders/resourceManagement/bitmaps.d.ts.map +1 -0
- package/lib/typescript/src/shaders/resourceManagement/bufferManager.d.ts +28 -0
- package/lib/typescript/src/shaders/resourceManagement/bufferManager.d.ts.map +1 -0
- package/lib/typescript/src/shaders/resourceManagement/textures.d.ts +8 -0
- package/lib/typescript/src/shaders/resourceManagement/textures.d.ts.map +1 -0
- package/lib/typescript/src/shaders/tgpuUtils.d.ts +5 -1
- package/lib/typescript/src/shaders/tgpuUtils.d.ts.map +1 -1
- package/lib/typescript/src/shaders/utils.d.ts +3 -10
- package/lib/typescript/src/shaders/utils.d.ts.map +1 -1
- package/lib/typescript/src/shaders/vertexShaders/mainRotationEffectVertex.d.ts +6 -0
- package/lib/typescript/src/shaders/vertexShaders/mainRotationEffectVertex.d.ts.map +1 -0
- package/lib/typescript/src/types/size.d.ts +5 -0
- package/lib/typescript/src/types/size.d.ts.map +1 -0
- package/lib/typescript/src/types/typeUtils.d.ts +3 -5
- package/lib/typescript/src/types/typeUtils.d.ts.map +1 -1
- package/lib/typescript/src/types/types.d.ts +10 -3
- package/lib/typescript/src/types/types.d.ts.map +1 -1
- package/lib/typescript/src/types/vector.d.ts +11 -0
- package/lib/typescript/src/types/vector.d.ts.map +1 -0
- package/lib/typescript/src/utils/size.d.ts +5 -0
- package/lib/typescript/src/utils/size.d.ts.map +1 -0
- package/lib/typescript/src/utils/vector.d.ts +33 -0
- package/lib/typescript/src/utils/vector.d.ts.map +1 -0
- package/package.json +7 -5
- package/scripts/postinstall.js +16 -17
- package/src/components/Content.tsx +403 -0
- package/src/components/Shine.tsx +38 -0
- package/src/components/ShineGroup.tsx +100 -0
- package/src/enums/waveCallback.ts +22 -0
- package/src/hooks/useAnimationFrame.ts +21 -0
- package/src/hooks/useOrientation.ts +18 -0
- package/src/index.tsx +14 -322
- package/src/shaders/bindGroupLayouts.ts +45 -8
- package/src/shaders/bindGroupUtils.ts +50 -65
- package/src/shaders/fragmentShaders/colorMaskFragment.ts +2 -2
- package/src/shaders/fragmentShaders/glareFragment.ts +143 -0
- package/src/shaders/fragmentShaders/holoFragment.ts +35 -0
- package/src/shaders/fragmentShaders/maskFragment.ts +31 -0
- package/src/shaders/fragmentShaders/reverseHoloFragment.ts +71 -0
- package/src/shaders/pipelineSetups.ts +152 -20
- package/src/shaders/{resourceManagement.ts → resourceManagement/bitmaps.ts} +1 -0
- package/src/shaders/resourceManagement/bufferManager.ts +82 -0
- package/src/shaders/resourceManagement/textures.ts +42 -0
- package/src/shaders/tgpuUtils.ts +36 -1
- package/src/shaders/utils.ts +13 -57
- package/src/shaders/vertexShaders/mainRotationEffectVertex.ts +76 -0
- package/src/types/size.ts +4 -0
- package/src/types/typeUtils.ts +22 -36
- package/src/types/types.ts +19 -3
- package/src/types/vector.ts +13 -0
- package/src/utils/size.ts +12 -0
- package/src/utils/vector.ts +132 -0
- package/lib/module/shaders/fragmentShaders/bloomFragment.js +0 -66
- package/lib/module/shaders/fragmentShaders/bloomFragment.js.map +0 -1
- package/lib/module/shaders/resourceManagement.js.map +0 -1
- package/lib/typescript/src/shaders/fragmentShaders/bloomFragment.d.ts +0 -6
- package/lib/typescript/src/shaders/fragmentShaders/bloomFragment.d.ts.map +0 -1
- package/lib/typescript/src/shaders/resourceManagement.d.ts.map +0 -1
- package/src/shaders/fragmentShaders/bloomFragment.ts +0 -83
package/README.md
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
|
|
1
|
+

|
|
2
2
|
|
|
3
|
-
Fast and efficient way to add interactive GPU-based shader effects to your React Native apps using [TypeGPU](https://github.com/
|
|
3
|
+
Fast and efficient way to add interactive GPU-based shader effects to your React Native apps using [TypeGPU](https://github.com/software-mansion/TypeGPU) and [WebGPU](https://github.com/wcandillon/react-native-webgpu).
|
|
4
4
|
|
|
5
5
|
`react-native-shine` leverages powerful GPU execution via native bindings, delivering lovely, fancy and **shiny** effects—ideal for UIs or creative interactions.
|
|
6
6
|
|
|
7
|
+

|
|
8
|
+
|
|
7
9
|
---
|
|
8
10
|
|
|
9
11
|
## ⚙️ Installation
|
|
@@ -103,7 +105,7 @@ export default function Index() {
|
|
|
103
105
|
}
|
|
104
106
|
```
|
|
105
107
|
|
|
106
|
-
|
|
108
|
+
For more thorough usage examples and docs click [here](https://github.com/wojtus7/react-native-shine/blob/main/USAGE.md)
|
|
107
109
|
|
|
108
110
|
---
|
|
109
111
|
|
|
@@ -150,10 +152,23 @@ We welcome shaders, GPU visual effects, demos, and bug fixes!
|
|
|
150
152
|
|
|
151
153
|
---
|
|
152
154
|
|
|
153
|
-
##
|
|
155
|
+
## Shine is created by Software Mansion
|
|
154
156
|
|
|
155
|
-
|
|
157
|
+
[](https://swmansion.com)
|
|
156
158
|
|
|
157
|
-
|
|
159
|
+
Since 2012 [Software Mansion](https://swmansion.com) is a software agency with
|
|
160
|
+
experience in building web and mobile apps. We are Core React Native
|
|
161
|
+
Contributors and experts in dealing with all kinds of React Native issues. We
|
|
162
|
+
can help you build your next dream product –
|
|
163
|
+
[Hire us](https://swmansion.com/contact/projects?utm_source=shine&utm_medium=readme).
|
|
164
|
+
|
|
165
|
+
<!-- automd:contributors author="software-mansion" -->
|
|
166
|
+
|
|
167
|
+
Made by [@software-mansion](https://github.com/software-mansion) and
|
|
168
|
+
[community](https://github.com/wojtus7/react-native-shine/graphs/contributors) 💛
|
|
169
|
+
<br><br>
|
|
170
|
+
<a href="https://github.com/wojtus7/react-native-shine/graphs/contributors">
|
|
171
|
+
<img src="https://contrib.rocks/image?repo=wojtus7/react-native-shine" />
|
|
172
|
+
</a>
|
|
158
173
|
|
|
159
|
-
|
|
174
|
+
<!-- /automd -->
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { useEffect, useMemo, useRef } from 'react';
|
|
4
|
+
import { PixelRatio, Platform, View } from 'react-native';
|
|
5
|
+
import Animated, { SensorType, useAnimatedSensor, useAnimatedStyle, useDerivedValue, useSharedValue } from 'react-native-reanimated';
|
|
6
|
+
import { Canvas, useGPUContext } from 'react-native-wgpu';
|
|
7
|
+
import * as d from 'typegpu/data';
|
|
8
|
+
import { bufferData, textureBindGroupLayout } from "../shaders/bindGroupLayouts.js";
|
|
9
|
+
import useAnimationFrame from "../hooks/useAnimationFrame.js";
|
|
10
|
+
import { TypedBufferMap } from "../shaders/resourceManagement/bufferManager.js";
|
|
11
|
+
import { createColorMaskBindGroup, createGlareBindGroup, createRotationValuesBindGroup } from "../shaders/bindGroupUtils.js";
|
|
12
|
+
import colorMaskFragment from "../shaders/fragmentShaders/colorMaskFragment.js";
|
|
13
|
+
import { newGlareFragment } from "../shaders/fragmentShaders/glareFragment.js";
|
|
14
|
+
import { attachBindGroups, blend, createMaskPipeline, createRainbowHoloPipeline as createHoloPipeline, createReverseHoloPipeline, getDefaultTarget } from "../shaders/pipelineSetups.js";
|
|
15
|
+
import mainVertex from "../shaders/vertexShaders/mainVertex.js";
|
|
16
|
+
import { subscribeToOrientationChange } from "../shaders/utils.js";
|
|
17
|
+
import { colorMaskToTyped, createColorMask, createGlareOptions } from "../types/typeUtils.js";
|
|
18
|
+
import { addV3d, clampV3d, componentsFromV3d, degToRad, divV3d, negateV2dY, rotateV2d, scaleV2d, scaleV3d, subtractV3d, transformV2d, zeroV3d } from "../utils/vector.js";
|
|
19
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
20
|
+
export default function Content({
|
|
21
|
+
addHolo,
|
|
22
|
+
addReverseHolo,
|
|
23
|
+
addTextureMask,
|
|
24
|
+
colorMaskOptions,
|
|
25
|
+
glareOptions,
|
|
26
|
+
height,
|
|
27
|
+
imageTexture,
|
|
28
|
+
maskTexture,
|
|
29
|
+
root,
|
|
30
|
+
touchPosition,
|
|
31
|
+
useTouchControl,
|
|
32
|
+
width
|
|
33
|
+
}) {
|
|
34
|
+
const {
|
|
35
|
+
device
|
|
36
|
+
} = root;
|
|
37
|
+
const {
|
|
38
|
+
ref,
|
|
39
|
+
context
|
|
40
|
+
} = useGPUContext();
|
|
41
|
+
const presentationFormat = navigator.gpu.getPreferredCanvasFormat();
|
|
42
|
+
const renderRef = useRef(null);
|
|
43
|
+
|
|
44
|
+
//changing canvas size to prevent blur
|
|
45
|
+
const pixelRatio = PixelRatio.get();
|
|
46
|
+
const size = {
|
|
47
|
+
x: width,
|
|
48
|
+
y: height
|
|
49
|
+
};
|
|
50
|
+
const pixelSize = transformV2d(scaleV2d(size, pixelRatio), v => Math.max(1, Math.round(v)));
|
|
51
|
+
const landscape = useSharedValue(false);
|
|
52
|
+
const rotation = useSharedValue(zeroV3d); // final GPU offsets
|
|
53
|
+
|
|
54
|
+
// Calibration shared values (UI thread)
|
|
55
|
+
const initialGravity = useSharedValue(zeroV3d);
|
|
56
|
+
const calibSum = useSharedValue(zeroV3d);
|
|
57
|
+
const calibCount = useSharedValue(0);
|
|
58
|
+
const calibrated = useSharedValue(false);
|
|
59
|
+
const gravitySensor = useAnimatedSensor(SensorType.GRAVITY, {
|
|
60
|
+
interval: 20
|
|
61
|
+
});
|
|
62
|
+
const bufferMap = useMemo(() => new TypedBufferMap(bufferData), []);
|
|
63
|
+
|
|
64
|
+
//TODO: add once again, when the wgpu issues are fixed :3
|
|
65
|
+
|
|
66
|
+
const animatedStyle = useAnimatedStyle(() => {
|
|
67
|
+
const rotX = rotation.value.x * 10;
|
|
68
|
+
const rotY = rotation.value.y * 10;
|
|
69
|
+
return {
|
|
70
|
+
transform: [{
|
|
71
|
+
perspective: 300
|
|
72
|
+
}, {
|
|
73
|
+
rotateX: `${-rotY}deg`
|
|
74
|
+
}, {
|
|
75
|
+
rotateY: `${rotX}deg`
|
|
76
|
+
}
|
|
77
|
+
// { rotateZ: `${rotX * 5}deg` },
|
|
78
|
+
]
|
|
79
|
+
};
|
|
80
|
+
});
|
|
81
|
+
// Subscribe to orientation changes and reset calibration on change
|
|
82
|
+
useEffect(() => subscribeToOrientationChange(isLandscape => {
|
|
83
|
+
landscape.value = isLandscape;
|
|
84
|
+
}), [landscape]);
|
|
85
|
+
|
|
86
|
+
// Calibration & mapping logic
|
|
87
|
+
useDerivedValue(() => {
|
|
88
|
+
'worklet';
|
|
89
|
+
|
|
90
|
+
if (useTouchControl) {
|
|
91
|
+
rotation.value = touchPosition ? {
|
|
92
|
+
x: touchPosition.value.x,
|
|
93
|
+
y: touchPosition.value.y,
|
|
94
|
+
z: 0
|
|
95
|
+
} : zeroV3d;
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
const g = gravitySensor.sensor.value;
|
|
99
|
+
const CALIBRATION_SAMPLES = 40;
|
|
100
|
+
const alpha = 0.15; // smoothing
|
|
101
|
+
const scale = 0.6;
|
|
102
|
+
if (!calibrated.value) {
|
|
103
|
+
// accumulate baseline in device coordinates
|
|
104
|
+
calibSum.value = addV3d(calibSum.value, g);
|
|
105
|
+
if (++calibCount.value >= CALIBRATION_SAMPLES) {
|
|
106
|
+
initialGravity.value = divV3d(calibSum.value, calibCount.value);
|
|
107
|
+
calibrated.value = true;
|
|
108
|
+
}
|
|
109
|
+
rotation.value = zeroV3d;
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
const init = initialGravity.value;
|
|
113
|
+
const dg = subtractV3d(g, init);
|
|
114
|
+
|
|
115
|
+
// Rotate into screen coordinates so offsets auto-swap with orientation
|
|
116
|
+
const m = rotateV2d(dg, degToRad(-90 * Number(landscape.value)));
|
|
117
|
+
const screen = negateV2dY(m);
|
|
118
|
+
const smoothOffset = {
|
|
119
|
+
...scaleV2d(screen, alpha),
|
|
120
|
+
z: dg.z * alpha
|
|
121
|
+
};
|
|
122
|
+
const smooth = scaleV3d(addV3d(scaleV3d(rotation.value, 1 - alpha), smoothOffset), scale);
|
|
123
|
+
rotation.value = clampV3d(landscape.value ? {
|
|
124
|
+
x: smooth.y,
|
|
125
|
+
y: -smooth.x,
|
|
126
|
+
z: smooth.z
|
|
127
|
+
} : smooth, -1, 1);
|
|
128
|
+
});
|
|
129
|
+
// Render loop
|
|
130
|
+
useEffect(() => {
|
|
131
|
+
if (!context) return;
|
|
132
|
+
|
|
133
|
+
//this sets the underlying resolution of the canvas to prevent blurriness
|
|
134
|
+
const canvasElement = context.canvas;
|
|
135
|
+
if (canvasElement.width !== pixelSize.x && canvasElement.height !== pixelSize.y) {
|
|
136
|
+
canvasElement.width = pixelSize.x;
|
|
137
|
+
canvasElement.height = pixelSize.y;
|
|
138
|
+
}
|
|
139
|
+
context.configure({
|
|
140
|
+
device,
|
|
141
|
+
format: presentationFormat,
|
|
142
|
+
alphaMode: 'premultiplied'
|
|
143
|
+
});
|
|
144
|
+
const sampler = device.createSampler({
|
|
145
|
+
magFilter: 'linear',
|
|
146
|
+
minFilter: 'linear'
|
|
147
|
+
});
|
|
148
|
+
const imageTextureBindGroup = root.createBindGroup(textureBindGroupLayout, {
|
|
149
|
+
texture: root.unwrap(imageTexture).createView(),
|
|
150
|
+
sampler
|
|
151
|
+
});
|
|
152
|
+
const rotationBuffer = bufferMap.addBuffer(root, 'rotation', d.vec3f(0.0));
|
|
153
|
+
const rotationBindGroup = createRotationValuesBindGroup(root, rotationBuffer);
|
|
154
|
+
const glareBuffer = bufferMap.addBuffer(root, 'glare', createGlareOptions(glareOptions ?? {}));
|
|
155
|
+
const glareBindGroup = createGlareBindGroup(root, glareBuffer);
|
|
156
|
+
const colorMaskBuffer = bufferMap.addBuffer(root, 'colorMask', colorMaskToTyped(createColorMask(colorMaskOptions ?? {
|
|
157
|
+
baseColor: [-20, -20, -20]
|
|
158
|
+
})));
|
|
159
|
+
const colorMaskBindGroup = createColorMaskBindGroup(root, colorMaskBuffer);
|
|
160
|
+
const pipelineMap = {
|
|
161
|
+
glare: attachBindGroups(root['~unstable'].withVertex(mainVertex, {}).withFragment(newGlareFragment, getDefaultTarget(presentationFormat)).createPipeline(), [imageTextureBindGroup, rotationBindGroup, glareBindGroup, colorMaskBindGroup]),
|
|
162
|
+
colorMask: attachBindGroups(root['~unstable'].withVertex(mainVertex, {}).withFragment(colorMaskFragment, getDefaultTarget(presentationFormat, blend)).createPipeline(), [imageTextureBindGroup, colorMaskBindGroup, rotationBindGroup]),
|
|
163
|
+
mask: createMaskPipeline(root, maskTexture, [imageTextureBindGroup, rotationBindGroup], sampler, presentationFormat),
|
|
164
|
+
reverseHolo: createReverseHoloPipeline(root, maskTexture, [imageTextureBindGroup, rotationBindGroup, glareBindGroup], sampler, presentationFormat),
|
|
165
|
+
holo: createHoloPipeline(root, imageTexture, [rotationBindGroup], sampler, presentationFormat)
|
|
166
|
+
};
|
|
167
|
+
const modifyBuffers = () => {
|
|
168
|
+
rotationBuffer.write(d.vec3f(...componentsFromV3d(rotation.value)));
|
|
169
|
+
};
|
|
170
|
+
const renderPipelines = () => {
|
|
171
|
+
const view = context.getCurrentTexture().createView();
|
|
172
|
+
const initialAttachment = {
|
|
173
|
+
view,
|
|
174
|
+
clearValue: [0, 0, 0, 0],
|
|
175
|
+
loadOp: 'clear',
|
|
176
|
+
storeOp: 'store'
|
|
177
|
+
};
|
|
178
|
+
const loadingAttachment = {
|
|
179
|
+
view,
|
|
180
|
+
clearValue: [0, 0, 0, 0],
|
|
181
|
+
loadOp: 'load',
|
|
182
|
+
storeOp: 'store'
|
|
183
|
+
};
|
|
184
|
+
const {
|
|
185
|
+
glare,
|
|
186
|
+
mask,
|
|
187
|
+
colorMask,
|
|
188
|
+
holo,
|
|
189
|
+
reverseHolo
|
|
190
|
+
} = pipelineMap;
|
|
191
|
+
const pairs = [[glare, initialAttachment]];
|
|
192
|
+
if (addTextureMask && mask) pairs.push([mask, loadingAttachment]);
|
|
193
|
+
if (addReverseHolo && reverseHolo) pairs.push([reverseHolo, loadingAttachment]);
|
|
194
|
+
if (addHolo && holo) pairs.push([holo, loadingAttachment]);
|
|
195
|
+
pairs.push([colorMask, loadingAttachment]);
|
|
196
|
+
pairs.forEach(([pipeline, attachment]) => pipeline.withColorAttachment(attachment).draw(6));
|
|
197
|
+
};
|
|
198
|
+
const presentContext = () => context.present();
|
|
199
|
+
renderRef.current = () => {
|
|
200
|
+
modifyBuffers();
|
|
201
|
+
renderPipelines();
|
|
202
|
+
presentContext();
|
|
203
|
+
};
|
|
204
|
+
}, [device, context, root, presentationFormat, imageTexture, maskTexture, rotation, bufferMap, glareOptions, colorMaskOptions, addHolo, addReverseHolo, addTextureMask, pixelSize]);
|
|
205
|
+
useAnimationFrame(() => renderRef.current?.());
|
|
206
|
+
return /*#__PURE__*/_jsx(Animated.View, {
|
|
207
|
+
style: [animatedStyle],
|
|
208
|
+
children: /*#__PURE__*/_jsx(View, {
|
|
209
|
+
style: [
|
|
210
|
+
// styles.container,
|
|
211
|
+
// { width, height },
|
|
212
|
+
],
|
|
213
|
+
children: /*#__PURE__*/_jsx(Canvas, {
|
|
214
|
+
ref: ref,
|
|
215
|
+
style: [{
|
|
216
|
+
width,
|
|
217
|
+
height
|
|
218
|
+
}
|
|
219
|
+
// aspectRatio: pixelWidth / pixelHeight,
|
|
220
|
+
// { transform: [{ scaleX: 1 / dpr }, { scaleY: 1 / dpr }] },
|
|
221
|
+
],
|
|
222
|
+
transparent: Platform.OS === 'ios'
|
|
223
|
+
// transparent={true}
|
|
224
|
+
})
|
|
225
|
+
})
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
// const styles = StyleSheet.create({
|
|
230
|
+
// container: { overflow: 'hidden' },
|
|
231
|
+
// });
|
|
232
|
+
//# sourceMappingURL=Content.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useEffect","useMemo","useRef","PixelRatio","Platform","View","Animated","SensorType","useAnimatedSensor","useAnimatedStyle","useDerivedValue","useSharedValue","Canvas","useGPUContext","d","bufferData","textureBindGroupLayout","useAnimationFrame","TypedBufferMap","createColorMaskBindGroup","createGlareBindGroup","createRotationValuesBindGroup","colorMaskFragment","newGlareFragment","attachBindGroups","blend","createMaskPipeline","createRainbowHoloPipeline","createHoloPipeline","createReverseHoloPipeline","getDefaultTarget","mainVertex","subscribeToOrientationChange","colorMaskToTyped","createColorMask","createGlareOptions","addV3d","clampV3d","componentsFromV3d","degToRad","divV3d","negateV2dY","rotateV2d","scaleV2d","scaleV3d","subtractV3d","transformV2d","zeroV3d","jsx","_jsx","Content","addHolo","addReverseHolo","addTextureMask","colorMaskOptions","glareOptions","height","imageTexture","maskTexture","root","touchPosition","useTouchControl","width","device","ref","context","presentationFormat","navigator","gpu","getPreferredCanvasFormat","renderRef","pixelRatio","get","size","x","y","pixelSize","v","Math","max","round","landscape","rotation","initialGravity","calibSum","calibCount","calibrated","gravitySensor","GRAVITY","interval","bufferMap","animatedStyle","rotX","value","rotY","transform","perspective","rotateX","rotateY","isLandscape","z","g","sensor","CALIBRATION_SAMPLES","alpha","scale","init","dg","m","Number","screen","smoothOffset","smooth","canvasElement","canvas","configure","format","alphaMode","sampler","createSampler","magFilter","minFilter","imageTextureBindGroup","createBindGroup","texture","unwrap","createView","rotationBuffer","addBuffer","vec3f","rotationBindGroup","glareBuffer","glareBindGroup","colorMaskBuffer","baseColor","colorMaskBindGroup","pipelineMap","glare","withVertex","withFragment","createPipeline","colorMask","mask","reverseHolo","holo","modifyBuffers","write","renderPipelines","view","getCurrentTexture","initialAttachment","clearValue","loadOp","storeOp","loadingAttachment","pairs","push","forEach","pipeline","attachment","withColorAttachment","draw","presentContext","present","current","style","children","transparent","OS"],"sourceRoot":"../../../src","sources":["components/Content.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { useEffect, useState } from 'react';
|
|
4
|
+
import { useDevice } from 'react-native-wgpu';
|
|
5
|
+
import { getOrInitRoot } from "../roots.js";
|
|
6
|
+
import { loadBitmap } from "../shaders/resourceManagement/textures.js";
|
|
7
|
+
import Content from "./Content.js";
|
|
8
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
9
|
+
export function Shine({
|
|
10
|
+
imageURI,
|
|
11
|
+
maskURI,
|
|
12
|
+
...props
|
|
13
|
+
}) {
|
|
14
|
+
const {
|
|
15
|
+
device
|
|
16
|
+
} = useDevice();
|
|
17
|
+
const root = device && getOrInitRoot(device);
|
|
18
|
+
const [imageTexture, setImageTexture] = useState();
|
|
19
|
+
const [maskTexture, setMaskTexture] = useState();
|
|
20
|
+
useEffect(() => {
|
|
21
|
+
if (root) loadBitmap(root, imageURI, setImageTexture);
|
|
22
|
+
}, [root, imageURI]);
|
|
23
|
+
useEffect(() => {
|
|
24
|
+
if (root && maskURI) loadBitmap(root, maskURI, setMaskTexture);
|
|
25
|
+
}, [root, imageURI, maskURI]);
|
|
26
|
+
return root && imageTexture && /*#__PURE__*/_jsx(Content, {
|
|
27
|
+
...props,
|
|
28
|
+
root: root,
|
|
29
|
+
imageTexture: imageTexture,
|
|
30
|
+
maskTexture: maskTexture
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=Shine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useEffect","useState","useDevice","getOrInitRoot","loadBitmap","Content","jsx","_jsx","Shine","imageURI","maskURI","props","device","root","imageTexture","setImageTexture","maskTexture","setMaskTexture"],"sourceRoot":"../../../src","sources":["components/Shine.tsx"],"mappings":";;AAAA,SAASA,SAAS,EAAEC,QAAQ,QAAQ,OAAO;AAC3C,SAASC,SAAS,QAAQ,mBAAmB;AAE7C,SAASC,aAAa,QAAQ,aAAU;AACxC,SAASC,UAAU,QAAQ,2CAAwC;AACnE,OAAOC,OAAO,MAA4B,cAAW;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAOtD,OAAO,SAASC,KAAKA,CAAC;EAAEC,QAAQ;EAAEC,OAAO;EAAE,GAAGC;AAAkB,CAAC,EAAE;EACjE,MAAM;IAAEC;EAAO,CAAC,GAAGV,SAAS,CAAC,CAAC;EAC9B,MAAMW,IAAI,GAAGD,MAAM,IAAIT,aAAa,CAACS,MAAM,CAAC;EAC5C,MAAM,CAACE,YAAY,EAAEC,eAAe,CAAC,GAAGd,QAAQ,CAAc,CAAC;EAC/D,MAAM,CAACe,WAAW,EAAEC,cAAc,CAAC,GAAGhB,QAAQ,CAAc,CAAC;EAE7DD,SAAS,CAAC,MAAM;IACd,IAAIa,IAAI,EAAET,UAAU,CAACS,IAAI,EAAEJ,QAAQ,EAAEM,eAAe,CAAC;EACvD,CAAC,EAAE,CAACF,IAAI,EAAEJ,QAAQ,CAAC,CAAC;EAEpBT,SAAS,CAAC,MAAM;IACd,IAAIa,IAAI,IAAIH,OAAO,EAAEN,UAAU,CAACS,IAAI,EAAEH,OAAO,EAAEO,cAAc,CAAC;EAChE,CAAC,EAAE,CAACJ,IAAI,EAAEJ,QAAQ,EAAEC,OAAO,CAAC,CAAC;EAE7B,OACEG,IAAI,IACJC,YAAY,iBACVP,IAAA,CAACF,OAAO;IAAA,GACFM,KAAK;IACTE,IAAI,EAAEA,IAAK;IACXC,YAAY,EAAEA,YAAa;IAC3BE,WAAW,EAAEA;EAAY,CAC1B,CACF;AAEL","ignoreList":[]}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { useEffect, useRef, useState } from 'react';
|
|
4
|
+
import { View, StyleSheet, Image, PixelRatio } from 'react-native';
|
|
5
|
+
import ViewShot, { captureRef } from 'react-native-view-shot';
|
|
6
|
+
import { sizeFromV2d, sizeToV2d } from "../utils/size.js";
|
|
7
|
+
import { areV2dEqual, multiplyV2d, round2D } from "../utils/vector.js";
|
|
8
|
+
import { Shine } from "./Shine.js";
|
|
9
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
10
|
+
export function ShineGroup({
|
|
11
|
+
children,
|
|
12
|
+
glareOptions,
|
|
13
|
+
colorMaskOptions,
|
|
14
|
+
maskURI,
|
|
15
|
+
touchPosition,
|
|
16
|
+
useTouchControl = false,
|
|
17
|
+
addTextureMask = false,
|
|
18
|
+
addHolo = false,
|
|
19
|
+
addReverseHolo = false
|
|
20
|
+
}) {
|
|
21
|
+
const viewShotRef = useRef(null);
|
|
22
|
+
const [capturedURI, setCapturedURI] = useState(null);
|
|
23
|
+
const [size, setSize] = useState(null);
|
|
24
|
+
const onInnerLayout = e => {
|
|
25
|
+
const layoutV2d = sizeToV2d(e.nativeEvent.layout);
|
|
26
|
+
if (!size || !areV2dEqual(size, layoutV2d)) {
|
|
27
|
+
setSize(layoutV2d);
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
// When we have a valid measured size, take a snapshot (after a short tick)
|
|
32
|
+
// Short timeout helps when children include images that finish layout a few ms later
|
|
33
|
+
useEffect(() => {
|
|
34
|
+
if (!viewShotRef.current || !size) return;
|
|
35
|
+
let mounted = true;
|
|
36
|
+
const t = setTimeout(async () => {
|
|
37
|
+
try {
|
|
38
|
+
const pixel = round2D(multiplyV2d(size, PixelRatio.get()));
|
|
39
|
+
const uri = await captureRef(viewShotRef, {
|
|
40
|
+
format: 'png',
|
|
41
|
+
quality: 1,
|
|
42
|
+
...sizeFromV2d(pixel)
|
|
43
|
+
});
|
|
44
|
+
if (mounted) setCapturedURI(uri);
|
|
45
|
+
} catch (err) {
|
|
46
|
+
console.warn('ShineGroup capture failed', err);
|
|
47
|
+
}
|
|
48
|
+
}, 50);
|
|
49
|
+
return () => {
|
|
50
|
+
mounted = false;
|
|
51
|
+
clearTimeout(t);
|
|
52
|
+
};
|
|
53
|
+
}, [size, children]);
|
|
54
|
+
return /*#__PURE__*/_jsxs(View, {
|
|
55
|
+
style: styles.container,
|
|
56
|
+
children: [/*#__PURE__*/_jsx(ViewShot, {
|
|
57
|
+
ref: viewShotRef,
|
|
58
|
+
options: {
|
|
59
|
+
format: 'png',
|
|
60
|
+
quality: 1
|
|
61
|
+
},
|
|
62
|
+
children: /*#__PURE__*/_jsx(View, {
|
|
63
|
+
onLayout: onInnerLayout,
|
|
64
|
+
style: styles.inner,
|
|
65
|
+
children: children
|
|
66
|
+
})
|
|
67
|
+
}), capturedURI && size && /*#__PURE__*/_jsx(Image, {
|
|
68
|
+
src: capturedURI,
|
|
69
|
+
...sizeFromV2d(size)
|
|
70
|
+
}), capturedURI && size && /*#__PURE__*/_jsx(Shine, {
|
|
71
|
+
...sizeFromV2d(size),
|
|
72
|
+
imageURI: capturedURI,
|
|
73
|
+
glareOptions: glareOptions,
|
|
74
|
+
colorMaskOptions: colorMaskOptions,
|
|
75
|
+
maskURI: maskURI,
|
|
76
|
+
touchPosition: touchPosition,
|
|
77
|
+
useTouchControl: useTouchControl,
|
|
78
|
+
addTextureMask: addTextureMask,
|
|
79
|
+
addReverseHolo: addReverseHolo,
|
|
80
|
+
addHolo: addHolo
|
|
81
|
+
})]
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
const styles = StyleSheet.create({
|
|
85
|
+
container: {
|
|
86
|
+
display: 'flex',
|
|
87
|
+
flexDirection: 'column',
|
|
88
|
+
gap: 10
|
|
89
|
+
},
|
|
90
|
+
inner: {}
|
|
91
|
+
});
|
|
92
|
+
//# sourceMappingURL=ShineGroup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useEffect","useRef","useState","View","StyleSheet","Image","PixelRatio","ViewShot","captureRef","sizeFromV2d","sizeToV2d","areV2dEqual","multiplyV2d","round2D","Shine","jsx","_jsx","jsxs","_jsxs","ShineGroup","children","glareOptions","colorMaskOptions","maskURI","touchPosition","useTouchControl","addTextureMask","addHolo","addReverseHolo","viewShotRef","capturedURI","setCapturedURI","size","setSize","onInnerLayout","e","layoutV2d","nativeEvent","layout","current","mounted","t","setTimeout","pixel","get","uri","format","quality","err","console","warn","clearTimeout","style","styles","container","ref","options","onLayout","inner","src","imageURI","create","display","flexDirection","gap"],"sourceRoot":"../../../src","sources":["components/ShineGroup.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import tgpu from 'typegpu';
|
|
4
|
+
import * as std from 'typegpu/std';
|
|
5
|
+
import * as d from 'typegpu/data';
|
|
6
|
+
export const WAVE_CALLBACKS = {
|
|
7
|
+
default: pos => {
|
|
8
|
+
'kernel';
|
|
9
|
+
|
|
10
|
+
const x = pos.x;
|
|
11
|
+
const y = pos.y;
|
|
12
|
+
const waveX = std.sin(x * 2.0);
|
|
13
|
+
const waveY = std.cos(y * 2.0);
|
|
14
|
+
return d.vec2f(waveX, waveY);
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
export const waveCallbackSlot = tgpu.slot();
|
|
18
|
+
export const waveCallbackFn = tgpu.fn([d.vec2f], d.vec2f);
|
|
19
|
+
//# sourceMappingURL=waveCallback.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["tgpu","std","d","WAVE_CALLBACKS","default","pos","x","y","waveX","sin","waveY","cos","vec2f","waveCallbackSlot","slot","waveCallbackFn","fn"],"sourceRoot":"../../../src","sources":["enums/waveCallback.ts"],"mappings":";;AAAA,OAAOA,IAAI,MAAuB,SAAS;AAC3C,OAAO,KAAKC,GAAG,MAAM,aAAa;AAClC,OAAO,KAAKC,CAAC,MAAM,cAAc;AAEjC,OAAO,MAAMC,cAAc,GAAG;EAC5BC,OAAO,EAAGC,GAAU,IAAK;IACvB,QAAQ;;IAER,MAAMC,CAAC,GAAGD,GAAG,CAACC,CAAC;IACf,MAAMC,CAAC,GAAGF,GAAG,CAACE,CAAC;IAEf,MAAMC,KAAK,GAAGP,GAAG,CAACQ,GAAG,CAACH,CAAC,GAAG,GAAG,CAAC;IAC9B,MAAMI,KAAK,GAAGT,GAAG,CAACU,GAAG,CAACJ,CAAC,GAAG,GAAG,CAAC;IAE9B,OAAOL,CAAC,CAACU,KAAK,CAACJ,KAAK,EAAEE,KAAK,CAAC;EAC9B;AACF,CAAU;AAEV,OAAO,MAAMG,gBAAgB,GAAGb,IAAI,CAACc,IAAI,CAAoC,CAAC;AAG9E,OAAO,MAAMC,cAAc,GAAGf,IAAI,CAACgB,EAAE,CAAC,CAACd,CAAC,CAACU,KAAK,CAAC,EAAEV,CAAC,CAACU,KAAK,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { useCallback, useEffect, useRef } from 'react';
|
|
4
|
+
export default function useAnimationFrame(cb) {
|
|
5
|
+
const requestId = useRef(null);
|
|
6
|
+
const onFrame = useCallback(function () {
|
|
7
|
+
cb();
|
|
8
|
+
requestId.current = requestAnimationFrame(onFrame);
|
|
9
|
+
}, [cb]);
|
|
10
|
+
useEffect(() => {
|
|
11
|
+
requestId.current = requestAnimationFrame(onFrame);
|
|
12
|
+
return () => {
|
|
13
|
+
requestId.current === null || cancelAnimationFrame(requestId.current);
|
|
14
|
+
};
|
|
15
|
+
}, [onFrame]);
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=useAnimationFrame.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useCallback","useEffect","useRef","useAnimationFrame","cb","requestId","onFrame","current","requestAnimationFrame","cancelAnimationFrame"],"sourceRoot":"../../../src","sources":["hooks/useAnimationFrame.ts"],"mappings":";;AAAA,SAASA,WAAW,EAAEC,SAAS,EAAEC,MAAM,QAAQ,OAAO;AAEtD,eAAe,SAASC,iBAAiBA,CAACC,EAAc,EAAE;EACxD,MAAMC,SAAS,GAAGH,MAAM,CAAS,IAAI,CAAC;EAEtC,MAAMI,OAAO,GAAGN,WAAW,CACzB,YAAY;IACVI,EAAE,CAAC,CAAC;IACJC,SAAS,CAACE,OAAO,GAAGC,qBAAqB,CAACF,OAAO,CAAC;EACpD,CAAC,EACD,CAACF,EAAE,CACL,CAAC;EAEDH,SAAS,CAAC,MAAM;IACdI,SAAS,CAACE,OAAO,GAAGC,qBAAqB,CAACF,OAAO,CAAC;IAElD,OAAO,MAAM;MACXD,SAAS,CAACE,OAAO,KAAK,IAAI,IAAIE,oBAAoB,CAACJ,SAAS,CAACE,OAAO,CAAC;IACvE,CAAC;EACH,CAAC,EAAE,CAACD,OAAO,CAAC,CAAC;AACf","ignoreList":[]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { useEffect, useState } from 'react';
|
|
4
|
+
import { subscribeToOrientationChange } from "../shaders/utils.js";
|
|
5
|
+
export const useOrientation = () => {
|
|
6
|
+
const [orientation, setOrientation] = useState();
|
|
7
|
+
useEffect(() => subscribeToOrientationChange(isLandscape => setOrientation(isLandscape ? 'LANDSCAPE' : 'PORTRAIT')), []);
|
|
8
|
+
return orientation;
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=useOrientation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useEffect","useState","subscribeToOrientationChange","useOrientation","orientation","setOrientation","isLandscape"],"sourceRoot":"../../../src","sources":["hooks/useOrientation.ts"],"mappings":";;AAAA,SAASA,SAAS,EAAEC,QAAQ,QAAQ,OAAO;AAC3C,SAASC,4BAA4B,QAAQ,qBAAkB;AAI/D,OAAO,MAAMC,cAAc,GAAGA,CAAA,KAAM;EAClC,MAAM,CAACC,WAAW,EAAEC,cAAc,CAAC,GAAGJ,QAAQ,CAAc,CAAC;EAE7DD,SAAS,CACP,MACEE,4BAA4B,CAAEI,WAAW,IACvCD,cAAc,CAACC,WAAW,GAAG,WAAW,GAAG,UAAU,CACvD,CAAC,EACH,EACF,CAAC;EAED,OAAOF,WAAW;AACpB,CAAC","ignoreList":[]}
|