react-native-shine 0.0.0 → 0.2.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 (70) hide show
  1. package/LICENSE +20 -0
  2. package/README.md +35 -0
  3. package/lib/module/index.js +182 -0
  4. package/lib/module/index.js.map +1 -0
  5. package/lib/module/package.json +1 -0
  6. package/lib/module/roots.js +16 -0
  7. package/lib/module/roots.js.map +1 -0
  8. package/lib/module/shaders/bindGroupLayouts.js +45 -0
  9. package/lib/module/shaders/bindGroupLayouts.js.map +1 -0
  10. package/lib/module/shaders/bindGroupUtils.js +45 -0
  11. package/lib/module/shaders/bindGroupUtils.js.map +1 -0
  12. package/lib/module/shaders/fragmentShaders/bloomFragment.js +66 -0
  13. package/lib/module/shaders/fragmentShaders/bloomFragment.js.map +1 -0
  14. package/lib/module/shaders/fragmentShaders/colorMaskFragment.js +28 -0
  15. package/lib/module/shaders/fragmentShaders/colorMaskFragment.js.map +1 -0
  16. package/lib/module/shaders/pipelineSetups.js +26 -0
  17. package/lib/module/shaders/pipelineSetups.js.map +1 -0
  18. package/lib/module/shaders/resourceManagement.js +19 -0
  19. package/lib/module/shaders/resourceManagement.js.map +1 -0
  20. package/lib/module/shaders/tgpuUtils.js +38 -0
  21. package/lib/module/shaders/tgpuUtils.js.map +1 -0
  22. package/lib/module/shaders/utils.js +65 -0
  23. package/lib/module/shaders/utils.js.map +1 -0
  24. package/lib/module/shaders/vertexShaders/mainVertex.js +35 -0
  25. package/lib/module/shaders/vertexShaders/mainVertex.js.map +1 -0
  26. package/lib/module/types/typeUtils.js +92 -0
  27. package/lib/module/types/typeUtils.js.map +1 -0
  28. package/lib/module/types/types.js +4 -0
  29. package/lib/module/types/types.js.map +1 -0
  30. package/lib/typescript/package.json +1 -0
  31. package/lib/typescript/src/index.d.ts +12 -0
  32. package/lib/typescript/src/index.d.ts.map +1 -0
  33. package/lib/typescript/src/roots.d.ts +4 -0
  34. package/lib/typescript/src/roots.d.ts.map +1 -0
  35. package/lib/typescript/src/shaders/bindGroupLayouts.d.ts +57 -0
  36. package/lib/typescript/src/shaders/bindGroupLayouts.d.ts.map +1 -0
  37. package/lib/typescript/src/shaders/bindGroupUtils.d.ts +53 -0
  38. package/lib/typescript/src/shaders/bindGroupUtils.d.ts.map +1 -0
  39. package/lib/typescript/src/shaders/fragmentShaders/bloomFragment.d.ts +6 -0
  40. package/lib/typescript/src/shaders/fragmentShaders/bloomFragment.d.ts.map +1 -0
  41. package/lib/typescript/src/shaders/fragmentShaders/colorMaskFragment.d.ts +6 -0
  42. package/lib/typescript/src/shaders/fragmentShaders/colorMaskFragment.d.ts.map +1 -0
  43. package/lib/typescript/src/shaders/pipelineSetups.d.ts +7 -0
  44. package/lib/typescript/src/shaders/pipelineSetups.d.ts.map +1 -0
  45. package/lib/typescript/src/shaders/resourceManagement.d.ts +3 -0
  46. package/lib/typescript/src/shaders/resourceManagement.d.ts.map +1 -0
  47. package/lib/typescript/src/shaders/tgpuUtils.d.ts +6 -0
  48. package/lib/typescript/src/shaders/tgpuUtils.d.ts.map +1 -0
  49. package/lib/typescript/src/shaders/utils.d.ts +13 -0
  50. package/lib/typescript/src/shaders/utils.d.ts.map +1 -0
  51. package/lib/typescript/src/shaders/vertexShaders/mainVertex.d.ts +6 -0
  52. package/lib/typescript/src/shaders/vertexShaders/mainVertex.d.ts.map +1 -0
  53. package/lib/typescript/src/types/typeUtils.d.ts +16 -0
  54. package/lib/typescript/src/types/typeUtils.d.ts.map +1 -0
  55. package/lib/typescript/src/types/types.d.ts +33 -0
  56. package/lib/typescript/src/types/types.d.ts.map +1 -0
  57. package/package.json +158 -13
  58. package/src/index.tsx +289 -0
  59. package/src/roots.ts +16 -0
  60. package/src/shaders/bindGroupLayouts.ts +40 -0
  61. package/src/shaders/bindGroupUtils.ts +101 -0
  62. package/src/shaders/fragmentShaders/bloomFragment.ts +83 -0
  63. package/src/shaders/fragmentShaders/colorMaskFragment.ts +35 -0
  64. package/src/shaders/pipelineSetups.ts +33 -0
  65. package/src/shaders/resourceManagement.ts +22 -0
  66. package/src/shaders/tgpuUtils.ts +75 -0
  67. package/src/shaders/utils.ts +103 -0
  68. package/src/shaders/vertexShaders/mainVertex.ts +35 -0
  69. package/src/types/typeUtils.ts +122 -0
  70. package/src/types/types.ts +51 -0
package/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 VoidFrog
4
+ Permission is hereby granted, free of charge, to any person obtaining a copy
5
+ of this software and associated documentation files (the "Software"), to deal
6
+ in the Software without restriction, including without limitation the rights
7
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ copies of the Software, and to permit persons to whom the Software is
9
+ furnished to do so, subject to the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be included in all
12
+ copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,35 @@
1
+ # react-native-shine
2
+
3
+ Fast and efficient way of adding interactive effects that are run entirely on shaders using typeGPU.
4
+
5
+ ## Installation
6
+
7
+
8
+ ```sh
9
+ npm install react-native-shine
10
+ ```
11
+
12
+
13
+ ## Usage
14
+
15
+
16
+ ```js
17
+ import { multiply } from 'react-native-shine';
18
+
19
+ // ...
20
+
21
+ const result = await multiply(3, 7);
22
+ ```
23
+
24
+
25
+ ## Contributing
26
+
27
+ See the [contributing guide](CONTRIBUTING.md) to learn how to contribute to the repository and the development workflow.
28
+
29
+ ## License
30
+
31
+ MIT
32
+
33
+ ---
34
+
35
+ Made with [create-react-native-library](https://github.com/callstack/react-native-builder-bob)
@@ -0,0 +1,182 @@
1
+ "use strict";
2
+
3
+ import { useEffect, 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.js";
8
+ import { createTexture, loadTexture, clamp, rotate2D, subscribeToOrientationChange, getAngleFromDimensions } from "./shaders/utils.js";
9
+ import { bloomOptionsBindGroupLayout, colorMaskBindGroupLayout, rotationValuesBindGroupLayout, textureBindGroupLayout } from "./shaders/bindGroupLayouts.js";
10
+ import { SensorType, useAnimatedSensor, useDerivedValue, useSharedValue } from 'react-native-reanimated';
11
+ import * as d from 'typegpu/data';
12
+ import { Platform } from 'react-native';
13
+ import bloomFragment from "./shaders/fragmentShaders/bloomFragment.js";
14
+ import { createBloomOptionsBindGroup, createBloomOptionsBuffer, createColorMaskBindGroup, createColorMaskBuffer, createRotationBuffer, createRotationValuesBindGroup } from "./shaders/bindGroupUtils.js";
15
+ import { createBindGroupPairs, createBloomOptions, createColorMask } from "./types/typeUtils.js";
16
+ import { attachBindGroups, getDefaultTarget } from "./shaders/pipelineSetups.js";
17
+ import colorMaskFragment from "./shaders/fragmentShaders/colorMaskFragment.js";
18
+ import { jsx as _jsx } from "react/jsx-runtime";
19
+ export function Shine({
20
+ width,
21
+ height,
22
+ imageURI,
23
+ bloomOptions,
24
+ colorMaskOptions
25
+ }) {
26
+ const {
27
+ device = null
28
+ } = useDevice();
29
+ const root = device ? getOrInitRoot(device) : null;
30
+ const {
31
+ ref,
32
+ context
33
+ } = useGPUContext();
34
+ const presentationFormat = navigator.gpu.getPreferredCanvasFormat();
35
+ const frameRef = useRef(null);
36
+ const [imageTexture, setImageTexture] = useState(null);
37
+ const orientationAngle = useSharedValue(0); // degrees
38
+ const rotationShared = useSharedValue([0, 0, 0]); // final GPU offsets
39
+
40
+ // Calibration shared values (UI thread)
41
+ const initialGravity = useSharedValue([0, 0, 0]);
42
+ const calibSum = useSharedValue([0, 0, 0]);
43
+ const calibCount = useSharedValue(0);
44
+ const calibrated = useSharedValue(false);
45
+ const gravitySensor = useAnimatedSensor(SensorType.GRAVITY, {
46
+ interval: 20
47
+ });
48
+
49
+ // Subscribe to orientation changes and reset calibration on change
50
+ useEffect(() => {
51
+ orientationAngle.value = getAngleFromDimensions();
52
+ const unsubscribe = subscribeToOrientationChange(angleDeg => {
53
+ orientationAngle.value = angleDeg;
54
+ });
55
+ return () => unsubscribe();
56
+ }, [orientationAngle]);
57
+
58
+ // Calibration & mapping logic
59
+ useDerivedValue(() => {
60
+ 'worklet';
61
+
62
+ // console.log(orientationAngle.value);
63
+ const v = gravitySensor.sensor?.value ?? gravitySensor.sensor.value ?? {
64
+ x: 0,
65
+ y: 0,
66
+ z: 0
67
+ };
68
+ const gx = v.x ?? 0;
69
+ const gy = v.y ?? 0;
70
+ const gz = v.z ?? 0;
71
+ const CALIBRATION_SAMPLES = 40;
72
+ const alpha = 0.15; // smoothing
73
+ const scale = 0.6;
74
+ if (!calibrated.value) {
75
+ // accumulate baseline in device coordinates
76
+ const s = calibSum.value;
77
+ const c = calibCount.value + 1;
78
+ calibSum.value = [s[0] + gx, s[1] + gy, s[2] + gz];
79
+ calibCount.value = c;
80
+ if (c >= CALIBRATION_SAMPLES) {
81
+ const avg = calibSum.value;
82
+ initialGravity.value = [avg[0] / c, avg[1] / c, avg[2] / c];
83
+ calibrated.value = true;
84
+ }
85
+ rotationShared.value = [0, 0, 0];
86
+ return;
87
+ }
88
+ const init = initialGravity.value;
89
+ const dx = gx - init[0];
90
+ const dy = gy - init[1];
91
+ const dz = gz - init[2];
92
+
93
+ // Rotate into screen coordinates so offsets auto-swap with orientation
94
+ const [mx, my] = rotate2D([dx, dy], -orientationAngle.value);
95
+ const screenX = mx;
96
+ const screenY = -my;
97
+ const prev = rotationShared.value;
98
+ const smoothX = prev[0] * (1 - alpha) + screenX * alpha;
99
+ const smoothY = prev[1] * (1 - alpha) + screenY * alpha;
100
+ const smoothZ = prev[2] * (1 - alpha) + dz * alpha;
101
+ if (orientationAngle.value === 90) {
102
+ rotationShared.value = [clamp(smoothY * scale, -1, 1), clamp(-smoothX * scale, -1, 1), clamp(smoothZ * scale, -1, 1)];
103
+ } else {
104
+ rotationShared.value = [clamp(smoothX * scale, -1, 1), clamp(smoothY * scale, -1, 1), clamp(smoothZ * scale, -1, 1)];
105
+ }
106
+ });
107
+
108
+ // Resource setup
109
+ useEffect(() => {
110
+ if (!root || !device || !context) return;
111
+ (async () => {
112
+ const bitmap = await getBitmapFromURI(imageURI);
113
+ const texture = await createTexture(root, bitmap);
114
+ setImageTexture(texture);
115
+ await loadTexture(root, bitmap, texture);
116
+ })();
117
+ }, [root, device, context, imageURI]);
118
+
119
+ // Render loop
120
+ useEffect(() => {
121
+ if (!root || !device || !context || !imageTexture) return;
122
+ context.configure({
123
+ device,
124
+ format: presentationFormat,
125
+ alphaMode: 'premultiplied'
126
+ });
127
+ const sampler = device.createSampler({
128
+ magFilter: 'linear',
129
+ minFilter: 'linear'
130
+ });
131
+ const textureBindGroup = root.createBindGroup(textureBindGroupLayout, {
132
+ texture: root.unwrap(imageTexture).createView(),
133
+ sampler
134
+ });
135
+ const rotationBuffer = createRotationBuffer(root);
136
+ const rotationBindGroup = createRotationValuesBindGroup(root, rotationBuffer);
137
+ const bloomOptionsBuffer = createBloomOptionsBuffer(root, createBloomOptions(bloomOptions ?? {}));
138
+ const bloomOptionsBindGroup = createBloomOptionsBindGroup(root, bloomOptionsBuffer);
139
+ const colorMaskBuffer = createColorMaskBuffer(root, createColorMask(colorMaskOptions ?? {
140
+ baseColor: [-20, -20, -20]
141
+ }));
142
+ const colorMaskBindGroup = createColorMaskBindGroup(root, colorMaskBuffer);
143
+ const bloomBGP = createBindGroupPairs([textureBindGroupLayout, rotationValuesBindGroupLayout, bloomOptionsBindGroupLayout, colorMaskBindGroupLayout], [textureBindGroup, rotationBindGroup, bloomOptionsBindGroup, colorMaskBindGroup]);
144
+ const maskBGP = createBindGroupPairs([textureBindGroupLayout, colorMaskBindGroupLayout], [textureBindGroup, colorMaskBindGroup]);
145
+ let bloomPipeline = root['~unstable'].withVertex(mainVertex, {}).withFragment(bloomFragment, getDefaultTarget(presentationFormat)).createPipeline();
146
+ bloomPipeline = attachBindGroups(bloomPipeline, bloomBGP);
147
+ let maskPipeline = root['~unstable'].withVertex(mainVertex, {}).withFragment(colorMaskFragment, getDefaultTarget(presentationFormat)).createPipeline();
148
+ maskPipeline = attachBindGroups(maskPipeline, maskBGP);
149
+ const render = () => {
150
+ const rot = rotationShared.value;
151
+ rotationBuffer.write(d.vec3f(rot[0], rot[1], rot[2]));
152
+ bloomPipeline.withColorAttachment({
153
+ view: context.getCurrentTexture().createView(),
154
+ clearValue: [0, 0, 0, 0],
155
+ loadOp: 'clear',
156
+ storeOp: 'store'
157
+ }).draw(6);
158
+ maskPipeline.withColorAttachment({
159
+ view: context.getCurrentTexture().createView(),
160
+ loadOp: 'load',
161
+ storeOp: 'store'
162
+ }).draw(6);
163
+ context.present();
164
+ frameRef.current = requestAnimationFrame(render);
165
+ };
166
+ frameRef.current = requestAnimationFrame(render);
167
+ return () => {
168
+ if (frameRef.current) cancelAnimationFrame(frameRef.current);
169
+ };
170
+ }, [device, context, root, presentationFormat, imageTexture, rotationShared, bloomOptions, colorMaskOptions]);
171
+ return /*#__PURE__*/_jsx(Canvas, {
172
+ ref: ref,
173
+ style: {
174
+ width,
175
+ height,
176
+ aspectRatio: width / height
177
+ },
178
+ transparent: Platform.OS === 'ios'
179
+ });
180
+ }
181
+ export { subscribeToOrientationChange, getAngleFromDimensions };
182
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useEffect","useRef","useState","Canvas","useDevice","useGPUContext","getOrInitRoot","mainVertex","getBitmapFromURI","createTexture","loadTexture","clamp","rotate2D","subscribeToOrientationChange","getAngleFromDimensions","bloomOptionsBindGroupLayout","colorMaskBindGroupLayout","rotationValuesBindGroupLayout","textureBindGroupLayout","SensorType","useAnimatedSensor","useDerivedValue","useSharedValue","d","Platform","bloomFragment","createBloomOptionsBindGroup","createBloomOptionsBuffer","createColorMaskBindGroup","createColorMaskBuffer","createRotationBuffer","createRotationValuesBindGroup","createBindGroupPairs","createBloomOptions","createColorMask","attachBindGroups","getDefaultTarget","colorMaskFragment","jsx","_jsx","Shine","width","height","imageURI","bloomOptions","colorMaskOptions","device","root","ref","context","presentationFormat","navigator","gpu","getPreferredCanvasFormat","frameRef","imageTexture","setImageTexture","orientationAngle","rotationShared","initialGravity","calibSum","calibCount","calibrated","gravitySensor","GRAVITY","interval","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","configure","format","alphaMode","sampler","createSampler","magFilter","minFilter","textureBindGroup","createBindGroup","unwrap","createView","rotationBuffer","rotationBindGroup","bloomOptionsBuffer","bloomOptionsBindGroup","colorMaskBuffer","baseColor","colorMaskBindGroup","bloomBGP","maskBGP","bloomPipeline","withVertex","withFragment","createPipeline","maskPipeline","render","rot","write","vec3f","withColorAttachment","view","getCurrentTexture","clearValue","loadOp","storeOp","draw","present","current","requestAnimationFrame","cancelAnimationFrame","style","aspectRatio","transparent","OS"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1 @@
1
+ {"type":"module"}
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+
3
+ import { tgpu } from 'typegpu';
4
+ const deviceToRootMap = new WeakMap();
5
+ function getOrInitRoot(device) {
6
+ let root = deviceToRootMap.get(device);
7
+ if (!root) {
8
+ root = tgpu.initFromDevice({
9
+ device
10
+ });
11
+ deviceToRootMap.set(device, root);
12
+ }
13
+ return root;
14
+ }
15
+ export { getOrInitRoot };
16
+ //# sourceMappingURL=roots.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["tgpu","deviceToRootMap","WeakMap","getOrInitRoot","device","root","get","initFromDevice","set"],"sourceRoot":"../../src","sources":["roots.ts"],"mappings":";;AAAA,SAASA,IAAI,QAAuB,SAAS;AAE7C,MAAMC,eAAe,GAAG,IAAIC,OAAO,CAAsB,CAAC;AAE1D,SAASC,aAAaA,CAACC,MAAiB,EAAY;EAClD,IAAIC,IAAI,GAAGJ,eAAe,CAACK,GAAG,CAACF,MAAM,CAAC;EAEtC,IAAI,CAACC,IAAI,EAAE;IACTA,IAAI,GAAGL,IAAI,CAACO,cAAc,CAAC;MAAEH;IAAO,CAAC,CAAC;IACtCH,eAAe,CAACO,GAAG,CAACJ,MAAM,EAAEC,IAAI,CAAC;EACnC;EAEA,OAAOA,IAAI;AACb;AAEA,SAASF,aAAa","ignoreList":[]}
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+
3
+ import tgpu from 'typegpu';
4
+ import * as d from 'typegpu/data';
5
+ export const textureBindGroupLayout = tgpu.bindGroupLayout({
6
+ texture: {
7
+ texture: 'float',
8
+ dimension: '2d',
9
+ sampleType: 'float'
10
+ },
11
+ sampler: {
12
+ sampler: 'filtering'
13
+ }
14
+ });
15
+ export const rotationValuesBindGroupLayout = tgpu.bindGroupLayout({
16
+ vec: {
17
+ uniform: d.vec3f
18
+ }
19
+ });
20
+ export const bloomOptionsSchema = d.struct({
21
+ glowPower: d.f32,
22
+ hueShiftAngleMax: d.f32,
23
+ hueShiftAngleMin: d.f32,
24
+ hueBlendPower: d.f32,
25
+ lightIntensity: d.f32,
26
+ bloomIntensity: d.f32
27
+ });
28
+ export const bloomOptionsBindGroupLayout = tgpu.bindGroupLayout({
29
+ bloomOptions: {
30
+ uniform: bloomOptionsSchema
31
+ }
32
+ });
33
+ export const colorMaskSchema = d.struct({
34
+ baseColor: d.vec3f,
35
+ rgbToleranceRange: d.struct({
36
+ upper: d.vec3f,
37
+ lower: d.vec3f
38
+ })
39
+ });
40
+ export const colorMaskBindGroupLayout = tgpu.bindGroupLayout({
41
+ mask: {
42
+ uniform: colorMaskSchema
43
+ }
44
+ });
45
+ //# sourceMappingURL=bindGroupLayouts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["tgpu","d","textureBindGroupLayout","bindGroupLayout","texture","dimension","sampleType","sampler","rotationValuesBindGroupLayout","vec","uniform","vec3f","bloomOptionsSchema","struct","glowPower","f32","hueShiftAngleMax","hueShiftAngleMin","hueBlendPower","lightIntensity","bloomIntensity","bloomOptionsBindGroupLayout","bloomOptions","colorMaskSchema","baseColor","rgbToleranceRange","upper","lower","colorMaskBindGroupLayout","mask"],"sourceRoot":"../../../src","sources":["shaders/bindGroupLayouts.ts"],"mappings":";;AAAA,OAAOA,IAAI,MAAM,SAAS;AAC1B,OAAO,KAAKC,CAAC,MAAM,cAAc;AAEjC,OAAO,MAAMC,sBAAsB,GAAGF,IAAI,CAACG,eAAe,CAAC;EACzDC,OAAO,EAAE;IAAEA,OAAO,EAAE,OAAO;IAAEC,SAAS,EAAE,IAAI;IAAEC,UAAU,EAAE;EAAQ,CAAC;EACnEC,OAAO,EAAE;IAAEA,OAAO,EAAE;EAAY;AAClC,CAAC,CAAC;AAEF,OAAO,MAAMC,6BAA6B,GAAGR,IAAI,CAACG,eAAe,CAAC;EAChEM,GAAG,EAAE;IAAEC,OAAO,EAAET,CAAC,CAACU;EAAM;AAC1B,CAAC,CAAC;AAEF,OAAO,MAAMC,kBAAkB,GAAGX,CAAC,CAACY,MAAM,CAAC;EACzCC,SAAS,EAAEb,CAAC,CAACc,GAAG;EAChBC,gBAAgB,EAAEf,CAAC,CAACc,GAAG;EACvBE,gBAAgB,EAAEhB,CAAC,CAACc,GAAG;EACvBG,aAAa,EAAEjB,CAAC,CAACc,GAAG;EACpBI,cAAc,EAAElB,CAAC,CAACc,GAAG;EACrBK,cAAc,EAAEnB,CAAC,CAACc;AACpB,CAAC,CAAC;AAIF,OAAO,MAAMM,2BAA2B,GAAGrB,IAAI,CAACG,eAAe,CAAC;EAC9DmB,YAAY,EAAE;IAAEZ,OAAO,EAAEE;EAAmB;AAC9C,CAAC,CAAC;AAEF,OAAO,MAAMW,eAAe,GAAGtB,CAAC,CAACY,MAAM,CAAC;EACtCW,SAAS,EAAEvB,CAAC,CAACU,KAAK;EAClBc,iBAAiB,EAAExB,CAAC,CAACY,MAAM,CAAC;IAC1Ba,KAAK,EAAEzB,CAAC,CAACU,KAAK;IACdgB,KAAK,EAAE1B,CAAC,CAACU;EACX,CAAC;AACH,CAAC,CAAC;AAIF,OAAO,MAAMiB,wBAAwB,GAAG5B,IAAI,CAACG,eAAe,CAAC;EAC3D0B,IAAI,EAAE;IAAEnB,OAAO,EAAEa;EAAgB;AACnC,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+
3
+ import * as d from 'typegpu/data';
4
+ import { bloomOptionsBindGroupLayout, bloomOptionsSchema, colorMaskBindGroupLayout, colorMaskSchema, rotationValuesBindGroupLayout } from "./bindGroupLayouts.js";
5
+ import { colorMaskToTyped, createBloomOptions, createColorMask, mapToF32 } from "../types/typeUtils.js";
6
+ export const createRotationBuffer = (root, initValues) => {
7
+ const init = initValues ? d.vec3f(initValues.x, initValues.y, initValues.z) : d.vec3f(0.0);
8
+ const rotationValuesBuffer = root.createBuffer(d.vec3f, init).$usage('uniform');
9
+ return rotationValuesBuffer;
10
+ };
11
+ export const createRotationValuesBindGroup = (root, buffer) => {
12
+ const rotationValuesBindGroup = root.createBindGroup(rotationValuesBindGroupLayout, {
13
+ vec: buffer
14
+ });
15
+ return rotationValuesBindGroup;
16
+ };
17
+ export const createBloomOptionsBuffer = (root, initValues) => {
18
+ const bloomOptions = createBloomOptions({
19
+ ...initValues
20
+ });
21
+ const bloomOptionsTyped = mapToF32(bloomOptions);
22
+ const bloomOptionsBuffer = root.createBuffer(bloomOptionsSchema, bloomOptionsTyped).$usage('uniform');
23
+ return bloomOptionsBuffer;
24
+ };
25
+ export const createBloomOptionsBindGroup = (root, buffer) => {
26
+ const bloomOptionsBindGroup = root.createBindGroup(bloomOptionsBindGroupLayout, {
27
+ bloomOptions: buffer
28
+ });
29
+ return bloomOptionsBindGroup;
30
+ };
31
+ export const createColorMaskBuffer = (root, initValues) => {
32
+ const colorMask = createColorMask({
33
+ ...initValues
34
+ });
35
+ const colorMaskTyped = colorMaskToTyped(colorMask);
36
+ const colorMaskBuffer = root.createBuffer(colorMaskSchema, colorMaskTyped).$usage('uniform');
37
+ return colorMaskBuffer;
38
+ };
39
+ export const createColorMaskBindGroup = (root, buffer) => {
40
+ const colorMaskBindGroup = root.createBindGroup(colorMaskBindGroupLayout, {
41
+ mask: buffer
42
+ });
43
+ return colorMaskBindGroup;
44
+ };
45
+ //# sourceMappingURL=bindGroupUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["d","bloomOptionsBindGroupLayout","bloomOptionsSchema","colorMaskBindGroupLayout","colorMaskSchema","rotationValuesBindGroupLayout","colorMaskToTyped","createBloomOptions","createColorMask","mapToF32","createRotationBuffer","root","initValues","init","vec3f","x","y","z","rotationValuesBuffer","createBuffer","$usage","createRotationValuesBindGroup","buffer","rotationValuesBindGroup","createBindGroup","vec","createBloomOptionsBuffer","bloomOptions","bloomOptionsTyped","bloomOptionsBuffer","createBloomOptionsBindGroup","bloomOptionsBindGroup","createColorMaskBuffer","colorMask","colorMaskTyped","colorMaskBuffer","createColorMaskBindGroup","colorMaskBindGroup","mask"],"sourceRoot":"../../../src","sources":["shaders/bindGroupUtils.ts"],"mappings":";;AACA,OAAO,KAAKA,CAAC,MAAM,cAAc;AACjC,SACEC,2BAA2B,EAC3BC,kBAAkB,EAClBC,wBAAwB,EACxBC,eAAe,EACfC,6BAA6B,QACxB,uBAAoB;AAM3B,SACEC,gBAAgB,EAChBC,kBAAkB,EAClBC,eAAe,EACfC,QAAQ,QACH,uBAAoB;AAE3B,OAAO,MAAMC,oBAAoB,GAAGA,CAClCC,IAAc,EACdC,UAAgD,KAC7C;EACH,MAAMC,IAAI,GAAGD,UAAU,GACnBZ,CAAC,CAACc,KAAK,CAACF,UAAU,CAACG,CAAC,EAAEH,UAAU,CAACI,CAAC,EAAEJ,UAAU,CAACK,CAAC,CAAC,GACjDjB,CAAC,CAACc,KAAK,CAAC,GAAG,CAAC;EAChB,MAAMI,oBAAoB,GAAGP,IAAI,CAC9BQ,YAAY,CAACnB,CAAC,CAACc,KAAK,EAAED,IAAI,CAAC,CAC3BO,MAAM,CAAC,SAAS,CAAC;EAEpB,OAAOF,oBAAoB;AAC7B,CAAC;AAED,OAAO,MAAMG,6BAA6B,GAAGA,CAC3CV,IAAc,EACdW,MAAyC,KACtC;EACH,MAAMC,uBAAuB,GAAGZ,IAAI,CAACa,eAAe,CAClDnB,6BAA6B,EAC7B;IACEoB,GAAG,EAAEH;EACP,CACF,CAAC;EAED,OAAOC,uBAAuB;AAChC,CAAC;AAED,OAAO,MAAMG,wBAAwB,GAAGA,CACtCf,IAAc,EACdC,UAAkC,KAC/B;EACH,MAAMe,YAA0B,GAAGpB,kBAAkB,CAAC;IAAE,GAAGK;EAAW,CAAC,CAAC;EACxE,MAAMgB,iBAAiB,GAAGnB,QAAQ,CAACkB,YAAY,CAAC;EAEhD,MAAME,kBAAkB,GAAGlB,IAAI,CAC5BQ,YAAY,CAACjB,kBAAkB,EAAE0B,iBAAiB,CAAC,CACnDR,MAAM,CAAC,SAAS,CAAC;EAEpB,OAAOS,kBAAkB;AAC3B,CAAC;AAED,OAAO,MAAMC,2BAA2B,GAAGA,CACzCnB,IAAc,EACdW,MAAoD,KACjD;EACH,MAAMS,qBAAqB,GAAGpB,IAAI,CAACa,eAAe,CAChDvB,2BAA2B,EAC3B;IACE0B,YAAY,EAAEL;EAChB,CACF,CAAC;EAED,OAAOS,qBAAqB;AAC9B,CAAC;AAED,OAAO,MAAMC,qBAAqB,GAAGA,CACnCrB,IAAc,EACdC,UAAqD,KAClD;EACH,MAAMqB,SAAoB,GAAGzB,eAAe,CAAC;IAAE,GAAGI;EAAW,CAAC,CAAC;EAC/D,MAAMsB,cAAc,GAAG5B,gBAAgB,CAAC2B,SAAS,CAAC;EAElD,MAAME,eAAe,GAAGxB,IAAI,CACzBQ,YAAY,CAACf,eAAe,EAAE8B,cAAc,CAAC,CAC7Cd,MAAM,CAAC,SAAS,CAAC;EAEpB,OAAOe,eAAe;AACxB,CAAC;AAED,OAAO,MAAMC,wBAAwB,GAAGA,CACtCzB,IAAc,EACdW,MAAiD,KAC9C;EACH,MAAMe,kBAAkB,GAAG1B,IAAI,CAACa,eAAe,CAACrB,wBAAwB,EAAE;IACxEmC,IAAI,EAAEhB;EACR,CAAC,CAAC;EAEF,OAAOe,kBAAkB;AAC3B,CAAC","ignoreList":[]}
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+
3
+ import tgpu from 'typegpu';
4
+ import * as d from 'typegpu/data';
5
+ import * as std from 'typegpu/std';
6
+ import { rotationValuesBindGroupLayout, textureBindGroupLayout, bloomOptionsBindGroupLayout, colorMaskBindGroupLayout } from "../bindGroupLayouts.js";
7
+ import { bloomColorShift, hueShift, overlayChannels } from "../tgpuUtils.js";
8
+ const bloomFragment = tgpu['~unstable'].fragmentFn({
9
+ in: {
10
+ uv: d.vec2f
11
+ },
12
+ out: d.vec4f
13
+ })(input => {
14
+ const texcoord = d.vec2f(input.uv.x, 1.0 - input.uv.y);
15
+ const uv = d.vec2f(input.uv.x, 1.0 - input.uv.y);
16
+ const centeredCoords = std.sub(std.mul(uv, 2.0), 1); //-1 to 1
17
+
18
+ const rot = rotationValuesBindGroupLayout.$.vec;
19
+ const center = std.add(d.vec2f(0.0), d.vec2f(rot.x, rot.y));
20
+ const bloomOptions = bloomOptionsBindGroupLayout.$.bloomOptions;
21
+ const bloomIntensity = bloomOptions.bloomIntensity;
22
+ const glowPower = bloomOptions.glowPower;
23
+ const hueBlendPower = bloomOptions.hueBlendPower;
24
+ const hueShiftAngleMax = bloomOptions.hueShiftAngleMax;
25
+ const hueShiftAngleMin = bloomOptions.hueShiftAngleMin;
26
+ const lightIntensity = bloomOptions.lightIntensity;
27
+ const mask = colorMaskBindGroupLayout.$.mask;
28
+ const maskedColor = mask.baseColor;
29
+ const rgbToleranceRange = mask.rgbToleranceRange;
30
+ let color = std.textureSample(textureBindGroupLayout.$.texture, textureBindGroupLayout.$.sampler, texcoord);
31
+ const maskedColorLower = std.sub(maskedColor, rgbToleranceRange.lower);
32
+ const maskedColorUpper = std.add(maskedColor, rgbToleranceRange.upper);
33
+ const upperCheck = std.all(std.le(color.xyz, maskedColorUpper));
34
+ const lowerCheck = std.all(std.ge(color.xyz, maskedColorLower));
35
+ if (upperCheck && lowerCheck) {
36
+ return color;
37
+ }
38
+
39
+ //bloomIntensity
40
+ const dst = std.exp(-std.distance(center, centeredCoords));
41
+ const distToCenter = std.smoothstep(0.0, 1 / bloomIntensity, dst);
42
+
43
+ //glowPower
44
+ let glow = d.vec3f(distToCenter);
45
+ glow = std.mul(glow, glowPower * color.w);
46
+
47
+ //hueBlend
48
+ const hueBlend = d.f32(hueBlendPower) * dst / 10.0;
49
+
50
+ //lightIntensity
51
+ glow = std.add(glow, lightIntensity / 10.0);
52
+ let shiftedRGB = bloomColorShift(color.xyz, dst / (lightIntensity * 2));
53
+
54
+ //hueShiftAngleMin/Max
55
+ const hueShiftAngle = std.smoothstep(hueShiftAngleMin, hueShiftAngleMax, distToCenter);
56
+ const shiftedHue = hueShift(shiftedRGB, hueShiftAngle);
57
+ shiftedRGB = overlayChannels(shiftedRGB, shiftedHue);
58
+ color = d.vec4f(std.mix(color.xyz, shiftedRGB, hueBlend), color.w);
59
+ const baseColor = color;
60
+ const blendColor = glow;
61
+ const combined = overlayChannels(baseColor.xyz, blendColor);
62
+ color = d.vec4f(std.mix(color.xyz, combined, glow), color.w);
63
+ return color;
64
+ });
65
+ export default bloomFragment;
66
+ //# sourceMappingURL=bloomFragment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["tgpu","d","std","rotationValuesBindGroupLayout","textureBindGroupLayout","bloomOptionsBindGroupLayout","colorMaskBindGroupLayout","bloomColorShift","hueShift","overlayChannels","bloomFragment","fragmentFn","in","uv","vec2f","out","vec4f","input","texcoord","x","y","centeredCoords","sub","mul","rot","$","vec","center","add","bloomOptions","bloomIntensity","glowPower","hueBlendPower","hueShiftAngleMax","hueShiftAngleMin","lightIntensity","mask","maskedColor","baseColor","rgbToleranceRange","color","textureSample","texture","sampler","maskedColorLower","lower","maskedColorUpper","upper","upperCheck","all","le","xyz","lowerCheck","ge","dst","exp","distance","distToCenter","smoothstep","glow","vec3f","w","hueBlend","f32","shiftedRGB","hueShiftAngle","shiftedHue","mix","blendColor","combined"],"sourceRoot":"../../../../src","sources":["shaders/fragmentShaders/bloomFragment.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+
3
+ import tgpu from 'typegpu';
4
+ import * as d from 'typegpu/data';
5
+ import * as std from 'typegpu/std';
6
+ import { textureBindGroupLayout, colorMaskBindGroupLayout } from "../bindGroupLayouts.js";
7
+ const colorMaskFragment = tgpu['~unstable'].fragmentFn({
8
+ in: {
9
+ uv: d.vec2f
10
+ },
11
+ out: d.vec4f
12
+ })(input => {
13
+ const texcoord = d.vec2f(input.uv.x, 1.0 - input.uv.y);
14
+ const mask = colorMaskBindGroupLayout.$.mask;
15
+ const maskedColor = mask.baseColor;
16
+ const rgbToleranceRange = mask.rgbToleranceRange;
17
+ let color = std.textureSample(textureBindGroupLayout.$.texture, textureBindGroupLayout.$.sampler, texcoord);
18
+ const maskedColorLower = std.sub(maskedColor, rgbToleranceRange.lower);
19
+ const maskedColorUpper = std.add(maskedColor, rgbToleranceRange.upper);
20
+ const upperCheck = std.all(std.le(color.xyz, maskedColorUpper));
21
+ const lowerCheck = std.all(std.ge(color.xyz, maskedColorLower));
22
+ if (upperCheck && lowerCheck) {
23
+ return color;
24
+ }
25
+ std.discard();
26
+ });
27
+ export default colorMaskFragment;
28
+ //# sourceMappingURL=colorMaskFragment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["tgpu","d","std","textureBindGroupLayout","colorMaskBindGroupLayout","colorMaskFragment","fragmentFn","in","uv","vec2f","out","vec4f","input","texcoord","x","y","mask","$","maskedColor","baseColor","rgbToleranceRange","color","textureSample","texture","sampler","maskedColorLower","sub","lower","maskedColorUpper","add","upper","upperCheck","all","le","xyz","lowerCheck","ge","discard"],"sourceRoot":"../../../../src","sources":["shaders/fragmentShaders/colorMaskFragment.ts"],"mappings":";;AAAA,OAAOA,IAAI,MAAM,SAAS;AAC1B,OAAO,KAAKC,CAAC,MAAM,cAAc;AACjC,OAAO,KAAKC,GAAG,MAAM,aAAa;AAClC,SACEC,sBAAsB,EACtBC,wBAAwB,QACnB,wBAAqB;AAE5B,MAAMC,iBAAiB,GAAGL,IAAI,CAAC,WAAW,CAAC,CAACM,UAAU,CAAC;EACrDC,EAAE,EAAE;IAAEC,EAAE,EAAEP,CAAC,CAACQ;EAAM,CAAC;EACnBC,GAAG,EAAET,CAAC,CAACU;AACT,CAAC,CAAC,CAAEC,KAAK,IAAK;EACZ,MAAMC,QAAQ,GAAGZ,CAAC,CAACQ,KAAK,CAACG,KAAK,CAACJ,EAAE,CAACM,CAAC,EAAE,GAAG,GAAGF,KAAK,CAACJ,EAAE,CAACO,CAAC,CAAC;EAEtD,MAAMC,IAAI,GAAGZ,wBAAwB,CAACa,CAAC,CAACD,IAAI;EAC5C,MAAME,WAAW,GAAGF,IAAI,CAACG,SAAS;EAClC,MAAMC,iBAAiB,GAAGJ,IAAI,CAACI,iBAAiB;EAEhD,IAAIC,KAAK,GAAGnB,GAAG,CAACoB,aAAa,CAC3BnB,sBAAsB,CAACc,CAAC,CAACM,OAAO,EAChCpB,sBAAsB,CAACc,CAAC,CAACO,OAAO,EAChCX,QACF,CAAC;EAED,MAAMY,gBAAgB,GAAGvB,GAAG,CAACwB,GAAG,CAACR,WAAW,EAAEE,iBAAiB,CAACO,KAAK,CAAC;EACtE,MAAMC,gBAAgB,GAAG1B,GAAG,CAAC2B,GAAG,CAACX,WAAW,EAAEE,iBAAiB,CAACU,KAAK,CAAC;EACtE,MAAMC,UAAU,GAAG7B,GAAG,CAAC8B,GAAG,CAAC9B,GAAG,CAAC+B,EAAE,CAACZ,KAAK,CAACa,GAAG,EAAEN,gBAAgB,CAAC,CAAC;EAC/D,MAAMO,UAAU,GAAGjC,GAAG,CAAC8B,GAAG,CAAC9B,GAAG,CAACkC,EAAE,CAACf,KAAK,CAACa,GAAG,EAAET,gBAAgB,CAAC,CAAC;EAC/D,IAAIM,UAAU,IAAII,UAAU,EAAE;IAC5B,OAAOd,KAAK;EACd;EACAnB,GAAG,CAACmC,OAAO,CAAC,CAAC;AACf,CAAC,CAAC;AAEF,eAAehC,iBAAiB","ignoreList":[]}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+
3
+ export const attachBindGroups = (pipeline, bindGroupPairs) => {
4
+ for (const pair of bindGroupPairs) {
5
+ pipeline = pipeline.with(pair.layout, pair.group);
6
+ }
7
+ return pipeline;
8
+ };
9
+ export const getDefaultTarget = presentationFormat => {
10
+ return {
11
+ format: presentationFormat,
12
+ blend: {
13
+ color: {
14
+ srcFactor: 'src-alpha',
15
+ dstFactor: 'one-minus-src-alpha',
16
+ operation: 'add'
17
+ },
18
+ alpha: {
19
+ srcFactor: 'one',
20
+ dstFactor: 'one-minus-src-alpha',
21
+ operation: 'add'
22
+ }
23
+ }
24
+ };
25
+ };
26
+ //# sourceMappingURL=pipelineSetups.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["attachBindGroups","pipeline","bindGroupPairs","pair","with","layout","group","getDefaultTarget","presentationFormat","format","blend","color","srcFactor","dstFactor","operation","alpha"],"sourceRoot":"../../../src","sources":["shaders/pipelineSetups.ts"],"mappings":";;AAGA,OAAO,MAAMA,gBAAgB,GAAGA,CAC9BC,QAA4B,EAC5BC,cAA+B,KAC5B;EACH,KAAK,MAAMC,IAAI,IAAID,cAAc,EAAE;IACjCD,QAAQ,GAAGA,QAAQ,CAACG,IAAI,CAACD,IAAI,CAACE,MAAM,EAAEF,IAAI,CAACG,KAAK,CAAC;EACnD;EAEA,OAAOL,QAAQ;AACjB,CAAC;AAED,OAAO,MAAMM,gBAAgB,GAC3BC,kBAAoC,IACZ;EACxB,OAAO;IACLC,MAAM,EAAED,kBAAkB;IAC1BE,KAAK,EAAE;MACLC,KAAK,EAAE;QACLC,SAAS,EAAE,WAAW;QACtBC,SAAS,EAAE,qBAAqB;QAChCC,SAAS,EAAE;MACb,CAAC;MACDC,KAAK,EAAE;QACLH,SAAS,EAAE,KAAK;QAChBC,SAAS,EAAE,qBAAqB;QAChCC,SAAS,EAAE;MACb;IACF;EACF,CAAC;AACH,CAAC","ignoreList":[]}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+
3
+ import { Asset } from 'expo-asset';
4
+ const getBitmapFromURI = async uri => {
5
+ if (uriToBitmapMap.has(uri)) return uriToBitmapMap.get(uri);
6
+ console.log('bitmap not found in cache, fetching from URI');
7
+ const ast = Asset.fromURI(uri);
8
+ await ast.downloadAsync();
9
+ const fileURI = ast.localUri || ast.uri;
10
+ console.log('fetch completed, creating ImageBitmap');
11
+ const response = await fetch(fileURI);
12
+ const blob = await response.blob();
13
+ const imageBitmap = await createImageBitmap(blob);
14
+ uriToBitmapMap.set(uri, imageBitmap);
15
+ return imageBitmap;
16
+ };
17
+ const uriToBitmapMap = new Map();
18
+ export default getBitmapFromURI;
19
+ //# sourceMappingURL=resourceManagement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Asset","getBitmapFromURI","uri","uriToBitmapMap","has","get","console","log","ast","fromURI","downloadAsync","fileURI","localUri","response","fetch","blob","imageBitmap","createImageBitmap","set","Map"],"sourceRoot":"../../../src","sources":["shaders/resourceManagement.ts"],"mappings":";;AAAA,SAASA,KAAK,QAAQ,YAAY;AAElC,MAAMC,gBAAgB,GAAG,MAAOC,GAAW,IAA2B;EACpE,IAAIC,cAAc,CAACC,GAAG,CAACF,GAAG,CAAC,EAAE,OAAOC,cAAc,CAACE,GAAG,CAACH,GAAG,CAAC;EAC3DI,OAAO,CAACC,GAAG,CAAC,8CAA8C,CAAC;EAE3D,MAAMC,GAAG,GAAGR,KAAK,CAACS,OAAO,CAACP,GAAG,CAAC;EAC9B,MAAMM,GAAG,CAACE,aAAa,CAAC,CAAC;EACzB,MAAMC,OAAO,GAAGH,GAAG,CAACI,QAAQ,IAAIJ,GAAG,CAACN,GAAG;EAEvCI,OAAO,CAACC,GAAG,CAAC,uCAAuC,CAAC;EACpD,MAAMM,QAAQ,GAAG,MAAMC,KAAK,CAACH,OAAO,CAAC;EACrC,MAAMI,IAAI,GAAG,MAAMF,QAAQ,CAACE,IAAI,CAAC,CAAC;EAClC,MAAMC,WAAW,GAAG,MAAMC,iBAAiB,CAACF,IAAI,CAAC;EAEjDZ,cAAc,CAACe,GAAG,CAAChB,GAAG,EAAEc,WAAW,CAAC;EACpC,OAAOA,WAAW;AACpB,CAAC;AAED,MAAMb,cAAc,GAAG,IAAIgB,GAAG,CAAsB,CAAC;AAErD,eAAelB,gBAAgB","ignoreList":[]}
@@ -0,0 +1,38 @@
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 hueShift = tgpu.fn([d.vec3f, d.f32], d.vec3f)((rgb, angle) => {
7
+ const yiqY = std.add(std.mul(rgb.x, 0.299), std.add(std.mul(rgb.y, 0.587), std.mul(rgb.z, 0.114)));
8
+ const yiqI = std.add(std.mul(rgb.x, 0.596), std.sub(std.mul(rgb.y, -0.274), std.mul(rgb.z, 0.322)));
9
+ const yiqQ = std.add(std.mul(rgb.x, 0.211), std.sub(std.mul(rgb.y, -0.523), std.mul(rgb.z, 0.311)));
10
+
11
+ // Rotate hue
12
+ const cosA = std.cos(angle);
13
+ const sinA = std.sin(angle);
14
+ const i = std.sub(std.mul(yiqI, cosA), std.mul(yiqQ, sinA));
15
+ const q = std.add(std.mul(yiqI, sinA), std.mul(yiqQ, cosA));
16
+
17
+ // Convert back to RGB
18
+ const r = std.add(std.add(yiqY, std.mul(i, 0.956)), std.mul(q, 0.621));
19
+ const g = std.add(std.add(yiqY, std.mul(i, -0.272)), std.mul(q, -0.647));
20
+ const b = std.add(std.add(yiqY, std.mul(i, -1.105)), std.mul(q, 1.702));
21
+ return d.vec3f(r, g, b);
22
+ });
23
+ export const bloomColorShift = tgpu.fn([d.vec3f, d.f32], d.vec3f)((color, power) => {
24
+ const maxValue = std.max(std.max(color.x, color.y), color.z);
25
+ const scale = std.mix(d.f32(1.0), d.f32(1.0) / std.max(maxValue, d.f32(0.001)), power);
26
+ const boosted = std.mul(color, scale);
27
+ const saturated = std.mix(color, boosted, power);
28
+ return saturated;
29
+ });
30
+ export const overlayChannel = tgpu.fn([d.f32, d.f32], d.f32)((base, blend) => {
31
+ const mult = std.mul(2.0, std.mul(base, blend));
32
+ const screen = std.sub(1.0, std.mul(2.0, std.mul(std.sub(1.0, base), std.sub(1.0, blend))));
33
+ return std.select(screen, mult, base < d.f32(0.5));
34
+ });
35
+ export const overlayChannels = tgpu.fn([d.vec3f, d.vec3f], d.vec3f)((base, blend) => {
36
+ return d.vec3f(overlayChannel(base.x, blend.x), overlayChannel(base.y, blend.y), overlayChannel(base.z, blend.z));
37
+ });
38
+ //# sourceMappingURL=tgpuUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["tgpu","std","d","hueShift","fn","vec3f","f32","rgb","angle","yiqY","add","mul","x","y","z","yiqI","sub","yiqQ","cosA","cos","sinA","sin","i","q","r","g","b","bloomColorShift","color","power","maxValue","max","scale","mix","boosted","saturated","overlayChannel","base","blend","mult","screen","select","overlayChannels"],"sourceRoot":"../../../src","sources":["shaders/tgpuUtils.ts"],"mappings":"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","ignoreList":[]}