shaders 2.5.113 → 2.5.114
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/dist/core/index.js +5 -0
- package/dist/core/renderer.d.ts +1 -0
- package/dist/core/renderer.d.ts.map +1 -1
- package/dist/js/createShader.js +1 -1
- package/dist/react/Shader.js +1 -1
- package/dist/react/bundle.js +6 -6
- package/dist/solid/engine/Shader.js +1 -1
- package/dist/svelte/index.js +1 -1
- package/dist/vue/Shader.vue_vue_type_script_setup_true_lang.js +65 -37
- package/dist/vue/engine/Shader.vue.d.ts +10 -0
- package/dist/vue/engine/Shader.vue.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -67,7 +67,7 @@ function Shader(allProps) {
|
|
|
67
67
|
const checkRendering = () => {
|
|
68
68
|
const stats = rendererInstance.getPerformanceStats();
|
|
69
69
|
if (stats.fps > 0) {
|
|
70
|
-
const version = "2.5.
|
|
70
|
+
const version = "2.5.114";
|
|
71
71
|
telemetryCollector = startTelemetry(rendererInstance, version, props.disableTelemetry, props.isPreview);
|
|
72
72
|
if (telemetryCollector) {
|
|
73
73
|
telemetryCollector.start();
|
package/dist/svelte/index.js
CHANGED
|
@@ -21540,7 +21540,7 @@ function Shader($$anchor, $$props) {
|
|
|
21540
21540
|
const checkRendering = () => {
|
|
21541
21541
|
if (!rendererInstance) return;
|
|
21542
21542
|
if (rendererInstance.getPerformanceStats().fps > 0) {
|
|
21543
|
-
telemetryCollector = startTelemetry(rendererInstance, "2.5.
|
|
21543
|
+
telemetryCollector = startTelemetry(rendererInstance, "2.5.114", disableTelemetry(), isPreview());
|
|
21544
21544
|
if (telemetryCollector) telemetryCollector.start();
|
|
21545
21545
|
telemetryStartTimeout = null;
|
|
21546
21546
|
} else telemetryStartTimeout = window.setTimeout(checkRendering, 500);
|
|
@@ -60,7 +60,7 @@ var Shader_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineC
|
|
|
60
60
|
const startTelemetryWhenReady = () => {
|
|
61
61
|
const checkRendering = () => {
|
|
62
62
|
if (rendererInstance.value.getPerformanceStats().fps > 0) {
|
|
63
|
-
telemetryCollector = startTelemetry(rendererInstance.value, "2.5.
|
|
63
|
+
telemetryCollector = startTelemetry(rendererInstance.value, "2.5.114", props.disableTelemetry, props.isPreview);
|
|
64
64
|
if (telemetryCollector) telemetryCollector.start();
|
|
65
65
|
telemetryStartTimeout = null;
|
|
66
66
|
} else telemetryStartTimeout = setTimeout(checkRendering, 500);
|
|
@@ -112,52 +112,80 @@ var Shader_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineC
|
|
|
112
112
|
rendererResetSignal.value++;
|
|
113
113
|
}
|
|
114
114
|
});
|
|
115
|
-
const
|
|
116
|
-
if (!canvasRef.value) throw new Error("Canvas not available");
|
|
115
|
+
const renderForCapture = async () => {
|
|
117
116
|
try {
|
|
118
117
|
await rendererInstance.value.renderAndWait();
|
|
119
118
|
} catch (error) {
|
|
120
|
-
console.warn("Failed to force render before
|
|
119
|
+
console.warn("[Shaders] Failed to force render before capture:", error);
|
|
120
|
+
throw error;
|
|
121
121
|
}
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
122
|
+
};
|
|
123
|
+
const canvasToBlob = (source, targetWidth, targetHeight, mimeType, quality) => new Promise((resolve, reject) => {
|
|
124
|
+
const tempCanvas = document.createElement("canvas");
|
|
125
|
+
tempCanvas.width = targetWidth;
|
|
126
|
+
tempCanvas.height = targetHeight;
|
|
127
|
+
const ctx = tempCanvas.getContext("2d");
|
|
128
|
+
if (!ctx) {
|
|
129
|
+
reject(/* @__PURE__ */ new Error("Failed to get canvas context"));
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
ctx.imageSmoothingEnabled = true;
|
|
133
|
+
ctx.imageSmoothingQuality = "high";
|
|
134
|
+
ctx.drawImage(source, 0, 0, targetWidth, targetHeight);
|
|
135
|
+
tempCanvas.toBlob((blob) => {
|
|
136
|
+
if (blob) resolve(blob);
|
|
137
|
+
else reject(/* @__PURE__ */ new Error("Failed to encode image"));
|
|
138
|
+
}, mimeType, quality);
|
|
139
|
+
});
|
|
140
|
+
const captureImage = async (options = {}) => {
|
|
141
|
+
if (!canvasRef.value) throw new Error("Canvas not available");
|
|
142
|
+
await renderForCapture();
|
|
143
|
+
const source = canvasRef.value;
|
|
144
|
+
const format = options.format ?? "png";
|
|
145
|
+
const scale = Math.max(.1, options.scale ?? 1);
|
|
146
|
+
return canvasToBlob(source, Math.round(source.width * scale), Math.round(source.height * scale), format === "png" ? "image/png" : format === "webp" ? "image/webp" : "image/jpeg", format === "png" ? void 0 : options.quality ?? .95);
|
|
147
|
+
};
|
|
148
|
+
const captureScreenshot = async (maxWidth = 1200) => {
|
|
149
|
+
if (!canvasRef.value) throw new Error("Canvas not available");
|
|
150
|
+
await renderForCapture();
|
|
151
|
+
const source = canvasRef.value;
|
|
152
|
+
const sourceWidth = source.width;
|
|
153
|
+
const sourceHeight = source.height;
|
|
154
|
+
let targetWidth = sourceWidth;
|
|
155
|
+
let targetHeight = sourceHeight;
|
|
156
|
+
if (sourceWidth > maxWidth) {
|
|
157
|
+
targetWidth = maxWidth;
|
|
158
|
+
targetHeight = Math.round(sourceHeight / sourceWidth * maxWidth);
|
|
159
|
+
}
|
|
160
|
+
return canvasToBlob(source, targetWidth, targetHeight, "image/jpeg", .85);
|
|
154
161
|
};
|
|
155
162
|
const getPerformanceStats = () => {
|
|
156
163
|
return rendererInstance.value.getPerformanceStats();
|
|
157
164
|
};
|
|
165
|
+
const beginRecordingResolution = async (pixelRatio) => {
|
|
166
|
+
const internal = rendererInstance.value.getInternalRenderer();
|
|
167
|
+
if (!internal || !canvasRef.value) return async () => {};
|
|
168
|
+
const previousRatio = typeof internal.getPixelRatio === "function" ? internal.getPixelRatio() : Math.min(window.devicePixelRatio, 2);
|
|
169
|
+
const cssWidth = canvasRef.value.clientWidth;
|
|
170
|
+
const cssHeight = canvasRef.value.clientHeight;
|
|
171
|
+
const applyRatio = async (ratio) => {
|
|
172
|
+
internal.setPixelRatio(ratio);
|
|
173
|
+
if (typeof internal.setSize === "function") internal.setSize(cssWidth, cssHeight, false);
|
|
174
|
+
await renderForCapture();
|
|
175
|
+
};
|
|
176
|
+
const previousForce = rendererInstance.value.setForceFullFrameRate?.(true) ?? false;
|
|
177
|
+
await applyRatio(pixelRatio);
|
|
178
|
+
return async () => {
|
|
179
|
+
await applyRatio(previousRatio);
|
|
180
|
+
rendererInstance.value.setForceFullFrameRate?.(previousForce);
|
|
181
|
+
};
|
|
182
|
+
};
|
|
158
183
|
__expose({
|
|
184
|
+
captureImage,
|
|
159
185
|
captureScreenshot,
|
|
160
|
-
getPerformanceStats
|
|
186
|
+
getPerformanceStats,
|
|
187
|
+
beginRecordingResolution,
|
|
188
|
+
getCanvas: () => canvasRef.value
|
|
161
189
|
});
|
|
162
190
|
onBeforeUnmount(() => {
|
|
163
191
|
if (telemetryCollector) {
|
|
@@ -4,6 +4,13 @@ interface Props {
|
|
|
4
4
|
colorSpace?: 'p3-linear' | 'srgb';
|
|
5
5
|
isPreview?: boolean;
|
|
6
6
|
}
|
|
7
|
+
type CaptureFormat = 'png' | 'jpeg' | 'webp';
|
|
8
|
+
interface CaptureImageOptions {
|
|
9
|
+
format?: CaptureFormat;
|
|
10
|
+
scale?: number;
|
|
11
|
+
quality?: number;
|
|
12
|
+
maxWidth?: number;
|
|
13
|
+
}
|
|
7
14
|
declare function __VLS_template(): {
|
|
8
15
|
default?(_: {}): any;
|
|
9
16
|
};
|
|
@@ -13,8 +20,11 @@ declare const __VLS_component: import('vue').DefineComponent<import('vue').Extra
|
|
|
13
20
|
colorSpace: string;
|
|
14
21
|
isPreview: boolean;
|
|
15
22
|
}>>, {
|
|
23
|
+
captureImage: (options?: CaptureImageOptions) => Promise<Blob>;
|
|
16
24
|
captureScreenshot: (maxWidth?: number) => Promise<Blob>;
|
|
17
25
|
getPerformanceStats: () => import('../../core').PerformanceStats;
|
|
26
|
+
beginRecordingResolution: (pixelRatio: number) => Promise<() => Promise<void>>;
|
|
27
|
+
getCanvas: () => HTMLCanvasElement | null;
|
|
18
28
|
}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
|
|
19
29
|
ready: () => void;
|
|
20
30
|
}, string, import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<Props>, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Shader.vue.d.ts","sourceRoot":"","sources":["../../src/engine/Shader.vue"],"names":[],"mappings":"AAYA,UAAU,KAAK;IACb,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,yBAAyB,CAAC,EAAE,OAAO,CAAA;IACnC,UAAU,CAAC,EAAE,WAAW,GAAG,MAAM,CAAA;IACjC,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;
|
|
1
|
+
{"version":3,"file":"Shader.vue.d.ts","sourceRoot":"","sources":["../../src/engine/Shader.vue"],"names":[],"mappings":"AAYA,UAAU,KAAK;IACb,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,yBAAyB,CAAC,EAAE,OAAO,CAAA;IACnC,UAAU,CAAC,EAAE,WAAW,GAAG,MAAM,CAAA;IACjC,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;AAgND,KAAK,aAAa,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,CAAA;AAE5C,UAAU,mBAAmB;IAC3B,MAAM,CAAC,EAAE,aAAa,CAAA;IACtB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAsLD,iBAAS,cAAc;qBAkDO,GAAG;EAKhC;AAWD,QAAA,MAAM,eAAe;;;;;;6BAzMgB,mBAAmB,KAAQ,OAAO,CAAC,IAAI,CAAC;8CAsB1B,OAAO,CAAC,IAAI,CAAC;;2CAkCZ,MAAM,KAAG,OAAO,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;;;;;;;;;;;;gBAhU1E,WAAW,GAAG,MAAM;sBAFd,OAAO;+BACE,OAAO;eAEvB,OAAO;4EAwdnB,CAAC;wBACkB,uBAAuB,CAAC,OAAO,eAAe,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AAAvG,wBAAwG;AACxG,KAAK,sBAAsB,CAAC,CAAC,IAAI,CAAC,SAAS,SAAS,GAAG,KAAK,GAAG,CAAC,CAAC;AACjE,KAAK,6BAA6B,CAAC,CAAC,IAAI;KAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,SAAS,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG;QAAE,IAAI,EAAE,OAAO,KAAK,EAAE,QAAQ,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;KAAE,GAAG;QAAE,IAAI,EAAE,OAAO,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,QAAQ,EAAE,IAAI,CAAA;KAAE;CAAE,CAAC;AAC9M,KAAK,kBAAkB,CAAC,CAAC,EAAE,CAAC,IAAI;KAE1B,CAAC,IAAI,MAAM,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,MAAM,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG;QACxE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;KACb,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CACT,CAAC;AACN,KAAK,cAAc,CAAC,CAAC,IAAI;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAG,GAAG,EAAE,CAAC;AACxD,KAAK,uBAAuB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IAAE,QAAO;QAClD,MAAM,EAAE,CAAC,CAAC;KACT,CAAA;CAAE,CAAC"}
|