添加静默提交功能
This commit is contained in:
parent
ce3dc618d0
commit
835cdba82d
@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "material-editor",
|
||||
"private": true,
|
||||
"version": "1.0.4",
|
||||
"version": "1.0.5",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "vite",
|
||||
|
@ -27,7 +27,7 @@ async function textureRenderUpdate(textureRecord:TextureTableRecord){
|
||||
/**
|
||||
* 材质编辑器
|
||||
*/
|
||||
export class MaterialEditor extends Singleton
|
||||
export class MaterialEditor
|
||||
{
|
||||
Geometrys: Map<string, Geometry | BufferGeometry>;
|
||||
|
||||
@ -40,9 +40,8 @@ export class MaterialEditor extends Singleton
|
||||
|
||||
private _MeshMaterial: MeshPhysicalMaterial = new MeshPhysicalMaterial({});
|
||||
//构造
|
||||
private constructor()
|
||||
constructor()
|
||||
{
|
||||
super();
|
||||
this.initGeometrys();
|
||||
|
||||
this.LoadDefaultExr();
|
||||
|
@ -1,6 +1,5 @@
|
||||
import { ImageLoader } from "three";
|
||||
|
||||
let loader = new ImageLoader();
|
||||
export async function LoadImageFromUrl(url: string): Promise<HTMLImageElement>
|
||||
{
|
||||
return new Promise<HTMLImageElement>(async (res, rej) =>
|
||||
@ -11,6 +10,7 @@ export async function LoadImageFromUrl(url: string): Promise<HTMLImageElement>
|
||||
return;
|
||||
};
|
||||
|
||||
var loader = new ImageLoader();
|
||||
loader.load(url,
|
||||
img => res(img), e => { },
|
||||
err => res(undefined)
|
||||
|
@ -2,9 +2,11 @@ import { createApp, type App as VueApp } from 'vue'
|
||||
|
||||
import App from '../App.vue'
|
||||
import '../assets/main.css'
|
||||
import { createPinia } from 'pinia';
|
||||
import { createPinia, disposePinia } from 'pinia';
|
||||
import { ConfigureLibOutput, type LibOutputConfig } from './libOutputConfig';
|
||||
import { useEvent } from '../stores/eventStore';
|
||||
import { useScene, useSceneRaw } from '../stores/sceneStore';
|
||||
import { DeflateAsync } from '../helpers/helper.compression';
|
||||
|
||||
let app: VueApp<Element> = undefined;
|
||||
|
||||
@ -41,3 +43,20 @@ export function Submit() {
|
||||
export function UpdateTexture() {
|
||||
useEvent().Publish('update-texture');
|
||||
}
|
||||
|
||||
export async function SubmitRawAsync(options: { textureSrc: string }): Promise<{ file: string }>
|
||||
{
|
||||
const scene = useSceneRaw();
|
||||
|
||||
const virtualDom = document.createElement('div');
|
||||
virtualDom.style.display = 'none';
|
||||
scene.Initial(virtualDom);
|
||||
await scene.ChangeTextureAsync(options.textureSrc);
|
||||
var json = btoa(String.fromCharCode(...await DeflateAsync(await scene.SerializeMaterialAsync())));
|
||||
|
||||
scene.Dispose();
|
||||
virtualDom.remove();
|
||||
return {
|
||||
file: json
|
||||
};
|
||||
}
|
@ -1,9 +1,10 @@
|
||||
import { Mount, Unmount, Submit, UpdateTexture, Configure } from "./entry";
|
||||
import { Mount, Unmount, Submit, UpdateTexture, Configure, SubmitRawAsync } from "./entry";
|
||||
|
||||
export {
|
||||
Mount,
|
||||
Unmount,
|
||||
Submit,
|
||||
UpdateTexture,
|
||||
Configure
|
||||
Configure,
|
||||
SubmitRawAsync
|
||||
}
|
@ -19,4 +19,4 @@ export const useEvent = defineStore('event', () => {
|
||||
return { Subscribe, Publish, Unsubscribe };
|
||||
});
|
||||
|
||||
export type EventNames = 'submit' | 'update-texture'
|
||||
export type EventNames = 'submit' | 'update-texture';
|
@ -7,7 +7,7 @@ import { Texture } from "three";
|
||||
import { materialRenderer } from "../common/MaterialRenderer";
|
||||
import { MaterialOut } from "../common/MaterialSerializer";
|
||||
|
||||
export const useScene = defineStore('scene', () => {
|
||||
const sceneSetup = () => {
|
||||
let _editor: MaterialEditor | undefined;
|
||||
let _database: Database | undefined;
|
||||
const _currGeometry = ref<string>('球');
|
||||
@ -35,7 +35,7 @@ export const useScene = defineStore('scene', () => {
|
||||
// 为Material配置一个ObjectId,否则其无法被序列化
|
||||
// Material.value.objectId = new ObjectId(undefined, undefined);
|
||||
|
||||
_editor = MaterialEditor.GetInstance();
|
||||
_editor = new MaterialEditor();
|
||||
Geometries.value = Array.from(_editor.Geometrys.keys());
|
||||
_currGeometry.value = _editor.CurGeometryName;
|
||||
|
||||
@ -50,16 +50,12 @@ export const useScene = defineStore('scene', () => {
|
||||
}
|
||||
|
||||
function Dispose() {
|
||||
console.log("Disposing...");
|
||||
Material.value.GoodBye();
|
||||
_editor?.Dispose();
|
||||
_editor = undefined;
|
||||
_database.Destroy();
|
||||
_database = undefined;
|
||||
window.onresize = undefined;
|
||||
|
||||
// 释放Singleton
|
||||
MaterialEditor.ReleaseInstance();
|
||||
}
|
||||
|
||||
function ChangeGeometry(geoName: string) {
|
||||
@ -150,7 +146,10 @@ export const useScene = defineStore('scene', () => {
|
||||
GenerateMaterialLogoAsync,
|
||||
Dispose
|
||||
};
|
||||
});
|
||||
};
|
||||
|
||||
export const useScene = defineStore('scene', sceneSetup);
|
||||
export const useSceneRaw = defineStore('sceneRaw', sceneSetup); // 独立场景,用来静默执行材质序列化
|
||||
|
||||
export type TextureAdjustment = {
|
||||
wrapS: number,
|
||||
|
Loading…
Reference in New Issue
Block a user