This commit is contained in:
syuilo 2025-11-03 18:31:39 +09:00
parent 5602ee8615
commit a07fcafdee
8 changed files with 21 additions and 25 deletions

View File

@ -94,7 +94,7 @@ const layers = reactive<ImageEffectorLayer[]>([]);
watch(layers, async () => { watch(layers, async () => {
if (renderer != null) { if (renderer != null) {
renderer.setLayersAndRender(layers); renderer.render(layers);
} }
}, { deep: true }); }, { deep: true });
@ -167,7 +167,7 @@ onMounted(async () => {
fxs: FXS, fxs: FXS,
}); });
await renderer.setLayersAndRender(layers); await renderer.render(layers);
closeWaiting(); closeWaiting();
}); });
@ -194,7 +194,7 @@ async function save() {
await nextTick(); // waiting await nextTick(); // waiting
renderer.changeResolution(imageBitmap.width, imageBitmap.height); // renderer.changeResolution(imageBitmap.width, imageBitmap.height); //
renderer.render(); // toBlob await renderer.render(layers); // toBlob
canvasEl.value.toBlob((blob) => { canvasEl.value.toBlob((blob) => {
emit('ok', new File([blob!], `image-${Date.now()}.png`, { type: 'image/png' })); emit('ok', new File([blob!], `image-${Date.now()}.png`, { type: 'image/png' }));
dialog.value?.close(); dialog.value?.close();
@ -206,9 +206,9 @@ const enabled = ref(true);
watch(enabled, () => { watch(enabled, () => {
if (renderer != null) { if (renderer != null) {
if (enabled.value) { if (enabled.value) {
renderer.setLayersAndRender(layers); renderer.render(layers);
} else { } else {
renderer.setLayersAndRender([]); renderer.render([]);
} }
} }
}); });

View File

@ -206,7 +206,7 @@ async function cancel() {
const updateThrottled = throttle(50, () => { const updateThrottled = throttle(50, () => {
if (renderer != null) { if (renderer != null) {
renderer.updateAndRender(frame); renderer.render(frame);
} }
}); });
@ -285,7 +285,7 @@ async function initRenderer() {
}); });
} }
await renderer!.updateAndRender(frame); await renderer!.render(frame);
} }
onMounted(async () => { onMounted(async () => {

View File

@ -193,7 +193,7 @@ async function cancel() {
watch(preset, async (newValue, oldValue) => { watch(preset, async (newValue, oldValue) => {
if (renderer != null) { if (renderer != null) {
renderer.setLayersAndRender(preset.layers); renderer.render(preset.layers);
} }
}, { deep: true }); }, { deep: true });
@ -277,7 +277,7 @@ async function initRenderer() {
}); });
} }
await renderer!.setLayersAndRender(preset.layers); await renderer!.render(preset.layers);
} }
onMounted(async () => { onMounted(async () => {

View File

@ -612,7 +612,7 @@ export function useUploader(options: {
image: imageBitmap, image: imageBitmap,
}); });
await renderer.setLayersAndRender(item.watermarkPreset.layers); await renderer.render(item.watermarkPreset.layers);
preprocessedFile = await new Promise<Blob>((resolve) => { preprocessedFile = await new Promise<Blob>((resolve) => {
canvas.toBlob((blob) => { canvas.toBlob((blob) => {
@ -638,13 +638,11 @@ export function useUploader(options: {
// title: `${meta_model} + ${meta_lensModel}`, // title: `${meta_model} + ${meta_lensModel}`,
// text: `${date} ${meta_mm}mm f/${meta_f} ${meta_s}s ISO${meta_iso}`, // text: `${date} ${meta_mm}mm f/${meta_f} ${meta_s}s ISO${meta_iso}`,
//}); //});
await frameRenderer.updateAndRender({ await frameRenderer.render({
title: 'aaaaaaaaaaaaa', title: 'aaaaaaaaaaaaa',
text: 'bbbbbbbbbbbbbbbbbbbb', text: 'bbbbbbbbbbbbbbbbbbbb',
}); });
frameRenderer.render();
preprocessedFile = await new Promise<Blob>((resolve) => { preprocessedFile = await new Promise<Blob>((resolve) => {
canvas.toBlob((blob) => { canvas.toBlob((blob) => {
if (blob == null) { if (blob == null) {

View File

@ -78,7 +78,7 @@ onMounted(() => {
image: sampleImage, image: sampleImage,
}); });
await renderer.setLayersAndRender(props.preset.layers); await renderer.render(props.preset.layers);
}, { immediate: true }); }, { immediate: true });
}; };
}); });
@ -92,7 +92,7 @@ onUnmounted(() => {
watch(() => props.preset, async () => { watch(() => props.preset, async () => {
if (renderer != null) { if (renderer != null) {
await renderer.setLayersAndRender(props.preset.layers); await renderer.render(props.preset.layers);
} }
}, { deep: true }); }, { deep: true });
</script> </script>

View File

@ -159,7 +159,9 @@ export class ImageEffector {
} }
} }
public async setLayersAndRender(layers: ImageEffectorLayer[]) { public async render(layers: ImageEffectorLayer[]) {
const fnParams: Record<string, any> = {};
const unused = new Set(this.compositor.getKeysOfRegisteredTextures()); const unused = new Set(this.compositor.getKeysOfRegisteredTextures());
for (const layer of layers) { for (const layer of layers) {
@ -198,7 +200,7 @@ export class ImageEffector {
this.compositor.render(layers.map(layer => ({ this.compositor.render(layers.map(layer => ({
id: layer.id, id: layer.id,
functionId: layer.fxId, functionId: layer.fxId,
params: layer.params, params: fnParams,
}))); })));
} }

View File

@ -69,7 +69,7 @@ export const FX_watermarkPlacement = defineImageEffectorFx({
gl.uniform1i(u.noBBoxExpansion, params.noBoundingBoxExpansion ? 1 : 0); gl.uniform1i(u.noBBoxExpansion, params.noBoundingBoxExpansion ? 1 : 0);
// ウォーターマークテクスチャ // ウォーターマークテクスチャ
const wm = textures.watermark; const wm = textures.get(params.watermark);
if (wm) { if (wm) {
gl.activeTexture(gl.TEXTURE1); gl.activeTexture(gl.TEXTURE1);
gl.bindTexture(gl.TEXTURE_2D, wm.texture); gl.bindTexture(gl.TEXTURE_2D, wm.texture);

View File

@ -83,7 +83,7 @@ export type WatermarkPreset = {
}; };
export class WatermarkRenderer { export class WatermarkRenderer {
private effector: ImageEffector<typeof WATERMARK_FXS>; private effector: ImageEffector;
private layers: WatermarkPreset['layers'] = []; private layers: WatermarkPreset['layers'] = [];
constructor(options: { constructor(options: {
@ -200,13 +200,9 @@ export class WatermarkRenderer {
}); });
} }
public async setLayersAndRender(layers: WatermarkPreset['layers']) { public async render(layers: WatermarkPreset['layers']) {
this.layers = layers; this.layers = layers;
await this.effector.setLayersAndRender(this.makeImageEffectorLayers()); await this.effector.render(this.makeImageEffectorLayers());
}
public render(): void {
this.effector.render();
} }
/* /*