UNPKG

@xrengine/server-core

Version:

Shared components for XREngine server

51 lines (45 loc) 1.76 kB
import appRootPath from 'app-root-path' import { exec } from 'child_process' import fs from 'fs' import path from 'path' import { MathUtils } from 'three' import util from 'util' import { KTX2EncodeArguments } from '@xrengine/engine/src/assets/constants/CompressionParms' import { Application } from '../../../declarations' declare module '@xrengine/common/declarations' { interface ServiceTypes { 'ktx2-encode': { create: (data: KTX2EncodeArguments) => Promise<string> } } } async function createKtx2(data: KTX2EncodeArguments): Promise<string> { const promiseExec = util.promisify(exec) const serverDir = path.join(appRootPath.path, 'packages/server') const projectDir = path.join(appRootPath.path, 'packages/projects') const tmpDir = path.join(serverDir, `tmp-${MathUtils.generateUUID()}`) const BASIS_U = path.join(appRootPath.path, 'packages/server/public/loader_decoders/basisu') const inURI = /.*(projects\/.*)$/.exec(data.src)![1] const inPath = path.join(projectDir, inURI) const outPath = inPath.replace(/\.[^\.]+$/, '.ktx2') const outURIDir = path.dirname(inURI) const fileName = /[^\\/]*$/.exec(outPath)![0] const command = `${BASIS_U} -ktx2${data.mode === 'UASTC' ? ' -uastc' : ''}${ data.mipmaps ? ' -mipmap' : '' } -y_flip -linear -q ${data.quality} ${inPath}` console.log(command) console.log(await promiseExec(command)) console.log(await promiseExec(`mv ${fileName} ${outPath}`)) const result = await this.app.service('file-browser').patch(null, { fileName, path: outURIDir, body: fs.readFileSync(outPath), contentType: 'image/ktx2' }) return result } export default (app: Application): any => { app.use('ktx2-encode', { create: createKtx2.bind({ app }) }) }