\n \u003CVisuTrackBallControls />\n \u003C/TresPerspectiveCamera>\n \u003C/TresCanvas>\n`\n\n[VisuTrackBallControls.vue.txt](https://github.com/user-attachments/files/18799562/VisuTrackBallControls.vue.txt)\n\n### Alternative\n\n_No response_\n\n### Additional context\n\n_No response_\n\n### Validations\n\n- [x] I agree to follow this project's [Code of Conduct](https://github.com/Tresjs/cientos/blob/main/CODE_OF_CONDUCT.md)\n- [x] Read the [Contributing Guidelines](https://github.com/Tresjs/cientos/blob/main/CONTRIBUTING.md).\n- [x] Read the [docs](https://cientos.tresjs.org/guide).\n- [x] Check that there isn't [already an issue](https://github.com/tresjs/cientos/issues) that reports the same bug to avoid creating a duplicate.",[],595,"Add TrackballControls to Cientos","2025-02-14T13:18:40Z","https://github.com/Tresjs/cientos/issues/595",0.72243327,{"description":2922,"labels":2923,"number":2930,"owner":2857,"repository":2883,"state":2859,"title":2931,"updated_at":2932,"url":2933,"score":2934},"### Description\r\n\r\nAs a developer using TresJS, I want to have a `\u003CPortal>` component that can contain a separate `Scene` and `context`.\r\n\r\n### Suggested solution\r\n\r\nProvide a `\u003CPortal>` component similar to R3F.\r\n\r\n### Requirements\r\n\r\n- [ ] Add override-able pointer to `TresContext` (Also add as prop to TresCanvas: see #581 ); use vanilla `THREE.Vector2`, accept `Vector2` and `UsePointerOptions` as TresCanvas prop\r\n- [ ] Make these fields on `TresContext` swappable and (in some case injectable by the user): scene, camera, cameras, controls, raycaster, eventManager, sizes\r\n\r\n### Validations\r\n\r\n- [X] I agree to follow this project's [Code of Conduct](https://github.com/Tresjs/tres/blob/main/CODE_OF_CONDUCT.md)\r\n- [X] Read the [Contributing Guidelines](https://github.com/Tresjs/tres/blob/main/CONTRIBUTING.md).\r\n- [X] Read the [docs](https://tresjs.org/guide).\r\n- [X] Check that there isn't [already an issue](https://github.com/tresjs/tres/issues) that reports the same bug to avoid creating a duplicate.",[2924,2927],{"name":2925,"color":2926},"p3-significant","2C78E3",{"name":2928,"color":2929},"v5","EFC959",789,"Portal","2025-02-06T09:59:01Z","https://github.com/Tresjs/tres/issues/789",0.7403908,{"description":2936,"labels":2937,"number":2943,"owner":2857,"repository":2883,"state":2859,"title":2944,"updated_at":2945,"url":2946,"score":2947},"### Description\n\nWebGPU [Three.js r171](https://github.com/mrdoob/three.js/releases) has been released and it’s a major milestone for WebGPU integration with third-party libraries such as React Three Fiber and bundlers like Vite or Next.js. We can now do this with zero configuration:\r\n\r\nThree.js Vanilla Three.js\r\n\r\n```ts\r\nimport * as THREE from 'three'\r\nimport { WebGPURenderer } from 'three/webgpu'\r\n \r\nconst renderer = new WebGPURenderer()\r\n```\r\n\r\nR3F\r\n\r\n```ts\r\nimport { Canvas } from '@react-three/fiber'\r\nimport { WebGPURenderer } from 'three/webgpu'\r\n \r\n\u003CCanvas gl={canvas => new WebGPURenderer({ canvas })}>\r\n```\n\n### Suggested solution\n\nEnable a `renderer` prop to override the renderer, restricted to canvas-based WebGL/WebGPU renderers.\r\n\r\n```vue\r\n\u003Cscript setup>\r\nimport { WebGPURenderer } from 'three/webgpu'\r\n\u003C/script>\r\n\r\n\u003Ctemplate>\r\n \u003CTresCanvas :renderer=\"WebGPURenderer\" />\r\n\u003C/template>\r\n```\n\n### Alternative\n\n_No response_\n\n### Additional context\n\n_No response_\n\n### Validations\n\n- [X] I agree to follow this project's [Code of Conduct](https://github.com/Tresjs/tres/blob/main/CODE_OF_CONDUCT.md)\n- [X] Read the [Contributing Guidelines](https://github.com/Tresjs/tres/blob/main/CONTRIBUTING.md).\n- [X] Read the [docs](https://tresjs.org/guide).\n- [X] Check that there isn't [already an issue](https://github.com/tresjs/tres/issues) that reports the same bug to avoid creating a duplicate.",[2938,2941,2942],{"name":2939,"color":2940},"feature","c2e0c6",{"name":2925,"color":2926},{"name":2928,"color":2929},883,"WebGPU support","2025-02-06T09:35:42Z","https://github.com/Tresjs/tres/issues/883",0.7431651,{"description":2949,"labels":2950,"number":2953,"owner":2857,"repository":2883,"state":2859,"title":2954,"updated_at":2955,"url":2956,"score":2957},"### Description\n\nAs a maintainer of TresJS, I would like to clean up the core logic by refactoring it to use VueUse `createInjectionState` https://vueuse.org/shared/createInjectionState/#createinjectionstate instead\n\n### Suggested solution\n\nReplace manual context provider with something like:\n\n```ts\nconst [useTresContextProvider, useTresContext] = createInjectionState((props, emit) => {\n // Create refs with initial null values\n const scene = shallowRef\u003CTresScene | null>(null)\n const renderer = shallowRef\u003CWebGLRenderer | null>(null)\n const camera = shallowRef\u003CPerspectiveCamera | null>(null)\n const loop = createRenderLoop()\n\n // Render mode logic etc\n})\n\nexport { useTresContext, useTresContextProvider }\n```\n\n### Alternative\n\n_No response_\n\n### Additional context\n\n_No response_\n\n### Validations\n\n- [x] I agree to follow this project's [Code of Conduct](https://github.com/Tresjs/tres/blob/main/CODE_OF_CONDUCT.md)\n- [x] Read the [Contributing Guidelines](https://github.com/Tresjs/tres/blob/main/CONTRIBUTING.md).\n- [x] Read the [docs](https://tresjs.org/guide).\n- [x] Check that there isn't [already an issue](https://github.com/tresjs/tres/issues) that reports the same bug to avoid creating a duplicate.",[2951,2952],{"name":2925,"color":2926},{"name":2928,"color":2929},961,"Refactor `useTresContextProvider` into `createInjectionState`","2025-03-18T15:30:44Z","https://github.com/Tresjs/tres/issues/961",0.7464757,{"description":2959,"labels":2960,"number":2967,"owner":2857,"repository":2883,"state":2859,"title":2968,"updated_at":2969,"url":2970,"score":2971},"### Description\n\nHow to use vue-cli\n\n### Suggested solution\n\nHow to use vue-cli\n\n### Alternative\n\n_No response_\n\n### Additional context\n\n_No response_\n\n### Validations\n\n- [X] I agree to follow this project's [Code of Conduct](https://github.com/Tresjs/tres/blob/main/CODE_OF_CONDUCT.md)\n- [X] Read the [Contributing Guidelines](https://github.com/Tresjs/tres/blob/main/CONTRIBUTING.md).\n- [X] Read the [docs](https://tresjs.org/guide).\n- [X] Check that there isn't [already an issue](https://github.com/tresjs/tres/issues) that reports the same bug to avoid creating a duplicate.",[2961,2964,2965,2966],{"name":2962,"color":2963},"bug","d73a4a",{"name":2871,"color":2872},{"name":2874,"color":2875},{"name":2877,"color":2878},754,"How to use vue-cli","2024-08-21T09:51:50Z","https://github.com/Tresjs/tres/issues/754",0.7500141,{"description":2973,"labels":2974,"number":2978,"owner":2857,"repository":2883,"state":2979,"title":2980,"updated_at":2981,"url":2982,"score":2983},"### Description\n\nAs a maintainer of TresJS, I would like to separate concerns into different composables. The goal is that `useTresContextProvider` unique purpose to orchestrate and return the context state.\n\n\n\n\n### Suggested solution\n\nMove all render-related logic to useRenderer:\n\n- Creation of renderer\n- Render modes logic (mode, invalidate, advance)\n\n### Alternative\n\n_No response_\n\n### Additional context\n\n_No response_\n\n### Validations\n\n- [x] I agree to follow this project's [Code of Conduct](https://github.com/Tresjs/tres/blob/main/CODE_OF_CONDUCT.md)\n- [x] Read the [Contributing Guidelines](https://github.com/Tresjs/tres/blob/main/CONTRIBUTING.md).\n- [x] Read the [docs](https://tresjs.org/guide).\n- [x] Check that there isn't [already an issue](https://github.com/tresjs/tres/issues) that reports the same bug to avoid creating a duplicate.",[2975],{"name":2976,"color":2977},"p1-chore","BFD4F2",979,"closed","Move renderer logic from `useTresContextProvider` to `useRenderer`","2025-04-22T17:09:06Z","https://github.com/Tresjs/tres/issues/979",0.7154823,["Reactive",2985],{},["Set"],["ShallowReactive",2988],{"$fTRc1wZytZ_XrK4EfJfei_Sz-An4H4Yy6syhVxH_PVJc":-1,"$f6VepYN403-rAP0atTj1cLQrBl8ge3fgNFektpER0qI8":-1},"/Tresjs/tres/445"]