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.
- package/LICENSE +20 -0
- package/README.md +35 -0
- package/lib/module/index.js +182 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/module/roots.js +16 -0
- package/lib/module/roots.js.map +1 -0
- package/lib/module/shaders/bindGroupLayouts.js +45 -0
- package/lib/module/shaders/bindGroupLayouts.js.map +1 -0
- package/lib/module/shaders/bindGroupUtils.js +45 -0
- package/lib/module/shaders/bindGroupUtils.js.map +1 -0
- package/lib/module/shaders/fragmentShaders/bloomFragment.js +66 -0
- package/lib/module/shaders/fragmentShaders/bloomFragment.js.map +1 -0
- package/lib/module/shaders/fragmentShaders/colorMaskFragment.js +28 -0
- package/lib/module/shaders/fragmentShaders/colorMaskFragment.js.map +1 -0
- package/lib/module/shaders/pipelineSetups.js +26 -0
- package/lib/module/shaders/pipelineSetups.js.map +1 -0
- package/lib/module/shaders/resourceManagement.js +19 -0
- package/lib/module/shaders/resourceManagement.js.map +1 -0
- package/lib/module/shaders/tgpuUtils.js +38 -0
- package/lib/module/shaders/tgpuUtils.js.map +1 -0
- package/lib/module/shaders/utils.js +65 -0
- package/lib/module/shaders/utils.js.map +1 -0
- package/lib/module/shaders/vertexShaders/mainVertex.js +35 -0
- package/lib/module/shaders/vertexShaders/mainVertex.js.map +1 -0
- package/lib/module/types/typeUtils.js +92 -0
- package/lib/module/types/typeUtils.js.map +1 -0
- package/lib/module/types/types.js +4 -0
- package/lib/module/types/types.js.map +1 -0
- package/lib/typescript/package.json +1 -0
- package/lib/typescript/src/index.d.ts +12 -0
- package/lib/typescript/src/index.d.ts.map +1 -0
- package/lib/typescript/src/roots.d.ts +4 -0
- package/lib/typescript/src/roots.d.ts.map +1 -0
- package/lib/typescript/src/shaders/bindGroupLayouts.d.ts +57 -0
- package/lib/typescript/src/shaders/bindGroupLayouts.d.ts.map +1 -0
- package/lib/typescript/src/shaders/bindGroupUtils.d.ts +53 -0
- package/lib/typescript/src/shaders/bindGroupUtils.d.ts.map +1 -0
- package/lib/typescript/src/shaders/fragmentShaders/bloomFragment.d.ts +6 -0
- package/lib/typescript/src/shaders/fragmentShaders/bloomFragment.d.ts.map +1 -0
- package/lib/typescript/src/shaders/fragmentShaders/colorMaskFragment.d.ts +6 -0
- package/lib/typescript/src/shaders/fragmentShaders/colorMaskFragment.d.ts.map +1 -0
- package/lib/typescript/src/shaders/pipelineSetups.d.ts +7 -0
- package/lib/typescript/src/shaders/pipelineSetups.d.ts.map +1 -0
- package/lib/typescript/src/shaders/resourceManagement.d.ts +3 -0
- package/lib/typescript/src/shaders/resourceManagement.d.ts.map +1 -0
- package/lib/typescript/src/shaders/tgpuUtils.d.ts +6 -0
- package/lib/typescript/src/shaders/tgpuUtils.d.ts.map +1 -0
- package/lib/typescript/src/shaders/utils.d.ts +13 -0
- package/lib/typescript/src/shaders/utils.d.ts.map +1 -0
- package/lib/typescript/src/shaders/vertexShaders/mainVertex.d.ts +6 -0
- package/lib/typescript/src/shaders/vertexShaders/mainVertex.d.ts.map +1 -0
- package/lib/typescript/src/types/typeUtils.d.ts +16 -0
- package/lib/typescript/src/types/typeUtils.d.ts.map +1 -0
- package/lib/typescript/src/types/types.d.ts +33 -0
- package/lib/typescript/src/types/types.d.ts.map +1 -0
- package/package.json +158 -13
- package/src/index.tsx +289 -0
- package/src/roots.ts +16 -0
- package/src/shaders/bindGroupLayouts.ts +40 -0
- package/src/shaders/bindGroupUtils.ts +101 -0
- package/src/shaders/fragmentShaders/bloomFragment.ts +83 -0
- package/src/shaders/fragmentShaders/colorMaskFragment.ts +35 -0
- package/src/shaders/pipelineSetups.ts +33 -0
- package/src/shaders/resourceManagement.ts +22 -0
- package/src/shaders/tgpuUtils.ts +75 -0
- package/src/shaders/utils.ts +103 -0
- package/src/shaders/vertexShaders/mainVertex.ts +35 -0
- package/src/types/typeUtils.ts +122 -0
- 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":[]}
|