diff --git a/sass/editor.scss b/sass/editor.scss index 02dc0aee1..4a79f618c 100644 --- a/sass/editor.scss +++ b/sass/editor.scss @@ -59,7 +59,6 @@ @import 'editor/editor-message-box'; @import 'editor/editor-confirmation-dialog'; @import 'editor/editor-settings-launch-page'; -@import 'editor/editor-engine-picker'; @import 'editor/editor-auditor-picker'; @import 'editor/editor-clipboard'; @import 'editor/editor-howdoi'; diff --git a/sass/editor/_editor-engine-picker.scss b/sass/editor/_editor-engine-picker.scss deleted file mode 100644 index fc4b5cc49..000000000 --- a/sass/editor/_editor-engine-picker.scss +++ /dev/null @@ -1,76 +0,0 @@ -$bright-red: #e74c3c; -$bright-green: #2ecc71; - -.picker-engine-container { - text-align: left; - padding: 20px; -} - -#switch-engine { - &.local { - > .title { - color: white; - margin-bottom: 10px; - font-weight: bold; - text-transform: uppercase; - } - - .header { - margin-top: 15px; - color: white - } - - .changes { - margin: 5px; - } - - .links { - margin: 5px; - } - - .important { - font-weight: bold; - color: white; - background-color: $bright-red; - padding: 10px; - } - - .note { - font-weight: bold; - font-style: italic; - color: white; - } - - } - - &.remote { - display: flex; - justify-content: space-around; - - > .title { - flex: 1; - margin-top: 8px; - } - - > .spinner { - svg { - margin: auto; - - &.spin { - g { - animation-name: spin; - animation-duration: 500ms; - animation-iteration-count: infinite; - animation-timing-function: linear; - transform-origin: center; - } - } - - &.hidden { - display: none; - } - } - } - } - -} diff --git a/src/common/editor.ts b/src/common/editor.ts index 4fd088294..7b63dbacc 100644 --- a/src/common/editor.ts +++ b/src/common/editor.ts @@ -26,11 +26,6 @@ class Editor extends Caller { */ isCodeEditor: boolean = false; - /** - * Whether the Editor project is using engine v2. - */ - projectEngineV2: boolean = ('settings' in config.project) ? (config.project.settings as Record)?.engineV2 ?? false : false; - /** * Editor API history global */ diff --git a/src/editor-api/external-types/config.d.ts b/src/editor-api/external-types/config.d.ts index 68b2983c2..87c454f47 100644 --- a/src/editor-api/external-types/config.d.ts +++ b/src/editor-api/external-types/config.d.ts @@ -9,7 +9,6 @@ type Plan = { }; type ProjectSettings = { - engineV2: boolean, antiAlias: boolean, fillMode: string, resolutionMode: string, @@ -112,7 +111,7 @@ type Url = { type EngineVersions = { current: { version: string, description: string }, - force: { version: string, description: string }, + force?: { version: string, description: string }, previous?: { version: string, description: string }, releaseCandidate?: { version: string, description: string }, }; diff --git a/src/editor/assets/assets-migrate.ts b/src/editor/assets/assets-migrate.ts index ea6631f57..f39a541aa 100644 --- a/src/editor/assets/assets-migrate.ts +++ b/src/editor/assets/assets-migrate.ts @@ -127,7 +127,7 @@ editor.once('load', () => { asset.set('data.useSkybox', true); } - // NOTE: useGammaTonemap is used by engine v1 so bind useTonemap to useGammaTonemap + // NOTE: keep legacy tonemap data in sync asset.on('data.useTonemap:set', (value: boolean) => { asset.set('data.useGammaTonemap', value); }); @@ -281,7 +281,7 @@ editor.once('load', () => { asset.set('data.clearCoatNormalMapOffset', [0, 0]); } - // NOTE: set shader to blinn if it is not already for engine v1 + // NOTE: keep legacy shader data normalized if (asset.get('data.shader') !== 'blinn') { const shader = asset.get('data.shader'); asset.set('data.shader', 'blinn'); diff --git a/src/editor/assets/assets-srgb.ts b/src/editor/assets/assets-srgb.ts index 52513a76f..163dab371 100644 --- a/src/editor/assets/assets-srgb.ts +++ b/src/editor/assets/assets-srgb.ts @@ -313,16 +313,6 @@ const startChecker = () => { const isMaterial = usage.type === 'asset' && observer.get('type') === 'material'; const isUIElement = usage.path.includes('components.element'); const isSprite = usage.path.includes('components.sprite'); - const isSpecularSheen = usage.path === 'data.specularMap' || usage.path === 'data.sheenMap'; - - // if project is using engine v1 and the usage is a specular or sheen map - // suppress the issue and log info message - if (!editor.projectEngineV2 && isSpecularSheen) { - editor.call('console:log', uiMsg, verboseMsg, usage.jump); - suppressed++; - continue; - } - // if all issues are usages then fixable so log a warning if (issues.length === usages.length) { editor.call('console:warn', uiMsg, verboseMsg, usage.jump); diff --git a/src/editor/attributes/reference/assets/cubemap.ts b/src/editor/attributes/reference/assets/cubemap.ts index 6ba7c6dad..5eee0251e 100644 --- a/src/editor/attributes/reference/assets/cubemap.ts +++ b/src/editor/attributes/reference/assets/cubemap.ts @@ -41,5 +41,5 @@ export const fields: AttributeReference[] = [{ }, { name: 'asset:cubemap:generateLegacyCubemap', title: 'Generate Legacy Cubemap', - description: 'Generate the prefiltered lighting data in cubemap format instead of atlas format. This option will result in larger prefiltered data that is slower to download at runtime, but is kept to be backwards compatible. This option should be used when running on PlayCanvas Engine v1.63 and earlier.' + description: 'Generate the prefiltered lighting data in cubemap format instead of atlas format. This option will result in larger prefiltered data that is slower to download at runtime, but is kept for backwards compatibility.' }]; diff --git a/src/editor/attributes/reference/components/audiosource.ts b/src/editor/attributes/reference/components/audiosource.ts index 0f38c9d10..0dda0ee26 100644 --- a/src/editor/attributes/reference/components/audiosource.ts +++ b/src/editor/attributes/reference/components/audiosource.ts @@ -4,7 +4,7 @@ export const fields: AttributeReference[] = [{ name: 'audiosource:component', title: 'pc.AudioSourceComponent', subTitle: '{pc.Component}', - description: `The AudioSource Component controls playback of an audio sample. ${editor.projectEngineV2 ? 'This class has been removed' : 'This class will be deprecated'} in favor of {@link pc.SoundComponent}.`, + description: 'The AudioSource Component controls playback of an audio sample. This class has been removed in favor of {@link pc.SoundComponent}.', url: 'https://api.playcanvas.com/engine/classes/AudioSourceComponent.html' }, { name: 'audiosource:3d', diff --git a/src/editor/attributes/reference/settings.ts b/src/editor/attributes/reference/settings.ts index 42cdeb5c6..974e6fe43 100644 --- a/src/editor/attributes/reference/settings.ts +++ b/src/editor/attributes/reference/settings.ts @@ -298,8 +298,8 @@ editor.once('load', () => { description: 'The order in which attempts are made to create the graphics devices.' }, { name: 'settings:project:enableWebGpu', - title: `Enable WebGPU${editor.projectEngineV2 ? '' : ' (beta)'}`, - description: `When enabled, the application will try to use WebGPU${editor.projectEngineV2 ? '' : ' (beta)'} if available.` + title: 'Enable WebGPU', + description: 'When enabled, the application will try to use WebGPU if available.' }, { name: 'settings:project:enableWebGl2', title: 'Enable WebGL 2.0', diff --git a/src/editor/index.ts b/src/editor/index.ts index a4d7f7352..3dca9eb9d 100644 --- a/src/editor/index.ts +++ b/src/editor/index.ts @@ -317,7 +317,6 @@ import './alerts/alert-maintenance'; // pickers import './pickers/picker'; import './pickers/picker-confirm'; -import './pickers/picker-engine'; import './pickers/picker-color'; import './pickers/picker-asset'; import './pickers/picker-curve'; diff --git a/src/editor/inspector/assets/texture.ts b/src/editor/inspector/assets/texture.ts index 24614d8e0..048ef3a1d 100644 --- a/src/editor/inspector/assets/texture.ts +++ b/src/editor/inspector/assets/texture.ts @@ -1150,33 +1150,6 @@ class TextureAssetInspector extends Container { this._webgl1NonPotWithoutAddressClampWarning.hidden = true; this._webgl1NonPotWithMipmapsWarning.hidden = true; - // Don't show WebGL1 warnings when running in Engine v2 mode - if (editor.projectEngineV2) { - return; - } - - const assets = this._assets; - // Show the warnings if any of the assets have an issue - - for (let i = 0; i < assets.length; i++) { - const asset = assets[i]; - if (!TextureCompressor.isPOT(asset.get('meta.width'), asset.get('meta.height'))) { - if (asset.get('data.mipmaps')) { - this._webgl1NonPotWithMipmapsWarning.hidden = false; - break; - } - } - } - - for (let i = 0; i < assets.length; i++) { - const asset = assets[i]; - if (!TextureCompressor.isPOT(asset.get('meta.width'), asset.get('meta.height'))) { - if (asset.get('data.addressu') !== 'clamp' || asset.get('data.addressv') !== 'clamp') { - this._webgl1NonPotWithoutAddressClampWarning.hidden = false; - break; - } - } - } } link(assets: Observer[]) { diff --git a/src/editor/inspector/components/audiosource.ts b/src/editor/inspector/components/audiosource.ts index 742c890fe..e40eb016d 100644 --- a/src/editor/inspector/components/audiosource.ts +++ b/src/editor/inspector/components/audiosource.ts @@ -90,7 +90,7 @@ class AudiosourceComponentInspector extends ComponentInspector { super(args); - this.headerText += editor.projectEngineV2 ? ' (REMOVED)' : ' (LEGACY)'; + this.headerText += ' (REMOVED)'; this._attributesInspector = new AttributesInspector({ assets: args.assets, @@ -102,9 +102,7 @@ class AudiosourceComponentInspector extends ComponentInspector { this._field('3d').on('change', this._toggleFields.bind(this)); - if (editor.projectEngineV2) { - this._attributesInspector.enabled = false; - } + this._attributesInspector.enabled = false; } _toggleFields() { diff --git a/src/editor/inspector/components/camera.ts b/src/editor/inspector/components/camera.ts index f1bf71134..56ff3942f 100644 --- a/src/editor/inspector/components/camera.ts +++ b/src/editor/inspector/components/camera.ts @@ -172,9 +172,6 @@ class CameraComponentInspector extends ComponentInspector { this._field(field).on('change', this._toggleFields.bind(this)); }); - this._attributesInspector.getField('divider:0').hidden = !editor.projectEngineV2; - this._field('toneMapping').parent.hidden = !editor.projectEngineV2; - this._field('gammaCorrection').parent.hidden = !editor.projectEngineV2; } _toggleFields() { diff --git a/src/editor/inspector/settings-panels/engine.ts b/src/editor/inspector/settings-panels/engine.ts index 19b17a4bb..d7ab77389 100644 --- a/src/editor/inspector/settings-panels/engine.ts +++ b/src/editor/inspector/settings-panels/engine.ts @@ -26,14 +26,6 @@ const ATTRIBUTES: Attribute[] = [ }; }) } - }, { - label: '', - type: 'button', - alias: 'switchEngine', - args: { - text: `SWITCH TO ENGINE V${config.project.settings.engineV2 ? '1' : '2'}`, - icon: 'E304' - } } ]; @@ -63,50 +55,6 @@ class EngineSettingsPanel extends BaseSettingsPanel { } } - const switchEngine = this._attributesInspector.getField('switchEngine'); - - let manualSet = false; - switchEngine.on('click', () => { - const engineV2 = this._projectSettings.get('engineV2'); - editor.call('picker:engine', false, !engineV2, () => { - manualSet = true; - this._projectSettings.set('engineV2', !engineV2); - manualSet = false; - window.location.reload(); - }); - }); - - this._projectSettings.on('engineV2:set', (value, oldValue) => { - // check if user has write permissions - if (!editor.call('permissions:write')) { - return; - } - - // check if value is changing - if (value === oldValue) { - return; - } - - // disable switch button if hidden - if (switchEngine.hidden) { - return; - } - - // ignore set if we initiated it - if (manualSet) { - return; - } - - // skip initial set - if (oldValue === null) { - return; - } - - editor.call('picker:engine', true, value); - - // reload after a second - setTimeout(() => window.location.reload(), 1000); - }); } } diff --git a/src/editor/inspector/settings-panels/rendering.ts b/src/editor/inspector/settings-panels/rendering.ts index f998c6e44..834e2795d 100644 --- a/src/editor/inspector/settings-panels/rendering.ts +++ b/src/editor/inspector/settings-panels/rendering.ts @@ -1,7 +1,5 @@ import { Button, Label, Overlay } from '@playcanvas/pcui'; -import { TONEMAPPING } from '@/core/constants'; - import { BaseSettingsPanel, type BaseSettingsPanelArgs } from './base'; import type { Attribute, Divider } from '../attribute.type.d'; @@ -252,22 +250,6 @@ const ATTRIBUTES: (Attribute | Divider)[] = [ { type: 'divider' }, - { - observer: 'sceneSettings', - label: 'Tonemapping', - reference: 'settings:toneMapping', - path: 'render.tonemapping', - type: 'select', - args: { - type: 'number', - options: TONEMAPPING.map((v, i) => { - return { - v: i, - t: v - }; - }) - } - }, { observer: 'sceneSettings', label: 'Exposure', @@ -279,26 +261,6 @@ const ATTRIBUTES: (Attribute | Divider)[] = [ max: 8 } }, - { - observer: 'sceneSettings', - label: 'Gamma', - reference: 'settings:gammaCorrection', - path: 'render.gamma_correction', - type: 'select', - args: { - type: 'number', - options: [ - { - v: 0, - t: '1.0' - }, - { - v: 1, - t: '2.2' - } - ] - } - }, { type: 'divider' }, @@ -454,7 +416,7 @@ const ATTRIBUTES: (Attribute | Divider)[] = [ }, { observer: 'projectSettings', - label: `Enable WebGPU${editor.projectEngineV2 ? '' : ' (beta)'}`, + label: 'Enable WebGPU', type: 'boolean', reference: 'settings:project:enableWebGpu', path: 'enableWebGpu' @@ -697,9 +659,8 @@ class RenderingSettingsPanel extends BaseSettingsPanel { const onDeviceChange = () => { (deviceOrder as Label).text = [ - enableWebGpu.value ? `WebGPU${editor.projectEngineV2 ? '' : ' (beta)'}` : '', - enableWebGl2.value ? 'WebGL 2.0' : '', - editor.projectEngineV2 ? '' : 'WebGL 1.0' + enableWebGpu.value ? 'WebGPU' : '', + enableWebGl2.value ? 'WebGL 2.0' : '' ].filter(Boolean).join(' ► '); setTimeout(() => editor.emit('toolbar:launch:refresh')); }; @@ -707,9 +668,6 @@ class RenderingSettingsPanel extends BaseSettingsPanel { enableWebGl2.on('change', onDeviceChange); onDeviceChange(); - - this._attributesInspector.getField('render.tonemapping').parent.hidden = editor.projectEngineV2; - this._attributesInspector.getField('render.gamma_correction').parent.hidden = editor.projectEngineV2; } showReloadDialog() { diff --git a/src/editor/pickers/picker-engine.ts b/src/editor/pickers/picker-engine.ts deleted file mode 100644 index d330f0a22..000000000 --- a/src/editor/pickers/picker-engine.ts +++ /dev/null @@ -1,233 +0,0 @@ -import { Overlay, Button, Container } from '@playcanvas/pcui'; - -import { createSpinner } from '@/common/utils'; - -editor.once('load', () => { - let callback = null; - - // overlay - const overlay = new Overlay({ - class: 'picker-confirm', - hidden: true - }); - - // container - const container = new Container({ - class: 'picker-engine-container' - }); - overlay.append(container); - - // cancel - const btnCancel = new Button({ - class: 'cancel', - text: 'Cancel' - }); - btnCancel.on('click', () => { - overlay.hidden = true; - }); - overlay.append(btnCancel); - - // action - const btnAction = new Button({ - class: 'action', - text: 'Action' - }); - btnAction.on('click', () => { - if (callback) { - callback(); - } - overlay.hidden = true; - }); - overlay.append(btnAction); - - const root = editor.call('layout.root'); - root.append(overlay); - - const keyDown = (evt: KeyboardEvent) => { - if (overlay.hidden) { - return; - } - - evt.preventDefault(); - evt.stopPropagation(); - - if (evt.key === 'Escape') { - btnCancel.emit('click'); - } else if (evt.key === 'Enter') { // click focused button - if (document.activeElement === btnCancel.dom) { - if (btnCancel.enabled) { - btnCancel.emit('click'); - } - } else if (btnAction.enabled) { - btnAction.emit('click'); - } - } else if (evt.key === 'Tab') { // focus yes / no buttons - if (document.activeElement === btnCancel.dom) { - btnAction.focus(); - } else { - btnCancel.focus(); - } - } else if (evt.key === 'ArrowRight') { // focus right button (Yes) - btnAction.focus(); - } else if (evt.key === 'ArrowLeft') { // focus left button (No) - btnCancel.focus(); - } - }; - - overlay.on('show', () => { - editor.emit('picker:engine:open'); - // editor-blocking picker open - editor.emit('picker:open', 'engine'); - - window.addEventListener('keydown', keyDown, true); - }); - - // on overlay hide - overlay.on('hide', () => { - editor.emit('picker:engine:close'); - // editor-blocking picker closed - editor.emit('picker:close', 'engine'); - - window.removeEventListener('keydown', keyDown, true); - }); - - const switchRemoteContainer = (engineV2: boolean) => { - const root = document.createElement('div'); - root.id = 'switch-engine'; - root.classList.add('remote'); - - const title = document.createElement('div'); - title.classList.add('title'); - title.textContent = `Switching project to Engine V${engineV2 ? '2' : '1'}. Reloading page...`; - root.appendChild(title); - - const spinner = document.createElement('div'); - spinner.classList.add('spinner'); - spinner.appendChild(createSpinner(32)); - root.appendChild(spinner); - - return root; - }; - - const switchLocalContainer = (engineV2: boolean) => { - const createHeader = (text: string) => { - const header = document.createElement('div'); - header.classList.add('header'); - header.textContent = text; - return header; - }; - - const createBullet = (text: string) => { - const bullet = document.createElement('div'); - bullet.textContent = `• ${text}`; - return bullet; - }; - - const createLink = ({ name, url }: { name: string; url: string }) => { - const div = document.createElement('div'); - - const link = document.createElement('a'); - link.href = url; - link.target = '_blank'; - link.textContent = `• ${name}`; - div.appendChild(link); - - return div; - }; - - const root = document.createElement('div'); - root.id = 'switch-engine'; - root.classList.add('local'); - - const title = document.createElement('div'); - title.classList.add('title'); - title.textContent = `Switch to Engine V${engineV2 ? '2' : '1'}?`; - root.appendChild(title); - - root.appendChild(createHeader('Engine V1')); - - const changesV1 = document.createElement('div'); - changesV1.classList.add('changes'); - root.appendChild(changesV1); - changesV1.appendChild(createBullet('WebGL 2.0 & 1.0 support')); - changesV1.appendChild(createBullet('No new features and improvements')); - changesV1.appendChild(createBullet('Legacy Script support')); - changesV1.appendChild(createBullet('AudioComponent support')); - - root.appendChild(createHeader('Engine V2')); - - const changesV2 = document.createElement('div'); - changesV2.classList.add('changes'); - root.appendChild(changesV2); - changesV2.appendChild(createBullet('WebGL 2.0 & WebGPU support')); - changesV2.appendChild(createBullet('Regular new features and improvements')); - - root.appendChild(document.createElement('br')); - - const headerInfo = document.createElement('div'); - headerInfo.textContent = 'The switch will likely necessitate script modifications to ensure compatibility with the selected engine version. For more details, refer to the provided links.'; - root.appendChild(headerInfo); - - const links = document.createElement('div'); - links.classList.add('links'); - root.appendChild(links); - links.appendChild(createLink({ - name: 'Engine Compatibility', - url: 'https://developer.playcanvas.com/user-manual/editor/engine-compatibility/' - })); - links.appendChild(createLink({ - name: 'Engine Migrations', - url: 'https://developer.playcanvas.com/user-manual/engine/migrations/' - })); - links.appendChild(createLink({ - name: 'Editor Migrations', - url: 'https://developer.playcanvas.com/user-manual/editor/editor-migrations/' - })); - - root.appendChild(document.createElement('br')); - - const note = document.createElement('div'); - note.classList.add('note'); - note.textContent = 'Note: This will reload the editor for all users on this branch.'; - root.appendChild(note); - - return root; - }; - - // call picker - editor.method('picker:engine', (remote: boolean, engineV2: boolean, fn?: () => void) => { - if (remote) { - container.clear(); - container.append(switchRemoteContainer(engineV2)); - - btnAction.hidden = false; - btnAction.text = 'OK'; - - btnCancel.hidden = true; - - overlay.clickable = false; - } else { - container.clear(); - container.append(switchLocalContainer(engineV2)); - - btnAction.hidden = false; - btnAction.text = 'Switch'; - - btnCancel.hidden = false; - btnCancel.text = 'Cancel'; - - overlay.clickable = true; - } - - // save callback - callback = fn || null; - - // show overlay - overlay.hidden = false; - }); - - // close picker - editor.method('picker:engine:close', () => { - overlay.hidden = true; - }); -}); diff --git a/src/editor/scene-settings/scene-settings.ts b/src/editor/scene-settings/scene-settings.ts index bda28b773..ed504a7f9 100644 --- a/src/editor/scene-settings/scene-settings.ts +++ b/src/editor/scene-settings/scene-settings.ts @@ -38,75 +38,6 @@ editor.once('load', () => { editor.emit('sceneSettings:load', settings); }); - // migrate camera settings - let entitiesLoaded = false; - let projectUserSettingsLoaded = false; - let migrateEntityHandle = null; - const migrateCameraSettings = () => { - if (!entitiesLoaded || !projectUserSettingsLoaded) { - return; - } - - // migrate entities - // NOTE: Defaults are set so we need to force the update - const migrateEntity = (entity: import('@playcanvas/observer').Observer) => { - // Defeer the migration to the next frame to ensure entity document has been created - setTimeout(() => { - entity.history.enabled = false; - - if (entity.get('components.camera')) { - // gamma correction - const gammaCorrection = settings.get('render.gamma_correction'); - const oldGammaCorrection = entity.get('components.camera.gammaCorrection'); - entity.set('components.camera.gammaCorrection', gammaCorrection, false, false, true); - if (gammaCorrection !== oldGammaCorrection) { - const msg = [ - `Setting ${f.path('components.camera.gammaCorrection')} on ${f.entity(entity)} from`, - `${f.value(oldGammaCorrection)}`, - `to ${f.value(gammaCorrection)}` - ].join(' '); - editor.call('console:log:entity', entity, msg, true); - } - - // tonemapping - const tonemapping = settings.get('render.tonemapping'); - const oldTonemapping = entity.get('components.camera.toneMapping'); - entity.set('components.camera.toneMapping', tonemapping, false, false, true); - if (tonemapping !== oldTonemapping) { - const msg = [ - `Setting ${f.path('components.camera.toneMapping')} on ${f.entity(entity)} from`, - `${f.value(oldTonemapping)}`, - `to ${f.value(tonemapping)}` - ].join(' '); - editor.call('console:log:entity', entity, msg, true); - } - } - entity.history.enabled = true; - }); - }; - editor.call('entities:list').forEach(migrateEntity); - - // remove existing handle if found - if (migrateEntityHandle) { - migrateEntityHandle.unbind(); - } - migrateEntityHandle = editor.on('entities:add', migrateEntity); - - editor.call('status:clear'); - }; - if (!editor.projectEngineV2) { - editor.on('entities:load', () => { - entitiesLoaded = true; - migrateCameraSettings(); - }); - editor.on('settings:projectUser:load', () => { - projectUserSettingsLoaded = true; - migrateCameraSettings(); - }); - settings.on('render.gamma_correction:set', migrateCameraSettings); - settings.on('render.tonemapping:set', migrateCameraSettings); - } - editor.on('sceneSettings:load', (settings: import('@playcanvas/observer').Observer) => { // sync scene settings if (!settings.sync) { diff --git a/src/editor/settings/project-settings.ts b/src/editor/settings/project-settings.ts index e9dd79087..31806aacd 100644 --- a/src/editor/settings/project-settings.ts +++ b/src/editor/settings/project-settings.ts @@ -45,10 +45,6 @@ editor.once('load', () => { settings.history.enabled = false; settings.sync.enabled = editor.call('permissions:write'); - if (!config.project.settings.hasOwnProperty('engineV2')) { - settings.set('engineV2', false, undefined, undefined, true); - } - if (config.project.settings.hasOwnProperty('useLegacyScripts')) { if (settings.get('useLegacyScripts')) { settings.set('useLegacyScripts', false); @@ -96,6 +92,10 @@ editor.once('load', () => { editor.call('console:log:settings', settings, msg); } + if (!settings.get('enableWebGpu') && !settings.get('enableWebGl2')) { + settings.set('enableWebGl2', true); + } + if (!settings.get('batchGroups')) { settings.set('batchGroups', {}); } diff --git a/src/editor/viewport-controls/viewport-launch.ts b/src/editor/viewport-controls/viewport-launch.ts index 262c3eae2..a213919cf 100644 --- a/src/editor/viewport-controls/viewport-launch.ts +++ b/src/editor/viewport-controls/viewport-launch.ts @@ -52,7 +52,7 @@ editor.once('load', () => { const launchOptions = { }; - const launchApp = (deviceOptions: { webgpu?: boolean; webgl2?: boolean; webgl1?: boolean; [key: string]: boolean | undefined } = {}, popup?: boolean) => { + const launchApp = (deviceOptions: { webgpu?: boolean; webgl2?: boolean; [key: string]: boolean | undefined } = {}, popup?: boolean) => { let url = config.url.launch + config.scene.id; const query = []; @@ -61,8 +61,6 @@ editor.once('load', () => { query.push('device=webgpu'); } else if (deviceOptions.webgl2) { query.push('device=webgl2'); - } else if (deviceOptions.webgl1) { - query.push('device=webgl1'); } if (launchOptions.profiler) { @@ -90,12 +88,13 @@ editor.once('load', () => { query.push(`use_local_engine=${params.get('use_local_engine')}`); } else if (releaseCandidate && launchOptions.releaseCandidate) { query.push(`version=${releaseCandidate}`); - } else if (launchOptions.force) { + } else if (launchOptions.force && config.engineVersions.force) { query.push(`version=${config.engineVersions.force.version}`); } else { const engineVersion = editor.call('settings:session').get('engineVersion'); - if (engineVersion && engineVersion !== 'current') { - query.push(`version=${config.engineVersions[engineVersion].version}`); + const version = config.engineVersions[engineVersion]?.version; + if (version && engineVersion !== 'current') { + query.push(`version=${version}`); } } @@ -184,11 +183,11 @@ editor.once('load', () => { return option; }; - const launchWithWebGpu = createButton('webgpu', `Launch with WebGPU${editor.projectEngineV2 ? '' : ' (beta)'}`); + const launchWithWebGpu = createButton('webgpu', 'Launch with WebGPU'); const tooltipPreferWebGpu = LegacyTooltip.attach({ target: launchWithWebGpu.parent.dom, - text: `Launch the scene using WebGPU${editor.projectEngineV2 ? '' : ' (beta)'}.`, + text: 'Launch the scene using WebGPU.', align: 'right', root: root }); @@ -203,16 +202,6 @@ editor.once('load', () => { }); tooltipPreferWebGl2.class.add('launch-tooltip'); - const launchWithWebGL1 = createButton('webgl1', 'Launch with WebGL 1.0'); - const tooltipPreferWebGl1 = LegacyTooltip.attach({ - target: launchWithWebGL1.parent.dom, - text: 'Launch the scene using WebGL 1.0.', - align: 'right', - root: root - }); - tooltipPreferWebGl1.class.add('launch-tooltip'); - launchWithWebGL1.parent.hidden = editor.projectEngineV2; - const optionProfiler = createOption('profiler', 'Profiler'); const tooltipProfiler = LegacyTooltip.attach({ target: optionProfiler.parent.dom, @@ -289,14 +278,16 @@ editor.once('load', () => { // force engine version const force = config.engineVersions.force; - const optionForce = createOption('force', `Force Engine V${force.version[0]}`); - const tooltipForce = LegacyTooltip.attach({ - target: optionForce.parent.dom, - text: `Force the launcher to use v${force.version}.`, - align: 'right', - root: root - }); - tooltipForce.class.add('launch-tooltip'); + if (force) { + const optionForce = createOption('force', `Force Engine V${force.version[0]}`); + const tooltipForce = LegacyTooltip.attach({ + target: optionForce.parent.dom, + text: `Force the launcher to use v${force.version}.`, + align: 'right', + root: root + }); + tooltipForce.class.add('launch-tooltip'); + } // release-candidate if (releaseCandidate) { @@ -415,7 +406,6 @@ editor.once('load', () => { const { enableWebGpu, enableWebGl2 } = editor.call('settings:project').json(); launchWithWebGpu.parent.hidden = enableWebGpu; launchWithWebGL2.parent.hidden = !enableWebGpu && enableWebGl2; - launchWithWebGL1.parent.hidden = editor.projectEngineV2 || (!enableWebGpu && !enableWebGl2); }); // collapse button text to icon-only when the viewport is too narrow diff --git a/src/editor/viewport/viewport.ts b/src/editor/viewport/viewport.ts index 9d8f35c04..ad5756e4b 100644 --- a/src/editor/viewport/viewport.ts +++ b/src/editor/viewport/viewport.ts @@ -41,11 +41,6 @@ editor.once('load', () => { app.enableBundles = false; - // Force compatibility mode for Specular and Sheen maps when Editor is running with V2 - // and project running on V1. - if (!editor.projectEngineV2) { - app.scene.forcePassThroughSpecular = true; - } } catch (ex) { editor.emit('viewport:error', ex); return; diff --git a/src/launch/realtime/realtime.ts b/src/launch/realtime/realtime.ts index a20fd8f09..cd3ecf4b3 100644 --- a/src/launch/realtime/realtime.ts +++ b/src/launch/realtime/realtime.ts @@ -94,10 +94,7 @@ editor.once('load', () => { // instead of connecting to realtime immediately, we wait for a 'realtime:connect' event. // this is because connecting immediately will trigger asset load events in the scene and - // as of engine v1.61.2 model assets compressed with draco will fail to load depending on - // timing relative to draco wasm module loading. - // this event can be removed (and the body executed immediately) when the engine supports - // loading draco module on demand during model asset load. + // avoid loading draco-compressed model assets before the draco wasm module is ready. editor.method('realtime:connect', () => { if (editor.call('visibility')) { reconnect(); diff --git a/src/launch/viewport/viewport-tooltip.ts b/src/launch/viewport/viewport-tooltip.ts index 2db76d781..ac0edc8aa 100644 --- a/src/launch/viewport/viewport-tooltip.ts +++ b/src/launch/viewport/viewport-tooltip.ts @@ -32,21 +32,17 @@ editor.once('load', () => { // display device type popup const app = editor.call('viewport:app'); const nameMap = { - [pc.DEVICETYPE_WEBGPU]: `WebGPU${editor.projectEngineV2 ? '' : ' (beta)'}`, + [pc.DEVICETYPE_WEBGPU]: 'WebGPU', [pc.DEVICETYPE_WEBGL2]: 'WebGL 2.0', - [pc.DEVICETYPE_WEBGL1]: 'WebGL 1.0', [pc.DEVICETYPE_NULL]: 'Null' }; - const getDeviceType = (isWebGPU, isWebGL2, isWebGL1) => { + const getDeviceType = (isWebGPU, isWebGL2) => { if (isWebGPU) { return pc.DEVICETYPE_WEBGPU; } if (isWebGL2) { return pc.DEVICETYPE_WEBGL2; } - if (isWebGL1) { - return pc.DEVICETYPE_WEBGL1; - } return pc.DEVICETYPE_NULL; }; editor.once('launcher:device:ready', () => { @@ -60,10 +56,10 @@ editor.once('load', () => { device.isWebGL1 = !device.webgl2; } - const projectDeviceType = getDeviceType(enableWebGpu, enableWebGl2, !editor.projectEngineV2); + const projectDeviceType = getDeviceType(enableWebGpu, enableWebGl2); const paramDeviceType = Object.keys(nameMap).includes(deviceType) ? deviceType : pc.DEVICETYPE_NULL; const currentDeviceType = paramDeviceType === pc.DEVICETYPE_NULL ? projectDeviceType : paramDeviceType; - const actualDeviceType = getDeviceType(device.isWebGPU, device.isWebGL2, device.isWebGL1); + const actualDeviceType = getDeviceType(device.isWebGPU, device.isWebGL2); if (currentDeviceType !== actualDeviceType) { showTooltipMessage(`${nameMap[currentDeviceType]} graphics device not supported. You are currently using the graphics device: ${nameMap[actualDeviceType]}`); diff --git a/src/launch/viewport/viewport.ts b/src/launch/viewport/viewport.ts index 2c69ed420..729753e14 100644 --- a/src/launch/viewport/viewport.ts +++ b/src/launch/viewport/viewport.ts @@ -126,11 +126,13 @@ editor.once('load', () => { // device types const { enableWebGpu, enableWebGl2 } = editor.call('settings:project').json(); - let deviceTypes = [ - enableWebGpu && pc.DEVICETYPE_WEBGPU, - enableWebGl2 && pc.DEVICETYPE_WEBGL2, - pc.DEVICETYPE_WEBGL1 - ].filter(Boolean); + let deviceTypes = []; + if (enableWebGpu) { + deviceTypes.push(pc.DEVICETYPE_WEBGPU); + } + if (enableWebGl2) { + deviceTypes.push(pc.DEVICETYPE_WEBGL2); + } // device type override switch (queryParams.device) { @@ -140,9 +142,6 @@ editor.once('load', () => { case 'webgl2': deviceTypes = [pc.DEVICETYPE_WEBGL2]; break; - case 'webgl1': - deviceTypes = [pc.DEVICETYPE_WEBGL1]; - break; } const powerPreference = config.project.settings.powerPreference;