const path = require('path'); const gulp = require('gulp'); const exec = require('child_process').exec; const fs = require("fs"); const fsp = fs.promises; const concat = require('gulp-concat'); const connect = require('gulp-connect'); const {watch} = gulp; const {createExamplesPage} = require("./src/tools/create_potree_page"); const {createGithubPage} = require("./src/tools/create_github_page"); const {createIconsPage} = require("./src/tools/create_icons_page"); let paths = { laslaz: [ "build/workers/laslaz-worker.js", "build/workers/lasdecoder-worker.js", ], html: [ "src/viewer/potree.css", "src/viewer/sidebar1.html","src/viewer/sidebar2.html", "src/viewer/profile.html" ], resources: [ "resources/**/*" ] }; let workers = { "LASLAZWorker": [ "libs/plasio/workers/laz-perf.js", "libs/plasio/workers/laz-loader-worker.js" ], "LASDecoderWorker": [ "src/workers/LASDecoderWorker.js" ], "EptLaszipDecoderWorker": [ "src/workers/EptLaszipDecoderWorker.js" ], "EptBinaryDecoderWorker": [ "libs/ept/ParseBuffer.js", "src/workers/EptBinaryDecoderWorker.js" ], "EptZstandardDecoderWorker": [ "src/workers/EptZstandardDecoder_preamble.js", 'libs/zstd-codec/bundle.js', "libs/ept/ParseBuffer.js", "src/workers/EptZstandardDecoderWorker.js" ] }; // these libs are lazily loaded // in order for the lazy loader to find them, independent of the path of the html file, // we package them together with potree let lazyLibs = { "geopackage": "libs/geopackage", "sql.js": "libs/sql.js" }; let shaders = [ "src/materials/shaders/pointcloud_new.vs", "src/materials/shaders/pointcloud_new.fs", "src/materials/shaders/pointcloud_sm.vs", "src/materials/shaders/pointcloud_sm.fs", "src/materials/shaders/normalize.vs", "src/materials/shaders/normalize.fs", "src/materials/shaders/normalize_and_edl.fs", "src/materials/shaders/edl_new.vs", "src/materials/shaders/edl_new.fs", "src/materials/shaders/blur.vs", "src/materials/shaders/blur.fs", //add: "src/materials/shaders/depthBasic.vs", "src/materials/shaders/depthBasic.fs", "src/materials/shaders/copyCubeMap.vs", "src/materials/shaders/copyCubeMap.fs", "src/materials/shaders/basicTextured.vs", "src/materials/shaders/basicTextured.fs", "src/materials/shaders/skybox.vs", "src/materials/shaders/skybox.fs", ]; 'src/**/*.js', // For development, it is now possible to use 'gulp webserver' // from the command line to start the server (default port is 8080) gulp.task('webserver', gulp.series(async function() { server = connect.server({ port: 1234, host:'192.168.0.113', https: true, }); })); gulp.task('examples_page', async function(done) { await Promise.all([ createExamplesPage(), createGithubPage(), ]); done(); }); gulp.task('icons_viewer', async function(done) { await createIconsPage(); done(); }); gulp.task('test', async function() { console.log("asdfiae8ofh"); }); gulp.task("workers", async function(done){ for(let workerName of Object.keys(workers)){ gulp.src(workers[workerName]) .pipe(concat(`${workerName}.js`)) .pipe(gulp.dest('build/potree/workers')); } done(); }); gulp.task("lazylibs", async function(done){ for(let libname of Object.keys(lazyLibs)){ const libpath = lazyLibs[libname]; gulp.src([`${libpath}/**/*`]) .pipe(gulp.dest(`build/potree/lazylibs/${libname}`)); } done(); }); gulp.task("shaders", async function(){ const components = [ "let Shaders = {};" ]; for(let file of shaders){ const filename = path.basename(file); const content = await fsp.readFile(file); const prep = `Shaders["${filename}"] = \`${content}\``; components.push(prep); } components.push("export {Shaders};"); const content = components.join("\n\n"); const targetPath = `./build/shaders/shaders.js`; if(!fs.existsSync("build/shaders")){ fs.mkdirSync("build/shaders"); } fs.writeFileSync(targetPath, content, {flag: "w"}); }); gulp.task('build', gulp.series( gulp.parallel("workers", "lazylibs", "shaders", "icons_viewer", "examples_page"), async function(done){ gulp.src(paths.html).pipe(gulp.dest('build/potree')); gulp.src(paths.resources).pipe(gulp.dest('build/potree/resources')); gulp.src(["LICENSE"]).pipe(gulp.dest('build/potree')); done(); } ) ); gulp.task("pack", async function(){ exec('rollup -c', function (err, stdout, stderr) { console.log(stdout); console.log(stderr); }); }); gulp.task('watch', gulp.parallel("build", "pack", "webserver", async function() { let watchlist = [ 'src/**/*.js', 'src/**/**/*.js', 'src/**/*.css', 'src/**/*.html', 'src/**/*.vs', 'src/**/*.fs', 'resources/**/*', 'examples//**/*.json', '!resources/icons/index.html', ]; watch(watchlist, gulp.series("build", "pack")); }));