react-native-shine 0.3.0 → 0.3.2

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.
Files changed (99) hide show
  1. package/README.md +21 -6
  2. package/lib/module/components/Content.js +232 -0
  3. package/lib/module/components/Content.js.map +1 -0
  4. package/lib/module/components/Shine.js +18 -254
  5. package/lib/module/components/Shine.js.map +1 -1
  6. package/lib/module/components/ShineGroup.js +11 -23
  7. package/lib/module/components/ShineGroup.js.map +1 -1
  8. package/lib/module/hooks/useAnimationFrame.js +17 -0
  9. package/lib/module/hooks/useAnimationFrame.js.map +1 -0
  10. package/lib/module/hooks/useOrientation.js +2 -8
  11. package/lib/module/hooks/useOrientation.js.map +1 -1
  12. package/lib/module/index.js +3 -2
  13. package/lib/module/index.js.map +1 -1
  14. package/lib/module/shaders/bindGroupLayouts.js +8 -8
  15. package/lib/module/shaders/bindGroupLayouts.js.map +1 -1
  16. package/lib/module/shaders/bindGroupUtils.js +18 -40
  17. package/lib/module/shaders/bindGroupUtils.js.map +1 -1
  18. package/lib/module/shaders/fragmentShaders/glareFragment.js +8 -7
  19. package/lib/module/shaders/fragmentShaders/glareFragment.js.map +1 -1
  20. package/lib/module/shaders/fragmentShaders/holoFragment.js +5 -10
  21. package/lib/module/shaders/fragmentShaders/holoFragment.js.map +1 -1
  22. package/lib/module/shaders/fragmentShaders/reverseHoloFragment.js +3 -3
  23. package/lib/module/shaders/fragmentShaders/reverseHoloFragment.js.map +1 -1
  24. package/lib/module/shaders/pipelineSetups.js +29 -43
  25. package/lib/module/shaders/pipelineSetups.js.map +1 -1
  26. package/lib/module/shaders/resourceManagement/textures.js +7 -0
  27. package/lib/module/shaders/resourceManagement/textures.js.map +1 -1
  28. package/lib/module/shaders/utils.js +8 -22
  29. package/lib/module/shaders/utils.js.map +1 -1
  30. package/lib/module/shaders/vertexShaders/mainRotationEffectVertex.js +2 -2
  31. package/lib/module/shaders/vertexShaders/mainRotationEffectVertex.js.map +1 -1
  32. package/lib/module/types/size.js +2 -0
  33. package/lib/module/types/size.js.map +1 -0
  34. package/lib/module/types/typeUtils.js +0 -14
  35. package/lib/module/types/typeUtils.js.map +1 -1
  36. package/lib/module/types/vector.js +2 -0
  37. package/lib/module/types/vector.js.map +1 -0
  38. package/lib/module/utils/size.js +25 -0
  39. package/lib/module/utils/size.js.map +1 -0
  40. package/lib/module/utils/vector.js +168 -0
  41. package/lib/module/utils/vector.js.map +1 -0
  42. package/lib/typescript/src/components/Content.d.ts +23 -0
  43. package/lib/typescript/src/components/Content.d.ts.map +1 -0
  44. package/lib/typescript/src/components/Shine.d.ts +3 -13
  45. package/lib/typescript/src/components/Shine.d.ts.map +1 -1
  46. package/lib/typescript/src/components/ShineGroup.d.ts +3 -5
  47. package/lib/typescript/src/components/ShineGroup.d.ts.map +1 -1
  48. package/lib/typescript/src/hooks/useAnimationFrame.d.ts +2 -0
  49. package/lib/typescript/src/hooks/useAnimationFrame.d.ts.map +1 -0
  50. package/lib/typescript/src/hooks/useOrientation.d.ts +3 -1
  51. package/lib/typescript/src/hooks/useOrientation.d.ts.map +1 -1
  52. package/lib/typescript/src/index.d.ts +4 -2
  53. package/lib/typescript/src/index.d.ts.map +1 -1
  54. package/lib/typescript/src/shaders/bindGroupLayouts.d.ts +9 -9
  55. package/lib/typescript/src/shaders/bindGroupLayouts.d.ts.map +1 -1
  56. package/lib/typescript/src/shaders/bindGroupUtils.d.ts +3 -3
  57. package/lib/typescript/src/shaders/bindGroupUtils.d.ts.map +1 -1
  58. package/lib/typescript/src/shaders/fragmentShaders/glareFragment.d.ts.map +1 -1
  59. package/lib/typescript/src/shaders/fragmentShaders/holoFragment.d.ts.map +1 -1
  60. package/lib/typescript/src/shaders/pipelineSetups.d.ts +7 -7
  61. package/lib/typescript/src/shaders/pipelineSetups.d.ts.map +1 -1
  62. package/lib/typescript/src/shaders/resourceManagement/textures.d.ts +2 -1
  63. package/lib/typescript/src/shaders/resourceManagement/textures.d.ts.map +1 -1
  64. package/lib/typescript/src/shaders/utils.d.ts +3 -4
  65. package/lib/typescript/src/shaders/utils.d.ts.map +1 -1
  66. package/lib/typescript/src/types/size.d.ts +5 -0
  67. package/lib/typescript/src/types/size.d.ts.map +1 -0
  68. package/lib/typescript/src/types/typeUtils.d.ts +1 -4
  69. package/lib/typescript/src/types/typeUtils.d.ts.map +1 -1
  70. package/lib/typescript/src/types/types.d.ts +3 -1
  71. package/lib/typescript/src/types/types.d.ts.map +1 -1
  72. package/lib/typescript/src/types/vector.d.ts +11 -0
  73. package/lib/typescript/src/types/vector.d.ts.map +1 -0
  74. package/lib/typescript/src/utils/size.d.ts +5 -0
  75. package/lib/typescript/src/utils/size.d.ts.map +1 -0
  76. package/lib/typescript/src/utils/vector.d.ts +33 -0
  77. package/lib/typescript/src/utils/vector.d.ts.map +1 -0
  78. package/package.json +8 -7
  79. package/src/components/Content.tsx +403 -0
  80. package/src/components/Shine.tsx +24 -466
  81. package/src/components/ShineGroup.tsx +17 -24
  82. package/src/hooks/useAnimationFrame.ts +21 -0
  83. package/src/hooks/useOrientation.ts +11 -13
  84. package/src/index.tsx +9 -1
  85. package/src/shaders/bindGroupLayouts.ts +11 -11
  86. package/src/shaders/bindGroupUtils.ts +31 -61
  87. package/src/shaders/fragmentShaders/glareFragment.ts +8 -7
  88. package/src/shaders/fragmentShaders/holoFragment.ts +5 -13
  89. package/src/shaders/fragmentShaders/reverseHoloFragment.ts +4 -4
  90. package/src/shaders/pipelineSetups.ts +54 -69
  91. package/src/shaders/resourceManagement/textures.ts +13 -1
  92. package/src/shaders/utils.ts +13 -27
  93. package/src/shaders/vertexShaders/mainRotationEffectVertex.ts +2 -2
  94. package/src/types/size.ts +4 -0
  95. package/src/types/typeUtils.ts +0 -28
  96. package/src/types/types.ts +11 -1
  97. package/src/types/vector.ts +13 -0
  98. package/src/utils/size.ts +12 -0
  99. package/src/utils/vector.ts +132 -0
package/README.md CHANGED
@@ -1,9 +1,11 @@
1
- # react-native-shine
1
+ ![image](./cover.png)
2
2
 
3
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
+ ![cardPreview](./cardPreview.gif)
8
+
7
9
  ---
8
10
 
9
11
  ## ⚙️ Installation
@@ -103,7 +105,7 @@ export default function Index() {
103
105
  }
104
106
  ```
105
107
 
106
- Coming soon: docs and examples.
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
- ## 📜 License
155
+ ## Shine is created by Software Mansion
154
156
 
155
- MIT © [VoidFrog](https://github.com/VoidFrog)
157
+ [![swm](https://logo.swmansion.com/logo?color=white&variant=desktop&width=150&tag=typegpu-github 'Software Mansion')](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
- Made with ❤️ and [create-react-native-library](https://github.com/callstack/react-native-builder-bob)
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":[]}
@@ -1,269 +1,33 @@
1
1
  "use strict";
2
2
 
3
- import { useEffect, useMemo, useRef, useState } from 'react';
4
- import { Canvas, useDevice, useGPUContext } from 'react-native-wgpu';
3
+ import { useEffect, useState } from 'react';
4
+ import { useDevice } from 'react-native-wgpu';
5
5
  import { getOrInitRoot } from "../roots.js";
6
- import mainVertex from "../shaders/vertexShaders/mainVertex.js";
7
- import getBitmapFromURI from "../shaders/resourceManagement/bitmaps.js";
8
- import { clamp, rotate2D, subscribeToOrientationChange, getAngleFromDimensions } from "../shaders/utils.js";
9
- import { glareOptionsBindGroupLayout, colorMaskBindGroupLayout, rotationValuesBindGroupLayout, textureBindGroupLayout, bufferData } from "../shaders/bindGroupLayouts.js";
10
- import Animated, { SensorType, useAnimatedSensor, useAnimatedStyle, useDerivedValue, useSharedValue } from 'react-native-reanimated';
11
- import * as d from 'typegpu/data';
12
- import { PixelRatio, Platform, View } from 'react-native';
13
- import { createGlareOptionsBindGroup, createColorMaskBindGroup, createRotationValuesBindGroup } from "../shaders/bindGroupUtils.js";
14
- import { createBindGroupPairs, createGlareOptions, createColorMask, colorMaskToTyped } from "../types/typeUtils.js";
15
- import { attachBindGroups, blend, createReverseHoloPipeline, createMaskPipeline, getDefaultTarget, pipelineRenderFunction, createRainbowHoloPipeline as createHoloPipeline } from "../shaders/pipelineSetups.js";
16
- import colorMaskFragment from "../shaders/fragmentShaders/colorMaskFragment.js";
17
- import { createTexture, loadTexture } from "../shaders/resourceManagement/textures.js";
18
- import { newGlareFragment } from "../shaders/fragmentShaders/glareFragment.js";
19
- import { TypedBufferMap } from "../shaders/resourceManagement/bufferManager.js";
6
+ import { loadBitmap } from "../shaders/resourceManagement/textures.js";
7
+ import Content from "./Content.js";
20
8
  import { jsx as _jsx } from "react/jsx-runtime";
21
9
  export function Shine({
22
- width,
23
- height,
24
10
  imageURI,
25
- glareOptions: glareOptions,
26
- colorMaskOptions,
27
11
  maskURI,
28
- touchPosition,
29
- useTouchControl = false,
30
- addTextureMask = false,
31
- addHolo = false,
32
- addReverseHolo = false
12
+ ...props
33
13
  }) {
34
14
  const {
35
- device = null
15
+ device
36
16
  } = useDevice();
37
- const root = device ? getOrInitRoot(device) : null;
38
- const {
39
- ref,
40
- context
41
- } = useGPUContext();
42
- const presentationFormat = navigator.gpu.getPreferredCanvasFormat();
43
- const frameRef = useRef(null);
44
-
45
- //changing canvas size to prevent blur
46
- const dpr = PixelRatio.get();
47
- const logicalWidth = width;
48
- const logicalHeight = height;
49
- const pixelWidth = Math.max(1, Math.round(logicalWidth * dpr));
50
- const pixelHeight = Math.max(1, Math.round(logicalHeight * dpr));
51
- const [imageTexture, setImageTexture] = useState(null);
52
- const [maskTexture, setMaskTexture] = useState(null);
53
- const orientationAngle = useSharedValue(0); // degrees
54
- const rotationShared = useSharedValue([0, 0, 0]); // final GPU offsets
55
-
56
- // Calibration shared values (UI thread)
57
- const initialGravity = useSharedValue([0, 0, 0]);
58
- const calibSum = useSharedValue([0, 0, 0]);
59
- const calibCount = useSharedValue(0);
60
- const calibrated = useSharedValue(false);
61
- const gravitySensor = useAnimatedSensor(SensorType.GRAVITY, {
62
- interval: 20
63
- });
64
- const bufferManager = useMemo(() => new TypedBufferMap(bufferData), []);
65
-
66
- //TODO: add once again, when the wgpu issues are fixed :3
67
-
68
- const animatedStyle = useAnimatedStyle(() => {
69
- // const rotX = rotationShared.value[0] * 10;
70
- // const rotY = rotationShared.value[1] * 10;
71
-
72
- return {
73
- transform: [{
74
- perspective: 300
75
- }
76
- // { rotateX: `${-rotX}deg` },
77
- // { rotateY: `${rotY}deg` },
78
- // { rotateZ: `${rotX * 5}deg` },
79
- ]
80
- };
81
- });
82
- // Subscribe to orientation changes and reset calibration on change
17
+ const root = device && getOrInitRoot(device);
18
+ const [imageTexture, setImageTexture] = useState();
19
+ const [maskTexture, setMaskTexture] = useState();
83
20
  useEffect(() => {
84
- orientationAngle.value = getAngleFromDimensions();
85
- const unsubscribe = subscribeToOrientationChange(angleDeg => {
86
- orientationAngle.value = angleDeg;
87
- });
88
- return () => unsubscribe();
89
- }, [orientationAngle]);
90
-
91
- // Calibration & mapping logic
92
- useDerivedValue(() => {
93
- 'worklet';
94
-
95
- if (useTouchControl) {
96
- rotationShared.value = touchPosition ? [...touchPosition.value, 0] : [0, 0, 0];
97
- return;
98
- }
99
-
100
- // console.log(orientationAngle.value);
101
- const v = gravitySensor.sensor?.value ?? gravitySensor.sensor.value ?? {
102
- x: 0,
103
- y: 0,
104
- z: 0
105
- };
106
- const gx = v.x ?? 0;
107
- const gy = v.y ?? 0;
108
- const gz = v.z ?? 0;
109
- const CALIBRATION_SAMPLES = 40;
110
- const alpha = 0.15; // smoothing
111
- const scale = 0.6;
112
- if (!calibrated.value) {
113
- // accumulate baseline in device coordinates
114
- const s = calibSum.value;
115
- const c = calibCount.value + 1;
116
- calibSum.value = [s[0] + gx, s[1] + gy, s[2] + gz];
117
- calibCount.value = c;
118
- if (c >= CALIBRATION_SAMPLES) {
119
- const avg = calibSum.value;
120
- initialGravity.value = [avg[0] / c, avg[1] / c, avg[2] / c];
121
- calibrated.value = true;
122
- }
123
- rotationShared.value = [0, 0, 0];
124
- return;
125
- }
126
- const init = initialGravity.value;
127
- const dx = gx - init[0];
128
- const dy = gy - init[1];
129
- const dz = gz - init[2];
130
-
131
- // Rotate into screen coordinates so offsets auto-swap with orientation
132
- const [mx, my] = rotate2D([dx, dy], -orientationAngle.value);
133
- const screenX = mx;
134
- const screenY = -my;
135
- const prev = rotationShared.value;
136
- const smoothX = prev[0] * (1 - alpha) + screenX * alpha;
137
- const smoothY = prev[1] * (1 - alpha) + screenY * alpha;
138
- const smoothZ = prev[2] * (1 - alpha) + dz * alpha;
139
- if (orientationAngle.value === 90) {
140
- rotationShared.value = [clamp(smoothY * scale, -1, 1), clamp(-smoothX * scale, -1, 1), clamp(smoothZ * scale, -1, 1)];
141
- } else {
142
- rotationShared.value = [clamp(smoothX * scale, -1, 1), clamp(smoothY * scale, -1, 1), clamp(smoothZ * scale, -1, 1)];
143
- }
144
- });
145
-
146
- // Resource setup
21
+ if (root) loadBitmap(root, imageURI, setImageTexture);
22
+ }, [root, imageURI]);
147
23
  useEffect(() => {
148
- if (!root || !device || !context) return;
149
- (async () => {
150
- const bitmap = await getBitmapFromURI(imageURI);
151
- const texture = await createTexture(root, bitmap);
152
- setImageTexture(texture);
153
- await loadTexture(root, bitmap, texture);
154
- if (!maskURI) return;
155
- const maskBitmap = await getBitmapFromURI(maskURI);
156
- const maskTex = await createTexture(root, maskBitmap);
157
- setMaskTexture(maskTex);
158
- await loadTexture(root, maskBitmap, maskTex);
159
- })();
160
- }, [root, device, context, imageURI, maskURI]);
161
-
162
- // Render loop
163
- useEffect(() => {
164
- if (!root || !device || !context || !imageTexture) return;
165
-
166
- //this sets the underlying resolution of the canvas to prevent blurriness
167
- const canvasElement = context.canvas;
168
- if (canvasElement && canvasElement.width !== pixelWidth && canvasElement.height !== pixelHeight) {
169
- canvasElement.width = pixelWidth;
170
- canvasElement.height = pixelHeight;
171
- }
172
- context.configure({
173
- device,
174
- format: presentationFormat,
175
- alphaMode: 'premultiplied'
176
- });
177
- const sampler = device.createSampler({
178
- magFilter: 'linear',
179
- minFilter: 'linear'
180
- });
181
- const imageTextureBindGroup = root.createBindGroup(textureBindGroupLayout, {
182
- texture: root.unwrap(imageTexture).createView(),
183
- sampler: sampler
184
- });
185
- const rotationBuffer = bufferManager.addBuffer(root, 'rotationBuffer', d.vec3f(0.0));
186
- const rotationBindGroup = createRotationValuesBindGroup(root, rotationBuffer);
187
- const glareOptionsBuffer = bufferManager.addBuffer(root, 'glareBuffer', createGlareOptions(glareOptions ?? {}));
188
- const glareOptionsBindGroup = createGlareOptionsBindGroup(root, glareOptionsBuffer);
189
- const colorMaskBuffer = bufferManager.addBuffer(root, 'colorMaskBuffer', colorMaskToTyped(createColorMask(colorMaskOptions ?? {
190
- baseColor: [-20, -20, -20]
191
- })));
192
- const colorMaskBindGroup = createColorMaskBindGroup(root, colorMaskBuffer);
193
- const glareBGP = createBindGroupPairs([textureBindGroupLayout, rotationValuesBindGroupLayout, glareOptionsBindGroupLayout, colorMaskBindGroupLayout], [imageTextureBindGroup, rotationBindGroup, glareOptionsBindGroup, colorMaskBindGroup]);
194
- const colorMaskBGP = createBindGroupPairs([textureBindGroupLayout, colorMaskBindGroupLayout, rotationValuesBindGroupLayout], [imageTextureBindGroup, colorMaskBindGroup, rotationBindGroup]);
195
- let glarePipeline = root['~unstable'].withVertex(mainVertex, {}).withFragment(newGlareFragment, getDefaultTarget(presentationFormat)).createPipeline();
196
- glarePipeline = attachBindGroups(glarePipeline, glareBGP);
197
- let colorMaskPipeline = root['~unstable'].withVertex(mainVertex, {}).withFragment(colorMaskFragment, getDefaultTarget(presentationFormat, blend)).createPipeline();
198
- colorMaskPipeline = attachBindGroups(colorMaskPipeline, colorMaskBGP);
199
-
200
- //optional pipeline - mask
201
- const maskPipeline = createMaskPipeline(root, maskTexture, createBindGroupPairs([textureBindGroupLayout, rotationValuesBindGroupLayout], [imageTextureBindGroup, rotationBindGroup]), sampler, presentationFormat);
202
- const reverseHoloBGP = createBindGroupPairs([textureBindGroupLayout, rotationValuesBindGroupLayout, glareOptionsBindGroupLayout], [imageTextureBindGroup, rotationBindGroup, glareOptionsBindGroup]);
203
- const reverseHoloPipeline = createReverseHoloPipeline(root, maskTexture, reverseHoloBGP, sampler, presentationFormat);
204
- const holoBGP = createBindGroupPairs([rotationValuesBindGroupLayout], [rotationBindGroup]);
205
- const holoPipeline = createHoloPipeline(root, imageTexture, holoBGP, sampler, presentationFormat);
206
- const pipelines = [glarePipeline];
207
- if (addTextureMask && maskPipeline) pipelines.push(maskPipeline);
208
- if (addReverseHolo && reverseHoloPipeline) pipelines.push(reverseHoloPipeline);
209
- if (addHolo && holoPipeline) pipelines.push(holoPipeline);
210
- if (colorMaskOptions) pipelines.push(colorMaskPipeline);
211
- const rot = d.vec3f(0.0);
212
- let view;
213
- let initialAttachment;
214
- let loadingAttachment;
215
- const isInSinglePass = false;
216
- const render = () => {
217
- rot[0] = rotationShared.value[0];
218
- rot[1] = rotationShared.value[1];
219
- rot[2] = rotationShared.value[2];
220
- rotationBuffer.write(rot);
221
- view = context.getCurrentTexture().createView();
222
- initialAttachment = {
223
- view: view,
224
- clearValue: [0, 0, 0, 0],
225
- loadOp: 'clear',
226
- storeOp: 'store'
227
- };
228
- loadingAttachment = {
229
- view: view,
230
- clearValue: [0, 0, 0, 0],
231
- loadOp: 'load',
232
- storeOp: 'store'
233
- };
234
- pipelineRenderFunction(root, pipelines, [initialAttachment, loadingAttachment, loadingAttachment, loadingAttachment, loadingAttachment], view, isInSinglePass);
235
- context.present();
236
- frameRef.current = requestAnimationFrame(render);
237
- };
238
- frameRef.current = requestAnimationFrame(render);
239
- return () => {
240
- if (frameRef.current) cancelAnimationFrame(frameRef.current);
241
- };
242
- }, [device, context, root, presentationFormat, imageTexture, maskTexture, rotationShared, bufferManager, glareOptions, colorMaskOptions, maskURI, addHolo, addReverseHolo, addTextureMask, pixelWidth, pixelHeight]);
243
- return /*#__PURE__*/_jsx(Animated.View, {
244
- style: [animatedStyle],
245
- children: /*#__PURE__*/_jsx(View, {
246
- style: [
247
- // styles.container,
248
- // { width: logicalWidth, height: logicalHeight },
249
- ],
250
- children: /*#__PURE__*/_jsx(Canvas, {
251
- ref: ref,
252
- style: [{
253
- width: logicalWidth,
254
- height: logicalHeight
255
- }
256
- // aspectRatio: pixelWidth / pixelHeight,
257
- // { transform: [{ scaleX: 1 / dpr }, { scaleY: 1 / dpr }] },
258
- ],
259
- transparent: Platform.OS === 'ios'
260
- // transparent={true}
261
- })
262
- })
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
263
31
  });
264
32
  }
265
-
266
- // const styles = StyleSheet.create({
267
- // container: { overflow: 'hidden' },
268
- // });
269
33
  //# sourceMappingURL=Shine.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["useEffect","useMemo","useRef","useState","Canvas","useDevice","useGPUContext","getOrInitRoot","mainVertex","getBitmapFromURI","clamp","rotate2D","subscribeToOrientationChange","getAngleFromDimensions","glareOptionsBindGroupLayout","colorMaskBindGroupLayout","rotationValuesBindGroupLayout","textureBindGroupLayout","bufferData","Animated","SensorType","useAnimatedSensor","useAnimatedStyle","useDerivedValue","useSharedValue","d","PixelRatio","Platform","View","createGlareOptionsBindGroup","createColorMaskBindGroup","createRotationValuesBindGroup","createBindGroupPairs","createGlareOptions","createColorMask","colorMaskToTyped","attachBindGroups","blend","createReverseHoloPipeline","createMaskPipeline","getDefaultTarget","pipelineRenderFunction","createRainbowHoloPipeline","createHoloPipeline","colorMaskFragment","createTexture","loadTexture","newGlareFragment","TypedBufferMap","jsx","_jsx","Shine","width","height","imageURI","glareOptions","colorMaskOptions","maskURI","touchPosition","useTouchControl","addTextureMask","addHolo","addReverseHolo","device","root","ref","context","presentationFormat","navigator","gpu","getPreferredCanvasFormat","frameRef","dpr","get","logicalWidth","logicalHeight","pixelWidth","Math","max","round","pixelHeight","imageTexture","setImageTexture","maskTexture","setMaskTexture","orientationAngle","rotationShared","initialGravity","calibSum","calibCount","calibrated","gravitySensor","GRAVITY","interval","bufferManager","animatedStyle","transform","perspective","value","unsubscribe","angleDeg","v","sensor","x","y","z","gx","gy","gz","CALIBRATION_SAMPLES","alpha","scale","s","c","avg","init","dx","dy","dz","mx","my","screenX","screenY","prev","smoothX","smoothY","smoothZ","bitmap","texture","maskBitmap","maskTex","canvasElement","canvas","configure","format","alphaMode","sampler","createSampler","magFilter","minFilter","imageTextureBindGroup","createBindGroup","unwrap","createView","rotationBuffer","addBuffer","vec3f","rotationBindGroup","glareOptionsBuffer","glareOptionsBindGroup","colorMaskBuffer","baseColor","colorMaskBindGroup","glareBGP","colorMaskBGP","glarePipeline","withVertex","withFragment","createPipeline","colorMaskPipeline","maskPipeline","reverseHoloBGP","reverseHoloPipeline","holoBGP","holoPipeline","pipelines","push","rot","view","initialAttachment","loadingAttachment","isInSinglePass","render","write","getCurrentTexture","clearValue","loadOp","storeOp","present","current","requestAnimationFrame","cancelAnimationFrame","style","children","transparent","OS"],"sourceRoot":"../../../src","sources":["components/Shine.tsx"],"mappings":"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","ignoreList":[]}
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":[]}