Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29,268 changes: 29,268 additions & 0 deletions apps/bundle-test/dist-tsdown/slim.js
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

issue/suggestion/question: The bundle test pages throw an error and don't show anything. Shall we maybe not have the bundle-test folder in the repo? This might reduce maintenance work in the future.

Large diffs are not rendered by default.

13 changes: 13 additions & 0 deletions apps/bundle-test/full.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Bundle test — full (no :extends)</title>
<style> body { margin: 0; } </style>
</head>
<body>
<div id="app"></div>
<script type="module" src="/src/main-full.ts"></script>
</body>
</html>
13 changes: 13 additions & 0 deletions apps/bundle-test/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Bundle test — TresCanvas (full THREE)</title>
<style> body { margin: 0; } </style>
</head>
<body>
<div id="app"></div>
<script type="module" src="/src/main-slim.ts"></script>
</body>
</html>
28 changes: 28 additions & 0 deletions apps/bundle-test/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
{
"name": "bundle-test",
"type": "module",
"version": "0.0.0",
"private": true,
"scripts": {
"dev": "vite",
"build": "vite build",
"build:slim": "vite build --mode slim",
"build:full": "vite build --mode full",
"build:createtres": "vite build --mode createtres",
"preview": "vite preview",
"build:tsdown:slim": "tsdown --config tsdown.slim.config.mts",
"build:tsdown:full": "tsdown --config tsdown.full.config.mts"
},
"dependencies": {
"@tresjs/core": "workspace:^",
"vue": "catalog:vue"
},
"devDependencies": {
"@vitejs/plugin-vue": "catalog:vite",
"rollup-plugin-visualizer": "catalog:build",
"tsdown": "catalog:build",
"unplugin-vue": "^7.1.1",
"vite": "catalog:vite",
"vue-tsc": "catalog:typescript"
}
}
13 changes: 13 additions & 0 deletions apps/bundle-test/slim.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Bundle test — createTresApp (tree-shaking)</title>
<style> body { margin: 0; } </style>
</head>
<body>
<canvas id="canvas"></canvas>
<script type="module" src="/src/main-slim.ts"></script>
</body>
</html>
15 changes: 15 additions & 0 deletions apps/bundle-test/src/AppFull.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<script setup lang="ts">
import { TresCanvas } from '@tresjs/core'
</script>

<template>
<TresCanvas window-size>
<TresPerspectiveCamera :position="[3, 3, 3]" :look-at="[0, 0, 0]" />
<TresAmbientLight :intensity="1" />
<TresDirectionalLight :position="[0, 8, 4]" :intensity="0.7" />
<TresMesh>
<TresBoxGeometry />
<TresMeshStandardMaterial color="hotpink" />
</TresMesh>
</TresCanvas>
</template>
9 changes: 9 additions & 0 deletions apps/bundle-test/src/SceneCreateTres.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<template>
<TresPerspectiveCamera :position="[3, 3, 3]" :look-at="[0, 0, 0]" />
<TresAmbientLight :intensity="1" />
<TresDirectionalLight :position="[0, 8, 4]" :intensity="0.7" />
<TresMesh>
<TresBoxGeometry />
<TresMeshStandardMaterial color="hotpink" />
</TresMesh>
</template>
4 changes: 4 additions & 0 deletions apps/bundle-test/src/main-full.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
import { createApp } from 'vue'
import AppFull from './AppFull.vue'

createApp(AppFull).mount('#app')
22 changes: 22 additions & 0 deletions apps/bundle-test/src/main-slim.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
/* import {
AmbientLight,
BoxGeometry,
DirectionalLight,
Mesh,
MeshStandardMaterial,
PerspectiveCamera,
} from 'three'
import { createTresApp } from '@tresjs/core/slim'
import SceneCreateTres from './SceneCreateTres.vue'

const canvas = document.getElementById('canvas') as HTMLCanvasElement

const root = createTresApp(canvas, { windowSize: true })

root
.extend({ AmbientLight, BoxGeometry, DirectionalLight, Mesh, MeshStandardMaterial, PerspectiveCamera })
.render(SceneCreateTres)
*/
Comment on lines +1 to +19
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
/* import {
AmbientLight,
BoxGeometry,
DirectionalLight,
Mesh,
MeshStandardMaterial,
PerspectiveCamera,
} from 'three'
import { createTresApp } from '@tresjs/core/slim'
import SceneCreateTres from './SceneCreateTres.vue'
const canvas = document.getElementById('canvas') as HTMLCanvasElement
const root = createTresApp(canvas, { windowSize: true })
root
.extend({ AmbientLight, BoxGeometry, DirectionalLight, Mesh, MeshStandardMaterial, PerspectiveCamera })
.render(SceneCreateTres)
*/

import { WebGLRenderer } from 'three'

export default new WebGLRenderer({ canvas: document.getElementById('canvas') as HTMLCanvasElement })
4,949 changes: 4,949 additions & 0 deletions apps/bundle-test/stats-createtres.html

Large diffs are not rendered by default.

4,949 changes: 4,949 additions & 0 deletions apps/bundle-test/stats-full.html

Large diffs are not rendered by default.

4,949 changes: 4,949 additions & 0 deletions apps/bundle-test/stats-production.html

Large diffs are not rendered by default.

4,949 changes: 4,949 additions & 0 deletions apps/bundle-test/stats-slim.html

Large diffs are not rendered by default.

4,949 changes: 4,949 additions & 0 deletions apps/bundle-test/stats-tsdown-slim.html

Large diffs are not rendered by default.

20 changes: 20 additions & 0 deletions apps/bundle-test/tsdown.full.config.mts
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import { defineConfig } from 'tsdown'
import { resolve } from 'node:path'
import { visualizer } from 'rollup-plugin-visualizer'

export default defineConfig({
entry: {
full: './src/main-full.ts',
},
outDir: 'dist-tsdown',
platform: 'browser',
plugins: [
visualizer({ filename: 'stats-tsdown-full.html', open: false, gzipSize: true }),
],
resolve: {
alias: {
'@tresjs/core/slim': resolve('./../../packages/core/src/slim.ts'),
'@tresjs/core': resolve('./../../packages/core/src/index.ts'),
},
},
})
26 changes: 26 additions & 0 deletions apps/bundle-test/tsdown.slim.config.mts
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import { defineConfig } from 'tsdown'
import { resolve } from 'node:path'
import Vue from 'unplugin-vue/rolldown'
import { visualizer } from 'rollup-plugin-visualizer'

export default defineConfig({
entry: {
slim: './src/main-slim.ts',
},
outDir: 'dist-tsdown',
platform: 'neutral',
noExternal: [/./],
/* minify: true, */
plugins: [
Vue({ isProduction: true }),
visualizer({ filename: 'stats-tsdown-slim.html', open: false, gzipSize: true }),
],
inputOptions: {
resolve: {
alias: {
'@tresjs/core/slim': resolve('./../../packages/core/src/slim.ts'),
'@tresjs/core': resolve('./../../packages/core/src/index.ts'),
},
},
},
})
25 changes: 25 additions & 0 deletions apps/bundle-test/vite.config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import { templateCompilerOptions } from '@tresjs/core'
import vue from '@vitejs/plugin-vue'
import { resolve } from 'node:path'
import { defineConfig } from 'vite'
import { visualizer } from 'rollup-plugin-visualizer'

export default defineConfig(({ mode }) => ({
plugins: [
vue(templateCompilerOptions),
visualizer({ filename: `stats-${mode}.html`, open: false }),
],
resolve: {
alias: {
'@tresjs/core/slim': resolve(__dirname, '../../packages/core/src/slim.ts'),
'@tresjs/core': resolve(__dirname, '../../packages/core/src/index.ts'),
},
},
build: {
target: 'esnext',
modulePreload: { polyfill: false },
rollupOptions: {
input: resolve(__dirname, mode === 'full' ? 'full.html' : mode === 'slim' ? 'slim.html' : 'index.html'),
},
},
}))
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<script setup lang="ts">
import { OrbitControls } from '@tresjs/cientos'
</script>

<template>
<TresPerspectiveCamera :position="[5, 5, 5]" :look-at="[0, 0, 0]" />
<TresGridHelper />
<TresAmbientLight :intensity="1" />
<TresDirectionalLight :position="[0, 8, 4]" :intensity="0.7" />
<OrbitControls />
<TresMesh>
<TresBoxGeometry />
<TresMeshStandardMaterial color="hotpink" />
</TresMesh>
</template>
34 changes: 34 additions & 0 deletions apps/playground/src/pages/core/advanced/manual-extend/index.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
<script setup lang="ts">
import { onMounted, onUnmounted, ref } from 'vue'
import { createTresApp } from '@tresjs/core'
import {
AmbientLight,
BoxGeometry,
DirectionalLight,
GridHelper,
Mesh,
MeshStandardMaterial,
PerspectiveCamera,
} from 'three'
import Experience from './experience.vue'

const canvasRef = ref<HTMLCanvasElement>()
let root: ReturnType<typeof createTresApp>

onMounted(() => {
if (!canvasRef.value) { return }

root = createTresApp(canvasRef.value, { windowSize: true })
root
.extend({ AmbientLight, BoxGeometry, DirectionalLight, GridHelper, Mesh, MeshStandardMaterial, PerspectiveCamera })
.render(Experience)
})

onUnmounted(() => {
root?.dispose()
})
</script>

<template>
<canvas ref="canvasRef" />
</template>
5 changes: 5 additions & 0 deletions apps/playground/src/router/routes/core/advanced.ts
Original file line number Diff line number Diff line change
Expand Up @@ -59,4 +59,9 @@ export const advancedRoutes = [
name: 'WebGPU',
component: () => import('@/pages/core/advanced/webGPU/index.vue'),
},
{
path: '/core/advanced/manual-extend',
name: 'createTresApp',
component: () => import('@/pages/core/advanced/manual-extend/index.vue'),
}
]
2 changes: 1 addition & 1 deletion apps/playground/tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
"moduleResolution": "bundler",
"paths": {
"@/*": ["./src/*"],
"@tresjs/core": ["../../src"]
"@tresjs/core": ["../../packages/core/src"]
},
"resolveJsonModule": true,
"strict": true,
Expand Down
7 changes: 7 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,13 @@
],
"overrides": {
"ipx": "3.0.2"
},
"packageExtensions": {
"@pmndrs/pointer-events": {
"peerDependencies": {
"three": "*"
}
}
}
}
}
4 changes: 4 additions & 0 deletions packages/core/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
"sideEffects": false,
"exports": {
".": "./dist/tres.js",
"./slim": "./dist/slim.js",
"./template-compiler-options": "./dist/template-compiler-options.mjs",
"./package.json": "./package.json"
},
Expand All @@ -28,6 +29,9 @@
"types": "./dist/tres.d.ts",
"typesVersions": {
"*": {
"slim": [
"dist/slim.d.ts"
],
"template-compiler-options": [
"dist/template-compiler-options.d.mts"
]
Expand Down
9 changes: 4 additions & 5 deletions packages/core/src/components/Context.vue
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
import { PerspectiveCamera, Scene, WebGLRenderer } from 'three'
import type { App } from 'vue'
import type { TresCamera, TresContextWithClock, TresObject, TresPointerEvent, TresScene } from '../types'
import * as THREE from 'three'
import {
createRenderer,
defineComponent,
Expand All @@ -25,7 +24,6 @@ import type { TresCustomRendererOptions } from '../core/nodeOps'
import { nodeOps } from '../core/nodeOps'
import { isScene } from '../utils/is'
import { disposeObject3D } from '../utils/'
import { registerTresDevtools } from '../devtools'
import { promiseTimeout } from '@vueuse/core'
import type { TresPointerEventName } from '../utils/pointerEvents'

Expand Down Expand Up @@ -82,7 +80,6 @@ const slots = defineSlots<{
const scene = shallowRef<TresScene | Scene>(new Scene())

const instance = getCurrentInstance()
extend(THREE)

const createInternalComponent = (context: TresContext, empty = false) =>
defineComponent({
Expand Down Expand Up @@ -118,8 +115,10 @@ const createInternalComponent = (context: TresContext, empty = false) =>
provide(CONTEXT_INJECTION_KEY, context)
provide('extend', extend)

if (typeof window !== 'undefined' && ctx?.app) {
registerTresDevtools(ctx?.app, context)
if (import.meta.env.DEV && typeof window !== 'undefined' && ctx?.app) {
import('../devtools').then(({ registerTresDevtools }) => {
registerTresDevtools(ctx?.app as App, context)
})
}
return () => h(Fragment, null, !empty ? slots.default() : [])
},
Expand Down
20 changes: 12 additions & 8 deletions packages/core/src/components/TresCanvas.vue
Original file line number Diff line number Diff line change
@@ -1,18 +1,12 @@
<script setup lang="ts">
import * as THREE from 'three'
import { ACESFilmicToneMapping, PCFSoftShadowMap } from 'three'
import { ref, shallowRef } from 'vue'
import { version } from '../../package.json' with { type: 'json' }
import type { TresContext } from '../composables'
import type { ContextEmits, ContextProps } from './Context.vue'
import Context from './Context.vue'

export type TresCanvasEmits = ContextEmits
export type TresCanvasProps = ContextProps

export interface TresCanvasInstance {
get context(): TresContext | undefined
dispose: () => void
}
import { extend } from '../core/catalogue'

const props = withDefaults(defineProps<TresCanvasProps>(), {
alpha: undefined,
Expand Down Expand Up @@ -42,6 +36,16 @@ defineSlots<{
default: () => any
}>()

extend(THREE)

export type TresCanvasEmits = ContextEmits
export type TresCanvasProps = ContextProps

export interface TresCanvasInstance {
get context(): TresContext | undefined
dispose: () => void
}

const canvasRef = ref<HTMLCanvasElement>()
const contextRef = shallowRef<{ context: TresContext, dispose: () => void }>()

Expand Down
Loading
Loading