react-native-shine 0.2.2 → 0.3.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.
Files changed (111) hide show
  1. package/README.md +1 -1
  2. package/lib/module/components/Shine.js +269 -0
  3. package/lib/module/components/Shine.js.map +1 -0
  4. package/lib/module/components/ShineGroup.js +104 -0
  5. package/lib/module/components/ShineGroup.js.map +1 -0
  6. package/lib/module/enums/waveCallback.js +19 -0
  7. package/lib/module/enums/waveCallback.js.map +1 -0
  8. package/lib/module/hooks/useOrientation.js +16 -0
  9. package/lib/module/hooks/useOrientation.js.map +1 -0
  10. package/lib/module/index.js +5 -219
  11. package/lib/module/index.js.map +1 -1
  12. package/lib/module/shaders/bindGroupLayouts.js +40 -5
  13. package/lib/module/shaders/bindGroupLayouts.js.map +1 -1
  14. package/lib/module/shaders/bindGroupUtils.js +27 -12
  15. package/lib/module/shaders/bindGroupUtils.js.map +1 -1
  16. package/lib/module/shaders/fragmentShaders/colorMaskFragment.js +2 -2
  17. package/lib/module/shaders/fragmentShaders/colorMaskFragment.js.map +1 -1
  18. package/lib/module/shaders/fragmentShaders/glareFragment.js +114 -0
  19. package/lib/module/shaders/fragmentShaders/glareFragment.js.map +1 -0
  20. package/lib/module/shaders/fragmentShaders/holoFragment.js +33 -0
  21. package/lib/module/shaders/fragmentShaders/holoFragment.js.map +1 -0
  22. package/lib/module/shaders/fragmentShaders/maskFragment.js +20 -0
  23. package/lib/module/shaders/fragmentShaders/maskFragment.js.map +1 -0
  24. package/lib/module/shaders/fragmentShaders/reverseHoloFragment.js +46 -0
  25. package/lib/module/shaders/fragmentShaders/reverseHoloFragment.js.map +1 -0
  26. package/lib/module/shaders/pipelineSetups.js +82 -13
  27. package/lib/module/shaders/pipelineSetups.js.map +1 -1
  28. package/lib/module/shaders/{resourceManagement.js → resourceManagement/bitmaps.js} +2 -1
  29. package/lib/module/shaders/resourceManagement/bitmaps.js.map +1 -0
  30. package/lib/module/shaders/resourceManagement/bufferManager.js +46 -0
  31. package/lib/module/shaders/resourceManagement/bufferManager.js.map +1 -0
  32. package/lib/module/shaders/resourceManagement/textures.js +17 -0
  33. package/lib/module/shaders/resourceManagement/textures.js.map +1 -0
  34. package/lib/module/shaders/tgpuUtils.js +19 -1
  35. package/lib/module/shaders/tgpuUtils.js.map +1 -1
  36. package/lib/module/shaders/utils.js +0 -14
  37. package/lib/module/shaders/utils.js.map +1 -1
  38. package/lib/module/shaders/vertexShaders/mainRotationEffectVertex.js +47 -0
  39. package/lib/module/shaders/vertexShaders/mainRotationEffectVertex.js.map +1 -0
  40. package/lib/module/types/typeUtils.js +17 -5
  41. package/lib/module/types/typeUtils.js.map +1 -1
  42. package/lib/typescript/src/components/Shine.d.ts +17 -0
  43. package/lib/typescript/src/components/Shine.d.ts.map +1 -0
  44. package/lib/typescript/src/components/ShineGroup.d.ts +8 -0
  45. package/lib/typescript/src/components/ShineGroup.d.ts.map +1 -0
  46. package/lib/typescript/src/enums/waveCallback.d.ts +9 -0
  47. package/lib/typescript/src/enums/waveCallback.d.ts.map +1 -0
  48. package/lib/typescript/src/hooks/useOrientation.d.ts +2 -0
  49. package/lib/typescript/src/hooks/useOrientation.d.ts.map +1 -0
  50. package/lib/typescript/src/index.d.ts +6 -11
  51. package/lib/typescript/src/index.d.ts.map +1 -1
  52. package/lib/typescript/src/shaders/bindGroupLayouts.d.ts +44 -6
  53. package/lib/typescript/src/shaders/bindGroupLayouts.d.ts.map +1 -1
  54. package/lib/typescript/src/shaders/bindGroupUtils.d.ts +8 -8
  55. package/lib/typescript/src/shaders/bindGroupUtils.d.ts.map +1 -1
  56. package/lib/typescript/src/shaders/fragmentShaders/glareFragment.d.ts +8 -0
  57. package/lib/typescript/src/shaders/fragmentShaders/glareFragment.d.ts.map +1 -0
  58. package/lib/typescript/src/shaders/fragmentShaders/holoFragment.d.ts +5 -0
  59. package/lib/typescript/src/shaders/fragmentShaders/holoFragment.d.ts.map +1 -0
  60. package/lib/typescript/src/shaders/fragmentShaders/maskFragment.d.ts +6 -0
  61. package/lib/typescript/src/shaders/fragmentShaders/maskFragment.d.ts.map +1 -0
  62. package/lib/typescript/src/shaders/fragmentShaders/reverseHoloFragment.d.ts +5 -0
  63. package/lib/typescript/src/shaders/fragmentShaders/reverseHoloFragment.d.ts.map +1 -0
  64. package/lib/typescript/src/shaders/pipelineSetups.d.ts +9 -4
  65. package/lib/typescript/src/shaders/pipelineSetups.d.ts.map +1 -1
  66. package/lib/typescript/src/shaders/{resourceManagement.d.ts → resourceManagement/bitmaps.d.ts} +1 -1
  67. package/lib/typescript/src/shaders/resourceManagement/bitmaps.d.ts.map +1 -0
  68. package/lib/typescript/src/shaders/resourceManagement/bufferManager.d.ts +28 -0
  69. package/lib/typescript/src/shaders/resourceManagement/bufferManager.d.ts.map +1 -0
  70. package/lib/typescript/src/shaders/resourceManagement/textures.d.ts +7 -0
  71. package/lib/typescript/src/shaders/resourceManagement/textures.d.ts.map +1 -0
  72. package/lib/typescript/src/shaders/tgpuUtils.d.ts +5 -1
  73. package/lib/typescript/src/shaders/tgpuUtils.d.ts.map +1 -1
  74. package/lib/typescript/src/shaders/utils.d.ts +1 -7
  75. package/lib/typescript/src/shaders/utils.d.ts.map +1 -1
  76. package/lib/typescript/src/shaders/vertexShaders/mainRotationEffectVertex.d.ts +6 -0
  77. package/lib/typescript/src/shaders/vertexShaders/mainRotationEffectVertex.d.ts.map +1 -0
  78. package/lib/typescript/src/types/typeUtils.d.ts +3 -2
  79. package/lib/typescript/src/types/typeUtils.d.ts.map +1 -1
  80. package/lib/typescript/src/types/types.d.ts +7 -2
  81. package/lib/typescript/src/types/types.d.ts.map +1 -1
  82. package/package.json +4 -3
  83. package/scripts/postinstall.js +16 -17
  84. package/src/components/Shine.tsx +480 -0
  85. package/src/components/ShineGroup.tsx +107 -0
  86. package/src/enums/waveCallback.ts +22 -0
  87. package/src/hooks/useOrientation.ts +20 -0
  88. package/src/index.tsx +6 -322
  89. package/src/shaders/bindGroupLayouts.ts +43 -6
  90. package/src/shaders/bindGroupUtils.ts +34 -19
  91. package/src/shaders/fragmentShaders/colorMaskFragment.ts +2 -2
  92. package/src/shaders/fragmentShaders/glareFragment.ts +142 -0
  93. package/src/shaders/fragmentShaders/holoFragment.ts +43 -0
  94. package/src/shaders/fragmentShaders/maskFragment.ts +31 -0
  95. package/src/shaders/fragmentShaders/reverseHoloFragment.ts +71 -0
  96. package/src/shaders/pipelineSetups.ts +161 -14
  97. package/src/shaders/{resourceManagement.ts → resourceManagement/bitmaps.ts} +1 -0
  98. package/src/shaders/resourceManagement/bufferManager.ts +82 -0
  99. package/src/shaders/resourceManagement/textures.ts +30 -0
  100. package/src/shaders/tgpuUtils.ts +36 -1
  101. package/src/shaders/utils.ts +0 -30
  102. package/src/shaders/vertexShaders/mainRotationEffectVertex.ts +76 -0
  103. package/src/types/typeUtils.ts +22 -8
  104. package/src/types/types.ts +8 -2
  105. package/lib/module/shaders/fragmentShaders/bloomFragment.js +0 -66
  106. package/lib/module/shaders/fragmentShaders/bloomFragment.js.map +0 -1
  107. package/lib/module/shaders/resourceManagement.js.map +0 -1
  108. package/lib/typescript/src/shaders/fragmentShaders/bloomFragment.d.ts +0 -6
  109. package/lib/typescript/src/shaders/fragmentShaders/bloomFragment.d.ts.map +0 -1
  110. package/lib/typescript/src/shaders/resourceManagement.d.ts.map +0 -1
  111. package/src/shaders/fragmentShaders/bloomFragment.ts +0 -83
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # react-native-shine
2
2
 
3
- Fast and efficient way to add interactive GPU-based shader effects to your React Native apps using [TypeGPU](https://github.com/type-gpu/type-gpu) and [WebGPU](https://github.com/wojtus7/react-native-wgpu).
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
 
@@ -0,0 +1,269 @@
1
+ "use strict";
2
+
3
+ import { useEffect, useMemo, useRef, useState } from 'react';
4
+ import { Canvas, useDevice, useGPUContext } from 'react-native-wgpu';
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";
20
+ import { jsx as _jsx } from "react/jsx-runtime";
21
+ export function Shine({
22
+ width,
23
+ height,
24
+ imageURI,
25
+ glareOptions: glareOptions,
26
+ colorMaskOptions,
27
+ maskURI,
28
+ touchPosition,
29
+ useTouchControl = false,
30
+ addTextureMask = false,
31
+ addHolo = false,
32
+ addReverseHolo = false
33
+ }) {
34
+ const {
35
+ device = null
36
+ } = 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
83
+ 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
147
+ 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
+ })
263
+ });
264
+ }
265
+
266
+ // const styles = StyleSheet.create({
267
+ // container: { overflow: 'hidden' },
268
+ // });
269
+ //# sourceMappingURL=Shine.js.map
@@ -0,0 +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":[]}
@@ -0,0 +1,104 @@
1
+ "use strict";
2
+
3
+ import React, { 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 { Shine } from "./Shine.js";
7
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
8
+ export function ShineGroup({
9
+ children,
10
+ glareOptions,
11
+ colorMaskOptions,
12
+ maskURI,
13
+ touchPosition,
14
+ useTouchControl = false,
15
+ addTextureMask = false,
16
+ addHolo = false,
17
+ addReverseHolo = false
18
+ }) {
19
+ const viewShotRef = useRef(null);
20
+ const [capturedURI, setCapturedURI] = useState(null);
21
+ const [size, setSize] = useState(null);
22
+ const onInnerLayout = e => {
23
+ const {
24
+ width,
25
+ height
26
+ } = e.nativeEvent.layout;
27
+ if (width > 0 && height > 0) {
28
+ if (!size || size.width !== width || size.height !== height) {
29
+ setSize({
30
+ width,
31
+ height
32
+ });
33
+ }
34
+ }
35
+ console.log('onInnerLayout', width, height);
36
+ };
37
+
38
+ // When we have a valid measured size, take a snapshot (after a short tick)
39
+ // Short timeout helps when children include images that finish layout a few ms later
40
+ useEffect(() => {
41
+ if (!viewShotRef.current || !size) return;
42
+ let mounted = true;
43
+ const t = setTimeout(async () => {
44
+ try {
45
+ const dpr = PixelRatio.get();
46
+ const pixelW = Math.round(size.width * dpr);
47
+ const pixelH = Math.round(size.height * dpr);
48
+ const uri = await captureRef(viewShotRef.current, {
49
+ format: 'png',
50
+ quality: 1,
51
+ width: pixelW,
52
+ height: pixelH
53
+ });
54
+ if (mounted) setCapturedURI(uri);
55
+ } catch (err) {
56
+ console.warn('ShineGroup capture failed', err);
57
+ }
58
+ }, 50);
59
+ return () => {
60
+ mounted = false;
61
+ clearTimeout(t);
62
+ };
63
+ }, [size, children]);
64
+ return /*#__PURE__*/_jsxs(View, {
65
+ style: styles.container,
66
+ children: [/*#__PURE__*/_jsx(ViewShot, {
67
+ ref: viewShotRef,
68
+ options: {
69
+ format: 'png',
70
+ quality: 1
71
+ },
72
+ children: /*#__PURE__*/_jsx(View, {
73
+ onLayout: onInnerLayout,
74
+ style: styles.inner,
75
+ children: children
76
+ })
77
+ }), capturedURI && size && /*#__PURE__*/_jsx(Image, {
78
+ src: capturedURI,
79
+ width: size.width,
80
+ height: size.height
81
+ }), capturedURI && size && /*#__PURE__*/_jsx(Shine, {
82
+ width: size.width,
83
+ height: size.height,
84
+ imageURI: capturedURI,
85
+ glareOptions: glareOptions,
86
+ colorMaskOptions: colorMaskOptions,
87
+ maskURI: maskURI,
88
+ touchPosition: touchPosition,
89
+ useTouchControl: useTouchControl,
90
+ addTextureMask: addTextureMask,
91
+ addReverseHolo: addReverseHolo,
92
+ addHolo: addHolo
93
+ })]
94
+ });
95
+ }
96
+ const styles = StyleSheet.create({
97
+ container: {
98
+ display: 'flex',
99
+ flexDirection: 'column',
100
+ gap: 10
101
+ },
102
+ inner: {}
103
+ });
104
+ //# sourceMappingURL=ShineGroup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","useEffect","useRef","useState","View","StyleSheet","Image","PixelRatio","ViewShot","captureRef","Shine","jsx","_jsx","jsxs","_jsxs","ShineGroup","children","glareOptions","colorMaskOptions","maskURI","touchPosition","useTouchControl","addTextureMask","addHolo","addReverseHolo","viewShotRef","capturedURI","setCapturedURI","size","setSize","onInnerLayout","e","width","height","nativeEvent","layout","console","log","current","mounted","t","setTimeout","dpr","get","pixelW","Math","round","pixelH","uri","format","quality","err","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,16 @@
1
+ "use strict";
2
+
3
+ import { useEffect, useState } from 'react';
4
+ import { getAngleFromDimensions, subscribeToOrientationChange } from "../shaders/utils.js";
5
+ export const useOrientation = () => {
6
+ const [orientation, setOrientation] = useState();
7
+ useEffect(() => {
8
+ setOrientation(getAngleFromDimensions() === 0 ? 'PORTRAIT' : 'LANDSCAPE');
9
+ const unsubscribe = subscribeToOrientationChange(angleDeg => {
10
+ setOrientation(angleDeg === 0 ? 'PORTRAIT' : 'LANDSCAPE');
11
+ });
12
+ return () => unsubscribe();
13
+ }, []);
14
+ return orientation;
15
+ };
16
+ //# sourceMappingURL=useOrientation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useEffect","useState","getAngleFromDimensions","subscribeToOrientationChange","useOrientation","orientation","setOrientation","unsubscribe","angleDeg"],"sourceRoot":"../../../src","sources":["hooks/useOrientation.ts"],"mappings":";;AAAA,SAASA,SAAS,EAAEC,QAAQ,QAAQ,OAAO;AAC3C,SACEC,sBAAsB,EACtBC,4BAA4B,QACvB,qBAAkB;AAEzB,OAAO,MAAMC,cAAc,GAAGA,CAAA,KAAM;EAClC,MAAM,CAACC,WAAW,EAAEC,cAAc,CAAC,GAAGL,QAAQ,CAAS,CAAC;EAExDD,SAAS,CAAC,MAAM;IACdM,cAAc,CAACJ,sBAAsB,CAAC,CAAC,KAAK,CAAC,GAAG,UAAU,GAAG,WAAW,CAAC;IACzE,MAAMK,WAAW,GAAGJ,4BAA4B,CAAEK,QAAQ,IAAK;MAC7DF,cAAc,CAACE,QAAQ,KAAK,CAAC,GAAG,UAAU,GAAG,WAAW,CAAC;IAC3D,CAAC,CAAC;IAEF,OAAO,MAAMD,WAAW,CAAC,CAAC;EAC5B,CAAC,EAAE,EAAE,CAAC;EAEN,OAAOF,WAAW;AACpB,CAAC","ignoreList":[]}